2010-12-06  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Support focus ring outline color for links.
        https://bugs.webkit.org/show_bug.cgi?id=50428

        Take width and offset into account when drawing focus ring.

        Tests: fast/css/focus-ring-outline-color.html
               fast/css/focus-ring-outline-offset.html
               fast/css/focus-ring-outline-width.html

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

2010-12-06  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Fix focus ring outline color support
        https://bugs.webkit.org/show_bug.cgi?id=50325

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

        Take the outline width into account when drawing the focus ring of image map.
        Change the outline-style from dotted to solid. The default outline-width is 
        5 pixels, and dotted lines just don't make sense anymore.
        Give the focus ring alpha of 50%, following what other ports do.
        Save and restore the pen when drawing a focus ring.

2010-12-06  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [Qt][V8] Build fix after r73283.

        No new tests needed.

        * WebCore.pri: Add missing webaudio directory
        to IDL generator includes.

2010-12-06  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Martin Robinson.

        [soup] implement ResourceHandle::platformSetDefersLoading
        https://bugs.webkit.org/show_bug.cgi?id=44158

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::platformSetDefersLoading): Implemented
        using the soup_session_{,un}pause_message APIs.

2010-12-06  Sergio Villar Senin  <svillar@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Leak in webkit_soup_cache_load if file contents load fails
        https://bugs.webkit.org/show_bug.cgi?id=50558

        g_file_get_contents() could return an error after allocating a
        buffer for file contents. We must free that memory before
        returning.

        * platform/network/soup/cache/webkit/soup-cache.c:
        (webkit_soup_cache_load): Added a missing g_free().

2010-12-06  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r73351.
        http://trac.webkit.org/changeset/73351
        https://bugs.webkit.org/show_bug.cgi?id=50560

        "The change broke plugin tests in Chromium" (Requested by
        yurys on #webkit).

        * bindings/js/ScriptCallStackFactory.cpp:
        (WebCore::ScriptCallStack::stackTrace):
        * bindings/js/ScriptCallStackFactory.h:
        * bindings/v8/ScriptCallStackFactory.cpp:
        (WebCore::toScriptCallFrame):
        (WebCore::toScriptCallFramesVector):
        (WebCore::createScriptCallStack):
        (WebCore::ScriptCallStack::stackTrace):
        * bindings/v8/ScriptCallStackFactory.h:
        * bindings/v8/V8ConsoleMessage.cpp:
        (WebCore::V8ConsoleMessage::handler):
        * inspector/ScriptCallFrame.cpp:
        (WebCore::ScriptCallFrame::ScriptCallFrame):
        (WebCore::ScriptCallFrame::isEqual):
        (WebCore::ScriptCallFrame::buildInspectorObject):
        * inspector/ScriptCallFrame.h:
        (WebCore::ScriptCallFrame::sourceURL):
        * inspector/ScriptCallStack.h:
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createGenericRecord):
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleMessage.prototype._populateStackTraceTreeElement):

2010-12-06  Robert Hogan  <robert@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Report zero width for zero size fonts

        Report zero width when font size is zero.

        Fixes fast/text/font-size-zero.html

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

        * platform/graphics/qt/FontQt.cpp:
        (WebCore::Font::floatWidthForSimpleText):
        (WebCore::Font::floatWidthForComplexText):

2010-12-03  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        [v8] Web Inspector: remove duplicate code for capturing stack trace
        https://bugs.webkit.org/show_bug.cgi?id=50461

        No new tests. Covered with existing inspector tests.

        * bindings/js/ScriptCallStackFactory.cpp:
        (WebCore::createScriptCallStack):
        * bindings/js/ScriptCallStackFactory.h:
        * bindings/v8/ScriptCallStackFactory.cpp:
        (WebCore::toScriptCallFrame):
        (WebCore::toScriptCallFramesVector):
        (WebCore::createScriptCallStack):
        * bindings/v8/ScriptCallStackFactory.h:
        * bindings/v8/V8ConsoleMessage.cpp:
        (WebCore::V8ConsoleMessage::handler):
        * inspector/ScriptCallFrame.cpp:
        (WebCore::ScriptCallFrame::ScriptCallFrame):
        (WebCore::ScriptCallFrame::isEqual):
        (WebCore::ScriptCallFrame::buildInspectorObject):
        * inspector/ScriptCallFrame.h:
        (WebCore::ScriptCallFrame::sourceURL):
        * inspector/ScriptCallStack.h:
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createGenericRecord):
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleMessage.prototype._populateStackTraceTreeElement):

2010-12-06  Sergio Villar Senin  <svillar@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] webkit_soup_cache_clear() does not delete all entries in the cache
        https://bugs.webkit.org/show_bug.cgi?id=50462

        Do not use g_hash_table_foreach to remove entries from the cache
        entries hashtable. Iterate over a list of entries to remove them
        from the hash table.

        * platform/network/soup/ResourceHandleSoup.cpp:
        * platform/network/soup/cache/webkit/soup-cache.c:
        (remove_cache_item):
        (webkit_soup_cache_finalize):
        (clear_cache_item):
        (webkit_soup_cache_clear):

2010-12-05  Kent Tamura  <tkent@chromium.org>

        Unreviewed. Run sort-Xcode-project-file.

        * WebCore.xcodeproj/project.pbxproj:

2010-11-30  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Darin Adler.

        HTML5 <details> and <summary> initial implementation
        https://bugs.webkit.org/show_bug.cgi?id=50309

        HTML5 <details> and <summary> elements initial implementation. The main objective is
        to add the files for html element and renderers, and to get rid of build system issues
        in future patches.

        See: http://www.w3.org/TR/html5/interactive-elements.html#the-details-element
             http://www.w3.org/TR/html5/interactive-elements.html#the-summary-element

        build systems

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/gobject/GNUmakefile.am:

        Some css properties to the new html elements.

        * css/html.css:
        (details):
        (summary):

        New html element associated with the corresponding tag.

        * html/HTMLAttributeNames.in:
        * html/HTMLTagNames.in:

        1 html element and 3 renderers were added.

        * html/HTMLDetailsElement.cpp: Added.
        * html/HTMLDetailsElement.h: Added.
        * html/HTMLDetailsElement.idl: Added.
        * html/HTMLElementsAllInOne.cpp:
        * rendering/RenderDetails.cpp: Added.
        * rendering/RenderDetails.h: Added.
        * rendering/RenderDetailsMarker.cpp: Added.
        * rendering/RenderDetailsMarker.h: Added.
        * rendering/RenderSummary.cpp: Added.
        * rendering/RenderSummary.h: Added.
        * rendering/RenderingAllInOne.cpp:

        New renderer type checkers.

        * rendering/RenderObject.h:
        (WebCore::RenderObject::isDetails):
        (WebCore::RenderObject::isDetailsMarker):
        (WebCore::RenderObject::isSummary):

2010-12-05  Rob Buis  <rwlbuis@gmail.com>

        Reviewed by Nikolas Zimmermann.

        createSVGTransformFromMatrix(undefined) => NULL ptr
        https://bugs.webkit.org/show_bug.cgi?id=49564

        Throw TYPE_MISMATCH_ERR when using undefined or null as value for matrix parameter.

        * svg/SVGTransformList.idl:
        * svg/properties/SVGTransformListPropertyTearOff.h:
        (WebCore::SVGTransformListPropertyTearOff::createSVGTransformFromMatrix):

2010-12-05  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Fix compilation warnings reported by clang
        https://bugs.webkit.org/show_bug.cgi?id=50252

        * platform/graphics/Path.h: CairoPath is now a class, not a
        struct.
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::sendRequestCallback): Cast the status_code to int.

2010-12-05  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Remove setColor functions it was replicated in
        CairoUtilities: setSourceRGBAFromColor.

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::setPlatformFill):
        (WebCore::setPlatformStroke):
        (WebCore::fillRectSourceOver):
        (WebCore::GraphicsContext::drawRect):
        (WebCore::GraphicsContext::drawLine):
        (WebCore::GraphicsContext::drawEllipse):
        (WebCore::GraphicsContext::strokeArc):
        (WebCore::GraphicsContext::drawConvexPolygon):
        (WebCore::GraphicsContext::drawFocusRing):
        (WebCore::GraphicsContext::fillRoundedRect):

2010-12-05  Adam Roben  <aroben@apple.com>

        Windows production build fix

        Put spaces after trailing backslashes when setting
        %WebKitVSPropsRedirectionDir%. According to MSDN
        <http://msdn.microsoft.com/en-us/library/2kzfk8c7(v=VS.80).aspx>:

           A backslash ( \ ) followed by a newline character is interpreted as
           a space in the command; use a backslash at the end of a line to
           continue a command onto the next line. NMAKE interprets the
           backslash literally if any other character, including a space or
           tab, follows the backslash.

        * WebCore.vcproj/WebCore.make:

2010-12-05  Robert Hogan  <robert@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] Zero-sized font does not yet work

        Fix fast/text/font-size-zero.html

        Copy other ports by setting minimumFontSize to 0 for DRT runs,
        copy a fix to SimpleFontData from chromium/safari, and set font
        size in FontPlatformData to zero if size zero is requested
        and QFont::pixelSize otherwise. (Note that QFont doesn't accept
        a pixel size of zero).

        Also fix QFont::setPixelSize in FontPlatformData to use
        description.computedPixelSize rather than computedSize and
        pixelSize() rather than pointSizeF - since the latter gets
        set to -1 if pixelSize is set at all.

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

        * platform/graphics/qt/FontPlatformData.h:
        (WebCore::FontPlatformDataPrivate::FontPlatformDataPrivate):
        (WebCore::FontPlatformData::pixelSize):
        * platform/graphics/qt/FontPlatformDataQt.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        * platform/graphics/qt/FontQt.cpp:
        (WebCore::drawTextCommon):
        * platform/graphics/qt/SimpleFontDataQt.cpp:
        (WebCore::SimpleFontData::platformInit):
        (WebCore::SimpleFontData::platformGlyphInit):
        (WebCore::SimpleFontData::platformCharWidthInit):

2010-12-04  Daniel Bates  <dbates@rim.com>

        Reviewed by Darin Adler.

        Add support for lower-armenian and upper-armenian
        https://bugs.webkit.org/show_bug.cgi?id=49641

        Implement support for list-style-types lower-armenian and upper-armenian
        for lowercase Armenian and uppercase Armenian numerals, respectively.

        Tests: fast/lists/w3-css3-lower-armenian.html
               fast/lists/w3-css3-upper-armenian.html

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue): Added enum values LowerArmenian
        and UpperArmenian.
        * css/CSSValueKeywords.in: Added "upper-armenian" and "lower-armenian".
        * inspector/front-end/SourceCSSTokenizer.re2js: Ditto.
        * rendering/RenderListMarker.cpp:
        (WebCore::effectiveListMarkerType): Added enum values LowerArmenian
        and UpperArmenian.
        (WebCore::listMarkerSuffix): Ditto.
        (WebCore::listMarkerText): Ditto.
        (WebCore::RenderListMarker::paint): Ditto.
        (WebCore::RenderListMarker::computePreferredLogicalWidths): Ditto.
        (WebCore::RenderListMarker::getRelativeMarkerRect): Ditto.
        * rendering/style/RenderStyleConstants.h: Ditto.

2010-12-04  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        WebCore part of <rdar://problem/8145955> Add text search API for counting/marking/highlighting matches in a range
        https://bugs.webkit.org/show_bug.cgi?id=50530

        * WebCore.exp.in: Export Range version of countMatchesForText().
        * editing/Editor.cpp:
        (WebCore::isFrameInRange): Added this helper method.
        (WebCore::Editor::countMatchesForText): Added a Range parameter and restricted the result to
        matches that occur in the range.
        * editing/Editor.h:

2010-12-04  Gavin Peters  <gavinp@chromium.org>

        Reviewed by Adam Barth.

        Implement onload events for <link rel=prefetch>
        https://bugs.webkit.org/show_bug.cgi?id=50187

        Tests: fast/dom/HTMLLinkElement/link-and-subresource-test.html
               fast/dom/HTMLLinkElement/prefetch-onload.html

        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::HTMLLinkElement):
        (WebCore::HTMLLinkElement::~HTMLLinkElement):
        (WebCore::HTMLLinkElement::parseMappedAttribute):
        (WebCore::HTMLLinkElement::process):
        (WebCore::HTMLLinkElement::onloadTimerFired):
        (WebCore::HTMLLinkElement::notifyFinished):
        * html/HTMLLinkElement.h:
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::data):

2010-12-04  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Drop GdkDrawable usage, it's deprecated in GTK+3.x and we can use GdkWindow
        https://bugs.webkit.org/show_bug.cgi?id=50451

        GdkDrawable has been removed in GTK+3.x. To cope with this we can
        actually stop using it altogether, since GdkWindow is just a
        typedef for it and that seems to be good enough for us.

        * platform/graphics/GraphicsContext.h: s/GdkDrawable/GdkWindow/.
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::gdkWindow): ditto.
        * platform/gtk/GtkVersioning.h: declare GDK_WINDOW_XWINDOW for GTK 3.x builds.
        * platform/gtk/PlatformScreenGtk.cpp:
        (WebCore::screenAvailableRect): s/GdkDrawable/GdkWindow/.
        * platform/gtk/WidgetGtk.cpp:
        (WebCore::gdkWindow): ditto.
        (WebCore::Widget::setCursor): ditto.
        * platform/gtk/WidgetRenderingContextGtk2.cpp: ditto.

2010-12-03  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        REGRESSION(r71934): input event fires twice when editing text inside a text input.
        https://bugs.webkit.org/show_bug.cgi?id=50477

        Now that events escape the shadow DOM boundary, the input event is fired twice
        for each input, once triggered by editing, once triggered by value change.

        Test: fast/forms/text-input-event.html

        * dom/InputElement.cpp:
        (WebCore::InputElement::setValueFromRenderer): Added a check to ensure editable fields
            don't fire an extra input event.

2010-12-03  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r73302.
        http://trac.webkit.org/changeset/73302
        https://bugs.webkit.org/show_bug.cgi?id=50499

        Causes crashes in debug LayoutTests (Requested by xan_ on
        #webkit).

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::renderParentObject):
        (WebCore::AccessibilityRenderObject::addChildren):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/chromium/AccessibilityObjectChromium.cpp:
        (WebCore::AccessibilityObject::accessibilityIgnoreAttachment):

2010-12-01  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Inspector protocol cleanup task.

        The patch has just small renames and adjustments for the protocol things.
        'handler' keyword in idl file was replaced with 'domain'.
        'domain' property was assigned for the each backend to frontend messages.
        At the next step WebInspector wrapper functions will be removed and 'agents' will be called directly.

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

        * inspector/CodeGeneratorInspector.pm:
        * inspector/Inspector.idl:
        * inspector/front-end/inspector.js:
        (WebInspector_syncDispatch):

2010-12-03  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Duplicate "!important" for !important properties displayed in the Styles pane
        https://bugs.webkit.org/show_bug.cgi?id=50460

        * inspector/front-end/StylesSidebarPane.js:
        * inspector/front-end/inspector.css:

2010-12-03  Xan Lopez  <xlopez@igalia.com>

        Unreviewed build fix.

        The JS code generator includes headers unconditionally, so we need
        to generate them unconditionally and disable the feature. The
        WebAudio files hadn't been added to our sources list.

        * GNUmakefile.am:

2010-12-03  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed build fix.

        Try to fix EFL build after r73273.

        * CMakeLists.txt:

2010-12-03  Chris Guillory  <chris.guillory@google.com>

        Reviewed by Chris Fleizach.

        Include the FrameView widget of a RenderWidget in the accessibility tree.
        https://bugs.webkit.org/show_bug.cgi?id=49106

        Include render widget children in the accessibility tree for not mac webkit ports.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::renderParentObject):
        (WebCore::AccessibilityRenderObject::addChildren):
        (WebCore::AccessibilityRenderObject::addRenderWidgetChildren):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/chromium/AccessibilityObjectChromium.cpp:
        (WebCore::AccessibilityObject::accessibilityIgnoreAttachment):

2010-11-30  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Dave Hyatt.

        Don't clone an anonymous block, instead create a new one in splitBlocks. Also,
        when beforeChild is not in one of our children, then do the processing first
        to get its anonymous container before calling splitBlocks.
        https://bugs.webkit.org/show_bug.cgi?id=49928

        Tests: fast/multicol/span/anonymous-before-child-parent-crash.html
               fast/multicol/span/anonymous-split-block-crash.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::splitBlocks):
        (WebCore::RenderBlock::addChildIgnoringAnonymousColumnBlocks):

2010-12-03  Mark Rowe  <mrowe@apple.com>

        Reviewed by Eric Seidel.

        Animated GIF animates much more slowly in Safari than Firefox
        <rdar://problem/7689300> / <http://webkit.org/b/26455>

        Adopt Firefox's behavior for frame duration clamping. Images that specify a frame duration
        of <= 10ms are treated as having a frame duration of 100ms, while all other images use the
        frame duration that they specify.

        ImageIO currently implements its own clamping of frame durations (<rdar://problem/7689297>)
        which will result in this change having no observable effect on platforms where it is used
        until an updated version of ImageIO becomes available.

        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::frameDurationAtIndex): Update the formatting of the comment and style
        of the code to match that in ImageSourceCG.
        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::frameDurationAtIndex):

2010-12-03  Chris Rogers  <crogers@google.com>

        Unreviewed build fix.

        Fix M_E compile error on Chromium Win
        https://bugs.webkit.org/show_bug.cgi?id=50479

        * platform/audio/AudioUtilities.cpp:
        (WebCore::AudioUtilities::discreteTimeConstantForSampleRate):

2010-12-03  Chris Rogers  <crogers@google.com>

        Unreviewed build fix.

        Try to fix GTK build due to recent web audio makefile changes (disable ENABLE_WEB_AUDIO explicitly)
        https://bugs.webkit.org/show_bug.cgi?id=50478

        * GNUmakefile.am:

2010-12-03  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dirk Schulze.

        Clean up some text-related code on GraphicsContext
        https://bugs.webkit.org/show_bug.cgi?id=50464

        Save 8 bytes in GraphicsContextState by rearranging the
        data members to reduce padding.

        * platform/graphics/GraphicsContextPrivate.h:
        (WebCore::GraphicsContextState::GraphicsContextState):

2010-12-03  Simon Fraser  <simon.fraser@apple.com>

        Another Chromium build fix.

        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::setPlatformTextDrawingMode):

2010-12-03  Simon Fraser  <simon.fraser@apple.com>

        Fix Chromium build.

        * platform/graphics/skia/PlatformContextSkia.h:

2010-12-03  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Andreas Kling.

        [CMake] Remove WebCore_IDL_PURE_FILES
        https://bugs.webkit.org/show_bug.cgi?id=50445

        * CMakeLists.txt:

2010-12-03  Jia Pu  <jpu@apple.com>

        Reviewed by Darin Adler.

        Need to move all code that applies correction into correction panel callback.
        https://bugs.webkit.org/show_bug.cgi?id=50426
        <rdar://problem/8720832>

        No new test, since there's no behavioral change.

        This patch is to prepare WebKit to work with upcoming AppKit changes. The main changes are:
        1. Moved all calls to applyCorrectionPanelInfo() into handleCorrectionPanelResult().
        2. Added more user dictionary learning code.
        3. Removed m_ prefix in all member variables of CorrectionPanelInfo.

        * editing/CorrectionPanelInfo.h: Remove m_ prefix on member variables. Added ReasonForDismissingCorrectionPanel enum type.

        * editing/Editor.cpp: Moved all calls to applyCorrectionPanelInfo() into handleCorrectionPanelResult().
          Adopted new member variable naming in class CorrectionPanelInfo.
        (WebCore::Editor::respondToChangedSelection):
        (WebCore::Editor::~Editor):
        (WebCore::Editor::markMisspellingsAfterTypingToWord):
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges):
        (WebCore::Editor::correctionPanelTimerFired):
        (WebCore::Editor::handleCorrectionPanelResult):
        (WebCore::Editor::startCorrectionPanelTimer):
        (WebCore::Editor::stopCorrectionPanelTimer):
        (WebCore::Editor::handleCancelOperation):
        (WebCore::Editor::dismissCorrectionPanel):
        (WebCore::Editor::applyCorrectionPanelInfo):

        * editing/Editor.h: Changed signature of dismissCorrectionPanel to use ReasonForDismissingCorrectionPanel.

        * loader/EmptyClients.h: Ditto.
        (WebCore::EmptyEditorClient::dismissCorrectionPanel):

        * page/EditorClient.h: Ditto.

2010-12-03  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: reveal in elements panel does not switch the panel itself.
        https://bugs.webkit.org/show_bug.cgi?id=50408

        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline.prototype._contextMenuEventFired.focusElement):
        (WebInspector.ElementsTreeOutline.prototype._contextMenuEventFired):
        * inspector/front-end/ObjectPropertiesSection.js:
        (WebInspector.ObjectPropertyTreeElement.prototype._contextMenuEventFired):

2010-12-03  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Nikolas Zimmermann.

        Clean up some text-related code on GraphicsContext
        https://bugs.webkit.org/show_bug.cgi?id=50464

        Use defined types for textDrawingMode and it's associated flags.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawTextInternal):
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::textDrawingMode):
        (WebCore::GraphicsContext::setTextDrawingMode):
        (WebCore::GraphicsContext::setPlatformTextDrawingMode):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/GraphicsContextPrivate.h:
        (WebCore::GraphicsContextState::GraphicsContextState):
        * platform/graphics/cairo/FontCairo.cpp:
        (WebCore::drawGlyphsShadow):
        (WebCore::Font::drawGlyphs):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::setPlatformTextDrawingMode):
        * platform/graphics/chromium/FontLinux.cpp:
        (WebCore::Font::drawGlyphs):
        (WebCore::Font::drawComplexText):
        * platform/graphics/gtk/FontGtk.cpp:
        (WebCore::drawGlyphsShadow):
        (WebCore::Font::drawComplexText):
        * platform/graphics/mac/FontMac.mm:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/openvg/PainterOpenVG.cpp:
        (WebCore::PlatformPainterState::PlatformPainterState):
        (WebCore::PainterOpenVG::textDrawingMode):
        (WebCore::PainterOpenVG::setTextDrawingMode):
        (WebCore::PainterOpenVG::drawText):
        * platform/graphics/qt/FontQt.cpp:
        (WebCore::drawTextCommon):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::State::State):
        (WebCore::PlatformContextSkia::getTextDrawingMode):
        (WebCore::PlatformContextSkia::setTextDrawingMode):
        * platform/graphics/skia/SkiaFontWin.cpp:
        (WebCore::windowsCanHandleTextDrawing):
        (WebCore::paintSkiaText):
        * platform/graphics/texmap/TextureMapper.h:
        (WebCore::TextureMapper::setTextDrawingMode):
        (WebCore::TextureMapper::textDrawingMode):
        (WebCore::TextureMapper::TextureMapper):
        * platform/graphics/win/FontCGWin.cpp:
        (WebCore::drawGDIGlyphs):
        (WebCore::Font::drawGlyphs):
        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        (WebCore::GraphicsContext::drawText):
        * rendering/InlineTextBox.cpp:
        (WebCore::updateGraphicsContext):
        * rendering/RenderSVGResourceGradient.cpp:
        (WebCore::RenderSVGResourceGradient::applyResource):
        * rendering/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::applyResource):
        * rendering/RenderSVGResourceSolidColor.cpp:
        (WebCore::RenderSVGResourceSolidColor::applyResource):
        * svg/SVGFont.cpp:
        (WebCore::Font::drawTextUsingSVGFont):

2010-12-03  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        First steps to adding web audio files to build systems
        https://bugs.webkit.org/show_bug.cgi?id=49952

        No new tests since audio API is not yet implemented.

        * CMakeLists.txt:
        * DerivedSources.make:
        * ForwardingHeaders/wtf/Complex.h: Added.
        * GNUmakefile.am:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.pro:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::audioContext):
        * features.pri:
        * page/DOMWindow.idl:
        * platform/audio/HRTFElevation.cpp:

2010-12-03  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by David Levin.

        Use String::adopt in TextCodecWinCE::decode
        https://bugs.webkit.org/show_bug.cgi?id=50319

        * platform/text/wince/TextCodecWinCE.cpp:
        (WebCore::TextCodecWinCE::decode):

2010-12-03  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders Carlsson.

        Groundwork for <rdar://problem/7660733> and https://bugs.webkit.org/show_bug.cgi?id=50191
        WebKit2 Authentication Support

        * WebCore.exp.in:

        Expose the AuthenticationClient for WK2 platforms (Windows already does this):
        * platform/network/mac/AuthenticationChallenge.h:
        * platform/network/mac/AuthenticationMac.mm:
        (-[WebCoreAuthenticationClientAsChallengeSender client]):
        (WebCore::AuthenticationChallenge::authenticationClient):

        * platform/network/qt/AuthenticationChallenge.h:
        (WebCore::AuthenticationChallenge::authenticationClient):

2010-12-03  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        REGRESSION: Crash when deleting text after textarea's value is modified on input event
        https://bugs.webkit.org/show_bug.cgi?id=49962

        The crash was caused by TypingCommand::deleteKeyPressed's reusing a typing command for
        textarea's shadow DOM after its input event handler rewrote the value set by the typing command.
        Because the reused typing command's ending selection was pointing at a shadow node
        that has been detached from the document when the event handler set the new value,
        rootEditableElement of the ending selection was null and caused the crash.

        Fixed the bug by updating the ending selection of the last typing command when it differsfrom
        that of the current selection held by the SelectionController in TypingCommand::deleteKeyPressed.
        Also fixed similar bugs in forwardDeleteKeyPressed and insertText, and insertTextRunWithoutNewlines.

        Tests: editing/input/set-value-on-input-and-delete.html
               editing/input/set-value-on-input-and-forward-delete.html
               editing/input/set-value-on-input-and-type-input.html
               editing/input/set-value-on-input-and-type-textarea.html

        * editing/InsertTextCommand.h: Added TypingCommand as a friend because it needs to update selection.
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::deleteKeyPressed): Updates the last typing command's selection as needed.
        (WebCore::TypingCommand::forwardDeleteKeyPressed): Ditto.
        (WebCore::TypingCommand::insertText): Ditto.
        (WebCore::TypingCommand::updateSelectionIfDifferentFromCurrentSelection): Added.
        (WebCore::TypingCommand::insertTextRunWithoutNewlines): Updates InsertTextCommand's selection as needed.
        * editing/TypingCommand.h:

2010-12-03  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by Tony Chang.

        Dragging and dropping into an empty document crashes WebKit.
        https://bugs.webkit.org/show_bug.cgi?id=48793

        Remove the assert and update callers to check for a null return value.

        Test: manual-tests/drop-in-empty-doc.html

        * manual-tests/drop-in-empty-doc.html: Added.
        * manual-tests/resources/drop-in-empty-doc.xhtml: Added.
        * page/DragController.cpp:
        (WebCore::elementUnderMouse):
        (WebCore::DragController::tryDocumentDrag):
        (WebCore::DragController::concludeEditDrag):

2010-12-03  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Andreas Kling.

        Move Inspector generator logic into main CMakeLists.txt file
        https://bugs.webkit.org/show_bug.cgi?id=50445

        * CMakeLists.txt:

2010-12-03 Patrick Gansterer <paroga@webkit.org>

        Reviewed by Andreas Kling.

        Move StringWx.cpp into wtf directory
        https://bugs.webkit.org/show_bug.cgi?id=50060

        * WebCore.gypi:
        * platform/text/wx/StringWx.cpp: Removed.

2010-12-03  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        REGRESSION(r72783): DOMActivate fires multiple times from input type=file
        https://bugs.webkit.org/show_bug.cgi?id=50396

        Test: fast/events/shadow-boundary-crossing-2.html

        * dom/EventContext.cpp: Reverted changes made in r72783.
        * dom/EventContext.h: Ditto.
        * dom/Node.cpp:
        (WebCore::Node::containsIncludingShadowDOM): Added.
        (WebCore::Node::dispatchGenericEvent): Reverted changes made in r72783.
        * dom/Node.h: Added decl.
        * html/HTMLLabelElement.cpp:
        (WebCore::HTMLLabelElement::defaultEventHandler): Reverted changes made in r72783.

2010-12-03  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Andreas Kling.

        Move StringBrew.cpp into wtf directory
        https://bugs.webkit.org/show_bug.cgi?id=50058

        * platform/text/brew/StringBrew.cpp: Removed.

2010-12-03  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Andreas Kling.

        Move StringHaiku.cpp into wtf directory
        https://bugs.webkit.org/show_bug.cgi?id=50057

        * platform/text/haiku/StringHaiku.cpp: Removed.

2010-12-03  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Sam Weinig.

        Need a WebKit2 Equivalent of WebSecurityOrigin
        https://bugs.webkit.org/show_bug.cgi?id=50170

        * WebCore.exp.in:
        Export the symbol for SecurityOrigin::createFromDatabaseIdentifier.

2010-12-03  Andras Becsi  <abecsi@inf.u-szeged.hu>

        Unreviewed build fix after r73254.

        [Qt][V8] Add missing headers to $headerIncludes rather than $implIncludes
        because headers are needed by the generated .h files.

        No new tests needed.

        * bindings/scripts/CodeGeneratorV8.pm:

2010-12-03  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        1336 files in WebCore rebuild when you touch SVGNames
        https://bugs.webkit.org/show_bug.cgi?id=42025

        Remove global SVGNames.h dependency, as SVGAnimatedPropertyMacros.h included it.
        This requires to add the SVGNames.h include to lots of cpp files.

        No functional changes, thus no new tests.

        * css/CSSCursorImageValue.cpp:
        * css/CSSFontFaceSource.cpp:
        * dom/Node.cpp:
        * loader/cache/CachedFont.cpp:
        * rendering/RenderSVGResourceClipper.cpp:
        * rendering/RenderSVGResourceFilter.cpp:
        * rendering/RenderSVGTransformableContainer.cpp:
        * rendering/RenderSVGViewportContainer.cpp:
        * rendering/SVGRenderTreeAsText.cpp:
        * rendering/SVGResources.cpp:
        * rendering/svg/RenderSVGTextPath.cpp:
        * rendering/svg/SVGRootInlineBox.cpp:
        * svg/SVGAnimateElement.cpp:
        * svg/SVGAnimateMotionElement.cpp:
        * svg/SVGAnimateTransformElement.cpp:
        * svg/SVGDefsElement.cpp:
        * svg/SVGFEBlendElement.cpp:
        * svg/SVGFEDisplacementMapElement.cpp:
        * svg/SVGFEMergeElement.cpp:
        * svg/SVGFEMergeNodeElement.cpp:
        * svg/SVGFEOffsetElement.cpp:
        * svg/SVGFETileElement.cpp:
        * svg/SVGFETurbulenceElement.cpp:
        * svg/SVGFont.cpp:
        * svg/SVGGElement.cpp:
        * svg/SVGImageElement.cpp:
        * svg/SVGLength.cpp:
        * svg/SVGMPathElement.cpp:
        * svg/SVGPathElement.cpp:
        * svg/SVGPathSegList.cpp:
        * svg/SVGStyledTransformableElement.cpp:
        * svg/SVGSymbolElement.cpp:
        * svg/SVGTextContentElement.cpp:
        * svg/SVGTextElement.cpp:
        * svg/SVGTextPathElement.cpp:
        * svg/SVGUseElement.cpp:
        * svg/SVGViewSpec.cpp:
        * svg/animation/SMILTimeContainer.cpp:
        * svg/properties/SVGAnimatedPropertyMacros.h:
        * svg/properties/SVGPathSegListPropertyTearOff.cpp:

2010-12-02  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Martin Robinson.

        [GStreamer] hasVideo/Audio return false until the pipeline reaches PAUSED
        https://bugs.webkit.org/show_bug.cgi?id=50382

        Go to PAUSED even if preload is deactivated. In that case don't
        process the GStreamer state changes until commitLoad() has been
        called. This patch also fixes hasVideo and hasAudio methods,
        making them reactive to the playbin2 audio/video tags-changed
        signals.

        Test: media/controls-without-preload.html

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mediaPlayerPrivateMessageCallback):
        (WebCore::mediaPlayerPrivateVideoTagsChangedCallback):
        (WebCore::mediaPlayerPrivateAudioTagsChangedCallback):
        (WebCore::mediaPlayerPrivateAudioTagsChangeTimeoutCallback):
        (WebCore::mediaPlayerPrivateVideoTagsChangeTimeoutCallback):
        (WebCore::MediaPlayerPrivateGStreamer::MediaPlayerPrivateGStreamer):
        (WebCore::MediaPlayerPrivateGStreamer::~MediaPlayerPrivateGStreamer):
        (WebCore::MediaPlayerPrivateGStreamer::load):
        (WebCore::MediaPlayerPrivateGStreamer::commitLoad):
        (WebCore::MediaPlayerPrivateGStreamer::videoTagsChanged):
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfVideoTags):
        (WebCore::MediaPlayerPrivateGStreamer::audioTagsChanged):
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfAudioTags):
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        (WebCore::MediaPlayerPrivateGStreamer::hasVideo):
        (WebCore::MediaPlayerPrivateGStreamer::hasAudio):
        (WebCore::MediaPlayerPrivateGStreamer::loadDelayed):

2010-12-03  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Finish splitting DECLARE_ANIMATED_PROPERTY* in DECLARE/DEFINE parts for the remaining SVGAnimated* types
        https://bugs.webkit.org/show_bug.cgi?id=50440

        Continuing the work on bug 42025: Introduce (DECLARE|DEFINE)_ANIMATED_(ANGLE|BOOLEAN|INTEGER|PRESERVEASPECTRATIO|RECT).
        The animated property declaration lives in the header, the definition in the cpp file, to avoid the dependency on SVGNames.h in all headers.

        No functional changes, thus no new tests.

        * svg/SVGAElement.cpp:
        * svg/SVGAElement.h:
        * svg/SVGAnimatedAngle.h:
        * svg/SVGAnimatedBoolean.h:
        * svg/SVGAnimatedInteger.h:
        * svg/SVGAnimatedPreserveAspectRatio.h:
        * svg/SVGAnimatedRect.h:
        * svg/SVGAnimationElement.cpp:
        * svg/SVGAnimationElement.h:
        (WebCore::SVGAnimationElement::calculateDistance):
        (WebCore::SVGAnimationElement::animationPath):
        * svg/SVGCircleElement.cpp:
        * svg/SVGCircleElement.h:
        * svg/SVGClipPathElement.cpp:
        * svg/SVGClipPathElement.h:
        * svg/SVGCursorElement.cpp:
        * svg/SVGCursorElement.h:
        * svg/SVGDefsElement.cpp:
        * svg/SVGDefsElement.h:
        * svg/SVGEllipseElement.cpp:
        * svg/SVGEllipseElement.h:
        * svg/SVGFEConvolveMatrixElement.cpp:
        * svg/SVGFEConvolveMatrixElement.h:
        * svg/SVGFEImageElement.cpp:
        * svg/SVGFEImageElement.h:
        * svg/SVGFETurbulenceElement.cpp:
        * svg/SVGFETurbulenceElement.h:
        * svg/SVGFilterElement.cpp:
        * svg/SVGFilterElement.h:
        * svg/SVGFilterPrimitiveStandardAttributes.h:
        * svg/SVGFontElement.cpp:
        (WebCore::SVGFontElement::firstMissingGlyphElement):
        (WebCore::SVGFontElement::ensureGlyphCache):
        * svg/SVGFontElement.h:
        * svg/SVGForeignObjectElement.cpp:
        * svg/SVGForeignObjectElement.h:
        * svg/SVGGElement.cpp:
        * svg/SVGGElement.h:
        (WebCore::SVGGElement::isShadowTreeContainerElement):
        (WebCore::SVGGElement::isValid):
        * svg/SVGGradientElement.cpp:
        * svg/SVGGradientElement.h:
        * svg/SVGImageElement.cpp:
        * svg/SVGImageElement.h:
        * svg/SVGLineElement.cpp:
        * svg/SVGLineElement.h:
        * svg/SVGLinearGradientElement.h:
        * svg/SVGMPathElement.cpp:
        * svg/SVGMPathElement.h:
        * svg/SVGMarkerElement.cpp:
        * svg/SVGMarkerElement.h:
        * svg/SVGMaskElement.cpp:
        * svg/SVGMaskElement.h:
        * svg/SVGPathElement.cpp:
        * svg/SVGPathElement.h:
        * svg/SVGPatternElement.cpp:
        * svg/SVGPatternElement.h:
        * svg/SVGPolyElement.cpp:
        * svg/SVGPolyElement.h:
        * svg/SVGRadialGradientElement.h:
        * svg/SVGRectElement.cpp:
        * svg/SVGRectElement.h:
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::contentScriptType):
        (WebCore::SVGSVGElement::contentStyleType):
        (WebCore::SVGSVGElement::parseMappedAttribute):
        * svg/SVGSVGElement.h:
        * svg/SVGScriptElement.cpp:
        * svg/SVGScriptElement.h:
        * svg/SVGSwitchElement.cpp:
        * svg/SVGSwitchElement.h:
        (WebCore::SVGSwitchElement::isValid):
        * svg/SVGSymbolElement.cpp:
        * svg/SVGSymbolElement.h:
        (WebCore::SVGSymbolElement::rendererIsNeeded):
        * svg/SVGTextContentElement.cpp:
        * svg/SVGTextContentElement.h:
        * svg/SVGUseElement.cpp:
        * svg/SVGUseElement.h:
        * svg/SVGViewElement.cpp:
        * svg/SVGViewElement.h:
        (WebCore::SVGViewElement::viewTarget):
        (WebCore::SVGViewElement::rendererIsNeeded):
        * svg/SVGViewSpec.cpp:
        * svg/SVGViewSpec.h:
        (WebCore::SVGViewSpec::transform):
        (WebCore::SVGViewSpec::viewTargetString):
        (WebCore::SVGViewSpec::contextElement):
        * svg/properties/SVGAnimatedPropertyMacros.h:

2010-12-03  Noel Gordon  <noel.gordon@gmail.com>

        Reviewed by Darin Fisher.

        [chromium] PNG encoder leaks memory on png_write_row errors.
        https://bugs.webkit.org/show_bug.cgi?id=50439

        Move the creation of needed C++ objects before the setjmp() point so
        those objects have their destructors called if libpng errors invoke
        the setjmp() return path.
   
        Other minor cleanup: use the skia bitmap locker class, and remove the
        PNGDestroyer class - instead directly call png_destroy_write_struct()
        at each of the encodeImpl() return points.

        No change in behaviour, so no new tests.

        * platform/image-encoders/skia/PNGImageEncoder.cpp:
        (WebCore::encodeImpl):
        (WebCore::PNGImageEncoder::encode):

2010-12-02  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Eric Carlson.

        Theme not updated when MediaPlayer m_private engine changes
        https://bugs.webkit.org/show_bug.cgi?id=50228

        Trigger a new rendering of the media element when the private
        media-player backend is updated.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerEngineUpdated):
        * html/HTMLMediaElement.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::MediaPlayer):
        (WebCore::MediaPlayer::load):
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::mediaPlayerEngineUpdated):

2010-12-03  Yonathan Randolph  <yonathan@gmail.com>

        Reviewed by Alexey Proskuryakov.

        XPath lexer misinterprets expression starting with "div".
        https://bugs.webkit.org/show_bug.cgi?id=50366

        * xml/XPathParser.cpp:
        * xml/XPathParser.h:
        (WebCore::XPath::Parser::isOperatorContext): removed (renamed)
        (WebCore::XPath::Parser::isBinaryOperatorContext): added

2010-12-02  Rob Buis  <rwlbuis@gmail.com>

        Reviewed by Alexey Proskuryakov.

        CSS 2.1 failure: at-import-*
        https://bugs.webkit.org/show_bug.cgi?id=47153

        Fix at-import-010.htm by only setting m_allowImportRules
        to false when creating valid style or page rules.
 
         Test: css2.1/t040105-import-10-b.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::createStyleRule):

2010-12-02  Aaron Boodman  <aa@chromium.org>

        Reviewed by David Hyatt.

        Reduce the number of cases where we end up with a stale value for
        minimumPreferredLogicalWidth(). This isn't a complete fix, but fixes a
        large number of cases.

        RenderObject::minimumPreferredLogicalWidth() sometimes reports wrong value.
        https://bugs.webkit.org/show_bug.cgi?id=50119

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleDidChange):

2010-12-02  Gregg Tavares  <gman@google.com>

        Reviewed by David Levin.

        Need to initialize destination variables before calling GL
        https://bugs.webkit.org/show_bug.cgi?id=50048

        No new tests because no change in functionality.

        * html/canvas/WebGLFramebuffer.cpp:
        (WebCore::WebGLFramebuffer::initializeRenderbuffers):
        * html/canvas/WebGLProgram.cpp:
        (WebCore::WebGLProgram::cacheActiveAttribLocations):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getAttachedShaders):
        (WebCore::WebGLRenderingContext::getBufferParameter):
        (WebCore::WebGLRenderingContext::getFramebufferAttachmentParameter):
        (WebCore::WebGLRenderingContext::getBooleanParameter):
        (WebCore::WebGLRenderingContext::getFloatParameter):
        (WebCore::WebGLRenderingContext::getLongParameter):
        (WebCore::WebGLRenderingContext::getUnsignedLongParameter):
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::loadShader):
        (WebCore::LayerChromium::createShaderProgram):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::initializeSharedObjects):
        * platform/graphics/gpu/DrawingBuffer.cpp:
        (WebCore::DrawingBuffer::reset):
        * platform/graphics/gpu/Shader.cpp:
        (WebCore::Shader::loadProgram):

2010-12-02  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Enable Web Timing for Qt
        https://bugs.webkit.org/show_bug.cgi?id=42433

        * features.pri: Enable Web Timing for trunk (but not yet for
          production)

2010-12-02  Andy Estes  <aestes@apple.com>

        Rubber-stamped by Mark Rowe.

        Update bindings test results with new GObject results.

        * bindings/scripts/test/GObject/WebKitDOMTestCallback.cpp:
        (WebKit::kit):
        * bindings/scripts/test/GObject/WebKitDOMTestCallbackPrivate.h:
        * bindings/scripts/test/GObject/WebKitDOMTestInterface.cpp:
        (WebKit::kit):
        * bindings/scripts/test/GObject/WebKitDOMTestInterfacePrivate.h:
        * bindings/scripts/test/GObject/WebKitDOMTestMediaQueryListListener.cpp:
        (WebKit::kit):
        * bindings/scripts/test/GObject/WebKitDOMTestMediaQueryListListenerPrivate.h:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        (WebKit::kit):
        (webkit_dom_test_obj_obj_method):
        (webkit_dom_test_obj_obj_method_with_args):
        (webkit_dom_test_obj_method_that_requires_all_args):
        (webkit_dom_test_obj_method_that_requires_all_args_and_throws):
        (webkit_dom_test_obj_with_script_state_obj):
        (webkit_dom_test_obj_with_script_state_obj_exception):
        (webkit_dom_test_obj_get_read_only_test_obj_attr):
        (webkit_dom_test_obj_get_test_obj_attr):
        (webkit_dom_test_obj_get_xml_obj_attr):
        * bindings/scripts/test/GObject/WebKitDOMTestObjPrivate.h:

2010-12-02  Simon Fraser  <simon.fraser@apple.com>

        Revert r73217 and r73227 because of continued bustage.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::nativeLayer):
        * platform/graphics/ca/PlatformCAAnimation.h: Removed.
        * platform/graphics/ca/PlatformCALayer.h: Removed.
        * platform/graphics/ca/mac/PlatformCAAnimationMac.mm: Removed.
        * platform/graphics/ca/mac/PlatformCALayerMac.mm: Removed.
        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::nativeLayer):
        * platform/graphics/chromium/GraphicsLayerChromium.h:
        * platform/graphics/mac/GraphicsLayerMac.h: Renamed from WebCore/platform/graphics/ca/GraphicsLayerCA.h.
        (WebCore::GraphicsLayerMac::hasContentsLayer):
        (WebCore::GraphicsLayerMac::primaryLayer):
        (WebCore::GraphicsLayerMac::isReplicatedRootClone):
        (WebCore::GraphicsLayerMac::primaryLayerClones):
        (WebCore::GraphicsLayerMac::animationIsRunning):
        (WebCore::GraphicsLayerMac::contentsLayer):
        (WebCore::GraphicsLayerMac::ReplicaState::ReplicaState):
        (WebCore::GraphicsLayerMac::ReplicaState::push):
        (WebCore::GraphicsLayerMac::ReplicaState::setBranchType):
        (WebCore::GraphicsLayerMac::ReplicaState::pop):
        (WebCore::GraphicsLayerMac::ReplicaState::depth):
        (WebCore::GraphicsLayerMac::ReplicaState::replicaDepth):
        (WebCore::GraphicsLayerMac::hasCloneLayers):
        (WebCore::GraphicsLayerMac::LayerPropertyAnimation::LayerPropertyAnimation):
        (WebCore::GraphicsLayerMac::AnimationProcessingAction::AnimationProcessingAction):
        * platform/graphics/mac/GraphicsLayerMac.mm: Renamed from WebCore/platform/graphics/ca/GraphicsLayerCA.cpp.
        (WebCore::currentTimeToMediaTime):
        (WebCore::mediaTimeToCurrentTime):
        (-[WebAnimationDelegate animationDidStart:]):
        (-[WebAnimationDelegate WebCore::]):
        (-[WebAnimationDelegate setLayer:WebCore::]):
        (WebCore::copyTransform):
        (WebCore::getTransformFunctionValue):
        (WebCore::getValueFunctionNameForTransformOperation):
        (WebCore::propertyIdToString):
        (WebCore::animationIdentifier):
        (WebCore::getCAMediaTimingFunction):
        (WebCore::setLayerBorderColor):
        (WebCore::clearBorderColor):
        (WebCore::setLayerBackgroundColor):
        (WebCore::clearLayerBackgroundColor):
        (WebCore::safeSetSublayers):
        (WebCore::caValueFunctionSupported):
        (WebCore::forceSoftwareAnimation):
        (WebCore::nullActionsDictionary):
        (WebCore::animationHasStepsTimingFunction):
        (WebCore::GraphicsLayer::create):
        (WebCore::GraphicsLayerMac::GraphicsLayerMac):
        (WebCore::GraphicsLayerMac::~GraphicsLayerMac):
        (WebCore::GraphicsLayerMac::setName):
        (WebCore::GraphicsLayerMac::nativeLayer):
        (WebCore::GraphicsLayerMac::setChildren):
        (WebCore::GraphicsLayerMac::addChild):
        (WebCore::GraphicsLayerMac::addChildAtIndex):
        (WebCore::GraphicsLayerMac::addChildBelow):
        (WebCore::GraphicsLayerMac::addChildAbove):
        (WebCore::GraphicsLayerMac::replaceChild):
        (WebCore::GraphicsLayerMac::removeFromParent):
        (WebCore::GraphicsLayerMac::setMaskLayer):
        (WebCore::GraphicsLayerMac::setReplicatedLayer):
        (WebCore::GraphicsLayerMac::setReplicatedByLayer):
        (WebCore::GraphicsLayerMac::setPosition):
        (WebCore::GraphicsLayerMac::setAnchorPoint):
        (WebCore::GraphicsLayerMac::setSize):
        (WebCore::GraphicsLayerMac::setTransform):
        (WebCore::GraphicsLayerMac::setChildrenTransform):
        (WebCore::GraphicsLayerMac::moveOrCopyLayerAnimation):
        (WebCore::GraphicsLayerMac::moveOrCopyAnimationsForProperty):
        (WebCore::GraphicsLayerMac::setPreserves3D):
        (WebCore::GraphicsLayerMac::setMasksToBounds):
        (WebCore::GraphicsLayerMac::setDrawsContent):
        (WebCore::GraphicsLayerMac::setBackgroundColor):
        (WebCore::GraphicsLayerMac::clearBackgroundColor):
        (WebCore::GraphicsLayerMac::setContentsOpaque):
        (WebCore::GraphicsLayerMac::setBackfaceVisibility):
        (WebCore::GraphicsLayerMac::setOpacity):
        (WebCore::GraphicsLayerMac::setNeedsDisplay):
        (WebCore::GraphicsLayerMac::setNeedsDisplayInRect):
        (WebCore::GraphicsLayerMac::setContentsNeedsDisplay):
        (WebCore::GraphicsLayerMac::setContentsRect):
        (WebCore::GraphicsLayerMac::addAnimation):
        (WebCore::GraphicsLayerMac::pauseAnimation):
        (WebCore::GraphicsLayerMac::removeAnimation):
        (WebCore::GraphicsLayerMac::animationDidStart):
        (WebCore::GraphicsLayerMac::setContentsToImage):
        (WebCore::GraphicsLayerMac::setContentsToMedia):
        (WebCore::GraphicsLayerMac::didDisplay):
        (WebCore::GraphicsLayerMac::syncCompositingState):
        (WebCore::GraphicsLayerMac::syncCompositingStateForThisLayerOnly):
        (WebCore::GraphicsLayerMac::recursiveCommitChanges):
        (WebCore::GraphicsLayerMac::commitLayerChangesBeforeSublayers):
        (WebCore::GraphicsLayerMac::commitLayerChangesAfterSublayers):
        (WebCore::GraphicsLayerMac::updateLayerNames):
        (WebCore::GraphicsLayerMac::updateSublayerList):
        (WebCore::GraphicsLayerMac::updateLayerPosition):
        (WebCore::GraphicsLayerMac::updateLayerSize):
        (WebCore::GraphicsLayerMac::updateAnchorPoint):
        (WebCore::GraphicsLayerMac::updateTransform):
        (WebCore::GraphicsLayerMac::updateChildrenTransform):
        (WebCore::GraphicsLayerMac::updateMasksToBounds):
        (WebCore::GraphicsLayerMac::updateContentsOpaque):
        (WebCore::GraphicsLayerMac::updateBackfaceVisibility):
        (WebCore::GraphicsLayerMac::updateStructuralLayer):
        (WebCore::GraphicsLayerMac::ensureStructuralLayer):
        (WebCore::GraphicsLayerMac::structuralLayerPurpose):
        (WebCore::GraphicsLayerMac::updateLayerDrawsContent):
        (WebCore::GraphicsLayerMac::updateLayerBackgroundColor):
        (WebCore::GraphicsLayerMac::updateContentsImage):
        (WebCore::GraphicsLayerMac::updateContentsMediaLayer):
        (WebCore::GraphicsLayerMac::updateContentsCanvasLayer):
        (WebCore::GraphicsLayerMac::updateContentsRect):
        (WebCore::GraphicsLayerMac::updateMaskLayer):
        (WebCore::GraphicsLayerMac::updateReplicatedLayers):
        (WebCore::GraphicsLayerMac::ReplicaState::cloneID):
        (WebCore::GraphicsLayerMac::replicatedLayerRoot):
        (WebCore::GraphicsLayerMac::updateLayerAnimations):
        (WebCore::GraphicsLayerMac::setCAAnimationOnLayer):
        (WebCore::bug7311367Workaround):
        (WebCore::GraphicsLayerMac::removeCAAnimationFromLayer):
        (WebCore::copyAnimationProperties):
        (WebCore::GraphicsLayerMac::pauseCAAnimationOnLayer):
        (WebCore::GraphicsLayerMac::setContentsToCanvas):
        (WebCore::GraphicsLayerMac::repaintLayerDirtyRects):
        (WebCore::GraphicsLayerMac::updateContentsNeedsDisplay):
        (WebCore::GraphicsLayerMac::createAnimationFromKeyframes):
        (WebCore::GraphicsLayerMac::createTransformAnimationsFromKeyframes):
        (WebCore::GraphicsLayerMac::createBasicAnimation):
        (WebCore::GraphicsLayerMac::createKeyframeAnimation):
        (WebCore::GraphicsLayerMac::setupAnimation):
        (WebCore::GraphicsLayerMac::timingFunctionForAnimationValue):
        (WebCore::GraphicsLayerMac::setAnimationEndpoints):
        (WebCore::GraphicsLayerMac::setAnimationKeyframes):
        (WebCore::GraphicsLayerMac::setTransformAnimationEndpoints):
        (WebCore::GraphicsLayerMac::setTransformAnimationKeyframes):
        (WebCore::GraphicsLayerMac::suspendAnimations):
        (WebCore::GraphicsLayerMac::resumeAnimations):
        (WebCore::GraphicsLayerMac::hostLayerForSublayers):
        (WebCore::GraphicsLayerMac::layerForSuperlayer):
        (WebCore::GraphicsLayerMac::animatedLayer):
        (WebCore::GraphicsLayerMac::animatedLayerClones):
        (WebCore::GraphicsLayerMac::platformLayer):
        (WebCore::GraphicsLayerMac::setDebugBackgroundColor):
        (WebCore::GraphicsLayerMac::setDebugBorder):
        (WebCore::GraphicsLayerMac::constrainedSize):
        (WebCore::GraphicsLayerMac::requiresTiledLayer):
        (WebCore::GraphicsLayerMac::swapFromOrToTiledLayer):
        (WebCore::GraphicsLayerMac::defaultContentsOrientation):
        (WebCore::GraphicsLayerMac::updateContentsTransform):
        (WebCore::GraphicsLayerMac::setupContentsLayer):
        (WebCore::GraphicsLayerMac::findOrMakeClone):
        (WebCore::GraphicsLayerMac::ensureCloneLayers):
        (WebCore::GraphicsLayerMac::removeCloneLayers):
        (WebCore::GraphicsLayerMac::positionForCloneRootLayer):
        (WebCore::GraphicsLayerMac::propagateLayerChangeToReplicas):
        (WebCore::GraphicsLayerMac::fetchCloneLayers):
        (WebCore::GraphicsLayerMac::cloneLayer):
        (WebCore::GraphicsLayerMac::setOpacityInternal):
        (WebCore::GraphicsLayerMac::updateOpacityOnLayer):
        (WebCore::GraphicsLayerMac::noteSublayersChanged):
        (WebCore::GraphicsLayerMac::noteLayerPropertyChanged):
        * platform/graphics/mac/WebLayer.h:
        * platform/graphics/mac/WebLayer.mm:
        (-[WebLayer initWithLayer:]):
        (-[WebLayer setNeedsDisplay]):
        (-[WebLayer setNeedsDisplayInRect:]):
        (-[WebLayer display]):
        (-[WebLayer drawInContext:]):
        (-[WebLayer setLayerOwner:]):
        (-[WebLayer layerOwner]):
        * platform/graphics/mac/WebTiledLayer.h:
        * platform/graphics/mac/WebTiledLayer.mm:
        (-[WebTiledLayer initWithLayer:]):
        (-[WebTiledLayer setNeedsDisplay]):
        (-[WebTiledLayer setNeedsDisplayInRect:]):
        (-[WebTiledLayer display]):
        (-[WebTiledLayer drawInContext:]):
        (-[WebTiledLayer setLayerOwner:]):
        (-[WebTiledLayer layerOwner]):
        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::GraphicsLayerQtImpl::flushChanges):
        (WebCore::GraphicsLayerQt::nativeLayer):
        * platform/graphics/qt/GraphicsLayerQt.h:
        * platform/graphics/win/GraphicsLayerCACF.cpp:
        (WebCore::GraphicsLayerCACF::nativeLayer):
        * platform/graphics/win/GraphicsLayerCACF.h:

2010-12-02  Noel Gordon  <noel.gordon@gmail.com>

        Reviewed by David Levin.
        [chromium] Remove dead code from PNG encoder
        https://bugs.webkit.org/show_bug.cgi?id=50377

        Also webkit style the PNG encoder files.

        No change in behaviour, so no new tests.

        * platform/image-encoders/skia/PNGImageEncoder.cpp:
        (WebCore::encodeImpl):
        (WebCore::PNGImageEncoder::encode):
        * platform/image-encoders/skia/PNGImageEncoder.h:

2010-12-02  Yuta Kitamura  <yutak@chromium.org>

        Reviewed by Alexey Proskuryakov.

        An attempt to fix Chromium's clang build.

        Implement (non-EventListener) marquee IDL attributes from HTML5.
        https://bugs.webkit.org/show_bug.cgi?id=49786

        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::initialMarqueeSpeed):

2010-12-02  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Fix heap snapshots loading. Loading is now
        conducted by the Profiles panel which prevents accidental
        simultaneous attempts to load the same profile several times in
        parallel.

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

        * inspector/front-end/HeapSnapshotView.js:
        (WebInspector.HeapSnapshotView.prototype._loadProfile):
        (WebInspector.HeapSnapshotView.prototype.processLoadedSnapshot):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype.loadHeapSnapshot):
        (WebInspector.ProfilesPanel.prototype.addHeapSnapshotChunk):
        (WebInspector.ProfilesPanel.prototype.finishHeapSnapshot):

2010-12-02  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Fix Leopard build broken by http://trac.webkit.org/changeset/73217

        * platform/graphics/ca/GraphicsLayerCA.cpp:
        (WebCore::getTransformFunctionValue):
        (WebCore::GraphicsLayerCA::updateContentsTransform):
        * platform/graphics/ca/PlatformCALayer.h:
        * platform/graphics/ca/mac/PlatformCAAnimationMac.mm:
        (PlatformCAAnimation::valueFunction):
        (PlatformCAAnimation::setValueFunction):
        * platform/graphics/ca/mac/PlatformCALayerMac.mm:
        (PlatformCALayer::PlatformCALayer):
        (PlatformCALayer::anchorPoint):
        (PlatformCALayer::setAnchorPoint):
        (PlatformCALayer::contentsTransform):
        (PlatformCALayer::setContentsTransform):
        (PlatformCALayer::isGeometryFlipped):
        (PlatformCALayer::setGeometryFlipped):
        (PlatformCALayer::setMinificationFilter):
        (PlatformCALayer::setMagnificationFilter):

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

        Reviewed by Dave Hyatt.

        CSS support for the text-emphasis properties
        Part of <rdar://problem/7720300> Support the CSS3 text-emphasis property
        https://bugs.webkit.org/show_bug.cgi?id=48539

        Test: fast/css/parsing-text-emphasis.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue): Added text-emphasis-color,
        text-emphasis-position and text-emphasis-style. Left the text-emphasis shorthand unsupported.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue): Parse the properties.
        (WebCore::CSSParser::parseTextEmphasisStyle): Added.
        * css/CSSParser.h:
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue): Added TextEmphasisPosition, TextEmphasisFill
        and TextEmphasisMark mappings.
        (WebCore::CSSPrimitiveValue::operator TextEmphasisPosition): Added.
        (WebCore::CSSPrimitiveValue::operator TextEmphasisFill): Added.
        (WebCore::CSSPrimitiveValue::operator TextEmphasisMark): Added.
        * css/CSSPropertyLonghand.cpp:
        (WebCore::initShorthandMap): Added the text-emphasis shorthand.
        * css/CSSPropertyNames.in: Added -webkit-text-emphasis, -webkit-text-emphasis-color,
        -webkit-text-emphasis-position, and -webkit-text-emphasis-style.
        * css/CSSStyleSelector.cpp:
        (WebCore::isValidVisitedLinkProperty): Added text-emphasis-color.
        (WebCore::CSSStyleSelector::applyProperty): Handle the properties.
        * css/CSSValueKeywords.in: Added 'over' and 'under' for text-emphasis-position. Added 'dot',
        'double-circle', 'triangle', 'sesame', 'filled' and 'open' for text-emphasis-style.
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::colorIncludingFallback): Handle text-emphasis-color.
        (WebCore::RenderStyle::textEmphasisMark): Added. Maps the fake 'auto' value to 'dot' or
        'sesame' based on writing direction.
        * rendering/style/RenderStyle.h: Added accessors.
        (WebCore::InheritedFlags::textEmphasisFill):
        (WebCore::InheritedFlags::textEmphasisCustomMark):
        (WebCore::InheritedFlags::textEmphasisPosition):
        (WebCore::InheritedFlags::setTextEmphasisColor):
        (WebCore::InheritedFlags::setTextEmphasisFill):
        (WebCore::InheritedFlags::setTextEmphasisMark):
        (WebCore::InheritedFlags::setTextEmphasisCustomMark):
        (WebCore::InheritedFlags::setTextEmphasisPosition):
        (WebCore::InheritedFlags::initialTextEmphasisColor):
        (WebCore::InheritedFlags::initialTextEmphasisFill):
        (WebCore::InheritedFlags::initialTextEmphasisMark):
        (WebCore::InheritedFlags::initialTextEmphasisCustomMark):
        (WebCore::InheritedFlags::initialTextEmphasisPosition):
        (WebCore::InheritedFlags::textEmphasisColor):
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator==):
        * rendering/style/StyleRareInheritedData.h:

2010-12-02  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Share code between Mac (CA) and Windows (CACF) GraphicsLayer implementations
        https://bugs.webkit.org/show_bug.cgi?id=49388

        Replaced GraphicsLayerMac with GraphicsLayerCA. GraphicsLayerCA is essentially 
        identical to GraphicsLayerMac, but replaces all the CoreAnimation specific calls 
        with calls to PlatformCALayer and PlatformCAAnimation. This makes GraphicsLayerCA 
        platform neutral as long as implementations of those two classes are available. 
        Added implementations in PlatformCALayerMac and PlatformCAAnimationMac. Also got 
        rid of GraphicsLayer::nativeLayer() and replaced it with GraphicsLayer::platformLayer() 
        to avoid confusion since both names were used to refer to the same thing. 

        This patch is only for Mac. Windows implementation has not changed.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/ca: Added.
        * platform/graphics/ca/GraphicsLayerCA.cpp: Added.
        * platform/graphics/ca/GraphicsLayerCA.h: Added.
        * platform/graphics/ca/PlatformCAAnimation.h: Added.
        * platform/graphics/ca/PlatformCALayer.h: Added.
        * platform/graphics/ca/mac: Added.
        * platform/graphics/ca/mac/PlatformCAAnimationMac.mm: Added.
        * platform/graphics/ca/mac/PlatformCALayerMac.mm: Added.
        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        * platform/graphics/chromium/GraphicsLayerChromium.h:
        * platform/graphics/mac/GraphicsLayerMac.h: Removed.
        * platform/graphics/mac/GraphicsLayerMac.mm: Removed.
        * platform/graphics/mac/WebLayer.h:
        * platform/graphics/mac/WebLayer.mm:
        * platform/graphics/mac/WebTiledLayer.h:
        * platform/graphics/mac/WebTiledLayer.mm:
        * platform/graphics/qt/GraphicsLayerQt.cpp:
        * platform/graphics/qt/GraphicsLayerQt.h:
        * platform/graphics/win/GraphicsLayerCACF.cpp:
        * platform/graphics/win/GraphicsLayerCACF.h:

2010-12-02  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Darin Adler.

        Update ResourceLoaderSet Enumeration
        https://bugs.webkit.org/show_bug.cgi?id=50405

        Use size_t when working with Vectors and when comparing between size_t types.

        * loader/DocumentLoader.cpp:
        (WebCore::cancelAll):
        (WebCore::setAllDefersLoading):

2010-12-02  Jian Li  <jianli@chromium.org>

        Reviewed by Kenneth Russell.

        Integer calculation issues in DataView constructor
        https://bugs.webkit.org/show_bug.cgi?id=50354

        Test: fast/canvas/webgl/data-view-crash.html

        * html/canvas/DataView.cpp:
        (WebCore::DataView::create):

2010-12-02  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Darin Adler.

        Add AtomicString::fromUTF8
        https://bugs.webkit.org/show_bug.cgi?id=45594

        Use AtomicString::fromUTF8 directly in the libxml2 parser.

        * dom/XMLDocumentParserLibxml2.cpp:
        (WebCore::toAtomicString):

2010-12-02  Andy Estes  <aestes@apple.com>

        Fix the Qt Linux Release minimal build.

        * html/HTMLMarqueeElement.cpp: Include ExceptionCode.h

2010-12-02  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Darin Adler.

        Update ResourceLoaderSet Enumeration
        https://bugs.webkit.org/show_bug.cgi?id=50405

        * loader/DocumentLoader.cpp:
        (WebCore::cancelAll): instead of copying the HashSet, use copyToVector.
        (WebCore::setAllDefersLoading): instead of copying the HashSet, use copyToVector.

2010-12-02  Andy Estes  <aestes@apple.com>

        Reviewed by Darin Adler.

        Implement (non-EventListener) marquee IDL attributes from HTML5.
        https://bugs.webkit.org/show_bug.cgi?id=49786

        Test: fast/html/marquee-element.html

        * html/HTMLMarqueeElement.cpp:
        (WebCore::HTMLMarqueeElement::scrollAmount): If the content attribute
        can be converted to a signed integer and is >= 0, return it.
        Otherwise, return the default scrollAmount value.
        (WebCore::HTMLMarqueeElement::setScrollAmount): Update the content
        attribute if it is >= 0. Otherwise, raise INDEX_SIZE_ERR.
        (WebCore::HTMLMarqueeElement::scrollDelay): Same as scrollAmount.
        (WebCore::HTMLMarqueeElement::setScrollDelay): Same as setScrollAmount.
        (WebCore::HTMLMarqueeElement::loop): If the content attribute can be
        converted to a signed integer and is greater than 0 or equal to -1,
        return it. Otherwise, return the default loop value.
        (WebCore::HTMLMarqueeElement::setLoop): Update the content attribute if
        it is greater than 0 or equal to -1. Otherwise, raise INDEX_SIZE_ERR.
        * html/HTMLMarqueeElement.h:
        * html/HTMLMarqueeElement.idl: Update the IDL to match what is in HTML5.
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::initialMarqueeSpeed):

2010-12-02  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Andreas Kling.

        [OpenVG] Remove "current path" of GraphicsContext
        https://bugs.webkit.org/show_bug.cgi?id=50294

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/openvg/GraphicsContextOpenVG.cpp:
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::clipPath):
        * platform/graphics/openvg/PainterOpenVG.cpp:
        (WebCore::PainterOpenVG::PainterOpenVG):
        (WebCore::PainterOpenVG::~PainterOpenVG):
        (WebCore::PainterOpenVG::drawPath):
        * platform/graphics/openvg/PainterOpenVG.h:

2010-12-02  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Andreas Kling.

        [WINCE] Remove "current path" of GraphicsContext
        https://bugs.webkit.org/show_bug.cgi?id=50284

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):

2010-12-02  Johnny Ding  <jnd@chromium.org>

        Reviewed by Adam Barth.

        Set the right gesture status for URL redirections.
        https://bugs.webkit.org/show_bug.cgi?id=47817

        Tests: fast/frames/location-redirect-user-gesture.html
               fast/frames/meta-refresh-user-gesture.html

        * loader/NavigationScheduler.cpp:
        (WebCore::ScheduledNavigation::clearUserGesture):
        (WebCore::ScheduledRedirect::ScheduledRedirect):

2010-12-02  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        AudioContext needs createBuffer() method from ArrayBuffer
        https://bugs.webkit.org/show_bug.cgi?id=50343

        No new tests since audio API is not yet implemented.

        * webaudio/AudioContext.cpp:
        (WebCore::AudioContext::createBuffer):
        * webaudio/AudioContext.h:
        * webaudio/AudioContext.idl:

2010-12-02  Noel Gordon  <noel.gordon@gmail.com>

        Reviewed by David Levin.

        [chromium] Add canvas.toDataURL("image/jpeg", quality) support
        https://bugs.webkit.org/show_bug.cgi?id=49365

        Adds a libjpeg-based image encoder for Skia bitmaps.  Default encoding quality
        is 92 to match Mozilla, also Safari, though the actual value used by Safari is
        undocumented, and it appears to pre-blur images prior to compression.

        The preMultipliedBGRAtoRGB() routine restores the un-premultiplied RGB colors
        where there is non-zero alpha.  Again, this matches Firefox and Safari, but no
        browser conforms to the HTML5 canvas standard here, I believe, considering the
        result of canvas/philip/tests/toDataURL.jpeg.alpha.html; that test ignores the
        alpha channel when extracting an "image/jpeg".toDataURL().  The correct answer
        needs more investigation, bug http://webkit.org/b/40147.

        Canvas toDataURL is covered by existing tests canvas/philip/tests/toDataURL.*,
        and fast/canvas/*toDataURL* tests.

        * WebCore.gypi:
        * bindings/v8/custom/V8HTMLCanvasElementCustom.cpp:
        (WebCore::V8HTMLCanvasElement::toDataURLCallback): don't set encoding quality
        here, just pass the toDataURL parameters through to the canvas layer.
        * platform/chromium/MIMETypeRegistryChromium.cpp:
        (WebCore::MIMETypeRegistry::isSupportedImageMIMETypeForEncoding): implement
        the supported mimeTypes for encoding in-place.
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageBuffer::toDataURL): add jpeg encoding and quality support.
        * platform/image-encoders/skia/JPEGImageEncoder.cpp: Added.
        (WebCore::prepareOutput):
        (WebCore::writeOutput):
        (WebCore::finishOutput):
        (WebCore::handleError):
        (WebCore::preMultipliedBGRAtoRGB): FIXME: bug 40147.
        (WebCore::JPEGImageEncoder::encode):
        * platform/image-encoders/skia/JPEGImageEncoder.h: Added.

2010-12-02  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r73152.
        http://trac.webkit.org/changeset/73152
        https://bugs.webkit.org/show_bug.cgi?id=50401

        the patch has broken chromium win layout tests (Requested by
        loislo on #webkit).

        * inspector/CodeGeneratorInspector.pm:
        * inspector/Inspector.idl:
        * inspector/front-end/Callback.js:
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode):
        * inspector/front-end/inspector.js:
        (WebInspector.loaded.WebInspector.socket.onmessage):
        (WebInspector.dispatch):
        (WebInspector_syncDispatch):
        (WebInspector.reportProtocolError):

2010-12-02  W. James MacLean  <wjmaclean@chromium.org>

        Reviewed by James Robinson.

        Scaled Resized images are blurred when sent to Skia
        https://bugs.webkit.org/show_bug.cgi?id=42370

        This patch modifies ImageSkia.cpp to fix the calculation of resampled
        bitmap sizes so as to include the transform matrix of the canvas.
        Includes new tests to catch a scrolling regression and a clipping regression.

        Tests: svg/custom/image-rescale-clip.html
               svg/custom/image-rescale-scroll.html
               svg/custom/image-rescale.svg

        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::computeResamplingMode):
        (WebCore::drawResampledBitmap):

2010-12-02  Erik Arvidsson  <arv@chromium.org>

        Reviewed by Darin Adler.

        Missing DOM property for incremental input attribute
        https://bugs.webkit.org/show_bug.cgi?id=50335

        Test: fast/forms/incremental-dom-property.html

        * html/HTMLInputElement.idl: Added attribute

2010-12-02  John Knottenbelt  <jknotten@chromium.org>

        Reviewed by Steve Block.

        Move requestGeolocationPermissionForFrame to GeolocationClient
        https://bugs.webkit.org/show_bug.cgi?id=50061

        This change facilitates client-based geolocation implementation by
        bringing together permission control into the geolocation client
        interface.

        * page/Chrome.h:
        * page/ChromeClient.h:
        * page/Geolocation.cpp:
        (WebCore::Geolocation::disconnectFrame):
        (WebCore::Geolocation::requestPermission):
        * page/GeolocationClient.h:
        * page/GeolocationController.cpp:
        (WebCore::GeolocationController::requestPermission):
        (WebCore::GeolocationController::cancelPermissionRequest):
        * page/GeolocationController.h:
        * platform/mock/GeolocationClientMock.cpp:
        (WebCore::GeolocationClientMock::GeolocationClientMock):
        (WebCore::GeolocationClientMock::setPermission):
        (WebCore::GeolocationClientMock::requestPermission):
        (WebCore::GeolocationClientMock::cancelPermissionRequest):
        (WebCore::GeolocationClientMock::asyncUpdatePermission):
        (WebCore::GeolocationClientMock::permissionTimerFired):
        (WebCore::GeolocationClientMock::reset):
        (WebCore::GeolocationClientMock::stopUpdating):
        (WebCore::GeolocationClientMock::asyncUpdateController):
        (WebCore::GeolocationClientMock::controllerTimerFired):
        * platform/mock/GeolocationClientMock.h:

2010-12-01  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Inspector protocol cleanup task.

        The patch has just small renames and adjustments for the protocol things.
        'handler' keyword in idl file was replaced with 'domain'.
        'domain' property was assigned for the each backend to frontend messages.
        At the next step WebInspector wrapper functions will be removed and 'agents' will be called directly.

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

        * inspector/CodeGeneratorInspector.pm:
        * inspector/Inspector.idl:
        * inspector/front-end/inspector.js:
        (WebInspector_syncDispatch):

2010-12-01  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [Resources panel] [HAR] Need a way to save timing data.
        Re-implementing HAR export functionality that used to be in Resources
        tab in Network tab.
        https://bugs.webkit.org/show_bug.cgi?id=45663

        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel.prototype._createTable):
        (WebInspector.NetworkPanel.prototype._toggleViewingResourceMode):
        (WebInspector.NetworkPanel.prototype._contextMenu):
        (WebInspector.NetworkPanel.prototype._exportAll):
        (WebInspector.NetworkPanel.prototype._exportResource):
        (WebInspector.NetworkDataGridNode.prototype.refreshResource):
        * inspector/front-end/networkPanel.css:
        (.data-grid table.data tr.revealed.network-item):
        (.data-grid.filter-other table.data tr.revealed.network-category-other):

2010-12-02  Dai Mikurube  <dmikurube@google.com>

        Reviewed by Kent Tamura.

        Reject named colors, accept only #rrggbb in <input type=color />
        https://bugs.webkit.org/show_bug.cgi?id=50308

        * html/ColorInputType.cpp: Modified to accept only simple colors like #xxxxxx.
        (WebCore::isValidColorString):

2010-12-02  Vincent Scheib  <scheib@chromium.org>

        Reviewed by Darin Fisher.

        [chromium] histograms api updated in WebKitClient and added to ChromiumBridge
        https://bugs.webkit.org/show_bug.cgi?id=50285

        Test by loading "about:histograms" after navigating to accelerated pages.

        * platform/chromium/ChromiumBridge.h: api update.

2010-12-02  Andras Becsi  <abecsi@webkit.org>

        Unreviewed build fix.

        [Qt][V8] Fix linking of generated sources.

        No new tests needed.

        * WebCore.pro: add missing V8ImageDataCustom.cpp.

2010-12-02  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Adam Roben.

        Split DECLARE_ANIMATED_PROPERTY* in DECLARE/DEFINE parts for SVGAnimatedString/SVGAnimatedEnumeration
        https://bugs.webkit.org/show_bug.cgi?id=50383

        Continuing the work on bug 42025: Introduce DECLARE_ANIMATED_(STRING|ENUMERATION) / DEFINE_ANIMATED_(STRING|ENUMERATION).
        The animated property declaration lives in the header, the definition in the cpp file, to avoid the dependency on SVGNames.h in all headers.

        No functional changes, thus no new tests.

        * svg/SVGAElement.cpp:
        * svg/SVGAElement.h:
        (WebCore::SVGAElement::isValid):
        (WebCore::SVGAElement::target):
        * svg/SVGAltGlyphElement.cpp:
        * svg/SVGAltGlyphElement.h:
        * svg/SVGAnimatedEnumeration.h:
        * svg/SVGAnimatedString.h:
        * svg/SVGClipPathElement.cpp:
        * svg/SVGClipPathElement.h:
        * svg/SVGComponentTransferFunctionElement.cpp:
        * svg/SVGComponentTransferFunctionElement.h:
        * svg/SVGCursorElement.cpp:
        * svg/SVGCursorElement.h:
        * svg/SVGFEBlendElement.cpp:
        * svg/SVGFEBlendElement.h:
        * svg/SVGFEColorMatrixElement.cpp:
        * svg/SVGFEColorMatrixElement.h:
        * svg/SVGFEComponentTransferElement.cpp:
        * svg/SVGFEComponentTransferElement.h:
        * svg/SVGFECompositeElement.cpp:
        * svg/SVGFECompositeElement.h:
        * svg/SVGFEConvolveMatrixElement.cpp:
        * svg/SVGFEConvolveMatrixElement.h:
        * svg/SVGFEDiffuseLightingElement.cpp:
        * svg/SVGFEDiffuseLightingElement.h:
        * svg/SVGFEDisplacementMapElement.cpp:
        * svg/SVGFEDisplacementMapElement.h:
        * svg/SVGFEGaussianBlurElement.cpp:
        * svg/SVGFEGaussianBlurElement.h:
        * svg/SVGFEImageElement.cpp:
        * svg/SVGFEImageElement.h:
        * svg/SVGFELightElement.cpp:
        * svg/SVGFEMergeNodeElement.cpp:
        * svg/SVGFEMergeNodeElement.h:
        * svg/SVGFEMorphologyElement.cpp:
        * svg/SVGFEMorphologyElement.h:
        * svg/SVGFEOffsetElement.cpp:
        * svg/SVGFEOffsetElement.h:
        * svg/SVGFESpecularLightingElement.cpp:
        * svg/SVGFESpecularLightingElement.h:
        * svg/SVGFETileElement.cpp:
        * svg/SVGFETileElement.h:
        * svg/SVGFETurbulenceElement.cpp:
        * svg/SVGFETurbulenceElement.h:
        * svg/SVGFilterElement.cpp:
        * svg/SVGFilterElement.h:
        * svg/SVGFilterPrimitiveStandardAttributes.cpp:
        * svg/SVGFilterPrimitiveStandardAttributes.h:
        * svg/SVGForeignObjectElement.cpp:
        * svg/SVGForeignObjectElement.h:
        * svg/SVGGradientElement.cpp:
        * svg/SVGGradientElement.h:
        * svg/SVGImageElement.cpp:
        * svg/SVGImageElement.h:
        * svg/SVGMPathElement.cpp:
        * svg/SVGMPathElement.h:
        * svg/SVGMarkerElement.cpp:
        * svg/SVGMarkerElement.h:
        * svg/SVGMaskElement.cpp:
        * svg/SVGMaskElement.h:
        * svg/SVGPatternElement.cpp:
        * svg/SVGPatternElement.h:
        * svg/SVGScriptElement.cpp:
        * svg/SVGScriptElement.h:
        * svg/SVGStyledElement.cpp:
        * svg/SVGStyledElement.h:
        (WebCore::SVGStyledElement::hasRelativeLengths):
        (WebCore::SVGStyledElement::supportsMarkers):
        (WebCore::SVGStyledElement::style):
        (WebCore::SVGStyledElement::updateRelativeLengthsInformation):
        (WebCore::SVGStyledElement::selfHasRelativeLengths):
        (WebCore::SVGStyledElement::isStyled):
        * svg/SVGTRefElement.cpp:
        * svg/SVGTRefElement.h:
        * svg/SVGTextContentElement.cpp:
        * svg/SVGTextContentElement.h:
        * svg/SVGTextPathElement.cpp:
        * svg/SVGTextPathElement.h:
        * svg/SVGUseElement.cpp:
        * svg/SVGUseElement.h:

2010-12-02  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Andreas Kling.

        [WX] Remove "current path" of GraphicsContext
        https://bugs.webkit.org/show_bug.cgi?id=50286

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/wx/GraphicsContextWx.cpp:
        (WebCore::GraphicsContext::GraphicsContext):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):

2010-10-26  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Text input controls do not react properly to CSS styling
        https://bugs.webkit.org/show_bug.cgi?id=40855

        Improve text input control rendering. Instead of using the GTK+ border
        attributes of the control modify the padding, they modify the border.
        Make this same choice for search inputs and text area inputs.

        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::setTextInputBorders): Added this helper which sets text input control
        borders based on GTK+ theme settings.
        (WebCore::RenderThemeGtk::adjustTextFieldStyle): Use the setTextInputBorders helper.
        (WebCore::RenderThemeGtk::adjustTextAreaStyle): Ditto.
        (WebCore::RenderThemeGtk::adjustSearchFieldStyle): Ditto.
        * platform/gtk/RenderThemeGtk.h:

2010-12-02  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] GraphicsContext::strokeRect() taints the context's lineWidth
        https://bugs.webkit.org/show_bug.cgi?id=50269

        Test: fast/canvas/canvas-lineWidth-intact-after-strokeRect.html

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::strokeRect): Restore the context's
        original stroke thickness after painting.

2010-12-02  Renata Hodovan  <reni@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] GraphicsContext::clip(path) should clip using winding fill 
        https://bugs.webkit.org/show_bug.cgi?id=49912

        GraphicsContext::clip(path) now uses winding fill and this function is called by
        GraphicsContext::canvasClip(path).

        No new test is needed.

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

2010-12-01  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Remove obsolete CSS backend API from InspectorDOMAgent
        https://bugs.webkit.org/show_bug.cgi?id=50318

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.order:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/Inspector.idl:
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorCSSStore.cpp: Removed.
        * inspector/InspectorCSSStore.h: Removed.
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::didCommitLoad):
        * inspector/InspectorController.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        (WebCore::InspectorDOMAgent::unbind):
        * inspector/InspectorDOMAgent.h:
        (WebCore::InspectorDOMAgent::create):

2010-12-02  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed trivial buildfix after r73117.

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

2010-12-02  Yuqiang Xian  <yuqiang.xian@intel.com>

        Reviewed by Pavel Feldman.

        [V8] Speed up data property access for ImageData.
        https://bugs.webkit.org/show_bug.cgi?id=49999

        We create a normal V8 object which has a PixelArray as the backing storage,
        and set the "data" property of the ImageData object to it. 
        This way "data" becomes a pure JS property and we don't need to call through
        the C++ bindings for ImageData "data" access. 
        This eliminates big overhead in switching between JavaScript and native
        contexts and performing object bindings.

        No new tests. Relying on existing Canvas tests.

        * WebCore.gypi:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/custom/V8CanvasPixelArrayCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8ImageDataCustom.cpp: Added.
        (WebCore::toV8):
        * html/ImageData.idl:
        * html/canvas/CanvasPixelArray.idl:

2010-12-02  Kent Tamura  <tkent@chromium.org>

        Unreviewed. Run sort-Xcode-project-file.

        * WebCore.xcodeproj/project.pbxproj:

2010-12-02  Mike Lawther  <mikelawther@chromium.org>

        Reviewed by David Hyatt.

        Clean up of iframe scrollbar mode code
        https://bugs.webkit.org/show_bug.cgi?id=47797

        Pull setChildNeedsLayout/setNeedsLayout calls out of scrollbar mode
        calculation method and put back into main layout function. 
        Early exit from the scrollbar calc when scrollbars are turned off. 

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

2010-12-02  Hironori Bono  <hbono@chromium.org>

        Reviewed by Darin Fisher.

        [Chromium] Fix possible crashes in FontFallbackFont::determinePitch().
        https://bugs.webkit.org/show_bug.cgi?id=25770

        When all of "Arial", "Courier New", and "Times New Roman" fonts are corrupted,
        FontCache::getLastResortFallbackFont() returns 0 and it causes this crash. To
        avoid this crash, this change falls back to system fonts (Windows ensures they
        are sane) as Win Safari does. Unfortunately, I don't have any ideas how I can
        write a layout test for this issue because this crash happens on a PC some of
        its system fonts are corrupted.

        * platform/graphics/chromium/FontCacheChromiumWin.cpp:
        (WebCore::fontDataFromDescriptionAndLogFont):
        (WebCore::FontCache::getLastResortFallbackFont):

2010-12-02  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Kent Tamura.

        Provide means to store shadow DOM nodes on Element
        https://bugs.webkit.org/show_bug.cgi?id=48697

        Adds shadow DOM awareness to the standard Node attach/detach,
        document and tree insertion and removal cycle.

        No new tests, because the code is not yet used.

        * dom/Element.cpp:
        (WebCore::Element::insertedIntoDocument): Added logic to cascade down to shadow DOM, if present.
        (WebCore::Element::removedFromDocument): Ditto.
        (WebCore::Element::insertedIntoTree): Ditto.
        (WebCore::Element::removedFromTree): Ditto.
        (WebCore::Element::attach): Ditto.
        (WebCore::Element::detach): Ditto.
        (WebCore::Element::recalcStyle):
        (WebCore::Element::shadowRoot): Added.
        (WebCore::Element::setShadowRoot): Added.
        (WebCore::Element::clearShadowRoot): Added.
        * dom/Element.h: Added decls.
        * dom/ElementRareData.h: Added a member to hold a RefPtr to the shadow DOM root for the element.

2010-12-02  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Gray-scale JPEG images with a color profile are stretched horizonally
        https://bugs.webkit.org/show_bug.cgi?id=49950

        Turns out gray-scale JPEGs with color profiles have the same issue as
        PNGs.  As with PNGs, we suppress now suppress the color profile for
        gray-scale JPEGs.  Most importantly, this patch adds a test.

        Test: fast/images/gray-scale-jpeg-with-color-profile.html

        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::JPEGImageReader::decode):

2010-12-01  Geoffrey Garen  <ggaren@apple.com>

        Build fix: Added a forwarding header.

        * ForwardingHeaders/wtf/OSAllocator.h: Added.

2010-12-01  Jia Pu  <jpu@apple.com>

        Reviewed by Darin Adler.

        Support multiple correction candidates panel for misspelled word on Mac OS X.
        https://bugs.webkit.org/show_bug.cgi?id=50137
        <rdar://problem/8568059>

        Test: platform/mac/editing/spelling/delete-autocorrected-word-1.html
        Manual test: WebCore/manual-tests/autocorrection/dismiss-multiple-guesses.html
                     WebCore/manual-tests/autocorrection/select-from-multiple-guesses.html

        This patch is for supporting multiple correction suggestion panel on Mac OS X.
        The behavior and implementation is similar to that of reversion candiate panel.

        * WebCore.exp.in: Added and removed symbols.

        * editing/CorrectionPanelInfo.h: Added new correction panel type, PanelTypeSpellingSuggestions.

        * editing/Editor.cpp:
        (WebCore::markerTypesForAutocorrection): Convenient function for getting marker types to
          be added to autocorrected word.
        (WebCore::boundingBoxForRange): Convenient function for calculating the bounding box of a range.
        (WebCore::markerTypesForReplacement): Convenient function for getting marker types to
          be added to word that has been replaced by various correction panel.
        (WebCore::Editor::respondToChangedSelection): Added code to trigger timer for multiple
          suggestion panel.
        (WebCore::Editor::guessesForMisspelledSelection): Adopted new signature of EditorClient::getGuessesForWord().
        (WebCore::Editor::markMisspellingsAfterTypingToWord): Adopted new signature of applyCorrectionPanelInfo().
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges): Ditto.
        (WebCore::Editor::correctionPanelTimerFired): Added code to handle new multiple suggestion panel.
        (WebCore::Editor::handleCorrectionPanelResult): Replaced handleRejectedCorrection(), since
          with new AppKit correction panel API, not only rejection, but also confirmation can be
          handled in callback.
        (WebCore::Editor::stopCorrectionPanelTimer): Moved the code that clears correction panel info
          from dismissCorrectionPanel() to this function to fix a bug that would occur when deleting
          autocorrected word.
        (WebCore::Editor::dismissCorrectionPanel): Ditto.
        (WebCore::Editor::applyCorrectionPanelInfo): Added code to handle new multiple suggestion panel.

        * editing/Editor.h: Replaced handleRejectedCorrection() with handleCorrectionPanelResult().
          Changed the signature of applyCorrectionPanelInfo() to hanlde new correction panel type.

        * editing/TextCheckingHelper.cpp:
        (WebCore::TextCheckingHelper::guessesForMisspelledOrUngrammaticalRange): Adopted new EditorClient::getGuessesForWord().

        * editing/TextCheckingHelper.h: Made paragraphRange() public.

        * loader/EmptyClients.h:
        (WebCore::EmptyEditorClient::showCorrectionPanel): Adopted new signature defined in base class.
        (WebCore::EmptyEditorClient::getGuessesForWord): Ditto.

        * manual-tests/autocorrection/dismiss-multiple-guesses.html: Added.

        * manual-tests/autocorrection/select-from-multiple-guesses.html: Added.

        * page/EditorClient.h:  Changed showCorrectionPanel() to allow passing multiple correction
          candidates. Changed getGuessesForWord() to allow passing in contextual text for better
          correction suggestions (for those spellcheckers that utilizes such contextual information).

2010-12-01  David Hyatt  <hyatt@apple.com>

        Reviewed by James Robinson.

        https://bugs.webkit.org/show_bug.cgi?id=50360
        
        Make sure to include the origin adjustment code that I added on Mac to keep truncation-rtl.html passing.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::updateScrollbars):

2010-12-01  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

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

        Generalize overflow section scrollOriginX code to be a point and to work in both horizontal
        and vertical modes.

        Not testable yet, since the rightmost/leftmost/topmost/lowestPosition functions are returning
        horrendously wrong values in the vertical text case for overflow:auto objects.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::RenderLayer):
        (WebCore::RenderLayer::scrollToOffset):
        (WebCore::RenderLayer::computeScrollDimensions):
        (WebCore::RenderLayer::updateOverflowStatus):
        * rendering/RenderLayer.h:
        (WebCore::RenderLayer::scrolledContentOffset):
        (WebCore::RenderLayer::scrollXOffset):
        (WebCore::RenderLayer::scrollYOffset):
        (WebCore::RenderLayer::scrollToXOffset):
        (WebCore::RenderLayer::scrollToYOffset):

2010-12-01  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        WinCairo build should not use link-time code generation (LTCG)
        https://bugs.webkit.org/show_bug.cgi?id=50353

        * WebCore.vcproj/QTMovieWin.vcproj:
        * WebCore.vcproj/WebCore.vcproj:

2010-12-01  David Hyatt  <hyatt@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=46645
        
        Part 1 of making scrolling work with vertical text. This patch generalizes the scrollOriginX concept
        recently added for horizontal RTL documents and applies it to writing modes as well.  Now the
        scrollOrigin is a point, since you can start off locked to the bottom or locked to the right.
        
        This patch also fixes numerous bugs with the scrollOrigin code using native Mac NSScrollViews and
        makes them behave the same as the cross-platform code (allowing for cross-platform results to be
        landed).

        * page/FrameView.cpp:
        (WebCore::FrameView::adjustViewSize):
        * page/mac/WebCoreFrameView.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::ScrollView):
        (WebCore::ScrollView::maximumScrollPosition):
        (WebCore::ScrollView::minimumScrollPosition):
        (WebCore::ScrollView::valueChanged):
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::wheelEvent):
        * platform/ScrollView.h:
        (WebCore::ScrollView::scrollOrigin):
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::platformSetScrollPosition):
        (WebCore::ScrollView::platformSetScrollOrigin):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintRootBoxDecorations):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::layout):
        (WebCore::RenderView::docTop):
        (WebCore::RenderView::docHeight):
        (WebCore::RenderView::docLeft):
        (WebCore::RenderView::docWidth):
        * rendering/RenderView.h:

2010-11-30  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        Upstream recent changes to WebCore/platform/network/android
        https://bugs.webkit.org/show_bug.cgi?id=50224

        Android implementation changes only, no new tests.

        * platform/network/NetworkingContext.h:
        * platform/network/android/CookieJarAndroid.cpp:
        (WebCore::setCookies):
        (WebCore::cookies):
        (WebCore::cookieRequestHeaderFieldValue):
        (WebCore::cookiesEnabled):
        * platform/network/android/ProxyServerAndroid.cpp: Added.
        (WebCore::proxyServersForURL):
        * platform/network/android/ResourceHandleAndroid.cpp:
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::loadResourceSynchronously):
        * platform/network/android/ResourceRequestAndroid.cpp:
        (WebCore::initializeMaximumHTTPConnectionCountPerHost):

2010-12-01  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        vcproj changes can't be applied cleanly by the Windows EWS bot
        https://bugs.webkit.org/show_bug.cgi?id=50328

        * WebCore.vcproj/QTMovieWin.vcproj: Modified property svn:eol-style.
        * WebCore.vcproj/QTMovieWinCommon.vsprops: Added property svn:eol-style.
        * WebCore.vcproj/WebCore.sln: Modified property svn:eol-style.
        * WebCore.vcproj/WebCore.submit.sln: Modified property svn:eol-style.
        * WebCore.vcproj/WebCore.vcproj: Modified property svn:eol-style.
        * WebCore.vcproj/WebCoreCFNetwork.vsprops: Added property svn:eol-style.
        * WebCore.vcproj/WebCoreCG.vsprops: Added property svn:eol-style.
        * WebCore.vcproj/WebCoreCURL.vsprops: Added property svn:eol-style.
        * WebCore.vcproj/WebCoreCairo.vsprops: Added property svn:eol-style.
        * WebCore.vcproj/WebCoreCommon.vsprops: Added property svn:eol-style.
        * WebCore.vcproj/WebCoreGenerated.vcproj: Modified property svn:eol-style.
        * WebCore.vcproj/WebCoreGeneratedCairo.vsprops: Added property svn:eol-style.
        * WebCore.vcproj/WebCoreGeneratedCommon.vsprops: Added property svn:eol-style.
        * WebCore.vcproj/WebCoreMediaQT.vsprops: Added property svn:eol-style.
        * WebCore.vcproj/WebCorePthreads.vsprops: Added property svn:eol-style.
        * WebCore.vcproj/WebCoreQuartzCore.vsprops: Added property svn:eol-style.

2010-11-30  Vangelis Kokkevis  <vangelis@chromium.org>

        Reviewed by Darin Fisher.

        Adds accelerated compositing trigger flags to Settings to allow
        ports to set them via command line flags, etc.
        https://bugs.webkit.org/show_bug.cgi?id=50301

        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setAcceleratedCompositingFor3DTransformsEnabled):
        (WebCore::Settings::setAcceleratedCompositingForVideoEnabled):
        (WebCore::Settings::setAcceleratedCompositingForPluginsEnabled):
        (WebCore::Settings::setAcceleratedCompositingForCanvasEnabled):
        (WebCore::Settings::setAcceleratedCompositingForAnimationEnabled):
        * page/Settings.h:
        (WebCore::Settings::acceleratedCompositingFor3DTransformsEnabled):
        (WebCore::Settings::acceleratedCompositingForVideoEnabled):
        (WebCore::Settings::acceleratedCompositingForPluginsEnabled):
        (WebCore::Settings::acceleratedCompositingForCanvasEnabled):
        (WebCore::Settings::acceleratedCompositingForAnimationEnabled):

2010-12-01  Darin Adler  <darin@apple.com>

        Fixed warning seen on buildbot.

        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::SharedValues::SharedValues): Added #if.

2010-12-01  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler, Tony Chang, and unofficially by Enrica Casucci.

        chrome.dll!WebCore::RangeBoundaryPoint::toPosition ReadAV@NULL (cf0d0f28bc56f2591cc74f71b46036ea)
        https://bugs.webkit.org/show_bug.cgi?id=47808

        The crash was caused by moveParagraphWithClones' not copying the entire paragraph
        when called by doApplyForSingleParagraph, which was induced by a bug in
        cloneParagraphUnderNewElement which ended the cloning process early when the start node
        and the end node didn't share the same parent node. Fixed the bug in cloneParagraphUnderNewElement
        by calling traverseNextSibling(outerNode) instead of nextSibling().

        Also added an early exit to InsertListCommand::doApply when lastSelectionRange is null.

        Tests: editing/execCommand/switch-multiple-list-items-crash.html
               editing/execCommand/switch-multiple-list-items.html

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

2010-12-01  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fixes after recent trunk changes.

        * platform/graphics/wx/ImageBufferWx.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        * platform/wx/LocalizedStringsWx.cpp:
        (WebCore::platformDefaultLanguage):

2010-12-01  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r73047.
        http://trac.webkit.org/changeset/73047
        https://bugs.webkit.org/show_bug.cgi?id=50339

        missing bug number (Requested by rniwa on #webkit).

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

2010-12-01  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler, Tony Chang, and unofficially by Enrica Casucci.

        The crash was caused by moveParagraphWithClones' not copying the entire paragraph
        when called by doApplyForSingleParagraph, which was induced by a bug in
        cloneParagraphUnderNewElement which ended the cloning process early when the start node
        and the end node didn't share the same parent node. Fixed the bug in cloneParagraphUnderNewElement
        by calling traverseNextSibling(outerNode) instead of nextSibling().

        Also added an early exit to InsertListCommand::doApply when lastSelectionRange is null.

        Tests: editing/execCommand/switch-multiple-list-items-crash.html
               editing/execCommand/switch-multiple-list-items.html

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

2010-12-01  Grace Kloba  <klobag@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] ContentLayerChromium shader should honor the platform Sk_x_SHIFT value instead of assuming BGRA color
        https://bugs.webkit.org/show_bug.cgi?id=50189

        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::SharedValues::SharedValues):Use SK_B32_SHIFT to decide whether to use RGBA or BGRA shader for Skia port.

2010-12-01  Nico Weber  <thakis@chromium.org>

        Reviewed by Dimitri Glazkov.

        Fix clang warnings caused by -Wlogical-op-parentheses
        https://bugs.webkit.org/show_bug.cgi?id=50324

        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::ComplexTextController::adjustGlyphsAndAdvances):

2010-12-01  Martin Robinson  <mrobinson@igalia.com>

        Build fix for GTK+.

        * platform/gtk/PopupMenuGtk.cpp:
        (WebCore::PopupMenuGtk::typeAheadFind): Uncomment mistakenly commented line.

2010-12-01  Apelete Seketeli  <apelete@seketeli.org> and Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [Gtk] Open menulists should support typeahead find
        https://bugs.webkit.org/show_bug.cgi?id=27443

        Added typeahead find support for open GTK+ menulists.

        Test: platform/gtk/fast/forms/menulist-typeahead-find.html

        * platform/gtk/PopupMenuGtk.cpp:
        (WebCore::PopupMenuGtk::PopupMenuGtk): Initialize new members.
        (WebCore::PopupMenuGtk::show): Track currently selected menu item
        via a signal handler.
        (WebCore::PopupMenuGtk::typeAheadFind): Added.
        (WebCore::PopupMenuGtk::menuUnmapped): Reset typeahead find state
        when menu is unmapped.
        (WebCore::PopupMenuGtk::resetTypeAheadFindState): Added.
        (WebCore::PopupMenuGtk::selectItemCallback): Added.
        (WebCore::PopupMenuGtk::keyPressEventCallback): Added.
        * platform/gtk/PopupMenuGtk.h: Added new members to track typeahead
        find state.

2010-12-01  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Xan Lopez.

        Split DECLARE_ANIMATED_PROPERTY* in DECLARE/DEFINE parts for SVGAnimatedNumber
        https://bugs.webkit.org/show_bug.cgi?id=50323

        Continuing the work on bug 42025: Introduce DECLARE_ANIMATED_NUMBER / DEFINE_ANIMATED_NUMBER.
        The animated property declaration lives in the header, the definition in the cpp file, to avoid the dependency on SVGNames.h in all headers.

        No functional changes, thus no new tests.

        * svg/SVGAnimatedNumber.h:
        * svg/SVGComponentTransferFunctionElement.cpp:
        * svg/SVGComponentTransferFunctionElement.h:
        * svg/SVGFECompositeElement.cpp:
        * svg/SVGFECompositeElement.h:
        * svg/SVGFEConvolveMatrixElement.cpp:
        * svg/SVGFEConvolveMatrixElement.h:
        * svg/SVGFEDiffuseLightingElement.cpp:
        * svg/SVGFEDiffuseLightingElement.h:
        * svg/SVGFEDisplacementMapElement.cpp:
        * svg/SVGFEDisplacementMapElement.h:
        * svg/SVGFEGaussianBlurElement.cpp:
        * svg/SVGFEGaussianBlurElement.h:
        * svg/SVGFELightElement.cpp:
        * svg/SVGFELightElement.h:
        * svg/SVGFEMorphologyElement.cpp:
        * svg/SVGFEMorphologyElement.h:
        * svg/SVGFEOffsetElement.cpp:
        * svg/SVGFEOffsetElement.h:
        * svg/SVGFESpecularLightingElement.cpp:
        * svg/SVGFESpecularLightingElement.h:
        * svg/SVGFETurbulenceElement.cpp:
        * svg/SVGFETurbulenceElement.h:
        * svg/SVGPathElement.cpp:
        * svg/SVGPathElement.h:
        * svg/SVGStopElement.cpp:
        * svg/SVGStopElement.h:
        (WebCore::SVGStopElement::isGradientStop):

2010-12-01  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        Sliders are not transformed after r50188
        https://bugs.webkit.org/show_bug.cgi?id=50317

        Need to call updateLayerTransform during slider layout, as sliders
        may be transformed.

        No new tests. This patch should make fast/forms/slider-transformed.html
        pass on the GTK+ bots.

        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::layout): Call updateLayerTransform here.

2010-11-30  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: do not make helpScreen.css lazily loaded.
        https://bugs.webkit.org/show_bug.cgi?id=50304

        * inspector/front-end/HelpScreen.js:
        (WebInspector.HelpScreen):
        (WebInspector.HelpScreen.prototype._onBlur):
        * inspector/front-end/inspector.html:

2010-12-01  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Xan Lopez.

        Split DECLARE_ANIMATED_PROPERTY* in DECLARE/DEFINE parts for SVGLengthList/SVGNumberList/SVGTransformList
        https://bugs.webkit.org/show_bug.cgi?id=50322

        Continuing the work on bug 42025: Introduce DECLARE_ANIMATED_(LENGTH|NUMBER|TRANSFORM)_LIST / DEFINE_ANIMATED_(LENGTH|NUMBER|TRANSFORM).
        The animated property declaration lives in the header, the definition in the cpp file, to avoid the dependency on SVGNames.h in all headers.

        No functional changes, thus no new tests.

        * svg/SVGAnimatedLengthList.h:
        * svg/SVGAnimatedNumberList.h:
        * svg/SVGAnimatedTransformList.h:
        * svg/SVGComponentTransferFunctionElement.cpp:
        * svg/SVGComponentTransferFunctionElement.h:
        * svg/SVGFEColorMatrixElement.cpp:
        * svg/SVGFEColorMatrixElement.h:
        * svg/SVGFEConvolveMatrixElement.cpp:
        * svg/SVGFEConvolveMatrixElement.h:
        * svg/SVGGradientElement.cpp:
        * svg/SVGGradientElement.h:
        (WebCore::SVGGradientElement::needsPendingResourceHandling):
        * svg/SVGPatternElement.cpp:
        * svg/SVGPatternElement.h:
        * svg/SVGPolygonElement.cpp:
        * svg/SVGPolylineElement.cpp:
        * svg/SVGStyledTransformableElement.cpp:
        * svg/SVGStyledTransformableElement.h:
        * svg/SVGTextElement.cpp:
        (WebCore::SVGTextElement::SVGTextElement):
        * svg/SVGTextElement.h:
        (WebCore::SVGTextElement::localCoordinateSpaceTransform):
        * svg/SVGTextPositioningElement.cpp:
        * svg/SVGTextPositioningElement.h:
        * svg/properties/SVGAnimatedPropertyMacros.h:

2010-12-01  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: name-only property appears in style declaration but not in the Styles pane
        https://bugs.webkit.org/show_bug.cgi?id=49663

        Check that at least one property has been parsed from the user input.

        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyle::setPropertyText):

2010-12-01  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: disable cookies tab in network resource view by default, enable for chromium
        https://bugs.webkit.org/show_bug.cgi?id=50249

        * inspector/front-end/NetworkItemView.js:
        (WebInspector.NetworkItemView):
        (WebInspector.NetworkItemView.prototype.resize):
        * inspector/front-end/Settings.js:

2010-12-01  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Xan Lopez.

        Split DECLARE_ANIMATED_PROPERTY* in DECLARE/DEFINE parts for SVGLength
        https://bugs.webkit.org/show_bug.cgi?id=50316

        Introduce DECLARE_ANIMATED_LENGTH / DEFINE_ANIMATED_LENGTH, splitting up the original DECLARE_ANIMATED_PROPERTY_NEW macro
        in a part that goes in the .cpp file and another that remains in the header. This avoids having to include SVGNames.h
        in all SVG*Element files.

        No functional changes, thus no new tests.

        * svg/SVGAnimatedLength.h:
        * svg/SVGCircleElement.cpp:
        * svg/SVGCircleElement.h:
        (WebCore::SVGCircleElement::isValid):
        * svg/SVGCursorElement.cpp:
        * svg/SVGCursorElement.h:
        (WebCore::SVGCursorElement::isValid):
        * svg/SVGEllipseElement.cpp:
        * svg/SVGEllipseElement.h:
        (WebCore::SVGEllipseElement::isValid):
        * svg/SVGFilterElement.cpp:
        * svg/SVGFilterElement.h:
        * svg/SVGFilterPrimitiveStandardAttributes.cpp:
        * svg/SVGFilterPrimitiveStandardAttributes.h:
        * svg/SVGForeignObjectElement.cpp:
        (WebCore::SVGForeignObjectElement::SVGForeignObjectElement):
        * svg/SVGForeignObjectElement.h:
        (WebCore::SVGForeignObjectElement::isValid):
        * svg/SVGImageElement.cpp:
        * svg/SVGImageElement.h:
        (WebCore::SVGImageElement::isValid):
        * svg/SVGLineElement.cpp:
        * svg/SVGLineElement.h:
        (WebCore::SVGLineElement::isValid):
        (WebCore::SVGLineElement::supportsMarkers):
        * svg/SVGLinearGradientElement.cpp:
        * svg/SVGLinearGradientElement.h:
        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::SVGMarkerElement):
        * svg/SVGMarkerElement.h:
        * svg/SVGMaskElement.cpp:
        * svg/SVGMaskElement.h:
        (WebCore::SVGMaskElement::isValid):
        (WebCore::SVGMaskElement::needsPendingResourceHandling):
        * svg/SVGPatternElement.cpp:
        * svg/SVGPatternElement.h:
        (WebCore::SVGPatternElement::isValid):
        (WebCore::SVGPatternElement::needsPendingResourceHandling):
        * svg/SVGRadialGradientElement.cpp:
        * svg/SVGRadialGradientElement.h:
        * svg/SVGRectElement.cpp:
        * svg/SVGRectElement.h:
        (WebCore::SVGRectElement::isValid):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::SVGSVGElement):
        * svg/SVGSVGElement.h:
        (WebCore::SVGSVGElement::isValid):
        (WebCore::SVGSVGElement::setContainerSize):
        (WebCore::SVGSVGElement::containerSize):
        (WebCore::SVGSVGElement::hasSetContainerSize):
        (WebCore::SVGSVGElement::currentTranslate):
        (WebCore::SVGSVGElement::timeContainer):
        (WebCore::SVGSVGElement::isSVG):
        (WebCore::SVGSVGElement::rendererIsNeeded):
        * svg/SVGTextContentElement.cpp:
        * svg/SVGTextContentElement.h:
        (WebCore::SVGTextContentElement::isValid):
        (WebCore::SVGTextContentElement::isTextContent):
        * svg/SVGTextPathElement.cpp:
        * svg/SVGTextPathElement.h:
        * svg/SVGTextPositioningElement.h:
        * svg/SVGUseElement.cpp:
        * svg/SVGUseElement.h:
        (WebCore::SVGUseElement::isValid):
        (WebCore::SVGUseElement::setUpdatesBlocked):
        (WebCore::SVGUseElement::isPendingResource):
        * svg/properties/SVGAnimatedPropertyMacros.h:

2010-12-01  Anton D'Auria  <adauria@apple.com>

        Reviewed by Kevin Decker.

        Deny access to local and session storage in private browsing mode.
        https://bugs.webkit.org/show_bug.cgi?id=49329

        * storage/Storage.cpp:
        (WebCore::Storage::length):
        (WebCore::Storage::key):
        (WebCore::Storage::getItem):
        (WebCore::Storage::contains):

2010-12-01  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Martin Robinson.

        Volume control not correctly initialized
        https://bugs.webkit.org/show_bug.cgi?id=36299

        Replaced the mute/volume Timers with g_timeouts which are (for
        now, at least) more reliable than Timers for one-shot-fire-now
        actions.

        Test: media/video-volume.html

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::~MediaPlayer): Reset the raw pointers to 0
        when destructing the player.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mediaPlayerPrivateVolumeChangeTimeoutCallback):
        (WebCore::mediaPlayerPrivateMuteChangeTimeoutCallback):
        (WebCore::MediaPlayerPrivateGStreamer::~MediaPlayerPrivateGStreamer):
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfVolumeChange):
        (WebCore::MediaPlayerPrivateGStreamer::volumeChanged):
        (WebCore::MediaPlayerPrivateGStreamer::notifyPlayerOfMute):
        (WebCore::MediaPlayerPrivateGStreamer::muteChanged):
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin): Set
        playbin2 volume/mute base on MediaPlayer related values.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:

2010-12-01  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Andreas Kling.

        Cleanup main CMakeLists.txt after r72664, r72672 and r72667
        https://bugs.webkit.org/show_bug.cgi?id=50232

        * CMakeLists.txt: Removed obsolete dependencies.

2010-12-01  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Cleanup SVGPropertyTraits
        https://bugs.webkit.org/show_bug.cgi?id=50229

        Move all template specializations for non-POD types (eg. SVGLength, SVGLengthList, etc.) from SVGPropertyTraits
        into the right SVG* classes, to avoid having to include a dozen SVG*.h files in SVGPropertyTraits.h, which is
        included by all DOM/JS/V8 binding files and SVGElement.h.

        No new functionality, thus no new tests.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/scripts/CodeGenerator.pm:
        * bindings/scripts/CodeGeneratorObjC.pm:
        * bindings/scripts/CodeGeneratorV8.pm:
        * svg/SVGAngle.h:
        * svg/SVGLength.h:
        * svg/SVGLengthList.h:
        * svg/SVGMarkerElement.h:
        * svg/SVGNumberList.h:
        * svg/SVGPatternElement.h:
        * svg/SVGPointList.h:
        * svg/SVGPreserveAspectRatio.h:
        * svg/SVGRect.h: Added.
        * svg/SVGSVGElement.h:
        * svg/SVGStringList.h:
        * svg/SVGSymbolElement.h:
        * svg/SVGTransformList.h:
        * svg/SVGViewElement.h:
        * svg/SVGViewSpec.h:
        * svg/properties/SVGListProperty.h:
        * svg/properties/SVGPropertyTraits.h:
        * svg/properties/SVGTransformListPropertyTearOff.h:

2010-11-30  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Refactor HTMLInputElement: Move a part of HTMLInputElement::
        defaultEventHandler() to InputTypes
        https://bugs.webkit.org/show_bug.cgi?id=50097

        Move all of keyboard-related event handling to InputType.

        No new tests because this should not change any behavior.

        * html/BaseButtonInputType.cpp:
        (WebCore::BaseButtonInputType::handleKeydownEvent):
        (WebCore::BaseButtonInputType::handleKeypressEvent):
        (WebCore::BaseButtonInputType::handleKeyupEvent):
        * html/BaseButtonInputType.h:
        * html/BaseCheckableInputType.cpp:
        (WebCore::BaseCheckableInputType::handleKeydownEvent):
        (WebCore::BaseCheckableInputType::handleKeypressEvent):
        * html/BaseCheckableInputType.h:
        * html/CheckboxInputType.cpp:
        (WebCore::CheckboxInputType::handleKeyupEvent):
        * html/CheckboxInputType.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::defaultEventHandler):
         We remove !implicitSubmission check for callBaseClassEarly because
         implicitSubmission can not be true for keydown event and keypress
         event at this point.
        * html/InputType.cpp:
        (WebCore::InputType::shouldSubmitImplicitly):
         Returns true for a keypress event with "\r". Note that we don't overload
         this function for BUTTON, FILE, IMAGE, RESET, and SUBMIT because a
         keypress event with "\r" for these types returns from HTMLInputElement::defaultEventHandler()
         before implicit submission checking.
        (WebCore::InputType::handleKeypressEvent):
        (WebCore::InputType::handleKeyupEvent):
        * html/InputType.h:
        * html/RadioInputType.cpp:
        (WebCore::RadioInputType::handleKeydownEvent):
        (WebCore::RadioInputType::handleKeyupEvent):
        * html/RadioInputType.h:
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::shouldSubmitImplicitly):
        * html/TextFieldInputType.h:

2010-11-30  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Andreas Kling.

        Move CSS generator logic into main CMakeLists.txt file
        https://bugs.webkit.org/show_bug.cgi?id=50230

        * CMakeLists.txt:

2010-11-30  Ojan Vafai  <ojan@chromium.org>

        Revert r72876. It caused a ~30% perf regression in chromium's bloat-http test
        https://bugs.webkit.org/show_bug.cgi?id=50288

        2010-11-29 Adam Barth <abarth@webkit.org (:abarth) (r)>
        Reviewed by Darin Adler.
        Introduce the notion of a "display-isolated" URL scheme for use by Chrome-internal URLs
        https://bugs.webkit.org/show_bug.cgi?id=50182
        A display-isolated URL can only be displayed (e.g., put in an iframe,
        hyperlinked to) by documents from that scheme. In a sense, this is a
        generalization of some of the protections we give file URLs, but
        instead of lumping them all together into one "local" bucket, this
        patch creates a separate bucket for each scheme.
        For a while, I tried using a separate bucket for each origin. That
        would have played nicely with what Blob URLs are trying to do, but some
        "chrome" URL pages rely on being able to display other chrome URL
        pages, even in different origins. For example, the New Tab Page shows
        thumbnails from the "thumbnail" host.
        This patch also removes a bunch of unused code. I've also propagated
        the "deprecated" status of deprecatedCanDisplay to
        deprecatedShouldTreatURLAsLocal because that method has no other
        callers and is really asking for uppercase/lowercase bugs. I dream of
        someday removing these functions.
        page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::canDisplay):
        (WebCore::SecurityOrigin::deprecatedCanDisplay):
        platform/SchemeRegistry.cpp:
        (WebCore::displayIsolatedURLSchemes):
        (WebCore::SchemeRegistry::registerURLSchemeAsLocal):
        (WebCore::SchemeRegistry::deprecatedShouldTreatURLAsLocal):
        (WebCore::SchemeRegistry::shouldTreatURLSchemeAsLocal):
        (WebCore::SchemeRegistry::registerURLSchemeAsDisplayIsolated):
        (WebCore::SchemeRegistry::shouldTreatURLSchemeAsDisplayIsolated):
        platform/SchemeRegistry.h:
        2010-11-29 Adam Barth <abarth@webkit.org (:abarth) (r)>
        Reviewed by Darin Adler.
        Introduce the notion of a "display-isolated" URL scheme for use by Chrome-internal URLs
         https://bugs.webkit.org/show_bug.cgi?id=50182
        This patch adds a Chromium API for registering schemes as
        display-isolated. In a subsequent patch, I'll change the "chrome"
        scheme in Chrome to be display isolated instead of local. That will
        prevent file URLs from linking to chrome URLs.
        public/WebSecurityPolicy.h:
        src/WebSecurityPolicy.cpp:
        (WebKit::WebSecurityPolicy::registerURLSchemeAsDisplayIsolated):

        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::canDisplay):
        (WebCore::SecurityOrigin::deprecatedCanDisplay):
        * platform/SchemeRegistry.cpp:
        (WebCore::SchemeRegistry::registerURLSchemeAsLocal):
        (WebCore::SchemeRegistry::removeURLSchemeRegisteredAsLocal):
        (WebCore::SchemeRegistry::localURLSchemes):
        (WebCore::SchemeRegistry::shouldTreatURLAsLocal):
        (WebCore::SchemeRegistry::shouldTreatURLSchemeAsLocal):
        * platform/SchemeRegistry.h:

2010-11-30  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        WebKit duplicates AXValue and AXDescription on abbr
        https://bugs.webkit.org/show_bug.cgi?id=50260

        stringValue() and accessibilityDescription() were returning the same value for static text with
        an aria-label. Static text elements should not have an accessibility description, they
        should only have a stringValue.

        Test: platform/mac/accessibility/static-text-with-aria-label.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::ariaAccessibilityDescription):
        (WebCore::AccessibilityRenderObject::accessibilityDescription):
        (WebCore::AccessibilityRenderObject::text):
        * accessibility/AccessibilityRenderObject.h:

2010-11-30  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        [HTML5] Rename member variables of HTMLScriptElement
        https://bugs.webkit.org/show_bug.cgi?id=49705

        Renamed m_wasCreatedByParser to m_wasInsertedByParser, m_requested to m_isExternalScript,
        m_isEvaluated to m_wasAlreadyStarted, and m_firedLoad to m_haveFiredLoad.

        Also made ScriptElement's haveFiredLoadEvent and removed HTMLScriptElement's haveFiredLoadEvent.
        This effectively adds the same function to SVGScriptElement, which isn't currently used anywhere.

        No new tests are added since this is a refactoring.

        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::ScriptElement):
        (WebCore::ScriptElement::insertedIntoDocument):
        (WebCore::ScriptElement::childrenChanged):
        (WebCore::ScriptElement::finishParsingChildren):
        (WebCore::ScriptElement::requestScript):
        (WebCore::ScriptElement::evaluateScript):
        (WebCore::ScriptElement::executeScript):
        (WebCore::ScriptElement::ignoresLoadRequest):
        * dom/ScriptElement.h:
        (WebCore::ScriptElement::haveFiredLoadEvent):
        (WebCore::ScriptElement::setHaveFiredLoadEvent):
        (WebCore::ScriptElement::wasInsertedByParser):
        (WebCore::ScriptElement::wasAlreadyStarted):
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::HTMLScriptElement):
        (WebCore::HTMLScriptElement::create):
        (WebCore::HTMLScriptElement::cloneElementWithoutAttributesAndChildren):
        * html/HTMLScriptElement.h:
        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::SVGScriptElement):
        (WebCore::SVGScriptElement::create):
        (WebCore::SVGScriptElement::svgAttributeChanged):
        (WebCore::SVGScriptElement::insertedIntoDocument):
        (WebCore::SVGScriptElement::dispatchLoadEvent):
        (WebCore::SVGScriptElement::cloneElementWithoutAttributesAndChildren):
        * svg/SVGScriptElement.h:

2010-11-30  Darin Adler  <darin@apple.com>

        Rolled back most of the FileReaderLoader changes to fix 32-bit builds.

        * fileapi/FileReaderLoader.cpp: Changed types back to unsigned from unsigned long long
        * fileapi/FileReaderLoader.h: Ditto.

2010-11-30  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        Text search should treat all matches as word-start matches when the target begins with a separator character
        https://bugs.webkit.org/show_bug.cgi?id=50302

        * editing/TextIterator.cpp:
        (WebCore::SearchBuffer::SearchBuffer): Disable the AtWordStarts option if it was specified and
        the target string begins with one of the "separator" characters.

2010-11-30  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Dave Hyatt.

        Web Inspector: [CRASH] on "Revert to this revision" of style with import.
        https://bugs.webkit.org/show_bug.cgi?id=50256

        Rolled back one line from http://trac.webkit.org/changeset/36904 as agreed with
        David.

        * css/CSSImportRule.cpp:
        (WebCore::CSSImportRule::insertedIntoParent):

2010-11-30  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] fillRect shadow has incorrect behavior when using ctx.scale(x,y)
        https://bugs.webkit.org/show_bug.cgi?id=50283

        Adjust the mask rectangle for Cairo shadows, so that the origin
        is not affected by the scale of the transformation matrix.

        * platform/graphics/ContextShadow.h: Make this Qt-only member global.
        * platform/graphics/cairo/ContextShadowCairo.cpp:
        (WebCore::ContextShadow::beginShadowLayer): Save the original layer area.
        (WebCore::ContextShadow::endShadowLayer): If the target context has a scale
        transform, make sure not to scale the blur distance when blitting the shadow.

2010-11-30  Darin Adler  <darin@apple.com>

        Reviewed by Alexey Proskuryakov.

        Make ProgressEvent 64-bit instead of 32-bit
        https://bugs.webkit.org/show_bug.cgi?id=50289

        * dom/ProgressEvent.cpp:
        (WebCore::ProgressEvent::ProgressEvent): Changed arguments to unsigned long long.
        (WebCore::ProgressEvent::initProgressEvent): Ditto.

        * dom/ProgressEvent.h: Fixed formatting. Changed types to unsigned long long.
        Made isProgressEvent override private.

        * dom/ProgressEvent.idl: Tweaked formatting and changed types to unsigned long long.

        * fileapi/FileReader.cpp: Removed unneeded includes.
        Used static on const so we'd get an error if the same constant was in a header.
        (WebCore::FileReader::didReceiveData): Removed unneeded WTF prefix.
        (WebCore::FileReader::fireEvent): Got rid of local variables that would narrow
        bytes loaded and total bytes to 32-bit.

        * fileapi/FileReaderLoader.cpp:
        (WebCore::FileReaderLoader::didReceiveResponse): Restructured code a bit and
        added comments. Also added handling for when ArrayBuffer::create returns 0.
        (WebCore::FileReaderLoader::didReceiveData): Fixed handling of case where more
        data arrives than is expected so it won't overrun the buffer. Also broke an
        assertion into two and improved a comment.

        * fileapi/FileReaderLoader.h: Changed bytesLoaded and totalBytes to unsigned long long.

        * fileapi/FileWriter.cpp:
        (WebCore::FileWriter::fireEvent): Removed narrowing casts in call to
        ProgressEvent::create.

        * html/canvas/ArrayBuffer.cpp:
        (WebCore::ArrayBuffer::tryAllocate): Added a comment because the code here seems wrong.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::didSendData): Removed narrowing casts in call to
        XMLHttpRequestProgressEvent::create.
        (WebCore::XMLHttpRequest::didReceiveData): Removed narrowing casts in call to
        dispatchProgressEvent.

        * xml/XMLHttpRequestProgressEvent.h: Fixed formatting. Changed types to unsigned long long.
        Made isXMLHttpRequestProgressEvent override private.

        * xml/XMLHttpRequestProgressEvent.idl: Tweaked formatting and changed types to unsigned long long.

        * xml/XMLHttpRequestProgressEventThrottle.cpp:
        (WebCore::XMLHttpRequestProgressEventThrottle::dispatchProgressEvent): Changed types to
        unsigned long long.

        * xml/XMLHttpRequestProgressEventThrottle.h: Changed types to unsigned long long.

2010-11-30  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Darin Adler.

        Progress and meter elements should take a form in their constructor like any other form control.
        https://bugs.webkit.org/show_bug.cgi?id=50195

        Tests: fast/dom/HTMLMeterElement/meter-element-form.html
               fast/dom/HTMLProgressElement/progress-element-form.html

        * html/HTMLMeterElement.cpp:
        (WebCore::HTMLMeterElement::HTMLMeterElement):
        (WebCore::HTMLMeterElement::create):
        * html/HTMLMeterElement.h:
        * html/HTMLProgressElement.h:
        * html/HTMLTagNames.in:

2010-11-30  Tony Chang  <tony@chromium.org>

        Reviewed by Adam Barth.

        [chromium] fix get-int-identifier-special-values.html using TestNetscapePlugIn
        https://bugs.webkit.org/show_bug.cgi?id=49036

        No new tests: Covered by plugins/npruntime/get-int-identifier-special-values.html

        In http://codereview.chromium.org/11574, the forked chromium test
        plugin changed how it testGetIntIdentifier to work around a change
        caused by a silverlight specific plugin fix:
        http://codereview.chromium.org/11569/diff/1/2

        It's not clear to me that this change is needed anymore since
        silverlight has had multiple releases, testing without this patch
        works on a test windows build, and safari win seems to run silverlight
        without this either.  Since there's no test for this behavior, I'm
        rolling it out so we can match the upstream test.

        * bindings/v8/V8NPUtils.cpp:
        (WebCore::convertV8ObjectToNPVariant):

2010-11-30  Chris Guillory  <chris.guillory@google.com>

        Reviewed by Chris Fleizach.

        Computing style on a stale node while sending pending accessibility notification.
        https://bugs.webkit.org/show_bug.cgi?id=50162

        Retain node pointer members of AccessibilityImageMapLink.

        Test: accessibility/image-map-title-causes-crash.html

        * accessibility/AccessibilityImageMapLink.cpp:
        (WebCore::AccessibilityImageMapLink::parentObject):
        (WebCore::AccessibilityImageMapLink::anchorElement):
        (WebCore::AccessibilityImageMapLink::url):
        (WebCore::AccessibilityImageMapLink::elementRect):
        * accessibility/AccessibilityImageMapLink.h:
        (WebCore::AccessibilityImageMapLink::areaElement):
        (WebCore::AccessibilityImageMapLink::mapElement):
        (WebCore::AccessibilityImageMapLink::node):
        * dom/Document.cpp:
        (WebCore::Document::clearAXObjectCache):

2010-11-30  James Robinson  <jamesr@chromium.org>

        Reviewed by Tony Chang.

        Build fix - add parens in foo || bar && baz to make gcc happy
        https://bugs.webkit.org/show_bug.cgi?id=50276

        gcc 4.4 warns that statements of the form "foo || bar && baz".  It wants
        parens around the "bar && baz" part to make it clear which way the logical
        operators bind.

        * editing/TextIterator.cpp:
        (WebCore::SearchBuffer::search):

2010-11-30  Daniel Bates  <dbates@rim.com>

        Reviewed by David Hyatt.

        Focused <area> should use CSS properties of <area> instead of associated <img>
        https://bugs.webkit.org/show_bug.cgi?id=49888

        Fixes an issue where the CSS properties of an <area> were not used when
        the <area> was focused.

        Currently, when focusing an <area> (say by pressing option + tab in Mac
        Safari) we use the CSS style information for the <img> associated with
        the <area>. Instead, we should use the CSS style information for the
        focused <area>. In particular, this will make the us honor the outline-
        color property of a focused <area> when drawing its focus ring.

        Tests: fast/images/imagemap-focus-ring-outline-color-explicitly-inherited-from-map.html
               fast/images/imagemap-focus-ring-outline-color-not-inherited-from-map.html
               fast/images/imagemap-focus-ring-outline-color.html

        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintFocusRing): Use the style information of
        the focused <area> when drawing the focus ring for it.

2010-11-30  Tony Chang  <tony@chromium.org>

        Reviewed by James Robinson.

        [chromium] enable WebCore compiler warnings on Linux take 3
        https://bugs.webkit.org/show_bug.cgi?id=50258

        * WebCore.gyp/WebCore.gyp:

2010-11-30  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Chris Fleizach.

        [GTK] Implement ROLE_COMBO_BOX
        https://bugs.webkit.org/show_bug.cgi?id=25678

        Implement the remaining bits for combo boxes.

        This patch finishes the implementation, from the point of view of
        the Atk library, of those objects exposed to ATK as combo boxes,
        and their related elements (menus and menu items). It therefore
        implements the proper interfaces for each type of object related
        to combo boxes (AtkSelection for the combo box, AtkText for every
        menu item and AtkAction for the combo box, the menu and the menu
        items), takes care of emitting the proper signals when focus or a
        given a selection changes and adds a new unit test to check all
        this new stuff.

        Make possible to ask an AccessibleMenuListOption for a sensible
        string representation, so far only available through the private
        and MSAA related method nameForMSAA. Just moved the implementation
        of that method to an overriden version of stringValue(), which is
        platform independent, and called that from nameForMSAA().

        * accessibility/AccessibilityMenuListOption.h:
        * accessibility/AccessibilityMenuListOption.cpp:
        (WebCore::AccessibilityMenuListOption::nameForMSAA): Just call to
        stringValue(), which holds from now on that used to be here.
        (WebCore::AccessibilityMenuListOption::stringValue): New, override
        of AccessibilityObject::stringValue() to return a proper string.

        Emit the missing signals when a selection is made.

        * accessibility/gtk/AXObjectCacheAtk.cpp:
        (WebCore::AXObjectCache::postPlatformNotification): Emit the usual
        'focus' signals when a selection is made over the combo box.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (setAtkStateSetFromCoreObject): Ensure the EXPANDABLE and EXPANDED
        Atk states are added to the state set when needed.
        (listObjectForSelection): New, returns the proper list object (the
        one holding the list of available options as its children) for an
        specific AtkObject implementing AtkSelection. This is needed
        because sometimes the selectable options are not directly children
        of the AtkSelection object (i.e. a combo box has a 'menu' object
        as its only child of it, holding the list of options as children).
        (optionFromList): Use listObjectForSelection() to get the actual
        object holding the list of children as the available options.
        (optionFromSelection): Add support for combo boxes.
        (webkit_accessible_selection_add_selection): Ditto.
        (webkit_accessible_selection_clear_selection): Ditto.
        (webkit_accessible_selection_get_selection_count): Ditto.
        (webkit_accessible_selection_is_child_selected): Ditto.
        (webkit_accessible_selection_remove_selection): Ditto.
        (webkit_accessible_text_get_text): Makes sure stringValue() is
        considered to get the result substring when it was already
        considered when checking the maximum text length for the object.
        (getInterfaceMaskFromObject): Make sure the AtkSelection interface
        is implemented for the combo boxes, that the AtkText is
        implemented for the menu items and that the AtkAction interface is
        now implemented for every object (WebCore will decide what to do).

        Avoid a segfault crash when using this from unit tests.

        * platform/gtk/PopupMenuGtk.cpp:
        (WebCore::PopupMenuGtk::show): Make sure we got a valid GdkWindow
        before calling gdk_window_get_origin() over it.

2010-11-30  Andreas Kling  <kling@webkit.org>

        Reviewed by Tor Arne Vestbø.

        [Qt] GraphicsContext: Avoid unnecessarily copying the painter's QTransform

        Stash the transform in a const reference (QPainter::transform() returns one)
        instead of making a copy in the shadow drawing parts of fillPath, strokePath and fillRect.

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::fillRect):

2010-11-30  Vangelis Kokkevis  <vangelis@chromium.org>

        Reviewed by Simon Fraser.

        Provide more fine grained control to ports over when to turn on 
        accelerated compositing.
        https://bugs.webkit.org/show_bug.cgi?id=49998

        The RenderLayerCompositor now checks with the chrome client whether
        3d transforms, video, plugins, canvas and animation require
        switching over to the composited path. Layers that overlap composited
        content will still turn into composited layers regardless of the
        setting.

        * css/MediaQueryEvaluator.cpp:
        (WebCore::transform_3dMediaFeatureEval):
        * page/ChromeClient.h:
        (WebCore::ChromeClient::allowedCompositingTriggers):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::canRender3DTransforms):
        (WebCore::RenderLayer::updateTransform):
        (WebCore::RenderLayer::currentTransform):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateLayerTransform):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::RenderLayerCompositor):
        (WebCore::RenderLayerCompositor::cacheAcceleratedCompositingFlags):
        (WebCore::RenderLayerCompositor::canRender3DTransforms):
        (WebCore::RenderLayerCompositor::requiresCompositingLayer):
        (WebCore::RenderLayerCompositor::requiresCompositingForTransform):
        (WebCore::RenderLayerCompositor::requiresCompositingForVideo):
        (WebCore::RenderLayerCompositor::requiresCompositingForCanvas):
        (WebCore::RenderLayerCompositor::requiresCompositingForPlugin):
        (WebCore::RenderLayerCompositor::requiresCompositingForAnimation):
        * rendering/RenderLayerCompositor.h:

2010-11-30  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Plug leak in SoupCache
        https://bugs.webkit.org/show_bug.cgi?id=50142

        Free the cache file contents when we don't need them anymore.

        * platform/network/soup/cache/webkit/soup-cache.c:
        (webkit_soup_cache_load):

2010-11-30  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [Qt][V8] Make QtWebKit with V8 build on Linux.
        https://bugs.webkit.org/show_bug.cgi?id=50244

        No new tests needed.

        * WebCore.pri: add missing idl file
        * WebCore.pro: enable Linux build
        * bindings/scripts/CodeGeneratorV8.pm: add missing headers
        * bindings/v8/ScriptControllerQt.cpp: fix instantiation
        (WebCore::ScriptController::qtScriptEngine):
        * bindings/v8/V8GCController.cpp: fix guard
        (WebCore::V8GCController::checkMemoryUsage):
        * inspector/CodeGeneratorInspector.pm: add missing header
        * loader/ResourceLoadScheduler.cpp: ditto
        * loader/cache/MemoryCache.cpp: ditto
        * loader/loader.cpp: ditto

2010-11-30  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.
        
        https://bugs.webkit.org/show_bug.cgi?id=50183
        
        Code got commented out by accident during render tree refactoring last year.  Put the code back in, since
        it hurts performance to have that line commented out.

        In order to put this code back in, I had to fix some bugs with preferred width computations and
        overflow: scroll.  Make the pref widths computation create the scrollbar if it doesn't exist yet.

        Make sure the scrollbar size is included prior to checking for defined width/min-width/max-width values.  Otherwise
        the scrollbar inflates the width beyond the fixed size that was specified.
        
        For table cells, there is an additional wrinkle.  Make sure not to include the scrollbar size as part of the minimum
        intrinsic width so that we don't incorrectly grow.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutPositionedObjects):
        (WebCore::RenderBlock::computePreferredLogicalWidths):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::computePreferredLogicalWidths):

2010-11-30  Vitaly Repeshko  <vitalyr@chromium.org>

        Unreviewed.

        Attempt to fix windows debug chromium build.

        * html/TimeInputType.cpp: Added include providing isfinite.

2010-11-30  Darin Adler  <darin@apple.com>

        Reviewed by Jon Honeycutt.

        DOM binding code generator scripts import unused File::stat Perl module
        https://bugs.webkit.org/show_bug.cgi?id=50250

        * bindings/scripts/CodeGeneratorCPP.pm: Removed "using File::stat".
        * bindings/scripts/CodeGeneratorJS.pm: Ditto.
        * bindings/scripts/CodeGeneratorObjC.pm: Ditto.
        * bindings/scripts/CodeGeneratorV8.pm: Ditto.

2010-11-30  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: implement "Revert to this revision" in resources panel.
        https://bugs.webkit.org/show_bug.cgi?id=50107

        * inspector/Inspector.idl:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::setStyleSheetText2):
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::reparseStyleSheet):
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleModel.prototype._styleSheetChanged.callback):
        (WebInspector.CSSStyleModel.prototype._styleSheetChanged):
        (WebInspector.CSSStyleModel.prototype._onRevert):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype.get contentTimestamp):
        (WebInspector.Resource.prototype.setInitialContent):
        (WebInspector.Resource.prototype.isLocallyModified):
        (WebInspector.Resource.prototype.setContent.else.finished):
        (WebInspector.Resource.prototype.setContent):
        (WebInspector.Resource.prototype.revertToThis.callback):
        (WebInspector.Resource.prototype.revertToThis):
        (WebInspector.Resource.prototype.get baseRevision):
        (WebInspector.Resource.prototype._innerRequestContent):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype._showResourceView):
        (WebInspector.FrameResourceTreeElement.prototype._contentChanged):
        (WebInspector.ResourceRevisionTreeElement):
        (WebInspector.ResourceRevisionTreeElement.prototype.onattach):
        (WebInspector.ResourceRevisionTreeElement.prototype._ondragstart):
        (WebInspector.ResourceRevisionTreeElement.prototype._handleContextMenuEvent):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.editScriptSource.mycallback):
        (WebInspector.ScriptsPanel.prototype.editScriptSource):
        * inspector/front-end/SourceView.js:
        (WebInspector.SourceView.prototype._editLine):
        (WebInspector.SourceView.prototype._editLineComplete):
        (WebInspector.SourceView.prototype._revertEditLine):

2010-11-30  Adam Roben  <aroben@apple.com>

        Clean up WebCore.vcproj's bindings filter

        I added files that we compile (via an all-in-one file) but weren't in
        the .vcproj, removed files that no longer exist, and added the scripts
        we use.

        Fixes <http://webkit.org/b/50248> WebCore.vcproj's bindings filter is
        out-of-date

        Reviewed by Darin Adler.

        * WebCore.vcproj/WebCore.vcproj:

2010-11-30  Adam Roben  <aroben@apple.com>

        Move JSIDB* files to the DerivedSources filter

        This correctly reflects their location on disk. (They were formerly
        listed under bindings/js.)

        * WebCore.vcproj/WebCore.vcproj:

2010-11-30  Xiaomei Ji  <xji@chromium.org>

        Reviewed by David Hyatt.

        Remove clampNegativeToZero in adjustScrollPositionWithinRange.
        https://bugs.webkit.org/show_bug.cgi?id=50203

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::adjustScrollPositionWithinRange):

2010-11-30  Adam Roben  <aroben@apple.com>

        Remove duplicate files from WebCore.vcproj

        Rubber-stamped by Steve Falkenburg.

        * WebCore.vcproj/WebCore.vcproj:

2010-11-30  Adam Roben  <aroben@apple.com>

        Let VS do its thang with WebCore.vcproj

        I just removed and readded AnimationBase.cpp.

        Rubber-stamped by Steve Falkenburg.

        * WebCore.vcproj/WebCore.vcproj:

2010-11-30  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Chris Fleizach.

        ASSERT failing for combo boxes when selection changes
        https://bugs.webkit.org/show_bug.cgi?id=50062

        Don't call listBoxOnChange for elements using menu lists.

        Test: fast/forms/select-option-accesskey-crash.html

        * dom/SelectElement.cpp:
        (WebCore::SelectElement::accessKeySetSelectedIndex): Extra check
        to decide whether to call menuListOnChange() or listBoxOnChange()
        instead of always calling listBoxOnChange().

2010-11-30  Andreas Kling  <kling@webkit.org>

        Reviewed by Dirk Schulze.

        GraphicsContext: Remove "current path" and have strokePath, fillPath and clipPath take a Path argument.
        https://bugs.webkit.org/show_bug.cgi?id=48516

        No new tests, this is refactoring only.

        fillPath() -> fillPath(const Path&)
        strokePath() -> strokePath(const Path&)
        clipPath(WindRule) -> clipPath(const Path&, WindRule)

        drawPath() was only used by CG, so made it PLATFORM(CG) specific.

        The Qt, CG and Cairo implementations are best-effort.
        For the rest, I've put beginPath/addPath and FIXMEs in the three affected methods.

        * WebCore.exp.in:
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::fill):
        (WebCore::CanvasRenderingContext2D::stroke):
        * inspector/InspectorController.cpp:
        (WebCore::drawOutlinedQuad):
        * mathml/RenderMathMLRoot.cpp:
        (WebCore::RenderMathMLRoot::paint):
        * mathml/RenderMathMLSquareRoot.cpp:
        (WebCore::RenderMathMLSquareRoot::paint):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/GraphicsContextPrivate.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::clipPath):
        * platform/graphics/cairo/GraphicsContextPlatformPrivateCairo.h:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::drawEllipse):
        (WebCore::addConvexPolygonToPath):
        (WebCore::GraphicsContext::drawConvexPolygon):
        (WebCore::GraphicsContext::clipConvexPolygon):
        (WebCore::GraphicsContext::drawPath):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::fillRoundedRect):
        (WebCore::GraphicsContext::clipPath):
        * platform/graphics/haiku/GraphicsContextHaiku.cpp:
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::fillPath):
        * platform/graphics/openvg/GraphicsContextOpenVG.cpp:
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::clipPath):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::restorePlatformState):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::clipPath):
        (WebCore::GraphicsContext::strokeRect):
        (WebCore::GraphicsContext::translate):
        (WebCore::GraphicsContext::rotate):
        (WebCore::GraphicsContext::scale):
        (WebCore::GraphicsContext::concatCTM):
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::clipPath):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::clipPath):
        * platform/graphics/wx/GraphicsContextWx.cpp:
        (WebCore::GraphicsContext::clipPath):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintBorder):
        (WebCore::RenderBoxModelObject::paintBoxShadow):
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::paintReplaced):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::drawBoxSideFromPath):
        * rendering/RenderSVGResource.h:
        (WebCore::RenderSVGResource::postApplyResource):
        * rendering/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::pathOnlyClipping):
        * rendering/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::postApplyResource):
        * rendering/RenderSVGResourceFilter.h:
        * rendering/RenderSVGResourceGradient.cpp:
        (WebCore::RenderSVGResourceGradient::applyResource):
        * rendering/RenderSVGResourceGradient.h:
        * rendering/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::postApplyResource):
        * rendering/RenderSVGResourcePattern.h:
        * rendering/RenderSVGResourceSolidColor.cpp:
        (WebCore::RenderSVGResourceSolidColor::postApplyResource):
        * rendering/RenderSVGResourceSolidColor.h:
        * rendering/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::finishRenderSVGContent):
        * rendering/svg/RenderSVGPath.cpp:
        (WebCore::RenderSVGPath::fillAndStrokePath):
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::releasePaintingResource):
        (WebCore::SVGInlineTextBox::restoreGraphicsContextAfterTextPainting):
        (WebCore::SVGInlineTextBox::paintDecorationWithStyle):
        * rendering/svg/SVGInlineTextBox.h:
        * svg/SVGFont.cpp:
        (WebCore::Font::drawTextUsingSVGFont):

2010-11-30  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler and Geoff Garen.

        https://bugs.webkit.org/show_bug.cgi?id=44152
        <rdar://problem/8324423> CSSOM should match DOM in discarding wrapper-less parents.

        We have existing behaviors where parent objects in detached subtrees are not preserved:
        - if a root of a node tree doesn't have a wrapper, it's immediately destroyed, making
        its children parentNode attribute null;
        - relationship between a <style> or <link> node and its stylesheet is immediately broken
        when the node is removed from document (in this case, regardless of wrapper existence).

        Both match Firefox. For consistency, CSSOM should do the same. In fact, it already partially
        does - CSSRule.parentRule gets zeroed out when the parent rule is destroyed.

        Tests: fast/dom/StyleSheet/detached-parent-rule-without-wrapper.html
               fast/dom/StyleSheet/detached-stylesheet-without-wrapper.html

        * css/StyleSheet.cpp: (WebCore::StyleSheet::~StyleSheet): Clear out child rule parent.

        * svg/SVGFontFaceElement.cpp: (WebCore::SVGFontFaceElement::insertedIntoDocument): Keep
        the new assertion from firing. This function was adding a rule to style sheet, without
        telling the rule about it.

2010-11-30  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        All projects on Windows should use cmd files for build events
        https://bugs.webkit.org/show_bug.cgi?id=50213

        * WebCore.vcproj/QTMovieWinCommon.vsprops:
        * WebCore.vcproj/QTMovieWinPostBuild.cmd: Added.
        * WebCore.vcproj/QTMovieWinPreBuild.cmd: Added.
        * WebCore.vcproj/WebCoreCommon.vsprops:
        * WebCore.vcproj/WebCorePostBuild.cmd: Added.
        * WebCore.vcproj/WebCorePreBuild.cmd: Added.

2010-11-30  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r72914.
        http://trac.webkit.org/changeset/72914
        https://bugs.webkit.org/show_bug.cgi?id=50241

        "pfeldman has a revision management patch both for CSS and JS"
        (Requested by apavlov on #webkit).

        * English.lproj/localizedStrings.js:
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::reparseStyleSheet):
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleModel.prototype._styleSheetChanged.callback):
        (WebInspector.CSSStyleModel.prototype._styleSheetChanged):
        (WebInspector.CSSStyleSheet.prototype.getText):
        (WebInspector.CSSStyleSheet.prototype.setText):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourceRevisionTreeElement.prototype.onattach):
        (WebInspector.ResourceRevisionTreeElement.prototype._ondragstart):

2010-11-25  Satish Sampath  <satish@chromium.org>

        Reviewed by Kent Tamura.

        Fix rendering of speech button when setting the attribute dynamically.
        https://bugs.webkit.org/show_bug.cgi?id=50077

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::parseMappedAttribute):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::speechAttributeChanged):
        * rendering/RenderTextControlSingleLine.h:

2010-11-30  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Enable switching between revisions of stylesheets
        https://bugs.webkit.org/show_bug.cgi?id=50227

        Drive-by fix: styleSheetChanged() call needed after a stylesheet reparsing on setStyleSheetText2().

        * English.lproj/localizedStrings.js:
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::reparseStyleSheet):
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleModel.prototype.setStyleSheetText):
        (WebInspector.CSSStyleModel.prototype._styleSheetChanged.callback):
        (WebInspector.CSSStyleModel.prototype._styleSheetChanged):
        (WebInspector.CSSStyleSheet.prototype.getText):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourceRevisionTreeElement.prototype.onattach):
        (WebInspector.ResourceRevisionTreeElement.prototype._ondragstart):
        (WebInspector.ResourceRevisionTreeElement.prototype._handleContextMenuEvent):

2010-11-30  John Knottenbelt  <jknotten@chromium.org>

        Reviewed by David Levin.

        V8 binding for DOMTimeStamp should be Number, not Date
        https://bugs.webkit.org/show_bug.cgi?id=49963

        Test: fast/dom/domtimestamp-is-number.html

        * bindings/scripts/CodeGeneratorV8.pm:

2010-11-30  Renata Hodovan  <reni@inf.u-szeged.hu>

        Reviewed by Andreas Kling.

        [Qt] Leak with GraphicsContext::takeOwnershipOfPlatformContext()
        https://bugs.webkit.org/show_bug.cgi?id=49916

        Change the order of calling QPainter::device() and QPainter::end(), so device() will return with a valid device.
        No new test is needed.

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContextPlatformPrivate::~GraphicsContextPlatformPrivate):

2010-11-30  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Andreas Kling.

        Move generator logic into main CMakeLists.txt file
        https://bugs.webkit.org/show_bug.cgi?id=49885

        Also make the generator calls more portable.

        * CMakeLists.txt:

2010-11-30  Mario Sanchez Prada  <msanchez@igalia.com>

        Unreviewed, rolling out r72902.
        http://trac.webkit.org/changeset/72902
        https://bugs.webkit.org/show_bug.cgi?id=50062

        This change is causing layout test failures on the Tests bots
        for the mac platform.

        * dom/SelectElement.cpp:
        (WebCore::SelectElement::accessKeySetSelectedIndex):

2010-11-30  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r72764.
        http://trac.webkit.org/changeset/72764
        https://bugs.webkit.org/show_bug.cgi?id=50215

        This change is causing assertion failures on the debug bots.
        (Requested by mrobinson on #webkit).

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (webkit_accessible_get_name):
        (webkit_accessible_detach):

2010-11-30  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: make copy(node) work in console.
        https://bugs.webkit.org/show_bug.cgi?id=50180

        * inspector/front-end/InjectedScript.js:
        (injectedScriptConstructor.):

2010-11-30  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Darin Adler.

        ASSERT failing for combo boxes when selection changes
        https://bugs.webkit.org/show_bug.cgi?id=50062

        Don't call listBoxOnChange for elements using menu lists.

        Test: accessibility/select-menulist-crash.html

        * dom/SelectElement.cpp:
        (WebCore::SelectElement::accessKeySetSelectedIndex): Extra check
        to decide whether to call menuListOnChange() or listBoxOnChange()
        instead of always calling listBoxOnChange().

2010-11-30  Helder Correia  <helder@sencha.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Path stroke shadow has incorrect behavior when using ctx.scale(x,y)
        https://bugs.webkit.org/show_bug.cgi?id=50198

        Handle the special case when scaling is used and translate the shadow
        offset accordingly. The correct behavior is ensured in ContextShadow
        already, the issue only happens when using a non-blur shadow.

        Test: fast/canvas/canvas-scale-strokePath-shadow.html

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

2010-11-30  Helder Correia  <helder@sencha.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Path filling should keep shadow offset after context scaling
        https://bugs.webkit.org/show_bug.cgi?id=50194

        Handle the special case when scaling is used and translate the shadow
        offset accordingly. The correct behavior is ensured in ContextShadow
        already, the issue only happens when using a non-blur shadow.

        Test: fast/canvas/canvas-scale-fillPath-shadow.html

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

2010-11-30  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: make ScriptCallStack and ScriptArguments reference counted
        https://bugs.webkit.org/show_bug.cgi?id=50156

        No new tests. This refactoring is covered with existing inspector tests.

        * bindings/js/JSConsoleCustom.cpp:
        (WebCore::JSConsole::profile):
        (WebCore::JSConsole::profileEnd):
        * bindings/js/ScriptCallStackFactory.cpp:
        (WebCore::createScriptCallStack):
        (WebCore::createScriptArguments):
        * bindings/js/ScriptCallStackFactory.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionCustomArgsAndException):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjInternal::customArgsAndExceptionCallback):
        * bindings/v8/ScriptCallStackFactory.cpp:
        (WebCore::createScriptCallStack):
        (WebCore::createScriptArguments):
        * bindings/v8/ScriptCallStackFactory.h:
        * bindings/v8/V8ConsoleMessage.cpp:
        (WebCore::V8ConsoleMessage::handler):
        (WebCore::V8ConsoleMessage::dispatchNow):
        * bindings/v8/V8ConsoleMessage.h:
        * bindings/v8/custom/V8ConsoleCustom.cpp:
        (WebCore::V8Console::traceCallback):
        (WebCore::V8Console::assertCallback):
        (WebCore::V8Console::profileCallback):
        (WebCore::V8Console::profileEndCallback):
        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::ConsoleMessage):
        * inspector/ConsoleMessage.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::addMessageToConsole):
        (WebCore::InspectorController::startGroup):
        * inspector/InspectorController.h:
        * inspector/ScriptArguments.cpp:
        (WebCore::ScriptArguments::create):
        * inspector/ScriptArguments.h:
        * inspector/ScriptCallFrame.h:
        * inspector/ScriptCallStack.cpp:
        (WebCore::ScriptCallStack::create):
        (WebCore::ScriptCallStack::at):
        (WebCore::ScriptCallStack::size):
        * inspector/ScriptCallStack.h:
        * page/Console.cpp:
        (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::markTimeline):
        (WebCore::Console::profile):
        (WebCore::Console::profileEnd):
        (WebCore::Console::timeEnd):
        (WebCore::Console::group):
        (WebCore::Console::groupCollapsed):
        (WebCore::Console::warn):
        * page/Console.h:

2010-11-29  Dan Bernstein  <mitz@apple.com>

        Build fix for non-ICU platforms after r72887.

        * editing/TextIterator.cpp:
        (WebCore::SearchBuffer::prependContext):

2010-11-29  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        WebCore part of <rdar://problem/8650085> adding word-prefix search options to the text search API.
        https://bugs.webkit.org/show_bug.cgi?id=50038

        Test: editing/text-iterator/findString.html

        * GNUmakefile.am: Added FindOptions.h.
        * WebCore.exp.in: Export the new methods that take FindOptions.
        * WebCore.gypi: Added FindOptions.h.
        * WebCore.pro: Added FindOptions.h and TextBoundaries.{cpp,h}.
        * WebCore.vcproj/WebCore.vcproj: Added FindOptions.h.
        * WebCore.xcodeproj/project.pbxproj: Added FindOptions.h and TextBoundaries.cpp.
        * editing/Editor.cpp:
        (WebCore::Editor::firstVisibleRange): Changed to use FindOptions.
        (WebCore::Editor::lastVisibleRange): Ditto.
        (WebCore::Editor::nextVisibleRange): Ditto.
        (WebCore::Editor::findString): Ditto.
        (WebCore::Editor::countMatchesForText): Ditto.
        * editing/Editor.h: Added a version of findString() that takes FindOptions. Changed
        countMatchesForText() to take FindOptions. Made nextVisibleRange() private and changed it
        and firstVisibleRange() and lastVisibleRange() to take FindOptions.
        * editing/FindOptions.h: Added.
        * editing/TextIterator.cpp:
        Augmented SearchBuffer with an optional prefix, which is not searched, but provides context
        for determining word boundaries.
        (WebCore::isSeparator): Added. Identifies a class of characters used to determine where
        “words” are embedded in a word.
        (WebCore::SearchBuffer::SearchBuffer): Changed to take FindOptions. Added initialization of
        m_options, m_prefixLength and m_needsMoreContext.
        (WebCore::SearchBuffer::append): Adjust m_prefixLength as part of the prefix gets pushed out
        of the buffer.
        (WebCore::SearchBuffer::needsMoreContext): Added.
        (WebCore::SearchBuffer::prependContext): Added.
        (WebCore::SearchBuffer::isWordStartMatch): Added.
        (WebCore::SearchBuffer::search): Changed to account for the context prefix. When searching
        only for word prefix matches, maintains enough context before a tentative match when moving
        it to the beginning of the buffer. Reject matches that are not at word starts if requested.
        Adjust m_prefixLength when pushing characters out of the buffer.
        (WebCore::findPlainText): Changed to work with FindOptions. Feed the search buffer with context
        if and as long as it requires more of it.
        * editing/TextIterator.h: Added a version of findPlainText() that takes FindOptions.
        * editing/visible_units.cpp: Moved {end,start}Of{First,Last}WordBoundary to TextBoundaries.cpp.
        * page/Page.cpp:
        (WebCore::Page::findString): Changed to work with FindOptions.
        (WebCore::Page::markAllMatchesForText): Ditto.
        * page/Page.h: Added FindOptions-based findString() and markAllMatchesForText().
        * platform/text/TextBoundaries.cpp:
        (WebCore::endOfFirstWordBoundaryContext): Moved here from visible_units.cpp.
        (WebCore::startOfLastWordBoundaryContext): Ditto.
        * platform/text/TextBoundaries.h:

2010-11-29  Dai Mikurube  <dmikurube@google.com>

        Reviewed by Kent Tamura.

        when empty, clicking "down" on outer-spin-button returns "max value"
        https://bugs.webkit.org/show_bug.cgi?id=45491

        Modified stepping-up/down from renderer
        - to clamp steps,
        - to handle empty values (described below), and
        - to apply them for range type inputs.

        Stepping-up/down for empty values are handled "the empty as 0."
        For example :
        * If 0 is in-range, and matches to step value
          "down" -> -step
          "up" -> +step
          If -step or +step is out of range, new value should be 0.

        * If 0 is smaller than the minimum value
          "down" -> the minimum value
          "up" -> the minimum value

        * If 0 is larger than the maximum value
          "down" -> the maximum value
          "up" -> the maximum value

        * If 0 is in-range, but not matched to step value
          "down" -> smaler matched value nearest to 0.
            e.g. <input type=number min=-100 step=3> -> -1
          "up" -> larger matched value nearest to 0.
            e.g. <input type=number min=-100 step=3> -> 2

        As for date/datetime-local/month/time/week types, the empty is assumed as "current local date/time".
        As for datetime type, the empty is assumed as "current date/time in UTC".

        As for range input types, changed stepping from renderer to use stepUpFromRenderer().
        It was calculated with stepUp() from RangeInputType::handleKeydownEvent().

        Test: fast/forms/input-stepup-stepdown-from-renderer.html

        * html/BaseDateAndTimeInputType.cpp:
        (WebCore::BaseDateAndTimeInputType::defaultValueForStepUp): Added defaultValueForStepUp() which returns the current local time
        * html/BaseDateAndTimeInputType.h:
        * html/DateTimeInputType.cpp:
        (WebCore::DateTimeInputType::defaultValueForStepUp): Added defaultValueForStepUp() which returns the current UTC time
        * html/DateTimeInputType.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::stepUpFromRenderer): Modified it to clamp steps, support empty values and support range type inputs
        * html/HTMLInputElement.h:
        (WebCore::HTMLInputElement::isRangeControl):
        * html/InputType.cpp:
        (WebCore::InputType::defaultValueForStepUp): Added defaultValueForStepUp() which returns 0
        * html/InputType.h:
        * html/MonthInputType.cpp:
        (WebCore::MonthInputType::defaultValueForStepUp): Added defaultValueForStepUp() which returns the current local month
        * html/MonthInputType.h:
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::handleKeydownEvent): Added comments and modified it to use stepUpFromRenderer()
        * html/TimeInputType.cpp:
        (WebCore::TimeInputType::defaultValueForStepUp): Added defaultValueForStepUp() which returns the current local time
        * html/TimeInputType.h:
        * manual-tests/input-type-datetime-default-value.html: Added manual tests for default values of date/time inputs since they are "the current local/UTC time", which cannot be tested automatically.

2010-11-29  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Introduce the notion of a "display-isolated" URL scheme for use by Chrome-internal URLs
        https://bugs.webkit.org/show_bug.cgi?id=50182

        A display-isolated URL can only be displayed (e.g., put in an iframe,
        hyperlinked to) by documents from that scheme.  In a sense, this is a
        generalization of some of the protections we give file URLs, but
        instead of lumping them all together into one "local" bucket, this
        patch creates a separate bucket for each scheme.

        For a while, I tried using a separate bucket for each origin.  That
        would have played nicely with what Blob URLs are trying to do, but some
        "chrome" URL pages rely on being able to display other chrome URL
        pages, even in different origins.  For example, the New Tab Page shows
        thumbnails from the "thumbnail" host.

        This patch also removes a bunch of unused code.  I've also propagated
        the "deprecated" status of deprecatedCanDisplay to
        deprecatedShouldTreatURLAsLocal because that method has no other
        callers and is really asking for uppercase/lowercase bugs.  I dream of
        someday removing these functions.

        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::canDisplay):
        (WebCore::SecurityOrigin::deprecatedCanDisplay):
        * platform/SchemeRegistry.cpp:
        (WebCore::displayIsolatedURLSchemes):
        (WebCore::SchemeRegistry::registerURLSchemeAsLocal):
        (WebCore::SchemeRegistry::deprecatedShouldTreatURLAsLocal):
        (WebCore::SchemeRegistry::shouldTreatURLSchemeAsLocal):
        (WebCore::SchemeRegistry::registerURLSchemeAsDisplayIsolated):
        (WebCore::SchemeRegistry::shouldTreatURLSchemeAsDisplayIsolated):
        * platform/SchemeRegistry.h:

2010-11-29  Sergio Villar Senin  <svillar@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Leaks in SoupCache code
        https://bugs.webkit.org/show_bug.cgi?id=50161

        Fixes some memory leaks in SoupCache code.

        * platform/network/soup/cache/soup-http-input-stream.c:
        (send_async_finished): Added a missing g_object_unref.
        * platform/network/soup/cache/webkit/soup-cache.c:
        (get_cacheability): Added soup_header_free_param_list.
        (webkit_soup_cache_entry_set_freshness): Ditto.
        (webkit_soup_cache_send_response): Ditto.
        (webkit_soup_cache_has_response): Ditto.

2010-11-29  Jian Li  <jianli@chromium.org>

        Reviewed by David Levin.

        Add send(ArrayBuffer) to XMLHttpRequest per XMLHttpRequest Level 2 spec
        https://bugs.webkit.org/show_bug.cgi?id=50199

        Test: http/tests/xmlhttprequest/send-array-buffer.html

        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::send):
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::V8XMLHttpRequest::sendCallback):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::send):
        * xml/XMLHttpRequest.h:

2010-11-29  James Robinson  <jamesr@chromium.org>

        [chromium] REGRESSION(72470): Crash in skia on some images
        https://bugs.webkit.org/show_bug.cgi?id=50201

        Reverts r72470

        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::computeResamplingMode):
        (WebCore::drawResampledBitmap):

2010-11-29  Dmitry Titov  <dimich@chromium.org>

        Reviewed by David Levin.

        Crash when iframe transfers from one page to another and has child frames.
        https://bugs.webkit.org/show_bug.cgi?id=50200

        * page/Frame.cpp:
        (WebCore::Frame::transferChildFrameToNewDocument):
        avoid overriding 'didTransfer' which has the result of previous check.

2010-11-19  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by David Hyatt.

        up arrow doesn't work with RTL text with word wrapping
        https://bugs.webkit.org/show_bug.cgi?id=41987

        The bug was caused by positionForPoint's not returning the correct affinity when the x coordiate
        is to the left of the first line, and startOfLine's incorrectly moving position to the previous candidate.

        Fixed the bug by returning upstream VisiblePosition in positionForPoint if the first inline text box's offset
        is greater than 0.  Also removed the code added by http://trac.webkit.org/changeset/23608 since this changeset
        does not add any test, and the problem described in the changelog reproduces regardless of the code's presence.

        Tests: editing/selection/click-left-of-rtl-wrapping-text.html
               editing/selection/modify-up-on-rtl-wrapping-text.html

        * editing/visible_units.cpp:
        (WebCore::startOfLine):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::positionForPoint):

2010-11-29  Ilya Sherman  <isherman@chromium.org>

        Reviewed by Kent Tamura.

        Ensure that option elements are rendered with normal font weight on Windows/Linux
        https://bugs.webkit.org/show_bug.cgi?id=50055

        * WebCore.gyp/WebCore.gyp: include themeChromiumSkia.css
        * css/themeChromiumSkia.css: Added.
        (option): font-weight: normal !important;
        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::RenderThemeChromiumSkia::extraDefaultStyleSheet): include themeChromiumSkia.css

2010-11-29  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed build fix.

        * WebCore.vcproj/WebCoreCairo.vsprops: Provide missing WIN_CAIRO
          definition so that proper targets are build.
        * platform/graphics/win/cairo/FontPlatformData.h:
        (WebCore::FontPlatformData::orientation): Add missing implementation.

2010-11-29  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Switch web audio code to use FloatPoint3D instead of Vector3
        https://bugs.webkit.org/show_bug.cgi?id=50186

        No new tests since audio API is not yet implemented.

        * platform/audio/Cone.cpp:
        (WebCore::ConeEffect::gain):
        * platform/audio/Cone.h:
        * platform/graphics/FloatPoint3D.h:
        (WebCore::FloatPoint3D::isZero):
        (WebCore::operator*):
        (WebCore::FloatPoint3D::distanceTo):
        * webaudio/AudioListener.h:
        (WebCore::AudioListener::setPosition):
        (WebCore::AudioListener::position):
        (WebCore::AudioListener::setOrientation):
        (WebCore::AudioListener::orientation):
        (WebCore::AudioListener::setUpVector):
        (WebCore::AudioListener::upVector):
        (WebCore::AudioListener::setVelocity):
        (WebCore::AudioListener::velocity):
        * webaudio/AudioPannerNode.cpp:
        (WebCore::AudioPannerNode::AudioPannerNode):
        (WebCore::AudioPannerNode::getAzimuthElevation):
        (WebCore::AudioPannerNode::dopplerRate):
        (WebCore::AudioPannerNode::distanceConeGain):
        * webaudio/AudioPannerNode.h:
        (WebCore::AudioPannerNode::position):
        (WebCore::AudioPannerNode::setPosition):
        (WebCore::AudioPannerNode::orientation):
        (WebCore::AudioPannerNode::setOrientation):
        (WebCore::AudioPannerNode::velocity):
        (WebCore::AudioPannerNode::setVelocity):

2010-11-29  Xiaomei Ji  <xji@chromium.org>

        Reviewed by David Hyatt.

        Right-to-left pages should be scrollable to reveal left overflow.
        https://bugs.webkit.org/show_bug.cgi?id=23556

        For RTL page, save left layout overflow and include it into the document
        size during layout. Use the left layout overflow when scroll and paint
        the page. Behavior on LTR page should be untouched since left layout 
        overflow is set as 0 for LTR page.

        Tests: fast/dom/horizontal-scrollbar-in-rtl-doesnt-fire-onscroll.html
               fast/dom/horizontal-scrollbar-in-rtl.html
               fast/dom/horizontal-scrollbar-when-dir-change.html
               fast/dom/left-overflow-in-ltr.html
               fast/dom/right-overflow-in-rtl.html

        * page/FrameView.cpp:
        (WebCore::FrameView::adjustViewSize): Save negative of left layout overflow as scroll X origin. And includes left layout overflow into document size.
        * page/mac/WebCoreFrameView.h: Add methods for setting and getting scroll X origin.
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::ScrollView):
        (WebCore::ScrollView::maximumScrollPosition): Minus scroll X origin from maximum horizontal scroll position.
        (WebCore::ScrollView::minimumScrollPosition):
        (WebCore::ScrollView::adjustScrollPositionWithinRange):
        (WebCore::ScrollView::valueChanged):
        (WebCore::ScrollView::setScrollPosition):
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::wheelEvent):
        * platform/ScrollView.h:
        * platform/mac/ScrollViewMac.mm:
        (WebCore::ScrollView::platformSetContentsSize):
        (WebCore::ScrollView::platformSetScrollPosition):
        (WebCore::ScrollView::platformSetScrollOriginX):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleDidChange):
        (WebCore::RenderBox::paintRootBoxDecorations): Include left layout overflow into canvas size.
        * rendering/RenderView.cpp:
        (WebCore::RenderView::layout): Save left layout overflow.
        (WebCore::RenderView::docLeft):
        (WebCore::RenderView::docWidth): Include left layout overflow into doc width for RTL page.
        * rendering/RenderView.h:

2010-11-29  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Ojan Vafai.

        bunch of pixel failures after http://trac.webkit.org/changeset/72839/
        https://bugs.webkit.org/show_bug.cgi?id=50188
        
        We need to call updateLayerTransform() for reflections, and
        table rows as well.

        * rendering/RenderReplica.cpp:
        (WebCore::RenderReplica::layout):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::layout):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::layoutRows):

2010-11-29  Xiaomei Ji  <xji@chromium.org>

        Reviewed by David Hyatt.

        Fix tab overflow problem when alignment is not left.
        https://bugs.webkit.org/show_bug.cgi?id=25459

        I checked WordPad in Windows, TextEdit in Mac, OpenOffice, and Google doc. 
        In all of them, (when the writing mode is horizontal) when the alignment is not
        left alignment, the length of tab is computed based on the tab's position
        relative to the left start of line, not based on the tab's position relative 
        to the left edge of the document.

        WebKit should follow the same.

        The m_xPos in each TextRun should be relative to the left start of the line, 
        not left start of its containing block (in right alignment and center alignment,
        left start of the line is not the same as left start of the containing block).
        So, when the text is drawn, the width of tab is consistent with the width 
        computed in RenderBlock::computeInlineDirectionPositionsForLine().

        I did not test vertical writing mode, but I think the same rule should apply.

        Test: fast/dom/tab-in-right-alignment.html

        * platform/graphics/TextRun.h:
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::textPos):
        * rendering/InlineTextBox.h:

2010-11-29  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        WebInspector: Request JSON-serialized heap snapshot from JS engine.
        This simplifies heap snapshots interaction and API. Instead of
        having objects representing snapshot entities, the whole snapshot
        is transferred to WebInspector and parsed there.

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

        * bindings/js/ScriptHeapSnapshot.h:
        (WebCore::ScriptHeapSnapshot::OutputStream::~OutputStream):
        (WebCore::ScriptHeapSnapshot::~ScriptHeapSnapshot):
        (WebCore::ScriptHeapSnapshot::writeJSON):
        (WebCore::ScriptHeapSnapshot::ScriptHeapSnapshot):
        * bindings/v8/ScriptHeapSnapshot.cpp:
        (WebCore::ScriptHeapSnapshot::writeJSON):
        * bindings/v8/ScriptHeapSnapshot.h:
        (WebCore::ScriptHeapSnapshot::OutputStream::~OutputStream):
        * inspector/Inspector.idl:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::getProfile):
        * inspector/front-end/HeapSnapshotView.js:
        (WebInspector.HeapSnapshotEdgesIterator):
        (WebInspector.HeapSnapshotEdgesIterator.prototype.get done):
        (WebInspector.HeapSnapshotEdgesIterator.prototype.get isElement):
        (WebInspector.HeapSnapshotEdgesIterator.prototype.get isHidden):
        (WebInspector.HeapSnapshotEdgesIterator.prototype.get name):
        (WebInspector.HeapSnapshotEdgesIterator.prototype.next):
        (WebInspector.HeapSnapshotEdgesIterator.prototype.get node):
        (WebInspector.HeapSnapshotEdgesIterator.prototype.get nodeIndex):
        (WebInspector.HeapSnapshotEdgesIterator.prototype._getNameOrIndex):
        (WebInspector.HeapSnapshotEdgesIterator.prototype._getType):
        (WebInspector.HeapSnapshotNodeWrapper):
        (WebInspector.HeapSnapshotNodeWrapper.prototype.get edges):
        (WebInspector.HeapSnapshotNodeWrapper.prototype.get edgesCount):
        (WebInspector.HeapSnapshotNodeWrapper.prototype.get instancesCount):
        (WebInspector.HeapSnapshotNodeWrapper.prototype.get isHidden):
        (WebInspector.HeapSnapshotNodeWrapper.prototype.get name):
        (WebInspector.HeapSnapshotNodeWrapper.prototype.get selfSize):
        (WebInspector.HeapSnapshotNodeWrapper.prototype._getName):
        (WebInspector.HeapSnapshotNodeWrapper.prototype._getEdges):
        (WebInspector.HeapSnapshotNodeWrapper.prototype._getType):
        (WebInspector.HeapSnapshot):
        (WebInspector.HeapSnapshot.prototype._init):
        (WebInspector.HeapSnapshot.prototype.get rootEdges):
        (WebInspector.HeapSnapshotView.prototype.snapshotLoaded):
        (WebInspector.HeapSnapshotView.prototype._loadProfile.processLoadedSnapshot):
        (WebInspector.HeapSnapshotView.prototype._loadProfile):
        (WebInspector.HeapSnapshotView.prototype._convertSnapshot):
        (WebInspector.HeapSnapshotView.prototype._prepareProfile.mergeRetainers):
        (WebInspector.HeapSnapshotView.prototype._prepareProfile):
        (WebInspector.HeapSnapshotView.prototype._sortData):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel):
        (WebInspector.ProfilesPanel.prototype.addHeapSnapshotChunk):
        (WebInspector.ProfilesPanel.prototype.finishHeapSnapshot):
        * inspector/front-end/inspector.js:
        (WebInspector.addHeapSnapshotChunk):
        (WebInspector.finishHeapSnapshot):

2010-11-29  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt.

        layer()->currentTransform() is stale when layout changes the box size
        https://bugs.webkit.org/show_bug.cgi?id=50175
        
        RenderLayer::updateTransform() is fairly expensive, so we
        have to avoid calling it from RenderBox::applyLayerTransformToRect()
        every time. This requires that we update the layer's transform
        during layout, instead of from updateLayerPositions() which is too late.
        
        So call updateLayerTransform() from the various layout methods
        on renderers that can be transformed, and remove it from 
        updateLayerPositions().

        Test: fast/overflow/overflow-update-transform.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::layoutOnlyPositionedObjects):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::applyLayerTransformToRect):
        (WebCore::RenderBox::updateLayerTransform):
        * rendering/RenderBox.h:
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::layout):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):
        * rendering/RenderIFrame.cpp:
        (WebCore::RenderIFrame::layout):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPositions):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::layout):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):

2010-11-29  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Add remaining custom JSC web audio bindings
        https://bugs.webkit.org/show_bug.cgi?id=50172

        No new tests since audio API is not yet implemented.

        * bindings/js/JSAudioBufferSourceNodeCustom.cpp: Added.
        (WebCore::JSAudioBufferSourceNode::setBuffer):
        * bindings/js/JSConvolverNodeCustom.cpp: Added.
        (WebCore::JSConvolverNode::setBuffer):
        * bindings/js/JSJavaScriptAudioNodeCustom.cpp: Added.
        (WebCore::JSJavaScriptAudioNode::markChildren):
        * webaudio/AudioBufferSourceNode.idl:
        * webaudio/ConvolverNode.idl:

2010-11-29  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Darin Adler.

        HTMLFormElement.elements doesn't include fieldsets
        https://bugs.webkit.org/show_bug.cgi?id=48193

        Add fieldset and keygen to the list of form collection elements, by making them enumeratable.
        This patch does not add object element to the list. A separate bug will do that.

        Test: fast/forms/form-collection-elements.html

        * html/HTMLFieldSetElement.h:
        (WebCore::HTMLFieldSetElement::isEnumeratable):
        * html/HTMLKeygenElement.h:
        (WebCore::HTMLKeygenElement::isEnumeratable):

2010-11-29  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Martin Robinson.

        Get distcheck going.

        * GNUmakefile.am:

2010-11-29  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=50181
        CSS style declarations don't GC protect parents

        Test: fast/dom/StyleSheet/gc-declaration-parent-rule.html

        * bindings/js/JSCSSStyleDeclarationCustom.cpp: (WebCore::JSCSSStyleDeclaration::markChildren):
        Protect the parent rule.

2010-11-29  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: UI fix. In Timeline, Paint events "Location" value is displayed
        in a confusing manner. The format string should be changed from %d x %d
        pattern to (%d, %d).

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

        * English.lproj/localizedStrings.js:
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.FormattedRecord.prototype._generatePopupContent):

2010-11-29  Darin Adler  <darin@apple.com>

        Reviewed by Andreas Kling.

        Remove a couple unneeded overflow checks
        https://bugs.webkit.org/show_bug.cgi?id=49816

        * platform/text/TextCodecUTF16.cpp:
        (WebCore::TextCodecUTF16::encode): Use an ASSERT instead of
        an overflow check with CRASH.

2010-11-29  Tony Chang  <tony@chromium.org>

        Unreviewed, disable warnings again on chromium linux

        * WebCore.gyp/WebCore.gyp:

2010-11-29  Cosmin Truta  <ctruta@chromium.org>

        Reviewed by Nikolas Zimmermann.

        getBoundingClientRect: Do not truncate the coordinates to integers
        https://bugs.webkit.org/show_bug.cgi?id=48110

        Remove the float-to-int coordinate conversions inside getBoundingClientRect,
        to comply with the CSSOM View Module API.

        Tests: fast/dom/Element/getBoundingClientRect.html
               fast/dom/Range/getBoundingClientRect.html
               svg/zoom/page/zoom-getBoundingClientRect.xhtml
               svg/zoom/page/zoom-zoom-coords.xhtml

        * dom/ClientRect.cpp:
        (WebCore::ClientRect::ClientRect): Added overload to allow a FloatRect argument.
        * dom/ClientRect.h:
        (WebCore::ClientRect::create): Ditto.
        * dom/Element.cpp:
        (Element::getBoundingClientRect): Removed conversion from FloatRect to IntRect.
        * dom/Range.cpp:
        (WebCore::Range::getBoundingClientRect): Ditto.
        * rendering/RenderObject.h:
        (adjustIntRectForAbsoluteZoom): Removed.
        (adjustFloatRectForAbsoluteZoom): Added.
        * rendering/style/RenderStyle.h:
        (adjustFloatForAbsoluteZoom): Added.

2010-11-29  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Converge means of querying a parent node into one way, which is Node::parentNode.
        https://bugs.webkit.org/show_bug.cgi?id=49686

        A follow-up to r72259, which explicitly forbids further use of Node::parent by
        making it private.

        No change in behavior, so no new tests.

        * dom/Document.cpp:
        (WebCore::Document::styleForElementIgnoringPendingStylesheets): Changed to use parentNode.
        (WebCore::Document::hoveredNodeDetached): Ditto.
        (WebCore::Document::activeChainNodeDetached): Ditto.
        * dom/Node.h: Made Node::parent private.
        * page/SpatialNavigation.cpp:
        (WebCore::canBeScrolledIntoView): Changed to use parentNode.
        * xml/XSLTProcessorQt.cpp:
        (WebCore::XSLTProcessor::transformToString): Ditto.

2010-11-29  Tony Chang  <tony@chromium.org>

        Reviewed by James Robinson.

        [chromium] try to enable WebCore compiler warnings on linux
        https://bugs.webkit.org/show_bug.cgi?id=50168

        * WebCore.gyp/WebCore.gyp:
        * platform/graphics/chromium/FontLinux.cpp:
        (WebCore::TextRunWalker::setPadding):
        (WebCore::TextRunWalker::setGlyphXPositions):
        (WebCore::glyphIndexForXPositionInScriptRun):

2010-11-29  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=50165
        CSS style rules don't GC protect parents

        Tests: fast/dom/StyleSheet/gc-parent-rule.html
               fast/dom/StyleSheet/gc-parent-stylesheet.html

        * bindings/js/JSCSSRuleCustom.cpp: (WebCore::JSCSSRule::markChildren): Mark parents. The code
        is super naive compared to what we have for nodes - but CSSOM has shallow hierarchies, so
        it should be OK.

        * css/CSSRule.idl: Added CustomMarkFunction.

2010-11-29  Gavin Peters  <gavinp@chromium.org>

        Reviewed by Adam Barth.

        Web page can prevent WebKit from loading subresources on other
        pages (cache poisoning)
        https://bugs.webkit.org/show_bug.cgi?id=35404

        Tests: http/tests/misc/unloadable-script.html
               loader/reload-subresource-when-type-changes.html

        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::requestResource):

2010-11-29  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Crash in WebCore::CSSStyleSelector::loadPendingImages
        https://bugs.webkit.org/show_bug.cgi?id=50149
        
        Null-check style->boxReflect() when loading pending style images.

        Test: fast/reflections/pending-reflection-mask-crash.html

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

2010-11-29  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: crash upon inspecting user style sheet.
        https://bugs.webkit.org/show_bug.cgi?id=50109

        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::resourceStyleSheetText):

2010-11-29  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Roben.

        [WINCE] Implement WebCore::directoryName
        https://bugs.webkit.org/show_bug.cgi?id=50031

        Also fix handling of paths without path separator.

        * platform/wince/FileSystemWinCE.cpp:
        (WebCore::reverseFindPathSeparator):
        (WebCore::makeAllDirectories):
        (WebCore::pathGetFileName):
        (WebCore::directoryName):

2010-11-29  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Roben.

        Simplify directoryName in FileSystemWin.cpp
        https://bugs.webkit.org/show_bug.cgi?id=50028

        * platform/win/FileSystemWin.cpp:
        (WebCore::directoryName):

2010-11-24  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        REGRESSION (r71934): Main search field at Apple tech specs does not accept typing
        https://bugs.webkit.org/show_bug.cgi?id=49868

        The problem here was that the inner text element of search input was first laid out as
        disabled and thus with a 0-height. This would prevent a hit test to ever reach it, even
        if it's enabled.

        Test: fast/forms/disabled-search-input.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::hasLineIfEmpty): Removed a check for textarea that is no longer necessary.
        * rendering/TextControlInnerElements.cpp:
        (WebCore::RenderTextControlInnerBlock::hasLineIfEmpty): Added an override to ensure that
            an empty inner text element is always one-line high.

2010-11-29  W. James MacLean  <wjmaclean@chromium.org>

       Reviewed by Dirk Schulze.

       Large input numbers cause overflow during SVG parsing, leading to crash
       https://bugs.webkit.org/show_bug.cgi?id=49546

       Values outside the range supported by float lead to Infinity() or NaN()
       during parsing, leading to subsequent crashes. Modified
       parser to verify number is in the supported range, and return false if not.

       Tests: svg/custom/svg-parse-overflow-1.html
              svg/custom/svg-parse-overflow-2.html
              svg/custom/svg-parse-overflow-3.html
              svg/custom/svg-parse-overflow-4.html
              svg/custom/svg-parse-overflow-5.html

       * svg/SVGParserUtilities.cpp:
       (WebCore::isValidRange):
       (WebCore::genericParseNumber):

2010-11-29  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: display name of an object constructor as the object's type
        https://bugs.webkit.org/show_bug.cgi?id=50063

        Name of the function that has created given object is used as the object's
        type when it's displayed in the inspector front-end(in case of V8). Before
        this change, it was always a value of the object's constructor.name property
        which is confusing in some cases(see the test).

        Removed check for jsEngine from the InjectedScript.js, all VM-specific code
        is now encapsulated on the bindings layer.

        Test: inspector/console-object-constructor-name.html

        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::createInjectedScript):
        (WebCore::JSInjectedScriptHost::constructorName):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::createInjectedScript):
        (WebCore::V8InjectedScriptHost::constructorNameCallback):
        * inspector/InjectedScriptHost.idl:
        * inspector/front-end/InjectedScript.js:
        (injectedScriptConstructor.):

2010-11-29  Jeremy Moskovich  <jeremy@chromium.org>

        Reviewed by Eric Seidel.

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

        Remove temporary workaround to load Gears plugin.

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::rendererIsNeeded):

2010-11-29  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Antonio Gomes.

        Spatial Navigation: Store more information in FocusCandidate
        https://bugs.webkit.org/show_bug.cgi?id=50153

        More information should be stored in FocusCandidate, to avoid
        recalculating it when running the spatial navigation algorithm.

        No new tests, since this is code refactoring only.

        * page/FocusController.cpp:
        (WebCore::updateFocusCandidateIfNeeded):
        (WebCore::FocusController::findFocusCandidateInContainer):
        (WebCore::FocusController::advanceFocusDirectionallyInContainer):
        * page/SpatialNavigation.cpp:
        (WebCore::FocusCandidate::FocusCandidate):
        (WebCore::canBeScrolledIntoView):
        * page/SpatialNavigation.h:
        (WebCore::FocusCandidate::FocusCandidate):

2010-11-29  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Use the right focusable check to avoid multiple focus/blur events being fired from inside of the shadow DOM.
        https://bugs.webkit.org/show_bug.cgi?id=49977

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::setFocusedNodeIfNeeded): Added a FIXME to remove redundant code.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::dispatchMouseEvent): Changed to use isMouseFocusable, which is what shadow DOM elements
            override, and added a FIXME to convert to use shadow DOM-aware traversal instead of render tree traversal.

        Test: fast/events/shadow-boundary-crossing-2.html

2010-11-29  Adam Roben  <aroben@apple.com>

        Windows build fix after r72715

        * WebCore.vcproj/WebCore.vcproj: Add a missing </File> tag to fix an
        XML syntax error.

2010-11-29  Bernhard Bauer  <bauerb@chromium.org>

        Reviewed by Jeremy Orlow.

        Remove databaseFileName from IDBFactoryBackendImpl
        https://bugs.webkit.org/show_bug.cgi?id=50150

        No new tests, since functionality is unchanged.

        * storage/IDBFactoryBackendImpl.cpp:
        (WebCore::openSQLiteDatabase):
        * storage/IDBFactoryBackendImpl.h:

2010-11-29  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Xan Lopez.

        [GStreamer] take video sink ownership with gst_object API
        https://bugs.webkit.org/show_bug.cgi?id=49011

        Use gst_object_ref_sink instead of g_object_ref_sink to avoid
        possible leaks.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin):

2010-11-29  Jan Erik Hanssen  <jhanssen@sencha.com>

        Reviewed by Kenneth Rohde Christiansen.

        QtWebKit asserts when selecting elided text.
        https://bugs.webkit.org/show_bug.cgi?id=45391

        Ensure that the length passed to fromRawDataWithoutRef() does
        not exceed the length of the string.

        * platform/graphics/qt/FontQt.cpp:
        (WebCore::Font::selectionRectForSimpleText):

2010-11-26  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Styles Gear Menu Choice to Display Colors "As Authored"
        https://bugs.webkit.org/show_bug.cgi?id=31614

        * English.lproj/localizedStrings.js:
        * inspector/front-end/Color.js:
        (WebInspector.Color.prototype.toString):
        (WebInspector.Color.prototype._parse.this.rgba.set 0):
        (WebInspector.Color.prototype._parse.set WebInspector):
        (WebInspector.Color.prototype._parse):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertyTreeElement.prototype.updateTitle.processColor.nextFormat):
        (WebInspector.StylePropertyTreeElement.prototype.updateTitle.processColor.changeColorDisplay):

2010-11-29  Helder Correia  <helder@sencha.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] fillRect shadow has incorrect behavior when using ctx.scale(x,y)
        https://bugs.webkit.org/show_bug.cgi?id=50141

        Don't apply scaling transformation to shadow offsets.

        Test: fast/canvas/canvas-scale-fillRect-shadow.html

        * platform/graphics/ContextShadow.h:
        * platform/graphics/qt/ContextShadowQt.cpp:
        (WebCore::ContextShadow::beginShadowLayer):
        (WebCore::ContextShadow::endShadowLayer):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::fillRect):

2010-11-28  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Default event handlers should also be using event retargeting.
        https://bugs.webkit.org/show_bug.cgi?id=49986

        Test: fast/events/shadow-boundary-crossing-2.html

        * dom/EventContext.cpp:
        (WebCore::EventContext::defaultEventHandler): Added.
        * dom/EventContext.h: Added decl.
        * dom/Node.cpp:
        (WebCore::Node::dispatchGenericEvent): Changed to use event retargeting for
            default event handlers.

2010-11-23  MORITA Hajime  <morrita@google.com>

        Reviewed by Kent Tamura.

        REGRESSION: Text on <input type="search"> is not spellchecked.
        https://bugs.webkit.org/show_bug.cgi?id=49651

        TextControlInnerElement::isSpellCheckingEnabled() didn't consider 
        non-root shadow elelements and always went false for <input type="search>.
        This change unifies shadow and host handling into Element::isSpellCheckingEnabled().
        
        Test: editing/spelling/spellcheck-attribute.html
        
        * dom/Element.cpp:
        (WebCore::Element::isSpellCheckingEnabled):
        * rendering/TextControlInnerElements.cpp:
        * rendering/TextControlInnerElements.h:

2010-11-28  Antonio Gomes  <agomes@rim.com>

        Reviewed by Kenneth Rohde Christiansen.

        Spatial Navigation: use isSpatialNaviagtionEnabled from SpatialNavigation.h in HTMLInputElement::defaultEventHandler
        https://bugs.webkit.org/show_bug.cgi?id=50131

        For all isSpatialNavigationEnabled calls throughout WebCore, we decided to use the static method in
        SpatialNavigation.h instead of directly checking from the one in Settings.h. Reason: in a soon future,
        there  will be a isCaretBrowsing check incorporated into this method (and probably renaming it accordingly)
        to avoid feature conflicts (spatial navigation x caret browsing).

        No new tests needed.

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

2010-11-27  Benjamin Kalman  <kalman@chromium.org>

        Reviewed by Darin Adler.

        Move Position::EditingBoundaryCrossingRule to a new header file
        https://bugs.webkit.org/show_bug.cgi?id=49630

        * GNUmakefile.am:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Position.cpp:
        (WebCore::downstreamIgnoringEditingBoundaries):
        (WebCore::upstreamIgnoringEditingBoundaries):
        * dom/Position.h:
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::doApply):
        * editing/EditingBoundary.h: Added.
        * editing/visible_units.cpp:
        (WebCore::startOfParagraph):
        (WebCore::endOfParagraph):
        (WebCore::isStartOfParagraph):
        (WebCore::isEndOfParagraph):
        * editing/visible_units.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::createVisiblePosition):

2010-11-26  Rob Buis  <rwlbuis@gmail.com>

        Reviewed by Simon Fraser.

        Percentage z offset in transform-origin should make the property invalid
        https://bugs.webkit.org/show_bug.cgi?id=48704

        Discard transform-origin property when parsing invalid Z value.

        Test: fast/css/transform-origin-parsing.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseTransformOriginShorthand):
        (WebCore::CSSParser::parseTransformOrigin):
        * css/CSSParser.h:

2010-11-26  Dan Bernstein  <mitz@apple.com>

        Reviewed by Antti Koivisto.

        <rdar://problem/8681368> Avoid unnecessary calls to CTFontGetPlatformFont()
        https://bugs.webkit.org/show_bug.cgi?id=50096

        No new test, since functionality is unchanged.

        * platform/graphics/chromium/CrossProcessFontLoading.mm:
        (WebCore::FontPlatformData::loadFont): Removed the ATSUFontID argument.
        * platform/graphics/cocoa/FontPlatformData.h:
        (WebCore::FontPlatformData::FontPlatformData): Ditto.
        (WebCore::FontPlatformData::operator==): Removed comparison of font IDs.
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::FontPlatformData::loadFont): Removed the ATSUFontID argument.
        (WebCore::FontPlatformData::FontPlatformData): Updated.
        (WebCore::FontPlatformData::operator=): Removed copying of font ID.
        (WebCore::FontPlatformData::setFont): Removed setting of font ID.
        * platform/graphics/mac/ComplexTextControllerATSUI.cpp:
        (WebCore::initializeATSUStyle): Call CTFontGetPlatformFont() here if necessary.
        * platform/graphics/mac/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData): Updated for FontPlatformData change.
        (WebCore::createFontCustomPlatformData): Updated for FontCustomPlatformData change.
        * platform/graphics/mac/FontCustomPlatformData.h:
        (WebCore::FontCustomPlatformData::FontCustomPlatformData): Removed ATSUFontID argument and
        data member.
        * platform/graphics/mac/SimpleFontDataATSUI.mm:
        (WebCore::SimpleFontData::checkShapesArabic): Call CTFontGetPlatformFont() here if necessary.

2010-11-26  François Sausset  <sausset@gmail.com>

        Reviewed by Daniel Bates.

        MathML: code cleaning needed in MathMLInlineContainerElement.cpp
        https://bugs.webkit.org/show_bug.cgi?id=50069

        Unnecessary namespace was removed and style was adjusted.

        * mathml/MathMLInlineContainerElement.cpp:
        (WebCore::MathMLInlineContainerElement::createRenderer):

2010-11-26  Andrei Popescu  <andreip@google.com>

        Reviewed by Jeremy Orlow.

        IDBDatabase and IDBObjectStore remove* methods should be renamed to delete*
        https://bugs.webkit.org/show_bug.cgi?id=50113

        Modified exisiting layout tests to cover this change.

        * storage/IDBDatabase.cpp:
        (WebCore::IDBDatabase::deleteObjectStore):
        * storage/IDBDatabase.h:
        * storage/IDBDatabase.idl:
        * storage/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::deleteObjectStore):
        (WebCore::IDBDatabaseBackendImpl::deleteObjectStoreInternal):
        * storage/IDBDatabaseBackendImpl.h:
        * storage/IDBDatabaseBackendInterface.h:
        * storage/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::deleteFunction):
        (WebCore::IDBObjectStore::deleteIndex):
        * storage/IDBObjectStore.h:
        * storage/IDBObjectStore.idl:
        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::deleteFunction):
        (WebCore::IDBObjectStoreBackendImpl::deleteInternal):
        (WebCore::IDBObjectStoreBackendImpl::deleteIndex):
        (WebCore::IDBObjectStoreBackendImpl::deleteIndexInternal):
        * storage/IDBObjectStoreBackendImpl.h:
        * storage/IDBObjectStoreBackendInterface.h:

2010-11-26  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r72701.
        http://trac.webkit.org/changeset/72701
        https://bugs.webkit.org/show_bug.cgi?id=50114

        REGRESSION: bad transform matrix on content layer (Requested
        by backer on #webkit).

        * WebCore.gypi:
        * platform/graphics/chromium/Canvas2DLayerChromium.cpp:
        (WebCore::Canvas2DLayerChromium::updateContents):
        * platform/graphics/chromium/Canvas2DLayerChromium.h:
        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::cleanupResources):
        (WebCore::ContentLayerChromium::updateContents):
        (WebCore::ContentLayerChromium::updateTextureRect):
        (WebCore::ContentLayerChromium::draw):
        * platform/graphics/chromium/ContentLayerChromium.h:
        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerChromium::updateContents):
        * platform/graphics/chromium/ImageLayerChromium.h:
        * platform/graphics/chromium/LayerChromium.h:
        (WebCore::LayerChromium::contentsDirty):
        (WebCore::LayerChromium::updateContents):
        (WebCore::LayerChromium::draw):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::LayerRendererChromium):
        (WebCore::LayerRendererChromium::prepareToDrawLayers):
        (WebCore::LayerRendererChromium::drawLayers):
        (WebCore::LayerRendererChromium::updateLayersRecursive):
        (WebCore::LayerRendererChromium::useRenderSurface):
        (WebCore::LayerRendererChromium::drawLayer):
        (WebCore::LayerRendererChromium::initializeSharedObjects):
        (WebCore::LayerRendererChromium::cleanupSharedObjects):
        * platform/graphics/chromium/LayerRendererChromium.h:
        * platform/graphics/chromium/LayerTexture.cpp: Removed.
        * platform/graphics/chromium/LayerTexture.h: Removed.
        * platform/graphics/chromium/PluginLayerChromium.cpp:
        (WebCore::PluginLayerChromium::updateContents):
        * platform/graphics/chromium/PluginLayerChromium.h:
        * platform/graphics/chromium/RenderSurfaceChromium.cpp:
        (WebCore::RenderSurfaceChromium::RenderSurfaceChromium):
        (WebCore::RenderSurfaceChromium::cleanupResources):
        (WebCore::RenderSurfaceChromium::prepareContentsTexture):
        * platform/graphics/chromium/RenderSurfaceChromium.h:
        * platform/graphics/chromium/TextureManager.cpp: Removed.
        * platform/graphics/chromium/TextureManager.h: Removed.
        * platform/graphics/chromium/VideoLayerChromium.cpp:
        (WebCore::VideoLayerChromium::updateContents):
        * platform/graphics/chromium/VideoLayerChromium.h:
        * platform/graphics/chromium/WebGLLayerChromium.cpp:
        (WebCore::WebGLLayerChromium::updateContents):
        * platform/graphics/chromium/WebGLLayerChromium.h:

2010-11-26  Jeremy Orlow  <jorlow@chromium.org>

        Unreviewed build fix.

        * storage/IDBIndex.cpp:
        (WebCore::IDBIndex::openCursor):
        (WebCore::IDBIndex::openKeyCursor):
        * storage/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::openCursor):

2010-11-26  Sergio Villar Senin  <svillar@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] SoupCache should not ignore loader's conditional requests
        https://bugs.webkit.org/show_bug.cgi?id=50101

        SoupCache must not handle WebKit loader conditional requests and
        thus should never return its own cached response if any. This was
        causing frequent resource load failures as WebCore was trying to
        revalidate its own resources and was not getting any expected
        result.

        * platform/network/soup/cache/webkit/soup-cache.c:
        (webkit_soup_cache_has_response): check the presence of
        conditional request headers when deciding whether the cache has a
        valid response for a given request.

2010-11-26  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Steve Block.

        Make IDBKeyRange match the spec
        https://bugs.webkit.org/show_bug.cgi?id=50105

        Remove flags and instead add two booleans for being open.
        Change left to lower and right to upper everywhere.

        * storage/IDBIndexBackendImpl.cpp:
        (WebCore::IDBIndexBackendImpl::openCursorInternal):
        * storage/IDBKey.cpp:
        (WebCore::IDBKey::lowerCursorWhereFragment):
        (WebCore::IDBKey::upperCursorWhereFragment):
        * storage/IDBKey.h:
        * storage/IDBKeyRange.cpp:
        (WebCore::IDBKeyRange::IDBKeyRange):
        (WebCore::IDBKeyRange::only):
        (WebCore::IDBKeyRange::lowerBound):
        (WebCore::IDBKeyRange::upperBound):
        (WebCore::IDBKeyRange::bound):
        (WebCore::IDBKeyRange::lowerWhereClauseComparisonOperator):
        (WebCore::IDBKeyRange::upperWhereClauseComparisonOperator):
        * storage/IDBKeyRange.h:
        (WebCore::IDBKeyRange::create):
        (WebCore::IDBKeyRange::lower):
        (WebCore::IDBKeyRange::upper):
        (WebCore::IDBKeyRange::lowerOpen):
        (WebCore::IDBKeyRange::upperOpen):
        * storage/IDBKeyRange.idl:
        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::openCursorInternal):

2010-11-25  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Steve Block.

        Convert open*Cursor and createIndex over to using OptionsObject
        https://bugs.webkit.org/show_bug.cgi?id=50093

        Add IDBKeyRange to OptionsObject's parsing abilities. Switch
        more APIs over to using it.

        * bindings/v8/OptionsObject.cpp:
        (WebCore::OptionsObject::getKeyDOMStringList):
        (WebCore::OptionsObject::getKeyKeyRange):
        * bindings/v8/OptionsObject.h:
        * storage/IDBIndex.cpp:
        (WebCore::IDBIndex::openCursor):
        (WebCore::IDBIndex::openKeyCursor):
        * storage/IDBIndex.h:
        (WebCore::IDBIndex::openCursor):
        (WebCore::IDBIndex::openKeyCursor):
        * storage/IDBIndex.idl:
        * storage/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::createIndex):
        (WebCore::IDBObjectStore::openCursor):
        * storage/IDBObjectStore.h:
        (WebCore::IDBObjectStore::createIndex):
        (WebCore::IDBObjectStore::openCursor):
        * storage/IDBObjectStore.idl:

2010-11-25  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Steve Block.

        Clean up IDBDatabase.transaction and add checks to IDBTransaction.objectStore
        https://bugs.webkit.org/show_bug.cgi?id=50081

        IDBDatabase.transaction should use the new optional OptionsObject way
        of taking optional paramters. Modify that object to get numbers and
        domStringLists from it. Verify that any requested resources exist and
        return an exception if not.

        When IDBTransaction.objectStore is called, verify that it's one of the
        requested resources. Also verify that it still exists. Plumb the
        exception code to make this work.

        Tests: storage/indexeddb/create-and-remove-object-store.html
               storage/indexeddb/transaction-and-objectstore-calls.html

        * bindings/v8/OptionsObject.cpp:
        (WebCore::OptionsObject::getKeyInteger):
        (WebCore::OptionsObject::getKeyString):
        (WebCore::OptionsObject::getKeyDOMStringList):
        * bindings/v8/OptionsObject.h:
        * storage/IDBDatabase.cpp:
        (WebCore::IDBDatabase::createObjectStore):
        (WebCore::IDBDatabase::transaction):
        * storage/IDBDatabase.h:
        (WebCore::IDBDatabase::transaction):
        * storage/IDBDatabase.idl:
        * storage/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::transaction):
        * storage/IDBTransaction.cpp:
        (WebCore::IDBTransaction::objectStore):
        * storage/IDBTransactionBackendImpl.cpp:
        (WebCore::IDBTransactionBackendImpl::IDBTransactionBackendImpl):
        (WebCore::IDBTransactionBackendImpl::objectStore):
        * storage/IDBTransactionBackendImpl.h:
        * storage/IDBTransactionBackendInterface.h:

2010-11-26  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] events missing when a document is (re)loaded
        https://bugs.webkit.org/show_bug.cgi?id=25831

        Make sure webArea returns a proper name and that a signal
        'state-change::defunct' is emitted when detaching the wrapper.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (webkit_accessible_get_name): Returns the current document's title
        as fallback mechanism for webArea objects.
        (webkit_accessible_detach): Emit 'state-change::defunct' function
        as soon as the wrapper is detached from the related core object.

2010-11-26  Sergio Villar Senin  <svillar@igalia.com>

        Reviewed by Xan Lopez.

        [Gtk] ASSERT(d->m_response.isNull()) in contentSniffedCallback
        https://bugs.webkit.org/show_bug.cgi?id=50083

        ResourceHandleSoup should not listen to content-sniffed signal
        when content sniffing is not enabled. This will prevent us
        reaching an assertion on content-sniffed callback

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::startHttp):
        * platform/network/soup/cache/soup-request-http.c:
        (conditional_get_ready_cb): added a comment with the
        possible fix for a pure libsoup HTTP cache.
        (send_async_cb): prevent an early object finalization adding a
        reference.
        (webkit_soup_request_http_send_async): Ditto.

2010-11-26  Renata Hodovan  <reni@inf.u-szeged.hu>

        Reviewed by Antonio Gomes.

        [Qt] Remove empty ScrollView::platformInit/platformDestroy
        https://bugs.webkit.org/show_bug.cgi?id=50079

        No new test is needed.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::wheelEvent):
        * platform/qt/ScrollViewQt.cpp:

2010-11-26  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed. Fixing inspector tests.

        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype.set timing):

2010-11-25  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: UI polish for Network and Resources panels.
        https://bugs.webkit.org/show_bug.cgi?id=50100

        - Fixed timing inconsistencies
        - Made grid user-selectable
        - Selection in network panel is made on name column only

        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel):
        (WebInspector.NetworkPanel.prototype._toggleGridMode):
        (WebInspector.NetworkDataGridNode.prototype.createCells):
        (WebInspector.NetworkDataGridNode.prototype.select):
        (WebInspector.NetworkDataGridNode.prototype.get selectable):
        (WebInspector.NetworkDataGridNode.prototype._createTimelineCell):
        (WebInspector.NetworkDataGridNode.prototype.refreshGraph):
        (WebInspector.NetworkDataGridNode.prototype._refreshLabelPositions):
        * inspector/front-end/Popover.js:
        (WebInspector.PopoverHelper):
        (WebInspector.PopoverHelper.prototype.setTimeout):
        (WebInspector.PopoverHelper.prototype._mouseMove):
        (WebInspector.PopoverHelper.prototype._handleMouseAction):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype.get responseReceivedTime):
        (WebInspector.Resource.prototype.set endTime):
        (WebInspector.Resource.prototype.set timing):
        * inspector/front-end/ResourceManager.js:
        (WebInspector.ResourceManager.prototype.didReceiveResponse):
        (WebInspector.ResourceManager.prototype.didFinishLoading):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.FrameResourceTreeElement.prototype._ondragstart):
        * inspector/front-end/networkPanel.css:
        (.network-sidebar .data-grid td:not(.network-summary)):
        (.network-sidebar .data-grid td.name-column):
        (.network.panel:not(.viewing-resource) .network-sidebar td.name-column:hover):
        (.network-timing-row):
        (.network-timing-bar):
        (.network-timing-bar-title):
        (.resource-timing-view):

2010-11-26  Helder Correia  <helder@sencha.com>

        Reviewed by Ariya Hidayat.

        [Qt] Blur shadow for rectangle fill
        https://bugs.webkit.org/show_bug.cgi?id=44488

        Shadow color opacity needs to be set when blurring shadow with
        ContextShadow.

        Test: fast/canvas/canvas-fillRect-shadow.html

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

2010-11-26  Hans Wennborg  <hans@chromium.org>

        Reviewed by Jeremy Orlow.

        IndexedDB: Rename IDBDatabase.objectStores to objectStoreNames
        https://bugs.webkit.org/show_bug.cgi?id=50102

        Rename as per the spec: http://dvcs.w3.org/hg/IndexedDB/raw-file/tip/Overview.html#database-interface

        * manual-tests/indexeddb-persists.html:
        * storage/IDBDatabase.h:
        (WebCore::IDBDatabase::objectStoreNames):
        * storage/IDBDatabase.idl:
        * storage/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::objectStoreNames):
        (WebCore::IDBDatabaseBackendImpl::setVersion):
        (WebCore::IDBDatabaseBackendImpl::transaction):
        * storage/IDBDatabaseBackendImpl.h:
        * storage/IDBDatabaseBackendInterface.h:

2010-11-26  Andrei Popescu  <andreip@google.com>

        Reviewed by Jeremy Orlow.

        IDBFactory::open should not have a description argument.
        https://bugs.webkit.org/show_bug.cgi?id=50087

        Modified exisiting tests to cover this change.

        * storage/IDBDatabaseBackendImpl.cpp:
        (WebCore::setMetaData):
        (WebCore::IDBDatabaseBackendImpl::IDBDatabaseBackendImpl):
        (WebCore::IDBDatabaseBackendImpl::setVersionInternal):
        * storage/IDBDatabaseBackendImpl.h:
        (WebCore::IDBDatabaseBackendImpl::create):
        * storage/IDBDatabaseBackendInterface.h:
        * storage/IDBFactory.cpp:
        (WebCore::IDBFactory::open):
        * storage/IDBFactory.h:
        * storage/IDBFactory.idl:
        * storage/IDBFactoryBackendImpl.cpp:
        (WebCore::IDBFactoryBackendImpl::open):
        * storage/IDBFactoryBackendImpl.h:
        * storage/IDBFactoryBackendInterface.h:

2010-11-25  Kenichi Ishibashi  <bashi@google.com>

        Reviewed by Kent Tamura.

        Assertion failure by resetting <output> twice
        https://bugs.webkit.org/show_bug.cgi?id=50095

        Don't call setTextContentInternal() when the value wouldn't
        be changed.

        Test: fast/forms/output-reset-assertion-failed.html

        * html/HTMLOutputElement.cpp:
        (WebCore::HTMLOutputElement::HTMLOutputElement): Calls
        setTextContentInternal() if and only if needed.
        (WebCore::HTMLOutputElement::reset): Ditto.
        (WebCore::HTMLOutputElement::setValue): Ditto.
        (WebCore::HTMLOutputElement::setDefaultValue): Ditto.

2010-11-24  Ryosuke Niwa  <rniwa@webkit.org>

        Crash when moving caret around a word with a first-letter rule and whitespace is not collapsible.
        https://bugs.webkit.org/show_bug.cgi?id=49652

        Fixed the crash by giving the correct end offset to emitText in handleTextNode.

        This patch does not fix a bug in TextIterator that incorrectly calculates
        the end offset of a word with a first-letter rule as demonstrated in the layout test
        because fixing the bug requires an overhaul of TextIterator and new behavior is consistent
        with the case when whitespace is collapsible.

        Test: editing/text-iterator/first-letter-word-boundary.html

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::handleTextNode):

2010-11-25  Mike Lawther  <mikelawther@chromium.org>

        Reviewed by Kent Tamura.

        Fix typos in CSS grammar (HERZ -> HERTZ)
        https://bugs.webkit.org/show_bug.cgi?id=50094

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

2010-11-25  Antti Koivisto  <antti@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=50078
        Simplify CachedResource error handling code by getting rid of the m_httpStatusCodeErrorOccurred boolean.

        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::CachedImage):
        * loader/cache/CachedImage.h:
        (WebCore::CachedImage::shouldIgnoreHTTPStatusCodeErrors):
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::shouldIgnoreHTTPStatusCodeErrors):
        (WebCore::CachedResource::httpStatusCodeErrorOccurred):
        * loader/loader.cpp:
        (WebCore::Loader::didReceiveData):

2010-11-25  Andreas Kling  <kling@webkit.org>

        Reviewed by Tor Arne Vestbø.

        [Qt] Remove unnecessary save/restore in GraphicsContext::drawConvexPolygon()
        https://bugs.webkit.org/show_bug.cgi?id=50085

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::drawConvexPolygon):
        Remember the previous antialiasing mode and reset it after we're done.

2010-11-25  Ben Murdoch  <benm@google.com>

        Reviewed by Steve Block.

        Potential crash in JavaClassV8.cpp
        https://bugs.webkit.org/show_bug.cgi?id=50016

        It is possible that we attempt to free uninitialised
        memory in the JavaClass destrctor when using V8 in the
        case that the JVM could not find the class in the constructor.

        It turns out that the troublesome m_name is not acutally
        used anywhere, so we remove it in this patch.

        No new tests, just removing dead code.

        * bridge/jni/v8/JavaClassV8.cpp: Remove unused m_name.
        * bridge/jni/v8/JavaClassV8.h: Ditto.

2010-11-25  Hans Wennborg  <hans@chromium.org>

        Reviewed by Jeremy Orlow.

        IndexedDB: Better errors for not yet implemented features
        https://bugs.webkit.org/show_bug.cgi?id=50075

        Raise an exception if createObjectStore is called with autoIncrement
        set to true.

        Be a little bit more explicit in IDBBindingUtilities that we don't
        allow using Date objects as keys yet.

        * bindings/v8/IDBBindingUtilities.cpp:
        (WebCore::createIDBKeyFromValue):
        * storage/IDBDatabase.cpp:
        (WebCore::IDBDatabase::createObjectStore):
        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::putInternal):

2010-11-25  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: highlight diffs of revisions against base version.
        https://bugs.webkit.org/show_bug.cgi?id=50088

        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleModel.prototype._styleSheetChanged.callback):
        (WebInspector.CSSStyleModel.prototype._styleSheetChanged):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel):
        (WebInspector.ResourcesPanel.prototype.show):
        (WebInspector.ResourcesPanel.prototype._showResourceView.callback):
        (WebInspector.ResourcesPanel.prototype._showResourceView):
        (WebInspector.ResourcesPanel.prototype._applyDiffMarkup):
        (WebInspector.FrameResourceTreeElement.prototype._contentChanged):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.markDiff):
        (WebInspector.SourceFrame.prototype._createViewerIfNeeded):
        (WebInspector.SourceFrame.prototype._updateDiffDecorations.addDecorations):
        (WebInspector.SourceFrame.prototype._updateDiffDecorations):
        (WebInspector.SourceFrame.prototype._removeDiffDecorations):
        * inspector/front-end/SourceView.js:
        * inspector/front-end/textViewer.css:
        (.webkit-line-number):
        (.diff-container .webkit-added-line .webkit-line-content):
        (.diff-container .webkit-removed-line .webkit-line-content):
        (.diff-container .webkit-changed-line .webkit-line-content):
        * inspector/front-end/utilities.js:

2010-11-25  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r72732.
        http://trac.webkit.org/changeset/72732
        https://bugs.webkit.org/show_bug.cgi?id=50089

        Made Qt bot sad and crashy (Requested by Ossy on #webkit).

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::QNetworkReplyHandler):
        * platform/network/qt/QNetworkReplyHandler.h:
        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::WebCoreSynchronousLoader::didFinishLoading):
        (WebCore::WebCoreSynchronousLoader::didFail):
        (WebCore::ResourceHandle::loadResourceSynchronously):

2010-11-25  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r72734.
        http://trac.webkit.org/changeset/72734
        https://bugs.webkit.org/show_bug.cgi?id=50086

        Backing out 72732 which made Qt sad and crashy (Requested by
        kling on #webkit).

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

2010-11-25  Andreas Kling  <kling@webkit.org>

        Unreviewed crash fix for Qt 4.6.x.

        Check that QNetworkReplyHandler::reply() doesn't return null before
        using it (this code needs to work for Qt 4.6 as well.)

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

2010-11-25  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r72727.
        http://trac.webkit.org/changeset/72727
        https://bugs.webkit.org/show_bug.cgi?id=50084

        Broke dom-breakpoints test on chromium win (Requested by
        podivilov on #webkit).

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::setNativeBreakpoint):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        (WebCore::InspectorDOMAgent::discardBindings):
        (WebCore::InspectorDOMAgent::setDOMBreakpoint):
        (WebCore::InspectorDOMAgent::removeDOMBreakpoint):
        (WebCore::InspectorDOMAgent::descriptionForDOMEvent):
        (WebCore::InspectorDOMAgent::removeBreakpointsForNode):
        (WebCore::InspectorDOMAgent::createBreakpointId):
        * inspector/InspectorDOMAgent.h:
        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager.prototype.reset):
        (WebInspector.BreakpointManager.prototype.createDOMBreakpoint):
        (WebInspector.BreakpointManager.prototype._updateNativeBreakpointsInSettings):
        (WebInspector.BreakpointManager.prototype.restoreBreakpoints):
        (WebInspector.BreakpointManager.prototype.restoreDOMBreakpoints):
        (WebInspector.DOMBreakpoint):
        (WebInspector.DOMBreakpoint.prototype.populateLabelElement):
        (WebInspector.EventListenerBreakpoint):
        (WebInspector.XHRBreakpoint):
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.BreakpointsSidebarPane):
        (WebInspector.BreakpointsSidebarPane.prototype.reset):
        (WebInspector.EventListenerBreakpointsSidebarPane):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype.reset):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMAgent.prototype._setDocument):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.reset):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype._populateTagContextMenu.handlerFunction):
        (WebInspector.ElementsTreeElement.prototype._populateTagContextMenu):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.reset):
        * inspector/front-end/inspector.js:
        (WebInspector.reset):
        (WebInspector.didCommitLoad):

2010-11-25  Peter Hartmann  <peter.hartmann@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] enable usage of synchronous HTTP feature in Qt
        https://bugs.webkit.org/show_bug.cgi?id=37191

        Currently, we spin an event loop when doing synchronous calls to
        wait for completion. This patch uses synchronous requests in Qt,
        if available, and spins the event loop as a fallback solution.
        Patch by Simon Hausmann and Peter Hartmann.

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::QNetworkReplyHandler):
        * platform/network/qt/QNetworkReplyHandler.h:
        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::WebCoreSynchronousLoader::setReplyFinished):
        (WebCore::WebCoreSynchronousLoader::WebCoreSynchronousLoader):
        (WebCore::WebCoreSynchronousLoader::didFinishLoading):
        (WebCore::WebCoreSynchronousLoader::didFail):
        (WebCore::WebCoreSynchronousLoader::waitForCompletion):
        (WebCore::ResourceHandle::loadResourceSynchronously):

2010-11-25  Hans Wennborg  <hans@chromium.org>

        Reviewed by Jeremy Orlow.

        V8 Bindings: remove faulty include in OptionsObject.h
        https://bugs.webkit.org/show_bug.cgi?id=50073

        There is no <wtf/NonCopyable.h>, and the code doesn't try to use it
        either.

        No new functionality, no new tests.

        * bindings/v8/OptionsObject.h:

2010-11-25  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        Actually handle targetDensityDpi in computeViewportAttributes
        https://bugs.webkit.org/show_bug.cgi?id=50068

        * dom/ViewportArguments.cpp:
        (WebCore::computeViewportAttributes):

2010-11-25  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Steve Block.

        Add an OptionsObject class for IndexedDB (and later Geolocation)
        https://bugs.webkit.org/show_bug.cgi?id=50030

        Geolocation and IndexedDB both have the concept of an optional
        parameter that has various options supplied with it.  In
        Geolocation this was done with custom bindings, but I'm trying to
        avoid that for IndexedDB.  

        This first patch implements it in V8 and makes createObjectStore use it.
        The next patch will cover Geolocation and JSC.

        Test: storage/indexeddb/create-object-store-options.html

        * WebCore.gypi:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/scripts/test/CPP/WebDOMTestObj.cpp:
        (WebDOMTestObj::optionsObject):
        * bindings/scripts/test/CPP/WebDOMTestObj.h:
        * bindings/scripts/test/GObject/WebKitDOMTestCallback.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestInterface.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestMediaQueryListListener.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        (webkit_dom_test_obj_options_object):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionOptionsObject):
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.mm:
        (-[DOMTestObj optionsObject:ooo:]):
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp:
        (WebCore::ConfigureV8TestMediaQueryListListenerTemplate):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjInternal::optionsObjectCallback):
        * bindings/v8/OptionsObject.cpp: Added.
        (WebCore::OptionsObject::OptionsObject):
        (WebCore::OptionsObject::~OptionsObject):
        (WebCore::OptionsObject::operator=):
        (WebCore::OptionsObject::undefinedOrNull):
        (WebCore::OptionsObject::getKeyBool):
        (WebCore::OptionsObject::getKeyString):
        (WebCore::OptionsObject::getKey):
        * bindings/v8/OptionsObject.h:
        * bindings/js/OptionsObject.h:
        * storage/IDBDatabase.cpp:
        (WebCore::IDBDatabase::createObjectStore):
        * storage/IDBDatabase.h:
        (WebCore::IDBDatabase::createObjectStore):
        * storage/IDBDatabase.idl:

2010-11-24  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: set DOM breakpoints by path.
        https://bugs.webkit.org/show_bug.cgi?id=50017

        This change is needed to be able to push DOM breakpoints for all URL's to backend
        at frontend load.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::setNativeBreakpoint):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        (WebCore::InspectorDOMAgent::discardBindings):
        (WebCore::InspectorDOMAgent::setDOMBreakpoint):
        (WebCore::InspectorDOMAgent::removeDOMBreakpoint):
        (WebCore::InspectorDOMAgent::descriptionForDOMEvent):
        (WebCore::InspectorDOMAgent::removeBreakpointsForNode):
        * inspector/InspectorDOMAgent.h:
        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager.prototype.reset):
        (WebInspector.BreakpointManager.prototype.createDOMBreakpoint):
        (WebInspector.BreakpointManager.prototype._updateNativeBreakpointsInSettings):
        (WebInspector.BreakpointManager.prototype.restoreBreakpoints):
        (WebInspector.DOMBreakpoint):
        (WebInspector.DOMBreakpoint.prototype._setNodeId):
        (WebInspector.DOMBreakpoint.prototype.populateLabelElement):
        (WebInspector.EventListenerBreakpoint):
        (WebInspector.XHRBreakpoint):
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.BreakpointsSidebarPane):
        (WebInspector.BreakpointsSidebarPane.prototype._reset):
        (WebInspector.EventListenerBreakpointsSidebarPane):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._reset):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMAgent.prototype._setDocument):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.reset):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype._populateTagContextMenu.handlerFunction):
        (WebInspector.ElementsTreeElement.prototype._populateTagContextMenu):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.reset):
        * inspector/front-end/inspector.js:
        (WebInspector.reset):
        (WebInspector.didCommitLoad):

2010-11-25  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: reuse code for recreating resource views.
        https://bugs.webkit.org/show_bug.cgi?id=50066

        * inspector/front-end/NetworkItemView.js:
        (WebInspector.NetworkItemView):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel.prototype.refreshResource):
        * inspector/front-end/ResourceManager.js:
        (WebInspector.ResourceManager.resourceViewTypeMatchesResource):
        (WebInspector.ResourceManager.resourceViewForResource):
        (WebInspector.ResourceManager.recreateResourceView):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.FrameResourceTreeElement.prototype._contentChanged):

2010-11-25  Hans Wennborg  <hans@chromium.org>

        Reviewed by Jeremy Orlow.

        IndexedDB: Disallow inserting records with NULL keys
        https://bugs.webkit.org/show_bug.cgi?id=50033

        Disallow inserting records with null keys into the object store.

        * storage/IDBKey.h:
        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::putInternal):

2010-11-25  Philippe Normand  <pnormand@igalia.com>

        Rubber-stamped by Xan Lopez.

        g_signal_accumulator_first_wins was introduced in glib 2.27.1 so
        no need to use our version if that version of glib is used during
        the build.

        * platform/gtk/GtkVersioning.c:
        * platform/gtk/GtkVersioning.h:

2010-11-24  Jian Li  <jianli@chromium.org>

        Reviewed by Kenneth Russell.

        Implement DataView interface from Typed Array specification
        https://bugs.webkit.org/show_bug.cgi?id=46541

        Test: fast/canvas/webgl/data-view-test.html

        * CMakeLists.txt:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::dataViewEnabled):
        * bindings/js/JSArrayBufferViewHelper.h:
        (WebCore::constructArrayBufferViewWithArrayBufferArgument):
        (WebCore::constructArrayBufferView):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::dataView):
        * bindings/js/JSDataViewCustom.cpp: Added.
        * bindings/js/JSFloat32ArrayCustom.cpp:
        (WebCore::JSFloat32ArrayConstructor::constructJSFloat32Array):
        * bindings/js/JSInt16ArrayCustom.cpp:
        (WebCore::JSInt16ArrayConstructor::constructJSInt16Array):
        * bindings/js/JSInt32ArrayCustom.cpp:
        (WebCore::JSInt32ArrayConstructor::constructJSInt32Array):
        * bindings/js/JSInt8ArrayCustom.cpp:
        (WebCore::JSInt8ArrayConstructor::constructJSInt8Array):
        * bindings/js/JSUint16ArrayCustom.cpp:
        (WebCore::JSUint16ArrayConstructor::constructJSUint16Array):
        * bindings/js/JSUint32ArrayCustom.cpp:
        (WebCore::JSUint32ArrayConstructor::constructJSUint32Array):
        * bindings/js/JSUint8ArrayCustom.cpp:
        (WebCore::JSUint8ArrayConstructor::constructJSUint8Array):
        * bindings/v8/custom/V8ArrayBufferViewCustom.h:
        (WebCore::constructWebGLArrayWithArrayBufferArgument):
        (WebCore::constructWebGLArray):
        * bindings/v8/custom/V8DataViewCustom.cpp: Added.
        * html/canvas/ArrayBufferView.h:
        (WebCore::ArrayBufferView::isDataView):
        * html/canvas/DataView.cpp: Added.
        * html/canvas/DataView.h: Added.
        * html/canvas/DataView.idl: Added.
        * page/DOMWindow.idl:

2010-11-24  Nicolas Dufresne  <nicolas.dufresne@collabora.co.uk>

        Reviewed by Martin Robinson.

        [GTK] Windowless plugins gets broken key input
        https://bugs.webkit.org/show_bug.cgi?id=49927

        When converting the GdkEvent to XEvent we need to send the
        hardware_keycode as XEvent::keycode. Instead we where sending
        the GdkEvent::keyval. This is already tested by
        plugins/keyboard-events.html, but a bug in the test plugin was
        resulting in false positive.

        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::handleKeyboardEvent):

2010-11-24  Eric Uhrhane  <ericu@chromium.org>

        Reviewed by David Levin.

        Implement FileWriterSync
        https://bugs.webkit.org/show_bug.cgi?id=49939

        Tests to follow in a separate CL, once the test framework in 47680 goes in.

        Build file changes to add FileWriterBase and FileWriterBaseCallback.
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:

        FileWriterSync doesn't turn out to need to be an ActiveDOMObject.
        * bindings/scripts/CodeGeneratorV8.pm:

        Added new AsyncFileWriter::waitForOperationToComplete to enable
        synchronous calls.
        * fileapi/AsyncFileWriter.h:

        Added a way to get a FileSystemSync.
        * fileapi/DOMFileSystemSync.cpp:
        * fileapi/FileEntrySync.cpp:
        * fileapi/FileEntrySync.h:
        * fileapi/FileEntrySync.idl:

        Added an error code for OK, rather than just having 0 everywhere.
        * fileapi/FileError.h:

        Turned FileWriterCallback into FileWriterBaseCallback.
        * fileapi/FileSystemCallbacks.cpp:
        * fileapi/FileSystemCallbacks.h:

        Refactored out a common base class, FileWriterBase, for FileWriter and
        FileWriterSync.
        * fileapi/FileWriter.cpp:
        * fileapi/FileWriter.h:
        * fileapi/FileWriterBase.cpp: Added.
        * fileapi/FileWriterBase.h: Added.
        * fileapi/FileWriterBaseCallback.h: Added.
        * fileapi/FileWriterSync.cpp:
        * fileapi/FileWriterSync.h:

        Small tweaks to deal with the base class refactoring.
        * fileapi/DOMFileSystem.cpp:
        * fileapi/DOMFileSystemSync.h:

        Removed "CallWith=ScriptExecutionContext", as FileWriterSync doesn't actually need it.
        * fileapi/FileWriterSync.idl:

2010-11-24  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        Build fix for GTK+. There were some typos in my last build fix
        and the empty command (semicolon) seems to be necessary for wildcard
        rule chains.

        * GNUmakefile.am: Small build fixes.

2010-11-24  James Robinson  <jamesr@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Compositor needs to manage its VRAM use
        https://bugs.webkit.org/show_bug.cgi?id=49629

        This adds a basic texture manager to the Chromium compositor to limit the amount of VRAM
        used by compositor textures and switches ContentLayerChromium, ImageLayerChromium, and
        RenderSurfaceChromium to use managed LayerTexture.  The other *LayerChromium classes (Canvas,
        Video, and WebGL) and the root layer are still unmanaged.

        The TextureManager works by providing tokens to callers that want to use a managed texture.
        The token can be used to request a texture, see if the previously requested texture is still
        available, and to protect/unprotect textures when they cannot be collected.  Whenever a
        texture is created the manager attempts to free up the least recently used textures until the
        total memory use is below the provided threshhold.  If the manager cannot satisfy the memory
        limit it will not return any new textures until some old textures are released.

        A LayerTexture wraps a TextureManager token, size, and format.  A LayerChromium can check if a
        previously requested texture is still available for use and reserve the LayerTexture's underlying
        storage between the updateContentsIfDirty() and the draw() call.

        Also changes LayerChromium from having separate contentsDirty()/updateContents() calls to a single
        updateContentsIfDirty().

        Tests: compositing/lots-of-img-layers-with-opacity.html
               compositing/lots-of-img-layers.html

        * WebCore.gypi:
        * platform/graphics/chromium/Canvas2DLayerChromium.cpp:
        (WebCore::Canvas2DLayerChromium::updateContentsIfDirty):
        * platform/graphics/chromium/Canvas2DLayerChromium.h:
        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::cleanupResources):
        (WebCore::ContentLayerChromium::updateContentsIfDirty):
        (WebCore::ContentLayerChromium::updateTextureRect):
        (WebCore::ContentLayerChromium::draw):
        * platform/graphics/chromium/ContentLayerChromium.h:
        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerChromium::updateContentsIfDirty):
        * platform/graphics/chromium/ImageLayerChromium.h:
        * platform/graphics/chromium/LayerChromium.h:
        (WebCore::LayerChromium::updateContentsIfDirty):
        (WebCore::LayerChromium::draw):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::LayerRendererChromium):
        (WebCore::LayerRendererChromium::prepareToDrawLayers):
        (WebCore::LayerRendererChromium::drawLayers):
        (WebCore::LayerRendererChromium::updateLayersRecursive):
        (WebCore::LayerRendererChromium::useRenderSurface):
        (WebCore::LayerRendererChromium::drawLayer):
        (WebCore::LayerRendererChromium::initializeSharedObjects):
        (WebCore::LayerRendererChromium::cleanupSharedObjects):
        * platform/graphics/chromium/LayerRendererChromium.h:
        (WebCore::LayerRendererChromium::renderSurfaceSharedValues):
        (WebCore::LayerRendererChromium::textureManager):
        * platform/graphics/chromium/LayerTexture.cpp: Added.
        (WebCore::LayerTexture::LayerTexture):
        (WebCore::LayerTexture::~LayerTexture):
        (WebCore::LayerTexture::isValid):
        (WebCore::LayerTexture::reserve):
        (WebCore::LayerTexture::unreserve):
        (WebCore::LayerTexture::bindTexture):
        (WebCore::LayerTexture::framebufferTexture2D):
        * platform/graphics/chromium/LayerTexture.h: Added.
        (WebCore::LayerTexture::create):
        * platform/graphics/chromium/PluginLayerChromium.cpp:
        (WebCore::PluginLayerChromium::updateContentsIfDirty):
        * platform/graphics/chromium/PluginLayerChromium.h:
        * platform/graphics/chromium/RenderSurfaceChromium.cpp:
        (WebCore::RenderSurfaceChromium::SharedValues::SharedValues):
        (WebCore::RenderSurfaceChromium::SharedValues::~SharedValues):
        (WebCore::RenderSurfaceChromium::RenderSurfaceChromium):
        (WebCore::RenderSurfaceChromium::cleanupResources):
        (WebCore::RenderSurfaceChromium::prepareContentsTexture):
        (WebCore::RenderSurfaceChromium::draw):
        * platform/graphics/chromium/RenderSurfaceChromium.h:
        (WebCore::RenderSurfaceChromium::SharedValues::shaderProgram):
        (WebCore::RenderSurfaceChromium::SharedValues::shaderSamplerLocation):
        (WebCore::RenderSurfaceChromium::SharedValues::shaderMatrixLocation):
        (WebCore::RenderSurfaceChromium::SharedValues::shaderAlphaLocation):
        (WebCore::RenderSurfaceChromium::SharedValues::initialized):
        * platform/graphics/chromium/TextureManager.cpp: Added.
        (WebCore::memoryUseBytes):
        (WebCore::TextureManager::TextureManager):
        (WebCore::TextureManager::getToken):
        (WebCore::TextureManager::releaseToken):
        (WebCore::TextureManager::hasTexture):
        (WebCore::TextureManager::protectTexture):
        (WebCore::TextureManager::unprotectTexture):
        (WebCore::TextureManager::reduceMemoryToLimit):
        (WebCore::TextureManager::addTexture):
        (WebCore::TextureManager::removeTexture):
        (WebCore::TextureManager::requestTexture):
        * platform/graphics/chromium/TextureManager.h: Added.
        (WebCore::TextureManager::create):
        * platform/graphics/chromium/VideoLayerChromium.cpp:
        (WebCore::VideoLayerChromium::updateContentsIfDirty):
        * platform/graphics/chromium/VideoLayerChromium.h:
        * platform/graphics/chromium/WebGLLayerChromium.cpp:
        (WebCore::WebGLLayerChromium::updateContentsIfDirty):
        * platform/graphics/chromium/WebGLLayerChromium.h:

2010-11-24  Nicolas Dufresne  <nicolas.dufresne@collabora.co.uk>

        Reviewed by Martin Robinson.

        [GTK] response.isNull() assert when using directory file URI
        https://bugs.webkit.org/show_bug.cgi?id=49018

        Do ensure that didReceiveResponse happens before any call to
        didReceiveData. That was not true for file:// URIs pointing to
        directories and thus was triggering an assertion.

        Test: platform/gtk/fast/loader/crash-display-local-directory.html

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::gotHeadersCallback):
        (WebCore::contentSniffedCallback):
        (WebCore::parseDataUrl):
        (WebCore::sendRequestCallback):
        (WebCore::readCallback):

2010-11-24  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Martin Robinson.

        * bindings/gobject/WebKitDOMBinding.h: fix stlye nit.

2010-11-24  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Make kit() methods return the proper type instead of gpointer
        https://bugs.webkit.org/show_bug.cgi?id=50034

        Change kit() methods to return proper type pointer.

        * bindings/gobject/WebKitDOMBinding.cpp: change implementions of
        kit methods.
        * bindings/gobject/WebKitDOMBinding.h: change their declarations.
        * bindings/scripts/CodeGeneratorGObject.pm: change the generated
        kit() methods.

2010-11-24  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] DerivedSources/WebCore/DocTypeStrings.cpp is generated for every build
        https://bugs.webkit.org/show_bug.cgi?id=50032

        Instead of listing two targets for rules that have two outputs, make
        a dependency chain. This fixes the issue where some files are generated
        unconditionally. Also remove all unnecessary semicolons from the file.

        No new tests as this is just a build fix.

        * GNUmakefile.am: Fix GNUmake dependency issue.

2010-11-24  Nico Weber  <nicolasweber@gmx.de>

        Reviewed by Adam Barth.

        Chromium/Mac: Make scaled images un-ugly when using the webkit image decoders
        https://bugs.webkit.org/show_bug.cgi?id=49965

        Probably covered by existing tests whose expectations were overwritten
        in http://trac.webkit.org/changeset/70858

        * platform/image-decoders/cg/ImageDecoderCG.cpp:
        (WebCore::RGBA32Buffer::asNewNativeImage):

2010-11-24  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Crash when inspecting http://alphaarnhem.nl/beta/
        https://bugs.webkit.org/show_bug.cgi?id=50025

        @font-face rules were improperly handled by source data extractor.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::CSSParser):
        (WebCore::CSSParser::parseDeclaration):
        (WebCore::CSSParser::createStyleRule):
        (WebCore::CSSParser::markRuleBodyStart):
        (WebCore::CSSParser::markPropertyStart):
        (WebCore::CSSParser::markPropertyEnd):
        * css/CSSParser.h:

2010-11-24  Cris Neckar  <cdn@chromium.org>

        Reviewed by Adam Barth.

        Added check when parsing local fonts to ensure that a value's unit type is either string or ident.
        https://bugs.webkit.org/show_bug.cgi?id=49883

        Test: fast/css/local_font_invalid.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseFontFaceSrc):

2010-11-24  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: place local modifications to under original
        resource nodes in the resource panel.
        https://bugs.webkit.org/show_bug.cgi?id=50029

        * English.lproj/localizedStrings.js:
        * inspector/Inspector.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::resourceRetrievedByXMLHttpRequest):
        (WebCore::InspectorController::scriptImported):
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::setInitialContent):
        * inspector/InspectorResourceAgent.h:
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleModel.prototype.setRuleSelector):
        (WebInspector.CSSStyleModel.prototype.addRule):
        (WebInspector.CSSStyleModel.prototype._styleSheetChanged.callback):
        (WebInspector.CSSStyleModel.prototype._styleSheetChanged):
        (WebInspector.CSSStyleDeclaration.prototype.insertPropertyAt):
        (WebInspector.CSSProperty.prototype.setText):
        (WebInspector.CSSProperty.prototype.setDisabled.callback):
        (WebInspector.CSSProperty.prototype.setDisabled):
        (WebInspector.CSSStyleSheet.prototype.setText):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel.prototype.refreshResource):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype.set content):
        (WebInspector.Resource.prototype.get contentTimestamp):
        (WebInspector.Resource.prototype.setInitialContent):
        * inspector/front-end/ResourceManager.js:
        (WebInspector.ResourceManager):
        (WebInspector.ResourceManager.prototype.setInitialContent):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel):
        (WebInspector.ResourcesPanel.prototype.reset):
        (WebInspector.ResourcesPanel.prototype._innerShowView):
        (WebInspector.FrameResourceTreeElement):
        (WebInspector.FrameResourceTreeElement.prototype._errorsWarningsUpdated):
        (WebInspector.FrameResourceTreeElement.prototype._contentChanged.else.finished):
        (WebInspector.FrameResourceTreeElement.prototype._contentChanged):
        (WebInspector.ResourceRevisionTreeElement):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.get scrollTop):
        (WebInspector.SourceFrame.prototype.set scrollTop):
        * inspector/front-end/SourceView.js:
        (WebInspector.SourceView.prototype.get scrollTop):
        (WebInspector.SourceView.prototype.set scrollTop):
        (WebInspector.SourceView.prototype._editLine):
        (WebInspector.SourceView.prototype._editLineComplete):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertyTreeElement.prototype):

2010-11-24  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: extension API cleanup
        https://bugs.webkit.org/show_bug.cgi?id=50019

        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.this.treeOutline.focusedNodeChanged):
        (WebInspector.ElementsPanel):
        * inspector/front-end/ExtensionAPI.js: See bug for summary of extension API changes.
        (WebInspector.injectedExtensionAPI.Resources.resourceDispatch):
        (WebInspector.injectedExtensionAPI):
        (WebInspector.injectedExtensionAPI.Resources.prototype.getHAR):
        (WebInspector.injectedExtensionAPI.ResourceImpl.prototype.getContent):
        (WebInspector.injectedExtensionAPI.Panels.prototype.create):
        (WebInspector.injectedExtensionAPI.PanelImpl):
        (WebInspector.injectedExtensionAPI.PanelWithSidebarImpl):
        (WebInspector.injectedExtensionAPI.PanelWithSidebarImpl.prototype.createSidebarPane):
        (WebInspector.injectedExtensionAPI.PanelWithSidebarImpl.prototype.createWatchExpressionSidebarPane):
        (WebInspector.injectedExtensionAPI.ElementsPanel):
        (WebInspector.injectedExtensionAPI.ExtensionSidebarPaneImpl.prototype.setHeight):
        (WebInspector.injectedExtensionAPI.Audits.prototype.addCategory):
        (WebInspector.injectedExtensionAPI.AuditCategoryImpl.auditResultDispatch):
        (WebInspector.injectedExtensionAPI.AuditCategoryImpl):
        (WebInspector.injectedExtensionAPI.AuditResultImpl.prototype.get Severity):
        (WebInspector.injectedExtensionAPI.InspectedWindow):
        (WebInspector.injectedExtensionAPI.InspectedWindow.prototype.eval):
        * inspector/front-end/ExtensionCommon.js:
        (WebInspector.commonExtensionSymbols):
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer):
        (WebInspector.ExtensionServer.prototype.notifyObjectSelected):
        (WebInspector.ExtensionServer.prototype.notifyResourceFinished):
        (WebInspector.ExtensionServer.prototype.notifyPageLoaded):
        (WebInspector.ExtensionServer.prototype.notifyPageDOMContentLoaded):
        (WebInspector.ExtensionServer.prototype._onCreatePanel):
        (WebInspector.ExtensionServer.prototype._onReload):
        (WebInspector.ExtensionServer.prototype._onGetHAR):
        (WebInspector.ExtensionServer.prototype._onGetResourceContent):
        (WebInspector.ExtensionServer.prototype._onAddAuditCategory):
        (WebInspector.ExtensionServer.prototype._buildExtensionAPIInjectedScript):
        * inspector/front-end/HAREntry.js:
        (WebInspector.HARLog):
        (WebInspector.HARLog.prototype.build):
        (WebInspector.HARLog.prototype._convertResource):
        * inspector/front-end/inspector.js:
        (WebInspector.domContentEventFired):
        (WebInspector.loadEventFired):
        (WebInspector.didCommitLoad):

2010-11-23  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Steve Block.

        Fix minor errors in IndexedDB
        https://bugs.webkit.org/show_bug.cgi?id=49970

        * Remove SNAPSHOT_READ per spec.
        * Assert that the transaction that changes the db is a setVersion
          transaction.
        * When an objectStore already exists, throw a CONSTRAINT_ERR.
        * When not in a setVersion transaction, throw a NOT_ALLOWED_ERR.

        Test: storage/indexeddb/createAndRemoveObjectStore.html

        * storage/IDBDatabase.cpp:
        (WebCore::IDBDatabase::createObjectStore):
        * storage/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::createObjectStore):
        * storage/IDBTransaction.h:
        * storage/IDBTransaction.idl:

2010-11-24  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Xan Lopez.

        [GStreamer] pause webkitvideosink during fullscreen video playback
        https://bugs.webkit.org/show_bug.cgi?id=48824

        Added an identity element before the webkitvideosink so that when
        fullscreen video is active the element can drop the incoming
        buffers so that webkitvideosink appears paused.

        * platform/graphics/gstreamer/GStreamerGWorld.cpp:
        (WebCore::GStreamerGWorld::enterFullscreen):
        (WebCore::GStreamerGWorld::exitFullscreen):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin):

2010-11-24  Avi Drissman  <avi@google.com>

        Reviewed by Antonio Gomes.

        Add preference to not select when right-clicked
        https://bugs.webkit.org/show_bug.cgi?id=23351

        Test: editing/selection/context-menu-text-selection.html

        * editing/EditingBehavior.h:
        (WebCore::EditingBehavior::shouldSelectOnContextualMenuClick):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::sendContextMenuEvent):

2010-11-24  Andras Becsi  <abecsi@inf.u-szeged.hu>

        Reviewed by Csaba Osztrogonác.

        Make build-webkit --minimal build with ENABLE_INSPECTOR=0.
        https://bugs.webkit.org/show_bug.cgi?id=49975

        No new tests needed.

        * features.pri: Make the Qt buildsystem aware
        that the inspector is enabled by default.

2010-11-24  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] The WebKitWebView should expose a set of signals encapsulating the behavior of the EditorClient
        https://bugs.webkit.org/show_bug.cgi?id=49143

        * platform/gtk/GtkVersioning.c:
        (g_signal_accumulator_first_wins): Add g_signal_accumulator_first_wins for versions of
        GLib before 2.28.
        * platform/gtk/GtkVersioning.h:

2010-11-24  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r72499.
        http://trac.webkit.org/changeset/72499
        https://bugs.webkit.org/show_bug.cgi?id=50022

        This change is causing crashes on the bots. (Requested by
        mrobinson on #webkit).

        * accessibility/AccessibilityMenuListOption.cpp:
        (WebCore::AccessibilityMenuListOption::nameForMSAA):
        * accessibility/AccessibilityMenuListOption.h:
        * accessibility/gtk/AXObjectCacheAtk.cpp:
        (WebCore::AXObjectCache::postPlatformNotification):
        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (setAtkStateSetFromCoreObject):
        (optionFromList):
        (optionFromSelection):
        (webkit_accessible_selection_add_selection):
        (webkit_accessible_selection_clear_selection):
        (webkit_accessible_selection_get_selection_count):
        (webkit_accessible_selection_is_child_selected):
        (webkit_accessible_selection_remove_selection):
        (webkit_accessible_text_get_text):
        (getInterfaceMaskFromObject):
        * platform/gtk/PopupMenuGtk.cpp:
        (WebCore::PopupMenuGtk::show):

2010-11-24  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Csaba Osztrogonác.

        Simplify makeprop.pl
        https://bugs.webkit.org/show_bug.cgi?id=49925

        Don't generate CSSPropertyNamesHash.h.
        Instead generate CSSPropertyNames directly.

        * GNUmakefile.am: Removed rule for CSSPropertyNamesHash.h.
        * css/makeprop.pl:

2010-11-24  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Csaba Osztrogonác.

        Remove Bakefile build system files
        https://bugs.webkit.org/show_bug.cgi?id=49983

        r53757 only removed the content, but not the files.
        This patch removes that empty files.

        * WebCoreSources.bkl: Removed.
        * webcore-base.bkl: Removed.
        * webcore-wx.bkl: Removed.

2010-11-24  Renata Hodovan  <reni@inf.u-szeged.hu>

        Reviewed by Andreas Kling.

        [Qt] GraphicsContext: Clean up Qt/WebCore type conversion functions
        https://bugs.webkit.org/show_bug.cgi?id=49919

        Add ASSERT_NOT_REACHED() if the given WebCore type doesn't have an equivalent type in Qt.
        Also change the return value of toQtLineJoin() from Qt::MiterJoin to the default Qt::SvgMiterJoin,
        because the previous one doesn't work currently.

        No new test is needed.

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::toQtCompositionMode):
        (WebCore::toQtLineCap):
        (WebCore::toQtLineJoin):
        (WebCore::toQPenStyle):
        (WebCore::toQtFillRule):

2010-11-24  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Csaba Osztrogonác.

        Simplify makevalues.pl
        https://bugs.webkit.org/show_bug.cgi?id=49926

        Don't generate CSSValueKeywordsHash.h.
        Instead generate CSSValueKeywords.cpp directly. 

        * GNUmakefile.am: Removed rule for CSSValueKeywordsHash.h.
        * css/makevalues.pl:

2010-11-24  Andras Becsi  <abecsi@inf.u-szeged.hu>

        Reviewed by Kenneth Rohde Christiansen.

        Make WebKit2 compile with !ENABLE(INSPECTOR).
        https://bugs.webkit.org/show_bug.cgi?id=49973

        No new tests needed.

        * bindings/js/ScriptHeapSnapshot.h:
        * bindings/js/ScriptProfile.cpp:
        * bindings/js/ScriptProfile.h:
        * inspector/InspectorDebuggerAgent.cpp:
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorProfilerAgent.cpp:
        * inspector/InspectorProfilerAgent.h:
        * inspector/ScriptBreakpoint.h:

2010-11-24  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Csaba Osztrogonác.

        Simplify make-hash-tools.pl
        https://bugs.webkit.org/show_bug.cgi?id=49922

        HashTools.h does not need to be generated, because it only contains static code.

        * html/DocTypeStrings.gperf: Include findDoctypeEntry function.
        * make-hash-tools.pl: Do not generate HashTools.h.
        * platform/ColorData.gperf: Include findColor function.
        * platform/HashTools.h: Added.

2010-11-24  Andreas Kling  <kling@webkit.org>

        Reviewed by Simon Hausmann.

        [Qt] Pass Qt::TextBypassShaping flag when calculating shadow layer rects

        Without this, we could end up with a slightly too small shadow layer
        for some string/font combinations.

        * platform/graphics/qt/FontQt.cpp:
        (WebCore::drawTextCommon):

2010-11-22  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: add timing tab to the network item view.
        https://bugs.webkit.org/show_bug.cgi?id=49920

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/NetworkItemView.js:
        (WebInspector.NetworkItemView):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel.prototype._showPopover):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype.set timing):
        * inspector/front-end/ResourceTimingView.js: Added.
        (WebInspector.ResourceTimingView):
        (WebInspector.ResourceTimingView.prototype.show):
        (WebInspector.ResourceTimingView.prototype._refresh):
        (WebInspector.ResourceTimingView.createTimingTable):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:
        * inspector/front-end/networkPanel.css:
        (#network-views .network-item-view .tabbed-pane-header):
        (.resource-timing-view):
        (.resource-timing-view table):
        (.resource-timing-view .network-timing-bar):
        (.resource-timing-view .network-timing-bar.proxy):
        (.resource-timing-view .network-timing-bar.dns):
        (.resource-timing-view .network-timing-bar.connecting):
        (.resource-timing-view .network-timing-bar.ssl):
        (.resource-timing-view .network-timing-bar.sending):
        (.resource-timing-view .network-timing-bar.waiting):
        (.resource-timing-view .network-timing-bar.receiving):
        (.resource-timing-view.visible):

2010-11-24  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed. Follow up to r72652 (style id change in inspector).

        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.evalCallback.selectorsCallback):

2010-11-22  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: refactor ResourceView hierarchy.
        https://bugs.webkit.org/show_bug.cgi?id=49864

        This refactoring splits ResourceView.js into:
            NetworkItemView.js (tabbed pane)
            ResourceHeadersView.js (header tab)
            ResourceCookiesView.js (cookies tab)
            ResourceView.js (base class for content tab).
        CookiesTable was extracted from CookieItemsView and
        brushed up. headersVisible flag has been removed.

        * English.lproj/localizedStrings.js:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/CookieItemsView.js:
        (WebInspector.CookieItemsView):
        (WebInspector.CookieItemsView.prototype.get statusBarItems):
        (WebInspector.CookieItemsView.prototype.hide):
        (WebInspector.CookieItemsView.prototype.resize):
        (WebInspector.CookieItemsView.prototype._updateWithCookies):
        (WebInspector.CookieItemsView.prototype._filterCookiesForDomain):
        (WebInspector.CookieItemsView.prototype._deleteCookie):
        (WebInspector.CookieItemsView.prototype._deleteButtonClicked):
        (WebInspector.CookieItemsView.prototype._refreshButtonClicked):
        (WebInspector.SimpleCookiesTable):
        (WebInspector.SimpleCookiesTable.prototype.setCookies):
        (WebInspector.SimpleCookiesTable.prototype.resize):
        * inspector/front-end/CookiesTable.js: Added.
        (WebInspector.CookiesTable):
        (WebInspector.CookiesTable.prototype.updateWidths):
        (WebInspector.CookiesTable.prototype.setCookies):
        (WebInspector.CookiesTable.prototype.addCookiesFolder):
        (WebInspector.CookiesTable.prototype.get selectedCookie):
        (WebInspector.CookiesTable.prototype._rebuildTable):
        (WebInspector.CookiesTable.prototype.reset):
        (WebInspector.CookiesTable.prototype._populateNode):
        (WebInspector.CookiesTable.prototype._totalSize):
        (WebInspector.CookiesTable.prototype._sortCookies.localeCompare):
        (WebInspector.CookiesTable.prototype._sortCookies.numberCompare):
        (WebInspector.CookiesTable.prototype._sortCookies.expiresCompare):
        (WebInspector.CookiesTable.prototype._sortCookies):
        (WebInspector.CookiesTable.prototype._createGridNode):
        (WebInspector.CookiesTable.prototype._onDeleteFromGrid):
        * inspector/front-end/FileSystemView.js:
        (WebInspector.FileSystemView.prototype._selectFileSystemTab):
        (WebInspector.FileSystemView.prototype.selectTemporaryFileSystemTab):
        * inspector/front-end/FontView.js:
        (WebInspector.FontView.prototype.hasContent):
        (WebInspector.FontView.prototype._createContentIfNeeded):
        (WebInspector.FontView.prototype.show):
        (WebInspector.FontView.prototype.updateFontPreviewSize):
        * inspector/front-end/ImageView.js:
        (WebInspector.ImageView.prototype.hasContent):
        (WebInspector.ImageView.prototype.show):
        * inspector/front-end/NetworkItemView.js: Added.
        (WebInspector.NetworkItemView):
        (WebInspector.NetworkItemView.prototype.show):
        (WebInspector.NetworkItemView.prototype._selectTab):
        (WebInspector.NetworkItemView.prototype._tabSelected):
        (WebInspector.NetworkItemView.prototype.resize):
        (WebInspector.NetworkItemView.prototype.selectContentTab):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel.prototype.show):
        (WebInspector.NetworkPanel.prototype.refreshResource):
        (WebInspector.NetworkPanel.prototype._showResource):
        (WebInspector.NetworkPanel.prototype._closeVisibleResource):
        * inspector/front-end/ResourceCookiesView.js: Added.
        (WebInspector.ResourceCookiesView):
        (WebInspector.ResourceCookiesView.prototype.show):
        * inspector/front-end/ResourceHeadersView.js: Added.
        (WebInspector.ResourceHeadersView):
        (WebInspector.ResourceHeadersView.prototype._refreshURL):
        (WebInspector.ResourceHeadersView.prototype._refreshQueryString):
        (WebInspector.ResourceHeadersView.prototype._refreshFormData):
        (WebInspector.ResourceHeadersView.prototype._refreshRequestPayload):
        (WebInspector.ResourceHeadersView.prototype._refreshParms):
        (WebInspector.ResourceHeadersView.prototype._toggleURLdecoding):
        (WebInspector.ResourceHeadersView.prototype._getHeaderValue):
        (WebInspector.ResourceHeadersView.prototype._refreshRequestHeaders):
        (WebInspector.ResourceHeadersView.prototype._refreshResponseHeaders):
        (WebInspector.ResourceHeadersView.prototype._refreshHTTPInformation):
        (WebInspector.ResourceHeadersView.prototype._refreshHeaders):
        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceView):
        (WebInspector.ResourceView.prototype.hasContent):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.show):
        (WebInspector.ResourcesPanel.prototype.showResource):
        (WebInspector.ResourcesPanel.prototype._showResourceView):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.show):
        (WebInspector.ScriptsPanel.prototype._showScriptOrResource):
        * inspector/front-end/SourceView.js:
        (WebInspector.SourceView):
        (WebInspector.SourceView.prototype.show):
        (WebInspector.SourceView.prototype.hide):
        (WebInspector.SourceView.prototype.resize):
        (WebInspector.SourceView.prototype.setupSourceFrameIfNeeded):
        (WebInspector.SourceView.prototype.hasContent):
        (WebInspector.SourceView.prototype.updateLocalContent):
        (WebInspector.SourceView.prototype.selectLocalContentTab):
        * inspector/front-end/StylesSidebarPane.js:
        * inspector/front-end/TabbedPane.js:
        (WebInspector.TabbedPane):
        (WebInspector.TabbedPane.prototype.appendTab):
        (WebInspector.TabbedPane.prototype.selectTab):
        (WebInspector.TabbedPane.prototype._showTab):
        (WebInspector.TabbedPane.prototype._hideTab):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.css:
        (.webkit-line-gutter-backdrop):
        (.resource-view):
        (.resource-view.visible):
        (.resource-view.font):
        (.resource-view.image > .image):
        (.resource-view.image > .info):
        (.storage-view):
        (.storage-view .data-grid):
        (.storage-empty-view, .storage-view .storage-table-error):
        (.storage-view .storage-table-error):
        * inspector/front-end/inspector.html:
        * inspector/front-end/networkPanel.css:
        (.network-cell-subtitle):
        (.network-header-subtitle):
        (#network-views .network-item-view .tabbed-pane-header):
        (#network-views.small .network-item-view .tabbed-pane-header):
        (.network-item-view):
        (.network-item-view.visible):
        (.network-item-view .tabbed-pane-header):
        (.network-item-view .scope-bar li):
        (.resource-headers-view):
        (.resource-headers-view.visible):
        (.resource-headers-view .outline-disclosure .parent):
        (.resource-headers-view .outline-disclosure .children li):
        (.resource-headers-view .outline-disclosure li.expanded .header-count):
        (.resource-headers-view .outline-disclosure .header-name):
        (.resource-headers-view .outline-disclosure .header-value):
        (.resource-headers-view .outline-disclosure .raw-form-data):
        (.resource-cookies-view):
        (.resource-cookies-view.visible):
        (.resource-cookies-view .data-grid):
        (.resource-cookies-view .data-grid .row-group):

2010-11-24  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: add "Locally modified" group into the resource panel.
        https://bugs.webkit.org/show_bug.cgi?id=50005

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel):
        (WebInspector.ResourcesPanel.prototype.reset):
        (WebInspector.ResourcesPanel.prototype.addLocallyModifiedRevision):
        (WebInspector.ResourcesPanel.prototype._innerShowView):
        (WebInspector.BaseStorageTreeElement.prototype.set titleText):
        (WebInspector.LocallyModifiedResourceTreeElement):
        (WebInspector.LocallyModifiedResourceTreeElement.prototype.onselect):
        (WebInspector.LocallyModifiedResourceTreeElement.prototype.gcRevisions):
        (WebInspector.LocallyModifiedRevisionTreeElement):
        (WebInspector.LocallyModifiedRevisionTreeElement.prototype.onattach):
        (WebInspector.LocallyModifiedRevisionTreeElement.prototype.onselect):
        (WebInspector.LocallyModifiedRevisionTreeElement.prototype._ondragstart):

2010-11-24  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: pass style id to front-end as Object, not string.
        https://bugs.webkit.org/show_bug.cgi?id=49971

        * inspector/Inspector.idl:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::getStylesForNode2):
        (WebCore::InspectorCSSAgent::getStyleSheetText2):
        (WebCore::InspectorCSSAgent::setPropertyText2):
        (WebCore::InspectorCSSAgent::toggleProperty2):
        (WebCore::InspectorCSSAgent::setRuleSelector2):
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyle::buildObjectForStyle):
        (WebCore::InspectorStyleSheet::finalURL):
        (WebCore::InspectorStyleSheet::ruleForId):
        (WebCore::InspectorStyleSheet::buildObjectForStyleSheet):
        (WebCore::InspectorStyleSheet::buildObjectForRule):
        (WebCore::InspectorStyleSheet::text):
        (WebCore::InspectorStyleSheet::ruleOrStyleId):
        (WebCore::InspectorStyleSheetForInlineStyle::InspectorStyleSheetForInlineStyle):
        (WebCore::InspectorStyleSheetForInlineStyle::text):
        * inspector/InspectorStyleSheet.h:
        (WebCore::InspectorCSSId::InspectorCSSId):
        (WebCore::InspectorCSSId::isEmpty):
        (WebCore::InspectorCSSId::styleSheetId):
        (WebCore::InspectorCSSId::ordinal):
        (WebCore::InspectorCSSId::asInspectorValue):
        (WebCore::InspectorStyleSheet::id):
        (WebCore::InspectorStyleSheetForInlineStyle::styleForId):
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleModel.prototype.setRuleSelector):
        (WebInspector.CSSStyleModel.prototype.addRule):
        (WebInspector.CSSStyleModel.prototype._styleSheetChanged):
        (WebInspector.CSSStyleDeclaration.prototype.insertPropertyAt):
        (WebInspector.CSSProperty.prototype.setText):
        (WebInspector.CSSProperty.prototype.setDisabled.callback):
        (WebInspector.CSSProperty.prototype.setDisabled):
        (WebInspector.CSSStyleSheet.createForId):
        (WebInspector.CSSStyleSheet.prototype.setText):

2010-11-24  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r72647.
        http://trac.webkit.org/changeset/72647
        https://bugs.webkit.org/show_bug.cgi?id=50009

        breaks the http layout tests (Requested by philn-tp on
        #webkit).

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::sendRequestCallback):
        (WebCore::startHttp):
        (WebCore::ResourceHandle::platformSetDefersLoading):

2010-11-23  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Martin Robinson.

        [soup] implement ResourceHandle::platformSetDefersLoading
        https://bugs.webkit.org/show_bug.cgi?id=44158

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::platformSetDefersLoading): Implemented
        using the soup_session_{,un}pause_message APIs.

2010-11-22  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Adam Barth.

        r71925 broke the chrome new tab page. r71925 blocked drag and drop
        of same security origin objects onto themselves if their origin is
        marked unique. We need to allow drag and drop in that scenario.
        https://bugs.webkit.org/show_bug.cgi?id=49098

        Test: http/tests/security/drag-drop-same-unique-origin.html

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

2010-11-23  Cris Neckar  <cdn@chromium.org>

        Reviewed by Dimitri Glazkov.

        Removed unneeded conversions to RenderBlock.
        https://bugs.webkit.org/show_bug.cgi?id=49896

        Test: fast/css/input-search-table-column-crash.html

        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::adjustControlHeightBasedOnLineHeight):

2010-11-23  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Adam Barth.

        XMLDocumentParser::notifyFinished calls ScriptController's executeScript without updating isEvaluated flag
        https://bugs.webkit.org/show_bug.cgi?id=49701

        Fixed the bug by calling ScriptElement's executeScript, which sets isEvaluated flag to true.

        Test: fast/dom/script-clone-rerun-src.xhtml

        * dom/XMLDocumentParser.cpp:
        (WebCore::XMLDocumentParser::notifyFinished):

2010-11-23  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r72628.
        http://trac.webkit.org/changeset/72628
        https://bugs.webkit.org/show_bug.cgi?id=49994

        This patch is causing layout-test failtures on GTK Linux
        64-bit Debug (Requested by ctguil on #webkit).

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::renderParentObject):
        (WebCore::AccessibilityRenderObject::addChildren):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/chromium/AccessibilityObjectChromium.cpp:
        (WebCore::AccessibilityObject::accessibilityIgnoreAttachment):

2010-11-23  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Fix IFrame DOM bindings API
        https://bugs.webkit.org/show_bug.cgi?id=49980

        Fix IFrame API naming. It needs special casing because of the two
        consecutive capital letters.

        * bindings/scripts/CodeGeneratorGObject.pm:

2010-11-23  Shimeng (Simon) Wang  <swang@google.com>

        Reviewed by Steve Block.

        Use platform bridge to set scroll position.
        https://bugs.webkit.org/show_bug.cgi?id=49550

        Refactoring only.  Existing tests shall suffice.

        * platform/android/PlatformBridge.h:
        * platform/android/ScrollViewAndroid.cpp:
        (WebCore::ScrollView::platformSetScrollPosition):

2010-11-23  Andreas Kling  <kling@webkit.org>

        Reviewed by Tor Arne Vestbø.

        [Qt] Selecting shadowed text causes rendering artifacts
        https://bugs.webkit.org/show_bug.cgi?id=49990

        When selecting text starting from the end of a word, we need to use
        the X coordinate of the start of the substring when calculating the
        bounding rect for a ContextShadow.

        * platform/graphics/qt/FontQt.cpp:
        (WebCore::drawTextCommon):

2010-11-23  Chris Guillory  <chris.guillory@google.com>

        Reviewed by Dimitri Glazkov.

        Include the FrameView widget of a RenderWidget in the accessibility tree.
        https://bugs.webkit.org/show_bug.cgi?id=49106

        Include render widget children in the accessibility tree for not mac webkit ports.

        Test: accessibility/iframe-has-document.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::renderParentObject):
        (WebCore::AccessibilityRenderObject::addChildren):
        (WebCore::AccessibilityRenderObject::addRenderWidgetChildren):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/chromium/AccessibilityObjectChromium.cpp:
        (WebCore::AccessibilityObject::accessibilityIgnoreAttachment):

2010-11-23  Chris Rogers  <crogers@google.com>

        Reviewed by Alexey Proskuryakov.

        Add .responseType and .response to XMLHttpRequest
        https://bugs.webkit.org/show_bug.cgi?id=49633

        Tests: fast/xmlhttprequest/xmlhttprequest-responsetype-abort.html
               fast/xmlhttprequest/xmlhttprequest-responsetype-arraybuffer.html
               fast/xmlhttprequest/xmlhttprequest-responsetype-document.html
               fast/xmlhttprequest/xmlhttprequest-responsetype-text.html

        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::markChildren):
        (WebCore::JSXMLHttpRequest::open):
        (WebCore::JSXMLHttpRequest::response):
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::V8XMLHttpRequest::responseAccessorGetter):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::XMLHttpRequest):
        (WebCore::XMLHttpRequest::responseText):
        (WebCore::XMLHttpRequest::responseXML):
        (WebCore::XMLHttpRequest::responseBlob):
        (WebCore::XMLHttpRequest::responseArrayBuffer):
        (WebCore::XMLHttpRequest::setResponseType):
        (WebCore::XMLHttpRequest::responseType):
        (WebCore::XMLHttpRequest::setAsBlob):
        (WebCore::XMLHttpRequest::open):
        (WebCore::XMLHttpRequest::clearResponse):
        (WebCore::XMLHttpRequest::didFinishLoading):
        (WebCore::XMLHttpRequest::didReceiveData):
        * xml/XMLHttpRequest.h:
        (WebCore::XMLHttpRequest::asBlob):
        (WebCore::XMLHttpRequest::optionalResponseXML):
        (WebCore::XMLHttpRequest::optionalResponseBlob):
        (WebCore::XMLHttpRequest::responseTypeCode):
        (WebCore::XMLHttpRequest::optionalResponseArrayBuffer):
        * xml/XMLHttpRequest.idl:

2010-11-23  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Adam Barth.

        dispatchEvent call in EventSource endRequest can lead to calling endRequest
        again which frees up the pending activity. Make sure we have request in flight
        to prevent that from happening.
        https://bugs.webkit.org/show_bug.cgi?id=49448

        Test: http/tests/eventsource/eventsource-status-error-iframe-crash.html

        * page/EventSource.cpp:
        (WebCore::EventSource::endRequest):
        (WebCore::EventSource::close):

2010-11-23  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r72618.
        http://trac.webkit.org/changeset/72618
        https://bugs.webkit.org/show_bug.cgi?id=49987

        "Newly added test is failing on Chromium-linux, patch author
        said to rollout" (Requested by jparent on #webkit).

        * editing/EditingBehavior.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::sendContextMenuEvent):

2010-11-23  Avi Drissman  <avi@google.com>

        Reviewed by Antonio Gomes.

        Add preference to not select when right-clicked
        https://bugs.webkit.org/show_bug.cgi?id=23351

        Test: editing/selection/context-menu-text-selection.html

        * editing/EditingBehavior.h:
        (WebCore::EditingBehavior::shouldSelectOnContextualMenuClick):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::sendContextMenuEvent):

2010-11-23  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [STYLES] invalid color values are not marked as such.
        https://bugs.webkit.org/show_bug.cgi?id=49960

        Properties having a valid structure but invalid values will also
        be marked as non-parsedOk in the Styles pane.

        * css/CSSGrammar.y:
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyle::populateObjectWithStyleProperties):

2010-11-23  Adam Bergkvist  <adam.bergkvist@ericsson.com>

        Reviewed by Martin Robinson.

        [GTK] Building with Blob support fails
        https://bugs.webkit.org/show_bug.cgi?id=49724

        Build fix.

        * GNUmakefile.am:
        * platform/gtk/FileSystemGtk.cpp:
        (WebCore::seekFile): Not implemented.

2010-11-23  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Andreas Kling.

        Make setShouldDelegateScrolling not a real setting, so that it works
        similar to the related setUseFixedLayout and setPaintEntireContents
        options which are all in ScrollView.

        * page/FrameView.cpp:
        * page/FrameView.h:
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::ScrollView):
        (WebCore::ScrollView::setDelegatesScrolling):
        * platform/ScrollView.h:
        (WebCore::ScrollView::delegatesScrolling):

2010-11-23  Adam Roben  <aroben@apple.com>

        Don't rely on DocumentLoader outliving the load/unload events

        DocumentLoader::m_documentLoadTiming is used to record how long firing
        the load event took. But the DocumentLoader was being destroyed while
        the event was being dispatched (due to a call to document.open), which
        meant that when we tried to record the time when the load event
        finished, we were writing into freed memory. We now protect the
        DocumentLoader using a RefPtr. (I initially made a change where we
        would only access the DocumentLoader after the event has finished
        firing, but it seemed possible that a different DocumentLoader could
        have come into existence by then, which would cause us to record the
        times on the wrong DocumentLoadTiming struct.)

        I only saw a crash when firing the load event, but the code for timing
        the unload event seemed like it was vulnerable to the same issue, so I
        made the same fix for it.

        Fixes <http://webkit.org/b/49972> REGRESSION (r72415?): Crash in
        DOMWindow::dispatchTimedEvent when running fast/dom/onload-open.html

        Reviewed by Darin Fisher.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopLoading):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::dispatchLoadEvent):
        Protect the DocumentLoader (and thus its DocumentLoadTiming) with a
        RefPtr.

2010-11-17  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        readPixels should generate INVALID_ENUM if only one of type/format mismatch UNSIGNED_BYTE/RGBA
        https://bugs.webkit.org/show_bug.cgi?id=49673

        Test: fast/canvas/webgl/read-pixels-test.html

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::readPixels):

2010-11-23  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [STYLES] Use strike through as an 'overridden' marker.
        https://bugs.webkit.org/show_bug.cgi?id=49961

        "line-through" is used for inactive properties overridden within the same style.

        * inspector/front-end/inspector.css:
        (.styles-section .properties .overloaded, .styles-section .properties .inactive, .styles-section .properties .disabled):

2010-11-23  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Antonio Gomes.

        Spatial Navigation: Code cleanup
        https://bugs.webkit.org/show_bug.cgi?id=49442

        Remove code that is not used anymore after http://trac.webkit.org/changeset/72522.
        Added const to canBeScrolledIntoView.
        No new tests because this is only code cleanup.

        * page/FocusController.cpp:
        * page/FocusController.h:
        * page/SpatialNavigation.cpp:
        (WebCore::canBeScrolledIntoView):
        * page/SpatialNavigation.h:

2010-11-23  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Steve Block.

        Remove unimplemented (and untested) methods from IndexedDB
        https://bugs.webkit.org/show_bug.cgi?id=49911

        * storage/IDBCursor.idl:
        * storage/IDBDatabase.idl:

2010-11-18  Satish Sampath  <satish@chromium.org>

        Reviewed by Jeremy Orlow.

        For speech input event, send an event object containing all the recognition results and metadata.
        https://bugs.webkit.org/show_bug.cgi?id=49736

        Currently the speech input event 'onwebkitspeechchange' receives no parameters. WebCore already
        has the full list of recognition results and populates only the top result into the input field
        automatically. In this patch we pass a SpeechInputEvent object to the event handler, and the JS
        code can access the full list of results via "event.results.length", "results[i].utterance" and
        "results[i].confidence". Also updated mock object with appropriate methods to test multiple results.

        Test: fast/speech/input-onspeechchange-event.html

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSEventCustom.cpp:
        (WebCore::toJS): Added new event
        * bindings/v8/custom/V8EventCustom.cpp:
        (WebCore::toV8): Added new event
        * dom/Event.cpp:
        (WebCore::Event::isSpeechInputEvent):
        * dom/Event.h:
        * html/HTMLInputElement.cpp:
        * html/HTMLInputElement.h:
        * page/SpeechInputEvent.h: New file implementing SpeechInputEvent.idl
        (WebCore::SpeechInputEvent::~SpeechInputEvent):
        (WebCore::SpeechInputEvent::create):
        (WebCore::SpeechInputEvent::isSpeechInputEvent):
        (WebCore::SpeechInputEvent::results):
        (WebCore::SpeechInputEvent::SpeechInputEvent):
        * page/SpeechInputEvent.idl: New file defining SpeechInputEvent object
        * page/SpeechInputListener.h:
        * page/SpeechInputResult.cpp:
        (WebCore::SpeechInputResult::create):
        * page/SpeechInputResult.h:
        * page/SpeechInputResult.idl: New file defining a single SpeechInputResult object
        * page/SpeechInputResultList.h: New file implementing SpeechInputResultList.idl
        (WebCore::SpeechInputResultList::create):
        (WebCore::SpeechInputResultList::length):
        (WebCore::SpeechInputResultList::item):
        (WebCore::SpeechInputResultList::SpeechInputResultList):
        * page/SpeechInputResultList.idl: New file defining a list of SpeechInputResult objects
        * platform/mock/SpeechInputClientMock.cpp:
        (WebCore::SpeechInputClientMock::addRecognitionResult): Renamed method and added one parameter.
        (WebCore::SpeechInputClientMock::clearResults):
        (WebCore::SpeechInputClientMock::timerFired):
        * platform/mock/SpeechInputClientMock.h:
        * rendering/TextControlInnerElements.cpp:
        (WebCore::InputFieldSpeechButtonElement::setRecognitionResult): Pass new event object to handler.

2010-11-22  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=49860
        CSS style rules don't GC protect objects reachable as their properties

        Test: fast/dom/StyleSheet/gc-rule-children-wrappers.html

        * Android.jscbindings.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        Added new files, sorted appropriate sections for easier adding.

        * bindings/js/JSCSSFontFaceRuleCustom.cpp: Added.
        (WebCore::JSCSSFontFaceRule::markChildren):
        * bindings/js/JSCSSImportRuleCustom.cpp: Added.
        (WebCore::JSCSSImportRule::markChildren):
        * bindings/js/JSCSSMediaRuleCustom.cpp: Added.
        (WebCore::JSCSSMediaRule::markChildren):
        * bindings/js/JSCSSPageRuleCustom.cpp: Added.
        (WebCore::JSCSSPageRule::markChildren):
        * bindings/js/JSCSSStyleRuleCustom.cpp: Added.
        (WebCore::JSCSSStyleRule::markChildren):
        * bindings/js/JSWebKitCSSKeyframeRuleCustom.cpp: Added.
        (WebCore::JSWebKitCSSKeyframeRule::markChildren):
        * bindings/js/JSWebKitCSSKeyframesRuleCustom.cpp: Added.
        (WebCore::JSWebKitCSSKeyframesRule::markChildren):
        Mark objects reachable through these ones.

        * css/CSSFontFaceRule.idl:
        * css/CSSImportRule.idl:
        * css/CSSMediaRule.idl:
        * css/CSSPageRule.idl:
        * css/CSSStyleRule.idl:
        * css/WebKitCSSKeyframeRule.idl:
        * css/WebKitCSSKeyframesRule.idl:
        Added CustomMarkFunction IDL attribute.

2010-11-23  Helder Correia  <helder@sencha.com>

        Reviewed by Ariya Hidayat.

        [Qt] Drawing an image on canvas with shadowBlur draws a solid shadow
        https://bugs.webkit.org/show_bug.cgi?id=49878

        Add support for blurry shadows when drawing images on canvas.

        Test: fast/canvas/canvas-drawImage-shadow.html

        * platform/graphics/qt/ContextShadowQt.cpp:
        (WebCore::ContextShadow::endShadowLayer): Make composition work for solid shadow too.
        * platform/graphics/qt/ImageQt.cpp:
        (WebCore::BitmapImage::draw): Remove old shadow code and introduce ContextShadow.

2010-11-22  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Roben.

        Port ContextMenuWin.cpp to WinCE
        https://bugs.webkit.org/show_bug.cgi?id=48408

        * platform/ContextMenu.h:
        * platform/win/ContextMenuWin.cpp:
        (WebCore::ContextMenu::ContextMenu):
        (WebCore::ContextMenu::itemCount):
        (WebCore::insertMenuItem):
        (WebCore::ContextMenu::insertItem):
        (WebCore::contextMenuItemByIdOrPosition):
        (WebCore::ContextMenu::setPlatformDescription):
        (WebCore::contextMenuItemVector):
        (WebCore::platformMenuDescription):

2010-11-22  David Hyatt  <hyatt@apple.com>

        Back out r72527 since it caused multiple rendering regressions.  Details in bug.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesInInlineDirection):
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::positionListMarker):

2010-11-22  John Knottenbelt  <jknotten@chromium.org>

        Reviewed by Steve Block.

        Implement mocks for client-based Geolocation.
        https://bugs.webkit.org/show_bug.cgi?id=49258

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mock/GeolocationClientMock.cpp: Added.
        (WebCore::GeolocationClientMock::GeolocationClientMock):
        (WebCore::GeolocationClientMock::~GeolocationClientMock):
        (WebCore::GeolocationClientMock::setController):
        (WebCore::GeolocationClientMock::setPosition):
        (WebCore::GeolocationClientMock::setError):
        (WebCore::GeolocationClientMock::geolocationDestroyed):
        (WebCore::GeolocationClientMock::startUpdating):
        (WebCore::GeolocationClientMock::stopUpdating):
        (WebCore::GeolocationClientMock::setEnableHighAccuracy):
        (WebCore::GeolocationClientMock::lastPosition):
        (WebCore::GeolocationClientMock::timerFired):
        (WebCore::GeolocationClientMock::makeGeolocationCallback):
        * platform/mock/GeolocationClientMock.h: Added.

2010-11-22  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Adam Barth.

        Fix bogus include guard.

        * loader/NavigationScheduler.h:

2010-11-22  Andreas Kling  <kling@webkit.org>

        Reviewed by Ariya Hidayat.

        [Qt] Canvas: strokeText() and fillText() produce same shadow
        https://bugs.webkit.org/show_bug.cgi?id=48845

        Test: fast/canvas/canvas-strokeText-strokes-shadow.html

        * platform/graphics/qt/FontQt.cpp:
        (WebCore::drawTextCommon): Stroke the shadow rather than filling it in the cTextStroke case.

2010-11-22  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Sam Weinig.

        Use WTF::FixedArray::size()
        https://bugs.webkit.org/show_bug.cgi?id=49891

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

2010-11-22  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Tony Chang.

        SelectionController::typingStyle() should return EditingStyle*
        https://bugs.webkit.org/show_bug.cgi?id=49813

        Changed the return type of SelectionController::typingStyle to EditingStyle*.

        Extracted textDirection from Editor::textDirectionForSelection to hide the underlying
        CSSMutableStyleDeclaration.

        Also extracted the code to preserve unicode-bidi and direction CSS properties in
        InsertTextCommand::input, and moved into EditingStyle::prepareToApplyAt. ShouldPreserveWritingDirection,
        which is added to the argument list of EditingStyle::prepareToApplyAt, decides whether or not
        these two properties are preserved.

        Also added SelectionController::copyTypingStyle() to copy the typing style as an instance of
        CSSMutableStyleDeclaration.

        No new tests are added since this is a refactoring.

        * editing/EditingStyle.cpp:
        (WebCore::EditingStyle::textDirection): Extracted from Editor::textDirectionForSelection.
        (WebCore::EditingStyle::removeStyleConflictingWithStyleOfNode): Added a missing null check.
        (WebCore::EditingStyle::prepareToApplyAt): See above.
        (WebCore::editingStyleIncludingTypingStyle): Calls SelectionController::typingStyle.
        * editing/EditingStyle.h: Moved WritingDirection from Editor.h
        * editing/Editor.cpp:
        (WebCore::Editor::textDirectionForSelection): Calls EditingStyle::textDirection.
        (WebCore::Editor::computeAndSetTypingStyle): Calls SelectionController::typingStyle.
        (WebCore::Editor::selectionComputedStyle): Ditto.
        (WebCore::Editor::styleForSelectionStart): Ditto.
        * editing/Editor.h:
        * editing/InsertLineBreakCommand.cpp:
        (WebCore::InsertLineBreakCommand::doApply): Ditto.
        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::input): Calls EditingStyle::prepareToApplyAt with PreserveWritingDirection.
        * editing/SelectionController.h:
        (WebCore::SelectionController::typingStyle): Returns EditingStyle* rather than CSSMutableStyleDeclaration*.
        (WebCore::SelectionController::copyTypingStyle): Added.

2010-11-22  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Roben.

        [WINCE] Set correct preprocessor definitions
        https://bugs.webkit.org/show_bug.cgi?id=49887

        * config.h:

2010-11-22  James Robinson  <jamesr@chromium.org>

        Reviewed by Dimitri Glazkov.

        [chromium] font-size:0 text runs should have zero width
        https://bugs.webkit.org/show_bug.cgi?id=49871

        Returns 0 from platformWidthForGlyph if the specified font size is 0.

        Test: fast/text/font-size-zero.html

        * platform/graphics/chromium/SimpleFontDataChromiumWin.cpp:
        (WebCore::SimpleFontData::platformWidthForGlyph):
        * platform/graphics/chromium/SimpleFontDataLinux.cpp:
        (WebCore::SimpleFontData::platformWidthForGlyph):

2010-11-22  Charlie Reis  <creis@chromium.org>

        Reviewed by Darin Fisher.

        Update correct content state during back/forward navigations
        https://bugs.webkit.org/show_bug.cgi?id=48809

        Ensures that history's previousItem is non-null when clients try to
        update content state (e.g., Chromium's UpdateSessionHistory).  We now
        track load completions with a boolean field rather than by clearing
        previousItem.

        Test: fast/history/saves-state-after-frame-nav.html

        * loader/HistoryController.cpp:
        * loader/HistoryController.h:

2010-11-22  Luiz Agostini  <luiz.agostini@openbossa.org>

        Unreviewed, Windows build fix.

        Adding JSMediaQueryList to DerivedSources.cpp.

        * DerivedSources.cpp:

2010-11-22  Adam Roben  <aroben@apple.com>

        Use paths relative to $WebKitVSPropsRedirectionDir to access shared .vsprops files

        Apple's Windows build allows placing header files and import libraries for WebKit's
        dependencies (CoreGraphics, CFNetwork, SQLite, etc.) outside the source tree via the
        $WebKitLibrariesDir environment variable. This is both required for production builds and
        convenient for Apple-internal developer builds. Apple's production builds also require that
        WebKit's shared .vsprops files be accessed relative to $WebKitLibrariesDir. In production
        builds, the files are copied into that directory tree by the
        WebKitLibraries/win/tools/WinTools.make file. In Apple-internal developer builds, the
        copying is done by
        JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCoreGenerated.make.

        This .vsprops copying is problematic in one very important case: when a developer updates
        their source tree and then tries to build. Visual Studio only reads .vsprops files when a
        project is first loaded. So, when Visual Studio is first opened after the .vsprops files are
        updated, it reads in the old files that were already residing in $WebKitLibrariesDir. When a
        build is started, JavaScriptCoreGenerated.make copies the new .vsprops files into
        $WebKitLibrariesDir, but Visual Studio will not pick up the changes.  The rest of the build
        will proceed with out-of-date .vsprops files, which will likely result in a build failure.

        To fix this, we now use normal relative paths to access the .vsprops files in the source
        tree rather than in $WebKitLibrariesDir, but prefix those paths with a new environment
        variable, $WebKitVSPropsRedirectionDir. In developer builds, this environment variable is
        unset, so the normal relative paths are used to read the .vsprops files out of the source
        tree directly. In production builds, this environment variable is set to a fake directory
        that will cause the .vsprops files in $WebKitLibrariesDir to be found when the relative path
        is resolved.
        
        For example, JavaScriptCore.vcproj uses this path for FeatureDefines.vsprops:

        $(WebKitVSPropsRedirectionDir)..\..\..\WebKitLibraries\win\tools\vsprops\FeatureDefines.vsprops

        In developer builds, where $WebKitVSPropsRedirectionDir is unset, this will point to the
        files in WebKitLibraries\win\tools\vsprops in the source tree. In production builds,
        JavaScriptCore.make sets $WebKitVSPropsRedirectionDir to
        "$(SRCROOT)\AppleInternal\tools\vsprops\OpenSource\1\2\3\", so the full path for
        FeatureDefines.vsprops becomes:

        $(SRCROOT)\AppleInternal\tools\vsprops\OpenSource\1\2\3\..\..\..\WebKitLibraries\win\tools\vsprops\FeatureDefines.vsprops

        which resolves to:

        $(SRCROOT)\AppleInternal\tools\vsprops\OpenSource\WebKitLibraries\win\tools\vsprops\FeatureDefines.vsprops

        (We rely on the fact that Windows doesn't care whether the directories "1", "2", and "3"
        actually exist since they are matched by an equal number of ".." path components.)

        Note that Visual Studio still won't pick up changes made to .vsprops files while Visual
        Studio is open, but that problem hasn't seemed to cause developers many headaches so far.

        Fixes <http://webkit.org/b/49181> Windows build fails mysteriously when .vsprops files are
        updated

        Reviewed by Dave Hyatt.

        * WebCore.vcproj/WebCore.make: Set $WebKitVSPropsRedirectionDir so that
        production builds can find the .vsprops files.

        * WebCore.vcproj/QTMovieWin.vcproj:
        * WebCore.vcproj/WebCore.vcproj:
        Changed to use paths relative to $WebKitVSPropsRedirectionDir to access shared .vsprops
        files.

2010-10-21  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Darin Adler.

        Implement CSSOM View matchMedia interface
        https://bugs.webkit.org/show_bug.cgi?id=37205

        New interfaces may be used to evaluate media queries and to associate listeners
        to media queries. Those listeners are called whenever the associated query changes.
        Specification may be found at http://dev.w3.org/csswg/cssom-view/#the-mediaquerylist-interface

        operator== added to JS version of ScriptValue.
        Method isFunction added to JS and V8 versions of ScriptValue.

        * bindings/js/ScriptValue.cpp:
        (WebCore::ScriptValue::isFunction):
        * bindings/js/ScriptValue.h:
        (WebCore::ScriptValue::operator==):
        * bindings/v8/ScriptValue.h:
        (WebCore::ScriptValue::isFunction):

        Some changes were needed to the code generators to handle type MediaQueryListListener.

        * bindings/scripts/CodeGeneratorGObject.pm:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorV8.pm:

        Some changes to the bindings test results that were previously added.

        * bindings/scripts/test/GObject/WebKitDOMTestMediaQueryListListener.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestMediaQueryListListener.h:
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp:
        (WebCore::jsTestMediaQueryListListenerPrototypeFunctionMethod):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp:
        (WebCore::TestMediaQueryListListenerInternal::methodCallback):
        (WebCore::ConfigureV8TestMediaQueryListListenerTemplate):

        New interfaces:

        * css/MediaQueryList.cpp: Added.
        * css/MediaQueryList.h: Added.
        * css/MediaQueryList.idl: Added.

        * css/MediaQueryListListener.cpp: Added.
        * css/MediaQueryListListener.h: Added.
        * css/MediaQueryListListener.idl: Added.

        To avoid adding code to classes DOMWindow and Document a new class MediaQueryMatcher was created.

        * css/MediaQueryMatcher.cpp: Added.
        * css/MediaQueryMatcher.h: Added.

        Document and DOMWindow have changed to support new features. DOMWindow is the class that
        publishes methods matchMedia but for page cache to work properly the reference to the
        MediaQueryMatcher must be in Document.

        * dom/Document.cpp:
        (WebCore::Document::~Document):
        (WebCore::Document::mediaQueryMatcher):
        (WebCore::Document::styleSelectorChanged):
        * dom/Document.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::matchMedia):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:

        Build systems

        * CMakeLists.txt:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/gobject/GNUmakefile.am:

        Tests: fast/media/media-query-list-01.html
               fast/media/media-query-list-02.html
               fast/media/media-query-list-03.html
               fast/media/media-query-list-04.html
               fast/media/media-query-list-05.html
               fast/media/media-query-list-06.html
               fast/media/media-query-list-07.html

2010-11-22  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [REGRESSION] Contents of rules inside @media not displayed/editable
        https://bugs.webkit.org/show_bug.cgi?id=49804

        * css/CSSImportRule.cpp:
        (WebCore::CSSImportRule::insertedIntoParent):
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::setStyleSheetText2):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::asCSSRuleList):
        (WebCore::InspectorStyleSheet::reparseStyleSheet):
        (WebCore::InspectorStyleSheet::setText):
        (WebCore::InspectorStyleSheet::addRule):
        (WebCore::InspectorStyleSheet::ruleForId):
        (WebCore::InspectorStyleSheet::ruleIndexByStyle):
        (WebCore::InspectorStyleSheet::ensureText):
        (WebCore::InspectorStyleSheet::ensureSourceData):
        (WebCore::InspectorStyleSheet::ensureFlatRules):
        (WebCore::InspectorStyleSheet::revalidateStyle):
        (WebCore::InspectorStyleSheet::buildArrayForRuleList):
        (WebCore::InspectorStyleSheet::fixUnparsedPropertyRanges):
        (WebCore::InspectorStyleSheet::collectFlatRules):
        * inspector/InspectorStyleSheet.h:

2010-11-22  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: dump inspector protocol messages into console.
        Sometimes I need to dump inspector messages into console.
        It'd be much simple to have this code in repository and
        enable protocol dumping just by a flag.

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

        * inspector/CodeGeneratorInspector.pm:
        * inspector/front-end/WorkersSidebarPane.js:
        (WebInspector.WorkersSidebarPane.prototype.reset):
        * inspector/front-end/inspector.js:
        (WebInspector_syncDispatch):

2010-11-22  Andreas Kling  <kling@webkit.org>

        Reviewed by Nikolas Zimmermann.

        GraphicsContext: Make drawFocusRing() take a Path instead of a Vector<Path>
        https://bugs.webkit.org/show_bug.cgi?id=49840

        This avoid copying a Path object when drawing focus rings.

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawFocusRing):
        * platform/graphics/haiku/GraphicsContextHaiku.cpp:
        (WebCore::GraphicsContext::drawFocusRing):
        * platform/graphics/mac/GraphicsContextMac.mm:
        (WebCore::GraphicsContext::drawFocusRing):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::drawFocusRing):
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::drawFocusRing):
        * platform/graphics/win/GraphicsContextCGWin.cpp:
        (WebCore::GraphicsContext::drawFocusRing):
        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        (WebCore::GraphicsContext::drawFocusRing):
        * platform/graphics/wx/GraphicsContextWx.cpp:
        (WebCore::GraphicsContext::drawFocusRing):
        * rendering/RenderImage.h:
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paint):
        (WebCore::RenderImage::paintFocusRing):
        Renamed from paintFocusRings since it only paints one ring.

2010-11-22  Renata Hodovan  <reni@webkit.org>

        Reviewed by Andreas Kling.

        Outside list bullets ignore text-align style.
        https://bugs.webkit.org/show-bug.cgi?id=15713

        Fix the position of outside markers by setting its logicalLeft member. Embedded markers need special treatment.
        First, the total width of markers should be calculated. Subtracting it from logicalLeft we get the outermost bullet's
        position. As for the others, this sum should be decremented with the previous marker's width.
        In case of vertical markers the padding is unneeded.

        Test: fast/lists/outSideListMarkers.html

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesInInlineDirection):
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::positionListMarker):

2010-11-22  Yael Aharon  <yael.aharon@nokia.com>, Chang Shu  <chang.shu@nokia.com>

        Reviewed by Antonio Gomes.

        Spatial Navigation: issues with the node selection algorithm.
        https://bugs.webkit.org/show_bug.cgi?id=49382

        Modify the Spatial Navigation algorithm, to better handle initial focus and
        navigation between frames.
        The new algorithm takes the rect of the focused node as the startingRect,
        instead of the node itself. That allows us to construct a virtual rect if
        there is no focused node, or if it is off the screen.
        The virtual rect is the edge of the container in the direction of the navigation.

        With this patch, scrollable containers and frames will scroll regardless of weather
        they have focusable content. Users will be able to use arrow keys to view all the
        content of such a container. The only exception is if the container has style overflow:hidden. 
        We will not scroll in that case.

        With this patch, we handle z-index and positioning so that if there are 2 overlapping focusable nodes,
        we do a hit test and only the node on top can get focus.

        hasOffScreenRect() was modified so that it can check if a node will be off-screen even after we scrolled
        its parent container. We do not add the scrolling conditions for containers that have overflow:hidden
        and cannot scroll.

        calculateScrollbarModesForLayout is used to decide if a frame can scroll or not. We cannot rely on
        the exsistance of the scrollbar, because it could be removed via the API, while the frame is still
        allowed to scroll.

        * page/FocusController.cpp:
        (WebCore::updateFocusCandidateIfNeeded):
        (WebCore::FocusController::findFocusCandidateInContainer):
        (WebCore::FocusController::advanceFocusDirectionallyInContainer):
        (WebCore::FocusController::advanceFocusDirectionally):
        * page/FocusController.h:
        * page/FrameView.h:
        * page/SpatialNavigation.cpp:
        (WebCore::FocusCandidate::FocusCandidate):
        (WebCore::distanceDataForNode):
        (WebCore::alignmentForRects):
        (WebCore::areRectsMoreThanFullScreenApart):
        (WebCore::isRectInDirection):
        (WebCore::hasOffscreenRect):
        (WebCore::scrollInDirection):
        (WebCore::isScrollableContainerNode):
        (WebCore::scrollableEnclosingBoxOrParentFrameForNodeInDirection):
        (WebCore::canScrollInDirection):
        (WebCore::rectToAbsoluteCoordinates):
        (WebCore::nodeRectInAbsoluteCoordinates):
        (WebCore::frameRectInAbsoluteCoordinates):
        (WebCore::entryAndExitPointsForDirection):
        (WebCore::canBeScrolledIntoView):
        (WebCore::virtualRectForDirection):
        * page/SpatialNavigation.h:

2010-11-22  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Fix various problems with the SVG*List code
        https://bugs.webkit.org/show_bug.cgi?id=49880

        Write tests for SVGNumberList/SVGPointList/SVGStringList/SVGTransformList and extend SVGLengthList tests.
        SVG DOM <-> XML DOM synchronization is now tested for all these types, and works great. Unify the string format produced
        by the various valueAsString() functions for maximum compatibility with Firefox / Opera.

        * Build a real transform string for SVGTransformList, instead of dumping the elements of the concatted matrix.
        * Add SVGStringList XML dom synchronization, only affects SVGTests requiredFeatures/requiredExtensions/systemLanguage.
        * Make all animVal properties readonly, tested by types-dom-07-f.svg (from SVG 1.1 2nd edition).
        * Enable StrictTypeChecking/RequiresAllArguments=Raise for all SVGList types.

        Tests: svg/W3C-SVG-1.1-SE/types-dom-07-f.svg
               svg/dom/SVGNumberList-basics.xhtml
               svg/dom/SVGPointList-basics.xhtml
               svg/dom/SVGStringList-basics.xhtml
               svg/dom/SVGTransformList-basics.xhtml

        * bindings/js/JSSVGLengthCustom.cpp:
        (WebCore::JSSVGLength::setValue): Throw NO_MODIFICATION_ALLOWED_ERR when the SVGPropertyTearOffs role is AnimValRole.
        (WebCore::JSSVGLength::convertToSpecifiedUnits): Ditto.
        * bindings/scripts/CodeGeneratorJS.pm: Ditto.
        * bindings/scripts/CodeGeneratorObjC.pm: Ditto.
        * bindings/scripts/CodeGeneratorV8.pm: Ditto.
        * bindings/v8/custom/V8SVGLengthCustom.cpp:
        (WebCore::V8SVGLength::valueAccessorSetter): Ditto.
        (WebCore::V8SVGLength::convertToSpecifiedUnitsCallback): Ditto.
        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::synchronizeProperty): Also synchronize the SVGTests SVGStringLists.
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::synchronizeProperty): Ditto.
        * svg/SVGCircleElement.cpp:
        (WebCore::SVGCircleElement::synchronizeProperty): Ditto.
        * svg/SVGClipPathElement.cpp:
        (WebCore::SVGClipPathElement::synchronizeProperty): Ditto.
        * svg/SVGCursorElement.cpp:
        (WebCore::SVGCursorElement::synchronizeProperty): Ditto.
        * svg/SVGDefsElement.cpp:
        (WebCore::SVGDefsElement::synchronizeProperty): Ditto.
        * svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::synchronizeProperty): Ditto.
        * svg/SVGForeignObjectElement.cpp:
        (WebCore::SVGForeignObjectElement::synchronizeProperty): Ditto.
        * svg/SVGGElement.cpp:
        (WebCore::SVGGElement::synchronizeProperty): Ditto.
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::synchronizeProperty): Ditto.
        * svg/SVGLengthList.cpp:
        (WebCore::SVGLengthList::valueAsString): Use ' ' instead of ',' as seperator.
        * svg/SVGLengthList.idl: Enable StrictTypeChecking, RequiresAllArguments=Raise.
        * svg/SVGLineElement.cpp:
        (WebCore::SVGLineElement::synchronizeProperty): Also synchronize the SVGTests SVGStringLists.
        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::synchronizeProperty): Ditto.
        * svg/SVGNumberList.cpp:
        (WebCore::SVGNumberList::valueAsString): Use ' ' instead of ',' as seperator.
        * svg/SVGNumberList.idl: Enable StrictTypeChecking, RequiresAllArguments=Raise.
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::synchronizeProperty): Also synchronize the SVGTests SVGStringLists.
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::synchronizeProperty): Ditto.
        * svg/SVGPointList.idl: Enable StrictTypeChecking, RequiresAllArguments=Raise.
        * svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::synchronizeProperty): Also synchronize the SVGTests SVGStringLists.
        * svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::synchronizeProperty): Ditto.
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::synchronizeProperty): Ditto.
        * svg/SVGStringList.cpp:
        (WebCore::SVGStringList::valueAsString): Add valueAsString() implementation, necessary for SVG DOM <-> XML DOM synchronization.
        * svg/SVGStringList.h:
        * svg/SVGStringList.idl: Enable StrictTypeChecking, RequiresAllArguments=Raise.
        * svg/SVGSwitchElement.cpp:
        (WebCore::SVGSwitchElement::synchronizeProperty): Also synchronize the SVGTests SVGStringLists.
        * svg/SVGTests.cpp: Rewrite, similar to SVGPolyElement, to synchronize the requiredFeatures/requiredExtension/systemLanguage SVGStringLists with their XML DOM attributes.
        (WebCore::SVGTests::SVGTests):
        (WebCore::SVGTests::isValid):
        (WebCore::SVGTests::parseMappedAttribute):
        (WebCore::SVGTests::isKnownAttribute):
        (WebCore::SVGTests::handleAttributeChange):
        (WebCore::SVGTests::synchronizeProperties): To be called by all classes inheriting from SVGTests, in their synchronizeProperty() methods.
        (WebCore::SVGTests::synchronizeRequiredFeatures):
        (WebCore::SVGTests::synchronizeRequiredExtensions):
        (WebCore::SVGTests::synchronizeSystemLanguage):
        (WebCore::SVGTests::requiredFeatures):
        (WebCore::SVGTests::requiredExtensions):
        (WebCore::SVGTests::systemLanguage):
        * svg/SVGTests.h:
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::synchronizeProperty): Also synchronize the SVGTests SVGStringLists.
        * svg/SVGTransform.cpp:
        (WebCore::SVGTransform::valueAsString): Added a proper way to serialize a SVGTransform into a String.
        * svg/SVGTransform.h:
        * svg/SVGTransformList.cpp:
        (WebCore::SVGTransformList::valueAsString): Rewrite, to build a real transform list string, instead of dumping the concatted matrix.
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::synchronizeProperty): Also synchronize the SVGTests SVGStringLists.
        * svg/properties/SVGListProperty.h: s/TYPE_MISMATCH_ERR/SVGException::SVG_WRONG_TYPE_ERR/ for compatibility with Firefox.
        (WebCore::SVGListProperty::initializeValuesAndWrappers):
        (WebCore::SVGListProperty::insertItemBeforeValuesAndWrappers):
        (WebCore::SVGListProperty::replaceItemValues):
        (WebCore::SVGListProperty::replaceItemValuesAndWrappers):
        (WebCore::SVGListProperty::removeItemValuesAndWrappers): Handle corner case, the item passed to removeItem() was the only on in the list, list is empty now, nothing to replace.
        (WebCore::SVGListProperty::appendItemValuesAndWrappers):
        (WebCore::SVGListProperty::role): Expose the role of this list property.
        * svg/properties/SVGPathSegListPropertyTearOff.h: s/TYPE_MISMATCH_ERR/SVGException::SVG_WRONG_TYPE_ERR/ for compatibility with Firefox.
        (WebCore::SVGPathSegListPropertyTearOff::initialize):
        (WebCore::SVGPathSegListPropertyTearOff::insertItemBefore):
        (WebCore::SVGPathSegListPropertyTearOff::replaceItem):
        (WebCore::SVGPathSegListPropertyTearOff::appendItem):
        * svg/properties/SVGProperty.h: Add new virtual SVGPropertyRole role() accessor.
        * svg/properties/SVGPropertyTearOff.h:
        (WebCore::SVGPropertyTearOff::create): Store the passed in SVGProperyRole, instead of ignoring it.
        (WebCore::SVGPropertyTearOff::role):
        (WebCore::SVGPropertyTearOff::SVGPropertyTearOff):
        * svg/properties/SVGStaticPropertyTearOff.h:
        (WebCore::SVGStaticPropertyTearOff::SVGStaticPropertyTearOff): Pass UndefinedRole as default role to SVGPropertyTearOff.
        * svg/properties/SVGStaticPropertyWithParentTearOff.h: Ditto.
        (WebCore::SVGStaticPropertyWithParentTearOff::SVGStaticPropertyWithParentTearOff):

2010-11-22  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Dan Bernstein.

        Fix for Bug 49374 - Web Font specified with base64 data URI ending with EOT is not rendered.
        https://bugs.webkit.org/show_bug.cgi?id=49374

        Test: fast/css/font-face-data-uri.html

        * css/CSSFontFaceSrcValue.cpp:
        (WebCore::CSSFontFaceSrcValue::isSupportedFormat): Do not check "file
        extension" for data URI. For other URI, check against ".eot" rather
        than "eot".

2010-11-21  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Csaba Osztrogonác.

        Use WTF_ARRAY_LENGTH in WebCore directory
        https://bugs.webkit.org/show_bug.cgi?id=49882

        * accessibility/AccessibilityObject.cpp:
        (WebCore::createARIARoleMap):
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::JSDOMWindowBase):
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::ConfigureV8TestObjTemplate):
        * css/CSSComputedStyleDeclaration.cpp:
        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::getPropertyValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseAnimationShorthand):
        (WebCore::CSSParser::parseTransitionShorthand):
        * css/CSSPropertyLonghand.cpp:
        (WebCore::initShorthandMap):
        * dom/ExceptionCode.cpp:
        (WebCore::getExceptionCodeDescription):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::removeImplicitlyStyledElement):
        * editing/EditingStyle.cpp:
        * editing/Editor.cpp:
        (WebCore::triStateOfStyle):
        * editing/EditorCommand.cpp:
        (WebCore::createCommandMap):
        * editing/MarkupAccumulator.cpp:
        (WebCore::appendCharactersReplacingEntities):
        * html/canvas/WebGLBuffer.cpp:
        (WebCore::WebGLBuffer::getCachedMaxIndex):
        (WebCore::WebGLBuffer::setCachedMaxIndex):
        * loader/FTPDirectoryParser.cpp:
        (WebCore::parseOneFTPLine):
        * mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::updateFromElement):
        * page/animation/AnimationBase.cpp:
        (WebCore::addShorthandProperties):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::hasValidAvgCharWidth):
        * rendering/break_lines.cpp:
        * svg/SVGTransformable.cpp:
        (WebCore::parseAndSkipType):
        * svg/SVGViewSpec.cpp:
        (WebCore::SVGViewSpec::parseViewSpec):
        * svg/SVGZoomAndPan.cpp:
        (WebCore::SVGZoomAndPan::parseZoomAndPan):
        * xml/XPathFunctions.cpp:
        (WebCore::XPath::createFunctionMap):

2010-11-21  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Chris Fleizach.

        [GTK] Implement ROLE_COMBO_BOX
        https://bugs.webkit.org/show_bug.cgi?id=25678

        Implement the remaining bits for combo boxes.

        This patch finishes the implementation, from the point of view of
        the Atk library, of those objects exposed to ATK as combo boxes,
        and their related elements (menus and menu items). It therefore
        implements the proper interfaces for each type of object related
        to combo boxes (AtkSelection for the combo box, AtkText for every
        menu item and AtkAction for the combo box, the menu and the menu
        items), takes care of emitting the proper signals when focus or a
        given a selection changes and adds a new unit test to check all
        this new stuff.

        Make possible to ask an AccessibleMenuListOption for a sensible
        string representation, so far only available through the private
        and MSAA related method nameForMSAA. Just moved the implementation
        of that method to an overriden version of stringValue(), which is
        platform independent, and called that from nameForMSAA().

        * accessibility/AccessibilityMenuListOption.h:
        * accessibility/AccessibilityMenuListOption.cpp:
        (WebCore::AccessibilityMenuListOption::nameForMSAA): Just call to
        stringValue(), which holds from now on that used to be here.
        (WebCore::AccessibilityMenuListOption::stringValue): New, override
        of AccessibilityObject::stringValue() to return a proper string.

        Emit the missing signals when a selection is made.

        * accessibility/gtk/AXObjectCacheAtk.cpp:
        (WebCore::AXObjectCache::postPlatformNotification): Emit the usual
        'focus' signals when a selection is made over the combo box.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (setAtkStateSetFromCoreObject): Ensure the EXPANDABLE and EXPANDED
        Atk states are added to the state set when needed.
        (listObjectForSelection): New, returns the proper list object (the
        one holding the list of available options as its children) for an
        specific AtkObject implementing AtkSelection. This is needed
        because sometimes the selectable options are not directly children
        of the AtkSelection object (i.e. a combo box has a 'menu' object
        as its only child of it, holding the list of options as children).
        (optionFromList): Use listObjectForSelection() to get the actual
        object holding the list of children as the available options.
        (optionFromSelection): Add support for combo boxes.
        (webkit_accessible_selection_add_selection): Ditto.
        (webkit_accessible_selection_clear_selection): Ditto.
        (webkit_accessible_selection_get_selection_count): Ditto.
        (webkit_accessible_selection_is_child_selected): Ditto.
        (webkit_accessible_selection_remove_selection): Ditto.
        (webkit_accessible_text_get_text): Makes sure stringValue() is
        considered to get the result substring when it was already
        considered when checking the maximum text length for the object.
        (getInterfaceMaskFromObject): Make sure the AtkSelection interface
        is implemented for the combo boxes, that the AtkText is
        implemented for the menu items and that the AtkAction interface is
        now implemented for every object (WebCore will decide what to do).

        Avoid a segfault crash when using this from unit tests.

        * platform/gtk/PopupMenuGtk.cpp:
        (WebCore::PopupMenuGtk::show): Make sure we got a valid GdkWindow
        before calling gdk_window_get_origin() over it.

2010-11-21  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Csaba Osztrogonác.

        Use WTF_ARRAY_LENGTH in WebCore/platform directory
        https://bugs.webkit.org/show_bug.cgi?id=49881

        * platform/KURL.cpp:
        (WebCore::portAllowed):
        * platform/KURLGoogle.cpp:
        (WebCore::portAllowed):
        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedImageMIMETypes):
        (WebCore::initializeSupportedJavaScriptMIMETypes):
        (WebCore::initializeSupportedNonImageMimeTypes):
        * platform/UUID.cpp:
        (WebCore::createCanonicalUUIDString):
        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::applyEdjeStateFromForm):
        * platform/graphics/GraphicsTypes.cpp:
        * platform/graphics/chromium/FontCacheChromiumWin.cpp:
        (WebCore::FontCodepage::if):
        * platform/graphics/chromium/FontUtilsChromiumWin.cpp:
        * platform/graphics/mac/ComplexTextControllerCoreText.cpp:
        (WebCore::ComplexTextController::collectComplexTextRunsForCharactersCoreText):
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::disableComponentsOnce):
        * platform/graphics/mac/SimpleFontDataATSUI.mm:
        (WebCore::SimpleFontData::checkShapesArabic):
        * platform/graphics/mac/SimpleFontDataCoreText.cpp:
        (WebCore::SimpleFontData::getCFStringAttributes):
        * platform/graphics/win/GraphicsContextCGWin.cpp:
        (WebCore::GraphicsContext::drawLineForTextChecking):
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
        (WebCore::disableComponentsOnce):
        * platform/graphics/win/QTMovie.cpp:
        (QTMovie::load):
        * platform/network/cf/SocketStreamHandleCFNet.cpp:
        (WebCore::SocketStreamHandle::createStreams):
        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::pruneBlacklistedCodecs):
        * platform/text/transcoder/FontTranscoder.cpp:
        (WebCore::FontTranscoder::FontTranscoder):

2010-11-20  Andreas Kling  <kling@webkit.org>

        Rubber-stamped by Antonio Gomes.

        [Qt] Fix spelling error (isEmtpyValue -> isEmptyValue)

        * platform/graphics/qt/FontPlatformDataQt.cpp:
        (WebCore::isEmptyValue):
        (WebCore::FontPlatformData::FontPlatformData):

2010-11-20  Andreas Kling  <kling@webkit.org>

        Reviewed by Antonio Gomes.

        [Qt] Limit the size of image preview "cursor" when dragging
        https://bugs.webkit.org/show_bug.cgi?id=49872

        Respect DragController::maxDragImageSize() (currently 400x400.)

        * platform/qt/DragImageQt.cpp:
        (WebCore::dragImageSize):
        (WebCore::scaleDragImage):

2010-11-20  Andreas Kling  <kling@webkit.org>

        Reviewed by Antonio Gomes.

        [Qt] Dragging a selection should use a rendering of the selection as "cursor" for the drag
        https://bugs.webkit.org/show_bug.cgi?id=49870

        Implement Frame::dragImageForSelection() and the necessary DragImage helpers for Qt.

        * page/qt/FrameQt.cpp:
        (WebCore::Frame::dragImageForSelection):
        * platform/qt/DragImageQt.cpp:
        (WebCore::deleteDragImage):
        (WebCore::createDragImageFromImage):

2010-11-20  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Memory managament for DOM GObject wrappers
        https://bugs.webkit.org/show_bug.cgi?id=40302

        Initial attempt to have a kind of poor man's garbage collection
        for GObject DOM objects. We tie the object's lifecycle to their
        parent Frame and/or its document; that is, all objects will be
        collected when their parent frame is destroyed or when that frame
        transitions to a new document. Manual management (calling
        g_object_unref on them) is also allowed, and is required for
        objects that are not in the DOM tree (eg NodeLists).

        * GNUmakefile.am:
        * bindings/gobject/DOMObjectCache.cpp: Added.
        * bindings/gobject/DOMObjectCache.h: Copied from WebCore/bindings/gobject/WebKitDOMBinding.h.
        * bindings/gobject/WebKitDOMBinding.cpp: Remove the old cache code.
        * bindings/gobject/WebKitDOMBinding.h: ditto.
        * bindings/scripts/CodeGeneratorGObject.pm: include the new DOMObjectCache header.

2010-11-20  Helder Correia  <helder@sencha.com>

        Reviewed by Andreas Kling.

        [Qt] Path stroke lacks blur shadow support
        https://bugs.webkit.org/show_bug.cgi?id=49490

        Add blur shadow support to strokePath().

        Test: fast/canvas/canvas-strokePath-shadow.html

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

2010-11-20  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by David Kilzer.

        [BREWMP] Replace HTONL, HTONS, NTOHL and NTOHS with byte order conversion functions from AEEstd.h
        https://bugs.webkit.org/show_bug.cgi?id=49518

        HTONL, HTONS, NTOHL and NTOHS macros are prohibited in Mod1. Use byte order conversion functions provided by AEEstd.h.

        * platform/graphics/WOFFFileFormat.cpp:

2010-11-20  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by David Kilzer.

        [BREWMP] Use std_wstrlen instead of WSTRLEN
        https://bugs.webkit.org/show_bug.cgi?id=49516

        WSTRLEN is prohibited in Mod1. Use std_wstrlen from AEEstd.h instead.

        * platform/text/brew/StringBrew.cpp:
        (WTF::String::String):

2010-11-20  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by David Kilzer.

        [WINCE] Implement textBreakLast and textBreakPrevious
        https://bugs.webkit.org/show_bug.cgi?id=49552

        This allows us to use TextBoundaries.cpp and remove TextBoundariesWinCE.cpp.
        Also unify the different TextBreakIterator::first() implementations.

        * platform/text/wince/TextBoundariesWinCE.cpp: Removed.
        * platform/text/wince/TextBreakIteratorWinCE.cpp:
        (WebCore::TextBreakIterator::first):
        (WebCore::TextBreakIterator::last):
        (WebCore::textBreakLast):
        (WebCore::textBreakPrevious):

2010-11-20  Andreas Kling  <kling@webkit.org>

        Reviewed by David Kilzer.

        Path: Remove unused method swap()
        https://bugs.webkit.org/show_bug.cgi?id=49853

        * platform/graphics/Path.h:

2010-11-20  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/49867> MediaPlayerPrivateQTKit::setPreservesPitch(bool) leaks an NSDictionary

        Reviewed by Dan Bernstein.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::setPreservesPitch): Use
        RetainPtr<NSDictionary> for movieAttributes.

2010-11-20  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Andreas Kling.

        Use String::fromUTF8 instead of UTF8Encoding().decode
        in the libxml XMLDocumentParser
        https://bugs.webkit.org/show_bug.cgi?id=45488

        * dom/XMLDocumentParser.cpp:
        (WebCore::toString):

2010-11-20  Renata Hodovan  <reni@inf.u-szeged.hu>

        Reviewed by Dirk Schulze.

        FilterPrimitives should have a pointer to its Filter object.
        https://bugs.webkit.org/show_bug.cgi?id=49863

        FilterPrimitives should have a renderer, and they need a member pointer to their Filter objects for Layout() calls.
        This patch adds this member to FilterEffect.

        No new test is needed because these modifications are covered by all of SVG Filter tests.

        * platform/graphics/filters/FEBlend.cpp:
        (WebCore::FEBlend::FEBlend):
        (WebCore::FEBlend::create):
        (WebCore::FEBlend::apply):
        * platform/graphics/filters/FEBlend.h:
        * platform/graphics/filters/FEColorMatrix.cpp:
        (WebCore::FEColorMatrix::FEColorMatrix):
        (WebCore::FEColorMatrix::create):
        (WebCore::FEColorMatrix::apply):
        * platform/graphics/filters/FEColorMatrix.h:
        * platform/graphics/filters/FEComponentTransfer.cpp:
        (WebCore::FEComponentTransfer::FEComponentTransfer):
        (WebCore::FEComponentTransfer::create):
        (WebCore::FEComponentTransfer::apply):
        * platform/graphics/filters/FEComponentTransfer.h:
        * platform/graphics/filters/FEComposite.cpp:
        (WebCore::FEComposite::FEComposite):
        (WebCore::FEComposite::create):
        (WebCore::FEComposite::determineAbsolutePaintRect):
        (WebCore::FEComposite::apply):
        * platform/graphics/filters/FEComposite.h:
        * platform/graphics/filters/FEConvolveMatrix.cpp:
        (WebCore::FEConvolveMatrix::FEConvolveMatrix):
        (WebCore::FEConvolveMatrix::create):
        (WebCore::FEConvolveMatrix::apply):
        * platform/graphics/filters/FEConvolveMatrix.h:
        (WebCore::FEConvolveMatrix::determineAbsolutePaintRect):
        * platform/graphics/filters/FEDiffuseLighting.cpp:
        (WebCore::FEDiffuseLighting::FEDiffuseLighting):
        (WebCore::FEDiffuseLighting::create):
        * platform/graphics/filters/FEDiffuseLighting.h:
        * platform/graphics/filters/FEDisplacementMap.cpp:
        (WebCore::FEDisplacementMap::FEDisplacementMap):
        (WebCore::FEDisplacementMap::create):
        (WebCore::FEDisplacementMap::apply):
        * platform/graphics/filters/FEDisplacementMap.h:
        (WebCore::FEDisplacementMap::determineAbsolutePaintRect):
        * platform/graphics/filters/FEFlood.cpp:
        (WebCore::FEFlood::FEFlood):
        (WebCore::FEFlood::create):
        (WebCore::FEFlood::apply):
        * platform/graphics/filters/FEFlood.h:
        (WebCore::FEFlood::determineAbsolutePaintRect):
        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::FEGaussianBlur::FEGaussianBlur):
        (WebCore::FEGaussianBlur::create):
        (WebCore::FEGaussianBlur::determineAbsolutePaintRect):
        (WebCore::FEGaussianBlur::apply):
        * platform/graphics/filters/FEGaussianBlur.h:
        * platform/graphics/filters/FELighting.cpp:
        (WebCore::FELighting::FELighting):
        (WebCore::FELighting::apply):
        * platform/graphics/filters/FELighting.h:
        (WebCore::FELighting::determineAbsolutePaintRect):
        * platform/graphics/filters/FEMerge.cpp:
        (WebCore::FEMerge::FEMerge):
        (WebCore::FEMerge::create):
        (WebCore::FEMerge::apply):
        * platform/graphics/filters/FEMerge.h:
        * platform/graphics/filters/FEMorphology.cpp:
        (WebCore::FEMorphology::FEMorphology):
        (WebCore::FEMorphology::create):
        (WebCore::FEMorphology::determineAbsolutePaintRect):
        (WebCore::FEMorphology::apply):
        * platform/graphics/filters/FEMorphology.h:
        * platform/graphics/filters/FEOffset.cpp:
        (WebCore::FEOffset::FEOffset):
        (WebCore::FEOffset::create):
        (WebCore::FEOffset::determineAbsolutePaintRect):
        (WebCore::FEOffset::apply):
        * platform/graphics/filters/FEOffset.h:
        * platform/graphics/filters/FESpecularLighting.cpp:
        (WebCore::FESpecularLighting::FESpecularLighting):
        (WebCore::FESpecularLighting::create):
        * platform/graphics/filters/FESpecularLighting.h:
        * platform/graphics/filters/FETile.cpp:
        (WebCore::FETile::FETile):
        (WebCore::FETile::create):
        (WebCore::FETile::apply):
        * platform/graphics/filters/FETile.h:
        (WebCore::FETile::determineAbsolutePaintRect):
        * platform/graphics/filters/FETurbulence.cpp:
        (WebCore::FETurbulence::FETurbulence):
        (WebCore::FETurbulence::create):
        (WebCore::FETurbulence::apply):
        * platform/graphics/filters/FETurbulence.h:
        (WebCore::FETurbulence::determineAbsolutePaintRect):
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::FilterEffect):
        (WebCore::FilterEffect::determineAbsolutePaintRect):
        (WebCore::FilterEffect::effectContext):
        * platform/graphics/filters/FilterEffect.h:
        (WebCore::FilterEffect::filter):
        * platform/graphics/filters/SourceAlpha.cpp:
        (WebCore::SourceAlpha::create):
        (WebCore::SourceAlpha::determineAbsolutePaintRect):
        (WebCore::SourceAlpha::apply):
        * platform/graphics/filters/SourceAlpha.h:
        (WebCore::SourceAlpha::SourceAlpha):
        * platform/graphics/filters/SourceGraphic.cpp:
        (WebCore::SourceGraphic::create):
        (WebCore::SourceGraphic::determineAbsolutePaintRect):
        (WebCore::SourceGraphic::apply):
        * platform/graphics/filters/SourceGraphic.h:
        (WebCore::SourceGraphic::SourceGraphic):
        * rendering/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::buildPrimitives):
        (WebCore::RenderSVGResourceFilter::applyResource):
        (WebCore::RenderSVGResourceFilter::postApplyResource):
        * rendering/RenderSVGResourceFilter.h:
        * rendering/SVGRenderTreeAsText.cpp:
        (WebCore::writeSVGResourceContainer):
        * svg/SVGFEBlendElement.cpp:
        (WebCore::SVGFEBlendElement::build):
        * svg/SVGFEBlendElement.h:
        * svg/SVGFEColorMatrixElement.cpp:
        (WebCore::SVGFEColorMatrixElement::build):
        * svg/SVGFEColorMatrixElement.h:
        * svg/SVGFEComponentTransferElement.cpp:
        (WebCore::SVGFEComponentTransferElement::build):
        * svg/SVGFEComponentTransferElement.h:
        * svg/SVGFECompositeElement.cpp:
        (WebCore::SVGFECompositeElement::build):
        * svg/SVGFECompositeElement.h:
        * svg/SVGFEConvolveMatrixElement.cpp:
        (WebCore::SVGFEConvolveMatrixElement::build):
        * svg/SVGFEConvolveMatrixElement.h:
        * svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::build):
        * svg/SVGFEDiffuseLightingElement.h:
        * svg/SVGFEDisplacementMapElement.cpp:
        (WebCore::SVGFEDisplacementMapElement::build):
        * svg/SVGFEDisplacementMapElement.h:
        * svg/SVGFEFloodElement.cpp:
        (WebCore::SVGFEFloodElement::build):
        * svg/SVGFEFloodElement.h:
        * svg/SVGFEGaussianBlurElement.cpp:
        (WebCore::SVGFEGaussianBlurElement::build):
        * svg/SVGFEGaussianBlurElement.h:
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::build):
        * svg/SVGFEImageElement.h:
        * svg/SVGFEMergeElement.cpp:
        (WebCore::SVGFEMergeElement::build):
        * svg/SVGFEMergeElement.h:
        * svg/SVGFEMorphologyElement.cpp:
        (WebCore::SVGFEMorphologyElement::build):
        * svg/SVGFEMorphologyElement.h:
        * svg/SVGFEOffsetElement.cpp:
        (WebCore::SVGFEOffsetElement::build):
        * svg/SVGFEOffsetElement.h:
        * svg/SVGFESpecularLightingElement.cpp:
        (WebCore::SVGFESpecularLightingElement::build):
        * svg/SVGFESpecularLightingElement.h:
        * svg/SVGFETileElement.cpp:
        (WebCore::SVGFETileElement::build):
        * svg/SVGFETileElement.h:
        * svg/SVGFETurbulenceElement.cpp:
        (WebCore::SVGFETurbulenceElement::build):
        * svg/SVGFETurbulenceElement.h:
        * svg/SVGFilterPrimitiveStandardAttributes.h:
        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::FEImage::FEImage):
        (WebCore::FEImage::create):
        (WebCore::FEImage::determineAbsolutePaintRect):
        (WebCore::FEImage::apply):
        * svg/graphics/filters/SVGFEImage.h:
        * svg/graphics/filters/SVGFilterBuilder.cpp:
        (WebCore::SVGFilterBuilder::SVGFilterBuilder):
        * svg/graphics/filters/SVGFilterBuilder.h:
        (WebCore::SVGFilterBuilder::create):

2010-11-20  Helder Correia  <helder@sencha.com>

        Reviewed by Andreas Kling.

        [Qt] GraphicsContext::strokeArc() is not necessary any more
        https://bugs.webkit.org/show_bug.cgi?id=49859

        Remove strokeArc() from the Qt port.

        No test is needed.

        * platform/graphics/qt/GraphicsContextQt.cpp:

2010-11-20  Helder Correia  <helder@sencha.com>

        Reviewed by Andreas Kling.

        [Qt] Path fill lacks blur shadow support
        https://bugs.webkit.org/show_bug.cgi?id=49491

        Add blur shadow support to fillPath().

        Test: fast/canvas/canvas-fillPath-shadow.html

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

2010-11-19  W. James MacLean  <wjmaclean@chromium.org>

        Reviewed by James Robinson.

        Scaled Resized images are blurred when sent to Skia
        https://bugs.webkit.org/show_bug.cgi?id=42370

        This patch modifies ImageSkia.cpp to fix the calculation of resampled
        bitmap sizes so as to include the transform matrix of the canvas.
        Includes a new test to catch a regression that occured the first time
        this patch was applied.

        Tests: svg/custom/image-rescale-scroll.html
               svg/custom/image-rescale.svg

        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::computeResamplingMode):
        (WebCore::drawResampledBitmap):

2010-11-19  Jia Pu  <jpu@apple.com>

        Reviewed by Dan Bernstein.

        Regression: contraction is considered misspelling.
        https://bugs.webkit.org/show_bug.cgi?id=49423
        <rdar://problem/8654206>

        Test: platform/mac/editing/spelling/autocorrection-contraction.html
              manual-tests/autocorrection/autocorrection-contraction.html

        * editing/Editor.cpp:
        (WebCore::isAmbiguousBoundaryCharacter): Moved function to the top of the file so that it can
          be used by all other functions in the file.
        (WebCore::Editor::markMisspellingsAfterTypingToWord): Renamed markMisspellingsAfterTypingToPosition()
          to improve readability, and to pass in additional argument. Before we apply pending
          autocorrection, we check to see if currently typed character makes current word a partial
          contraction, for instance "wouldn'". If that's the case, we would not apply the pending
          correction.
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges): Make sure currently typed word
          is not a partial contraction, such as "wouldn'", before mark it as misspelled. Also update
          the location of ambiguous boundary if other replacements have changed the length of the
          paragraph.
        * editing/Editor.h:
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::markMisspellingsAfterTyping): Adopt renamed function.
        * manual-tests/autocorrection/autocorrection-contraction.html: Added.

2010-11-19  Andreas Kling  <kling@webkit.org>

        Reviewed by Antonio Gomes.

        ScrollView: Make delegatesScrolling() and avoidScrollbarCreation() const.
        https://bugs.webkit.org/show_bug.cgi?id=49854

        * page/FrameView.cpp:
        (WebCore::FrameView::delegatesScrolling):
        (WebCore::FrameView::avoidScrollbarCreation):
        * page/FrameView.h:
        * platform/ScrollView.h:
        (WebCore::ScrollView::delegatesScrolling):
        (WebCore::ScrollView::avoidScrollbarCreation):

2010-11-19  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: scripts panel should be shown before execution line is scrolled into view.
        https://bugs.webkit.org/show_bug.cgi?id=49792

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.debuggerPaused):

2010-11-19  James Simonsen  <simonjam@chromium.org>

        Reviewed by Tony Chang.

        [chromium] Fix whitespace character handling in complex text on linux
        https://bugs.webkit.org/show_bug.cgi?id=49771

        * platform/graphics/SimpleFontData.h:
        (WebCore::SimpleFontData::isZeroWidthSpaceGlyph): Added.
        (WebCore::SimpleFontData::boundsForGlyph): Use isZeroWidthSpaceGlyph().
        (WebCore::SimpleFontData::widthForGlyph): Use isZeroWidthSpaceGlyph().
        * platform/graphics/chromium/FontLinux.cpp:
        (WebCore::TextRunWalker::nextScriptRun): Cache currently used font data.
        (WebCore::TextRunWalker::setGlyphXPositions): Skip zero width spaces.
        (WebCore::TextRunWalker::normalizeSpacesAndMirrorChars): Normalize zero width spaces.
        (WebCore::TextRunWalker::getNormalizedTextRun):

2010-11-19  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Add Debug_Cairo_CFLite and Release_Cairo_CFLite configurations for all vcproj files
        https://bugs.webkit.org/show_bug.cgi?id=49819

        * WebCore.vcproj/QTMovieWin.vcproj:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/WebCoreGenerated.vcproj:

2010-11-19  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/8613727> and https://bugs.webkit.org/show_bug.cgi?id=49836
        Add WebKit2 API relevant to customization of context menus

        * WebCore.exp.in:

2010-11-19  Michael Saboff  <msaboff@apple.com>

        Reviewed by Sam Weinig.

        Removed import of DOMSVGAnimatedPathData.h to fix build.

        * bindings/objc/DOMSVG.h:

2010-11-19  Avi Drissman  <avi@google.com>

        Reviewed by Antonio Gomes.

        Complete support for Unix editing mode
        https://bugs.webkit.org/show_bug.cgi?id=49757

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

2010-11-19  Nate Chapin  <japhet@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Remove requests from ResourceLoadScheduler's queue before
        actually starting them.  We're holding a RefPtr anyway, and
        the load might be terminated and removed from the queue synchronously.
        https://bugs.webkit.org/show_bug.cgi?id=49693

        Test: fast/loader/subresource-willSendRequest-null.html

        * loader/ResourceLoadScheduler.cpp:
        (WebCore::ResourceLoadScheduler::servePendingRequests):

2010-11-18  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        Make sure is* return false if the name is never bound
        https://bugs.webkit.org/show_bug.cgi?id=49767

        * html/canvas/WebGLBuffer.h: Add function to check whether the buffer has been bound before.
        (WebCore::WebGLBuffer::hasEverBeenBound):
        * html/canvas/WebGLFramebuffer.cpp: Ditto.
        (WebCore::WebGLFramebuffer::WebGLFramebuffer):
        * html/canvas/WebGLFramebuffer.h: Ditto.
        (WebCore::WebGLFramebuffer::hasEverBeenBound):
        (WebCore::WebGLFramebuffer::setBound):
        * html/canvas/WebGLRenderbuffer.cpp: Ditto.
        (WebCore::WebGLRenderbuffer::WebGLRenderbuffer):
        * html/canvas/WebGLRenderbuffer.h: Ditto.
        (WebCore::WebGLRenderbuffer::hasEverBeenBound):
        (WebCore::WebGLRenderbuffer::setBound):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::bindFramebuffer): Set bound status to true.
        (WebCore::WebGLRenderingContext::bindRenderbuffer): Ditto.
        (WebCore::WebGLRenderingContext::isBuffer): Return false if it's never bound.
        (WebCore::WebGLRenderingContext::isFramebuffer): Ditto.
        (WebCore::WebGLRenderingContext::isRenderbuffer): Ditto.
        (WebCore::WebGLRenderingContext::isTexture): Ditto.
        * html/canvas/WebGLTexture.h: Add function to check whether the texture has been bound before.
        (WebCore::WebGLTexture::hasEverBeenBound):

2010-11-19  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] mask-box-image renders wrong in certain conditions
        https://bugs.webkit.org/show_bug.cgi?id=43476

        Qt does not follow the same convention as the other port
        when rendering a pixmap with null width of height. When one
        of those dimension is null, we should ignore the painting call
        to behave like the other ports.

        * platform/graphics/qt/ImageQt.cpp:
        (WebCore::Image::drawPattern):

2010-11-18  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        GraphicsContext3D::reshape is clearing using current clear color instead of transparent
        https://bugs.webkit.org/show_bug.cgi?id=44064

        * platform/graphics/gpu/DrawingBuffer.cpp:
        (WebCore::DrawingBuffer::reset): Use 0 as clear values.
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::reshape): Ditto.

2010-11-19  Chris Rogers  <crogers@google.com>

        Reviewed by Darin Adler.

        AudioContext should not include "HTMLNames.h"
        https://bugs.webkit.org/show_bug.cgi?id=49680

        No new tests since audio API is not yet implemented.

        * webaudio/AudioContext.cpp:

2010-11-19  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Darin Adler.

        Normalize Cairo/CFLite project/solution configuration names
        https://bugs.webkit.org/show_bug.cgi?id=49818

        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/WebCoreGenerated.vcproj:

2010-11-19  Daniel Bates  <dbates@rim.com>

        Reviewed by Antonio Gomes.

        Replace null checks of newParent in Frame::transferChildFrameToNewDocument() with ASSERT
        https://bugs.webkit.org/show_bug.cgi?id=49489

        Substitute ASSERT(newParent) for null-checks for newParent in
        Frame::transferChildFrameToNewDocument() since newParent is
        never null.

        When Frame::transferChildFrameToNewDocument() is called the child
        frame's owner element has already been transferred to the new
        document D and D is attached (i.e. has a frame).

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

2010-11-19  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add SandboxExtension abstraction and use it for the injected bundle extension
        https://bugs.webkit.org/show_bug.cgi?id=49817

        Export fileSystemRepresentation symbol needed by WebKit2.

        * WebCore.exp.in:

2010-11-19  Steve Falkenburg  <sfalken@apple.com>

        Windows build fix. Remove leftover Debug_Internal use.

        * WebCore.vcproj/WebCore.vcproj:

2010-11-18  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Windows vcproj configuration names should be normalized across projects
        https://bugs.webkit.org/show_bug.cgi?id=49776

        * WebCore.vcproj/WebCore.sln:
        * WebCore.vcproj/WebCore.submit.sln:
        * WebCore.vcproj/WebCoreGenerated.vcproj:
        * WebCore.vcproj/WebCoreGeneratedCairo.vsprops: Added.
        * WebCore.vcproj/WebCoreGeneratedCommon.vsprops: Added.

2010-11-19  James Simonsen  <simonjam@chromium.org>

        Reviewed by Darin Fisher.

        [Web Timing] Add unloadEventStart
        https://bugs.webkit.org/show_bug.cgi?id=49101

        * loader/DocumentLoadTiming.h:
        (WebCore::DocumentLoadTiming::DocumentLoadTiming):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopLoading): Use dispatchTimedEvent().
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::dispatchLoadEvent): Use dispatchTimedEvent().
        (WebCore::DOMWindow::dispatchTimedEvent): Added.
        * page/DOMWindow.h:
        * page/Timing.cpp:
        (WebCore::Timing::unloadEventStart):
        * page/Timing.h:
        * page/Timing.idl:

2010-11-19  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Daniel Bates.

        [GTK] fast/text/international tests are flaky on the bots
        https://bugs.webkit.org/show_bug.cgi?id=49781

        Beef up the == operator overload for Freetype FontPlatformData. Before
        if two FontPlatformDatas had hash values which fell into the same bucket
        and were similar enough, they would be evaluated as being equal, leading
        to failures.

        No new tests for this change. It's very hard to test, because it depends
        on the memory address of new allocations. Hopefully flakiness on the bots
        will go away after patch.

        * platform/graphics/freetype/FontPlatformDataFreeType.cpp:
        (WebCore::FontPlatformData::operator==): Beef up the == operator overload.

2010-11-19  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] mask-box-image renders wrong in certain conditions
        https://bugs.webkit.org/show_bug.cgi?id=43476

        When rendering a pixmap with a dest rect having a null dimension,
        Qt uses the dimension of the Pixmap. The other ports do not render
        anything by convention.

        This patch change BitmapImage to follow the convention of other ports and do not
        paint anything.

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

2010-11-19  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Don't call invalidateSVGAttributes() from the setFooBaseValue() methods
        https://bugs.webkit.org/show_bug.cgi?id=49807

        Covered by existing tests.

        * svg/SVGComponentTransferFunctionElement.cpp:
        (WebCore::SVGComponentTransferFunctionElement::parseMappedAttribute): Use setFooBaseValue(newList) instead of fooBaseValue() = newList;
        * svg/SVGFEColorMatrixElement.cpp:
        (WebCore::SVGFEColorMatrixElement::parseMappedAttribute): Ditto.
        * svg/SVGFEConvolveMatrixElement.cpp:
        (WebCore::SVGFEConvolveMatrixElement::parseMappedAttribute): Ditto.
        * svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::parseMappedAttribute): Ditto.
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::parseMappedAttribute): Ditto.
        * svg/SVGStyledTransformableElement.cpp:
        (WebCore::SVGStyledTransformableElement::parseMappedAttribute): Ditto.
        * svg/SVGTextElement.cpp:
        (WebCore::SVGTextElement::parseMappedAttribute): Ditto.
        * svg/SVGTextPositioningElement.cpp:
        (WebCore::SVGTextPositioningElement::parseMappedAttribute): Ditto.
        * svg/properties/SVGAnimatedPropertyMacros.h: Don't call invalidateSVGAttributes() in setFooBaseValue().

2010-11-19  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r72399.
        http://trac.webkit.org/changeset/72399
        https://bugs.webkit.org/show_bug.cgi?id=49805

        Broke Chromium build (Requested by antonm_ on #webkit).

        * page/chromium/ChromeClientChromium.h:
        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupContainer::showPopup):
        (WebCore::PopupContainer::showExternal):
        (WebCore::PopupListBox::layout):
        (WebCore::PopupMenuChromium::show):
        * platform/chromium/PopupMenuChromium.h:

2010-11-19  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Antonio Gomes.

        Focus ring in image maps does not take zooming into account
        https://bugs.webkit.org/show_bug.cgi?id=49625

        Take pageZoomFactor into account when calculating the path of the focus ring.

        Test: fast/images/imagemap-focus-ring-zoom.html

        * html/HTMLAreaElement.cpp:
        (WebCore::HTMLAreaElement::getPath):

2010-11-19  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        SVGTransformList::consolidate() fails on empty lists
        https://bugs.webkit.org/show_bug.cgi?id=49619

        Return null in consolidate() when the list is empty, according to SVG 1.1.

        Test: svg/dom/SVGTransformList-empty-list-consolidation.html

        * svg/properties/SVGTransformListPropertyTearOff.h:
        (WebCore::SVGTransformListPropertyTearOff::consolidate):

2010-11-19  Jay Civelli  <jcivelli@chromium.org>

        Reviewed by David Levin.

        [chromium] Removing the now unused code to show popup externally on Mac.
        https://bugs.webkit.org/show_bug.cgi?id=49747

        * page/chromium/ChromeClientChromium.h:
        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupContainer::showPopup):
        (WebCore::PopupListBox::layout):
        (WebCore::PopupMenuChromium::show):
        * platform/chromium/PopupMenuChromium.h:

2010-11-18  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: reduce the footprint of InspectorBackendDispatcher.
        InspectorBackendDispatcher is a generated file.
        Its content is not optimal and loc may be reduced by a quarter.
        In each generated function we have a code for getting 'in' values from
        the arguments properties object. I've extracted this code into separate getters.
        The side effect is better readability of the generated code.

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

        * inspector/CodeGeneratorInspector.pm:

2010-11-19  John Knottenbelt  <jknotten@chromium.org>

        Reviewed by Jeremy Orlow.

        Reentrant Geolocation tests crash with an assertion.
        https://bugs.webkit.org/show_bug.cgi?id=39908

        PositionErrors should not be sent to Geolocation watches or one shots
        that are due to receive a valid cached position.

        Test: fast/dom/Geolocation/maximum-age.html

        * page/Geolocation.cpp:
        (WebCore::Geolocation::sendError):
        (WebCore::Geolocation::copyCachedNotifiers):
        (WebCore::Geolocation::handleError):
        * page/Geolocation.h:

2010-11-19  Sam Magnuson  <smagnuso@gmail.com>

        Reviewed by Laszlo Gombos.

        [Qt] Compile with QT_NO_CLIPBOARD
        https://bugs.webkit.org/show_bug.cgi?id=49742

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

2010-11-19  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Andreas Kling.

        Remove more unused V8/SVG code
        https://bugs.webkit.org/show_bug.cgi?id=49800

        Remove DOMSVGObjectWithContextMap and all usages.

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/DOMDataStore.cpp:
        (WebCore::DOMDataStore::DOMDataStore):
        (WebCore::DOMDataStore::getDOMWrapperMap):
        * bindings/v8/DOMDataStore.h:
        (WebCore::DOMDataStore::domSvgElementInstanceMap):
        * bindings/v8/ScopedDOMDataStore.cpp:
        (WebCore::ScopedDOMDataStore::ScopedDOMDataStore):
        (WebCore::ScopedDOMDataStore::~ScopedDOMDataStore):
        * bindings/v8/StaticDOMDataStore.cpp:
        (WebCore::StaticDOMDataStore::StaticDOMDataStore):
        * bindings/v8/StaticDOMDataStore.h:
        * bindings/v8/V8DOMMap.cpp:
        (WebCore::removeAllDOMObjectsInCurrentThread):
        * bindings/v8/V8DOMMap.h:

2010-11-19  Zoltan Herczeg  <zherczeg@webkit.org>

        Reviewed by Nikolas Zimmermann.

        createImageBuffer fail should be handled in the same way as other fails
        https://bugs.webkit.org/show_bug.cgi?id=49799

        When createImageBuffer fails (i.e the image width or height is less than
        0.5, which is rounded to 0) it just returs with false. Since the m_filter
        hash map is not updated in this case, the filter image is not drawn.

        Test: svg/filters/filter-rounding-issues.svg

        * rendering/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::applyResource):

2010-11-19  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Andreas Kling.

        Remove old style SVG DOM JS bindings and DeprecatedSVGAnimated* files
        https://bugs.webkit.org/show_bug.cgi?id=49796

        Just remove the old style SVG DOM JS bindings, now that everything has been converted to the new concept.

        * GNUmakefile.am: Remove SVGList/SVGListTraits/JSSVGPODListCustom/JSSVGPODTypeWrapper/JSSVGContextCache and V8SVGPODTypeWrapper files.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * bindings/js/JSSVGContextCache.h: Removed.
        * bindings/js/JSSVGPODListCustom.h: Removed.
        * bindings/js/JSSVGPODTypeWrapper.h: Removed.
        * bindings/v8/V8Proxy.cpp: Remove SVG specific context cache code, which is no longer needed. 
        * bindings/v8/V8Proxy.h: Ditto.
        * bindings/v8/V8SVGPODTypeWrapper.h: Removed.
        * svg/DeprecatedSVGAnimatedProperty.h: Removed.
        * svg/DeprecatedSVGAnimatedPropertyTraits.h: Removed.
        * svg/DeprecatedSVGAnimatedTemplate.h: Removed.
        * svg/SVGElement.h: Remove DeprecatedSVGAnimated* include, which pulled in SVGNames.h for every file.
        * svg/SVGList.h: Removed.
        * svg/SVGListTraits.h: Removed.

2010-11-19  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [REGRESSION] Crash on opening WebInspector for a page with CSS containing @media with nested rules
        https://bugs.webkit.org/show_bug.cgi?id=49731

        Temporarily disable building of styles for nested rules.

        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::buildObjectForRule):
        (WebCore::InspectorStyleSheet::buildObjectForStyle):
        (WebCore::InspectorStyleSheet::ensureParsedDataReady):
        (WebCore::InspectorStyleSheet::ensureSourceData):
        * inspector/InspectorStyleSheet.h:
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype._rebuildUpdate):
        (WebInspector.StylesSidebarPane.prototype._refreshStyleRules):
        (WebInspector.StylesSidebarPane.prototype._rebuildStyleRules):

2010-11-19  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed. Fix Qt build.

        * WebCore.pro: Move SVGPathSegListPropertyTearOff.cpp from HEADERS to SOURCES list. This got lost, when reapplying the patch from the bug - I only fixed it locally before landing the first time.

2010-11-19  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Convert SVGPathSeg/SVGPathSegList to the new SVGPropertyTearOff concept
        https://bugs.webkit.org/show_bug.cgi?id=49580

        SVGPathElement.cloneNode loses generated pathSegList
        https://bugs.webkit.org/show_bug.cgi?id=43388

        SVG Path elements are not correctly updated through pathSegList manipulation on relative values
        https://bugs.webkit.org/show_bug.cgi?id=30219

        Changing an SVGPathSeg does not update a following Smooth Cubic Curveto
        https://bugs.webkit.org/show_bug.cgi?id=19741

        SVGPathElement should only build SVGPathSeg* list on demand
        https://bugs.webkit.org/show_bug.cgi?id=10827

        Tests: svg/W3C-SVG-1.1-SE/paths-dom-02-f.svg
               svg/dom/SVGPathSegList-appendItem.xhtml
               svg/dom/SVGPathSegList-clear-and-initialize.xhtml
               svg/dom/SVGPathSegList-cloning.html
               svg/dom/SVGPathSegList-insertItemBefore.xhtml
               svg/dom/SVGPathSegList-removeItem.xhtml
               svg/dom/SVGPathSegList-replaceItem.xhtml
               svg/dom/SVGPathSegList-xml-dom-synchronization.xhtml
               svg/dom/SVGPathSegList-xml-dom-synchronization2.xhtml
               svg/dom/SVGPathSegList-segment-modification.svg

        Convert SVGPathSeg*/SVGPathSegList to the new SVG(Animated)PropertyTearOff concept.
        Unlike all other SVG* types that use the SVGPropertyTearOff concept, SVGPathSegs are already refcounted,
        and don't need to be wrapped in SVGPropertyTearOff objects. The consequence is that SVGPathSegs need to track
        themselves to which list and path element they belong. Introduce new SVGAnimatedPathSegListPropertyTearOff
        and SVGPathSegListPropertyTearOff classes, that encapsulate the special needed for SVGPathSegList.

        Each SVGPathSeg now needs to store a RefPtr<SVGPathElement> - this makes it impossible to use SVGPathSegList
        to represent the 'd' attribute internally in SVGPathElement. SVGPathSegList is now only used in the SVG DOM bindings
        if someone explicitely requests 'pathElement.pathSegList' (eg. via JS). Switch to use SVGPathByteStream to store
        the 'd' attribute data in SVGPathElement, which is much more compact, and less memory intensive.
        Dirk already prepared SVGPathParserFactory some months ago, which allows easy conversion between
        String/Path/SVGPathSegList/SVGPathByteStream in all directions, including normalizing the lists, when requested.

        As consequence SVGPathSegList is now only built on demand, when explicitely requested. Using the SVGAnimatedProperty
        concept gives us 'd' attribute <-> SVGPathSegList synchronization for free, fixing several bugs, listed above.

        * Android.mk: Remove obsolete SVGPathSeg*.cpp files and SVGAnimatedPathData.cpp from build.
        * CMakeLists.txt: Ditto.
        * DerivedSources.make: Remove SVGAnimatedPathData IDL generation.
        * GNUmakefile.am: Remove obsolete SVGPathSeg*.cpp files and SVGAnimatedPathData.cpp from build.
        * WebCore.gyp/WebCore.gyp: Remove SVGAnimatedPathData IDL generation.
        * WebCore.gypi: Remove obsolete SVGPathSeg*.cpp files and SVGAnimatedPathData.cpp from build.
        * WebCore.order: Remove no-longer existant SVGAnimatedPathData symbols.
        * WebCore.pro:  Remove obsolete SVGPathSeg*.cpp files and SVGAnimatedPathData.cpp / JSSVGPathSegCustom.* from build.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * bindings/js/JSBindingsAllInOne.cpp: Remove JSSVGPathSegCustom.cpp from build.
        * bindings/js/JSDOMBinding.cpp: Adapt to toJS() changes, remove context parameter.
        (WebCore::setDOMException):
        * bindings/js/JSDOMBinding.h: Remove obsolete CREATE_SVG_OBJECT_WRAPPER macro, the context parameter is not existant anymore.
        * bindings/js/JSSVGPathSegCustom.cpp: Replace CREATE_SVG_OBJECT_WRAPPER by CREATE_DOM_OBJECT_WRAPPER. Remove context parameter/handling.
        (WebCore::toJS):
        * bindings/js/JSSVGPathSegListCustom.cpp: Removed.
        * bindings/scripts/CodeGenerator.pm: Map 'SVGPathSegList' IDL type to SVG 'SVGPathSegListPropertyTearOff' native type.
        * bindings/scripts/CodeGeneratorJS.pm: Remove IsSVGTypeNeedingContextParameter() methods and usages. Handle SVGPathSegListPropertyTearOff.
        * bindings/scripts/CodeGeneratorObjC.pm: Handle SVGPathSegListPropertyTearOff.
        * bindings/scripts/CodeGeneratorV8.pm: Remove IsSVGTypeNeedingContextParameter() methods and usages.
        * rendering/SVGRenderTreeAsText.cpp: Build path string from byte stream, not path segment list.
        (WebCore::operator<<):
        * svg/SVGAllInOne.cpp: Remove obsolete cpp files.
        * svg/SVGAnimatedPathData.cpp: Removed.
        * svg/SVGAnimatedPathData.h: Removed.
        * svg/SVGAnimatedPathData.idl: Removed.
        * svg/SVGPathElement.cpp: Build SVGPathList on demand. Use SVGPathByteStream to parse/store the 'd' attribute content.
        (WebCore::SVGPathElement::SVGPathElement):
        (WebCore::SVGPathElement::getPathSegAtLength): Use SVGPathByteStream, not SVGPathSegList to determine the getPathSegAtLength() information.
        (WebCore::SVGPathElement::createSVGPathSegClosePath): Pass SVGPathElement to SVGPathSeg and a SVGPathSegRole parameter and store it to track the list origin.
        (WebCore::SVGPathElement::createSVGPathSegMovetoAbs): Ditto.
        (WebCore::SVGPathElement::createSVGPathSegMovetoRel): Ditto.
        (WebCore::SVGPathElement::createSVGPathSegLinetoAbs): Ditto.
        (WebCore::SVGPathElement::createSVGPathSegLinetoRel): Ditto.
        (WebCore::SVGPathElement::createSVGPathSegCurvetoCubicAbs): Ditto.
        (WebCore::SVGPathElement::createSVGPathSegCurvetoCubicRel): Ditto.
        (WebCore::SVGPathElement::createSVGPathSegCurvetoQuadraticAbs): Ditto.
        (WebCore::SVGPathElement::createSVGPathSegCurvetoQuadraticRel): Ditto.
        (WebCore::SVGPathElement::createSVGPathSegArcAbs): Ditto.
        (WebCore::SVGPathElement::createSVGPathSegArcRel): Ditto.
        (WebCore::SVGPathElement::createSVGPathSegLinetoHorizontalAbs): Ditto.
        (WebCore::SVGPathElement::createSVGPathSegLinetoHorizontalRel): Ditto.
        (WebCore::SVGPathElement::createSVGPathSegLinetoVerticalAbs): Ditto.
        (WebCore::SVGPathElement::createSVGPathSegLinetoVerticalRel): Ditto.
        (WebCore::SVGPathElement::createSVGPathSegCurvetoCubicSmoothAbs): Ditto.
        (WebCore::SVGPathElement::createSVGPathSegCurvetoCubicSmoothRel): Ditto.
        (WebCore::SVGPathElement::createSVGPathSegCurvetoQuadraticSmoothAbs): Ditto.
        (WebCore::SVGPathElement::createSVGPathSegCurvetoQuadraticSmoothRel): Ditto.
        (WebCore::SVGPathElement::parseMappedAttribute): Build SVGPathByteStream from 'd' attribute, not a SVGPathSegList.
        (WebCore::SVGPathElement::svgAttributeChanged): If a SVGPathSegList object has been built, synchronize it with the 'd' attribute.
        (WebCore::SVGPathElement::synchronizeProperty): Synchronize 'd' attribute with the SVGPathSegList, if needed.
        (WebCore::SVGPathElement::synchronizeD): Added.
        (WebCore::SVGPathElement::pathSegList): Use same trick as in SVGPolyElement to expose the 'pathSegList' / 'animatedPathSegList' object to the SVG DOM bindings.
        (WebCore::SVGPathElement::normalizedPathSegList): Ditto.
        (WebCore::SVGPathElement::animatedPathSegList): Ditto.
        (WebCore::SVGPathElement::animatedNormalizedPathSegList): Ditto.
        (WebCore::SVGPathElement::toPathData): Build 'Path' object from SVGPathByteStream, not from SVGPathSegList.
        (WebCore::SVGPathElement::pathSegListChanged): Used to synchronize the SVGPathSegLists and the d attribute, as well as any changes from any SVGPathSeg associated with this SVGPathElement.
        * svg/SVGPathElement.h: Add new accessors...
        (WebCore::SVGPathElement::pathByteStream): ... needed by SVGRenderTreeAsText.
        (WebCore::SVGPathElement::animatablePathSegList): ... needed by SVGPathSegListPropertyTearOff.
        * svg/SVGPathElement.idl: Merge SVGAnimatedPathData interface into SVGPathElement.
        * svg/SVGPathParserFactory.cpp: Cleanup SVGPathParserFactory, remove obsolete methods, now that SVGPathElement switched to using SVGPathByteStream internally.
        (WebCore::globalSVGPathSegListBuilder):
        (WebCore::SVGPathParserFactory::buildSVGPathByteStreamFromSVGPathSegList):
        (WebCore::SVGPathParserFactory::buildPathFromByteStream):
        (WebCore::SVGPathParserFactory::buildSVGPathSegListFromByteStream):
        (WebCore::SVGPathParserFactory::buildStringFromSVGPathSegList):
        (WebCore::SVGPathParserFactory::buildSVGPathByteStreamFromString):
        (WebCore::SVGPathParserFactory::buildAnimatedSVGPathByteStream):
        (WebCore::SVGPathParserFactory::getSVGPathSegAtLengthFromSVGPathByteStream):
        * svg/SVGPathParserFactory.h:
        * svg/SVGPathSeg.cpp: Removed.
        * svg/SVGPathSeg.h: Add new SVGPathSegRole enum, identifying to which list a path segment belongs.
        (WebCore::SVGPathSeg::SVGPathSeg):
        * svg/SVGPathSeg.idl: Reindented.
        * svg/SVGPathSegArc.cpp: Removed.
        * svg/SVGPathSegArc.h: All setters now call the commitChange() method.
        * svg/SVGPathSegArcAbs.idl: Enable StrictTypeChecking.
        * svg/SVGPathSegArcRel.idl: Ditto.
        * svg/SVGPathSegClosePath.cpp: Removed.
        * svg/SVGPathSegClosePath.h:
        * svg/SVGPathSegCurvetoCubic.cpp: Removed.
        * svg/SVGPathSegCurvetoCubic.h: All setters now call the commitChange() method.
        * svg/SVGPathSegCurvetoCubicAbs.idl: Enable StrictTypeChecking.
        * svg/SVGPathSegCurvetoCubicRel.idl: Ditto.
        * svg/SVGPathSegCurvetoCubicSmooth.cpp: Removed.
        * svg/SVGPathSegCurvetoCubicSmooth.h: All setters now call the commitChange() method.
        * svg/SVGPathSegCurvetoCubicSmoothAbs.idl: Enable StrictTypeChecking.
        * svg/SVGPathSegCurvetoCubicSmoothRel.idl: Ditto.
        * svg/SVGPathSegCurvetoQuadratic.cpp: Removed.
        * svg/SVGPathSegCurvetoQuadratic.h: All setters now call the commitChange() method.
        * svg/SVGPathSegCurvetoQuadraticAbs.idl: Enable StrictTypeChecking.
        * svg/SVGPathSegCurvetoQuadraticRel.idl: Ditto.
        * svg/SVGPathSegCurvetoQuadraticSmooth.cpp: Removed.
        * svg/SVGPathSegCurvetoQuadraticSmooth.h: All setters now call the commitChange() method.
        * svg/SVGPathSegCurvetoQuadraticSmoothAbs.idl: Enable StrictTypeChecking.
        * svg/SVGPathSegCurvetoQuadraticSmoothRel.idl: Ditto.
        * svg/SVGPathSegLineto.cpp: Removed.
        * svg/SVGPathSegLineto.h: All setters now call the commitChange() method.
        * svg/SVGPathSegLinetoAbs.idl: Enable StrictTypeChecking.
        * svg/SVGPathSegLinetoHorizontal.cpp: Removed.
        * svg/SVGPathSegLinetoHorizontal.h: All setters now call the commitChange() method.
        * svg/SVGPathSegLinetoHorizontalAbs.idl: Enable StrictTypeChecking.
        * svg/SVGPathSegLinetoHorizontalRel.idl: Ditto.
        * svg/SVGPathSegLinetoRel.idl: Enable StrictTypeChecking.
        * svg/SVGPathSegLinetoVertical.cpp: Removed.
        * svg/SVGPathSegLinetoVertical.h: All setters now call the commitChange() method.
        * svg/SVGPathSegLinetoVerticalAbs.idl: Enable StrictTypeChecking.
        * svg/SVGPathSegLinetoVerticalRel.idl: Ditto.
        * svg/SVGPathSegList.cpp: Switch from SVGList<RefPtr<SVGPathSeg> > to a plain Vector<RefPtr<SVGPathSeg> >.
        (WebCore::SVGPathSegList::valueAsString): Utilize SVGPathParserFactory to build a String from a SVGPathSegList.
        (WebCore::SVGPathSegList::commitChange): Call SVGPathElement::pathSegListChanged().
        * svg/SVGPathSegList.h:
        (WebCore::SVGPathSegList::SVGPathSegList):
        * svg/SVGPathSegList.idl: Remove [JSCCustom] flags, no longer needed. 
        * svg/SVGPathSegListBuilder.cpp: Adapt to SVGPathSegList API changes.
        (WebCore::SVGPathSegListBuilder::SVGPathSegListBuilder):
        (WebCore::SVGPathSegListBuilder::moveTo):
        (WebCore::SVGPathSegListBuilder::lineTo):
        (WebCore::SVGPathSegListBuilder::lineToHorizontal):
        (WebCore::SVGPathSegListBuilder::lineToVertical):
        (WebCore::SVGPathSegListBuilder::curveToCubic):
        (WebCore::SVGPathSegListBuilder::curveToCubicSmooth):
        (WebCore::SVGPathSegListBuilder::curveToQuadratic):
        (WebCore::SVGPathSegListBuilder::curveToQuadraticSmooth):
        (WebCore::SVGPathSegListBuilder::arcTo):
        (WebCore::SVGPathSegListBuilder::closePath):
        * svg/SVGPathSegListBuilder.h: Ditto.
        (WebCore::SVGPathSegListBuilder::setCurrentSVGPathElement):
        (WebCore::SVGPathSegListBuilder::setCurrentSVGPathSegList):
        (WebCore::SVGPathSegListBuilder::setCurrentSVGPathSegRole):
        (WebCore::SVGPathSegListBuilder::cleanup):
        * svg/SVGPathSegListSource.cpp: Ditto.
        (WebCore::SVGPathSegListSource::SVGPathSegListSource):
        (WebCore::SVGPathSegListSource::parseSVGSegmentType):
        (WebCore::SVGPathSegListSource::nextCommand):
        (WebCore::SVGPathSegListSource::parseMoveToSegment):
        (WebCore::SVGPathSegListSource::parseLineToSegment):
        (WebCore::SVGPathSegListSource::parseCurveToQuadraticSmoothSegment):
        * svg/SVGPathSegListSource.h: Ditto.
        (WebCore::SVGPathSegListSource::create):
        * svg/SVGPathSegMoveto.cpp: Removed.
        * svg/SVGPathSegMoveto.h: All setters now call the commitChange() method.
        * svg/SVGPathSegMovetoAbs.idl: Enable StrictTypeChecking.
        * svg/SVGPathSegMovetoRel.idl: Ditto.
        * svg/SVGPathSegWithContext.h: Added. This is the new base class for all SVGPathSeg derived types, that's associated with a SVGPathElement and a 'role' (normalized/unaltered segment list).
        (WebCore::SVGPathSegWithContext::SVGPathSegWithContext):
        (WebCore::SVGPathSegWithContext::animatedProperty):
        (WebCore::SVGPathSegWithContext::setContextAndRole):
        (WebCore::SVGPathSegWithContext::commitChange):
        (WebCore::SVGPathSegSingleCoordinate::x):
        (WebCore::SVGPathSegSingleCoordinate::setX):
        (WebCore::SVGPathSegSingleCoordinate::y):
        (WebCore::SVGPathSegSingleCoordinate::setY):
        (WebCore::SVGPathSegSingleCoordinate::SVGPathSegSingleCoordinate):
        * svg/properties/SVGAnimatedPathSegListPropertyTearOff.h: Added. 
        (WebCore::SVGAnimatedPathSegListPropertyTearOff::baseVal):
        (WebCore::SVGAnimatedPathSegListPropertyTearOff::animVal):
        (WebCore::SVGAnimatedPathSegListPropertyTearOff::removeItemFromList):
        (WebCore::SVGAnimatedPathSegListPropertyTearOff::create):
        (WebCore::SVGAnimatedPathSegListPropertyTearOff::SVGAnimatedPathSegListPropertyTearOff):
        * svg/properties/SVGPathSegListPropertyTearOff.cpp: Added.
        (WebCore::SVGPathSegListPropertyTearOff::clear): Added in the cpp file, not in the header, as it needs access to SVGPathSegWithContext, which we can't include from the header.
        (WebCore::SVGPathSegListPropertyTearOff::getItem): Ditto.
        (WebCore::SVGPathSegListPropertyTearOff::removeItem): Ditto.
        (WebCore::SVGPathSegListPropertyTearOff::contextElement): Needs access to SVGPathElement, that's why it lives in the cpp file.
        (WebCore::SVGPathSegListPropertyTearOff::processIncomingListItemValue): Needs access to SVGPathSegWithContext.
        * svg/properties/SVGPathSegListPropertyTearOff.h: Added.
        (WebCore::SVGPathSegListPropertyTearOff::create):
        (WebCore::SVGPathSegListPropertyTearOff::removeItemFromList):
        (WebCore::SVGPathSegListPropertyTearOff::numberOfItems):
        (WebCore::SVGPathSegListPropertyTearOff::initialize):
        (WebCore::SVGPathSegListPropertyTearOff::insertItemBefore):
        (WebCore::SVGPathSegListPropertyTearOff::replaceItem):
        (WebCore::SVGPathSegListPropertyTearOff::appendItem):
        (WebCore::SVGPathSegListPropertyTearOff::SVGPathSegListPropertyTearOff):
        (WebCore::SVGPathSegListPropertyTearOff::commitChange):
        (WebCore::SVGPathSegListPropertyTearOff::processIncomingListItemWrapper):

2010-11-19  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: one line follow up to r72376.

        * inspector/InspectorResourceAgent.cpp:
        (WebCore::buildObjectForResourceResponse):

2010-11-19  Sergio Villar Senin  <svillar@igalia.com>

        Reviewed by Xan Lopez.

        [Gtk] "CRITICAL **: msg_got_headers_cb: assertion `entry' failed" when using HTTP cache
        https://bugs.webkit.org/show_bug.cgi?id=49666

        WebKit resource load cache does validate its own resources by
        issuing conditional requests to the server. The HTTP cache was
        making the assumption that any possible conditional request was
        always generated by itself.

        * platform/network/soup/cache/webkit/soup-cache.c:
        (webkit_soup_cache_entry_remove): added an assertion
        (msg_got_headers_cb):

2010-11-19  Dai Mikurube  <dmikurube@google.com>

        Reviewed by Kent Tamura.

        stepUp/stepDown for values in step-mismatching state for input elements
        https://bugs.webkit.org/show_bug.cgi?id=48976

        Fixed stepUp/stepDown behaviors for step-mismatching values to follow the specification of
        HTML5 4.10.7.3 Common input element APIs. In details, disabled any stepwise adjustment for
        step-mismatching values.

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

2010-11-19  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed. Rolled out build failures introduced in r72373.

        * inspector/CodeGeneratorInspector.pm:

2010-11-18  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: provide response code and status text as
        a part of raw headers data.
        https://bugs.webkit.org/show_bug.cgi?id=49668

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::buildObjectForResourceResponse):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkDataGridNode.prototype._refreshStatusCell):
        * inspector/front-end/ResourceManager.js:
        (WebInspector.ResourceManager.prototype._updateResourceWithResponse):
        * platform/network/ResourceLoadInfo.h: Renamed from WebCore/platform/network/ResourceRawHeaders.h.
        (WebCore::ResourceLoadInfo::ResourceLoadInfo):
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::resourceLoadInfo):
        (WebCore::ResourceResponseBase::setResourceLoadInfo):
        * platform/network/ResourceResponseBase.h:

2010-11-19  Mike Lawther  <mikelawther@chromium.org>

        Reviewed by James Robinson.

        [skia] assert when attempting to get (but not use) pointer to outside the canvas
        https://bugs.webkit.org/show_bug.cgi?id=49698

        Early return to avoid getting a pointer to outside the canvas, and
        hence triggering a Skia assert.

        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::getImageData):

2010-11-18  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: reduce the footprint of InspectorBackendDispatcher.
        InspectorBackendDispatcher is a generated file.
        Its content is not optimal and loc may be reduced by a quarter.
        In each generated function we have a code for getting 'in' values from
        the arguments properties object. I've extracted this code into separate getters.
        The side effect is better readability of the generated code.

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

        * inspector/CodeGeneratorInspector.pm:

2010-11-19  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Antonio Gomes.

        [Qt] Focus ring does not show for image maps
        https://bugs.webkit.org/show_bug.cgi?id=49615

        Draw a focus ring for the paths surrounding the focus ring of image map area.
        Provide Qt specific results for the test fast/images/imagemap-focus-ring.html.

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

2010-11-01  MORITA Hajime  <morrita@google.com>

        Reviewed by David Hyatt.

        Navigating dark background websites results in blinding white flashes between pages. 
        https://bugs.webkit.org/show_bug.cgi?id=45640

        This FOUC is caused by an early layout request before the <body> is ready, 
        and the page's background style given for <body>, instead of <html>.
        So many sites have such stylesheets that we should care them.
        
        - Some DOM operation such as 'element.offsetLeft' causes page layout.
        - The page layout results page repaint
        - The page page repaint makes a white screen. because there is nothing to paint
          before <body> is available.
        
        This change:
        - extracted existing FOUC check on RenderBlock and RenderLayer to 
          Document::mayCauseFlashOfUnstyledContent(),
        - checked non-<head> element availability on mayCauseFlashOfUnstyledContent(), and
        - added FOUC guards before requesting reapint on FrameView.
        
        Note that non-<head> document root children are typically <body>, but possibly
        some other type of elements in the case of non-HTML documents.
        
        No new tests. The data loading speed matters and it cannot be
        captured by DRT.

        * dom/Document.cpp:
        (hasHeadSibling): Added.
        (WebCore::Document::mayCauseFlashOfUnstyledContent): Added.
        * dom/Document.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::invalidateRect): Added a guard.
        (WebCore::FrameView::repaintContentRectangle): Added a guard.
        (WebCore::FrameView::doDeferredRepaints): Added a guard.
        (WebCore::FrameView::shouldUpdate): Added.
        * page/FrameView.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintContents): Replaced FOUC check to use mayCauseFlashOfUnstyledContent
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayer): Replaced FOUC check to use mayCauseFlashOfUnstyledContent

2010-11-18  Kent Tamura  <tkent@chromium.org>

        Reviewed by Tony Chang.

        Add more validation message functions
        https://bugs.webkit.org/show_bug.cgi?id=49716

        Add the following message functions:
        - validationMessageValueMissingForCheckbox()
        - validationMessageValueMissingForFile()
        - validationMessageValueMissingForMultipleFile()
        - validationMessageValueMissingForRadio()
        - validationMessageValueMissingForSelect()

        and update ValidityState, HTMLInputElement, and InputTypes to use them.

        No new tests because this doesn't change visible behavior.

        * html/CheckboxInputType.cpp:
        (WebCore::CheckboxInputType::valueMissingText):
        * html/CheckboxInputType.h:
        * html/FileInputType.cpp:
        (WebCore::FileInputType::valueMissingText):
        * html/FileInputType.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::valueMissingText):
        * html/HTMLInputElement.h:
        * html/InputType.cpp:
        (WebCore::InputType::valueMissingText):
        * html/InputType.h:
        * html/RadioInputType.cpp:
        (WebCore::RadioInputType::valueMissingText):
        * html/RadioInputType.h:
        * html/ValidityState.cpp:
        (WebCore::ValidityState::validationMessage):
        * platform/LocalizedStrings.cpp:
        (WebCore::validationMessageValueMissingForCheckboxText):
        (WebCore::validationMessageValueMissingForFileText):
        (WebCore::validationMessageValueMissingForMultipleFileText):
        (WebCore::validationMessageValueMissingForRadioText):
        (WebCore::validationMessageValueMissingForSelectText):
        * platform/LocalizedStrings.h:
        * platform/android/LocalizedStringsAndroid.cpp:
        (WebCore::validationMessageValueMissingForCheckboxText):
        (WebCore::validationMessageValueMissingForFileText):
        (WebCore::validationMessageValueMissingForMultipleFileText):
        (WebCore::validationMessageValueMissingForRadioText):
        (WebCore::validationMessageValueMissingForSelectText):
        * platform/brew/LocalizedStringsBrew.cpp:
        (WebCore::validationMessageValueMissingForCheckboxText):
        (WebCore::validationMessageValueMissingForFileText):
        (WebCore::validationMessageValueMissingForMultipleFileText):
        (WebCore::validationMessageValueMissingForRadioText):
        (WebCore::validationMessageValueMissingForSelectText):
        * platform/efl/LocalizedStringsEfl.cpp:
        (WebCore::validationMessageValueMissingForCheckboxText):
        (WebCore::validationMessageValueMissingForFileText):
        (WebCore::validationMessageValueMissingForMultipleFileText):
        (WebCore::validationMessageValueMissingForRadioText):
        (WebCore::validationMessageValueMissingForSelectText):
        * platform/gtk/LocalizedStringsGtk.cpp:
        (WebCore::validationMessageValueMissingForCheckboxText):
        (WebCore::validationMessageValueMissingForFileText):
        (WebCore::validationMessageValueMissingForMultipleFileText):
        (WebCore::validationMessageValueMissingForRadioText):
        (WebCore::validationMessageValueMissingForSelectText):
        * platform/haiku/LocalizedStringsHaiku.cpp:
        (WebCore::validationMessageValueMissingText):
        (WebCore::validationMessageValueMissingForCheckboxText):
        (WebCore::validationMessageValueMissingForFileText):
        (WebCore::validationMessageValueMissingForMultipleFileText):
        (WebCore::validationMessageValueMissingForRadioText):
        (WebCore::validationMessageValueMissingForSelectText):
        * platform/wx/LocalizedStringsWx.cpp:
        (WebCore::validationMessageValueMissingForCheckboxText):
        (WebCore::validationMessageValueMissingForFileText):
        (WebCore::validationMessageValueMissingForMultipleFileText):
        (WebCore::validationMessageValueMissingForRadioText):
        (WebCore::validationMessageValueMissingForSelectText):

2010-11-18  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Bug 49708 - Stop recompiling functions to regenerate exception info.

        Instead only hold info as necessary – keep divot info is the inspector
        is enabled, line number info is debugging or profiling, and handler
        info for functions with try/catch.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::supportsRichSourceInfo):
            - report to JSC whether the inspector is enabled - in which
              case we will generate better error messages on exceptions.
        * bindings/js/JSDOMWindowBase.h:

2010-11-18  Jian Li  <jianli@chromium.org>

        Reviewed by Kenneth Russell.

        Make binding code generation scripts support 'short' type
        https://bugs.webkit.org/show_bug.cgi?id=49704

        Updated binding tests.

        * bindings/scripts/CodeGeneratorJS.pm: Also fixed a style issue.
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/scripts/test/CPP/WebDOMTestObj.cpp:
        * bindings/scripts/test/CPP/WebDOMTestObj.h:
        * bindings/scripts/test/GObject/WebKitDOMTestCallback.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestMediaQueryListListener.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.mm:
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/V8/V8TestObj.cpp:

2010-11-18  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Adam Roben.

        <rdar://problem/8602509&8602717&8602724> Enable compaction support.

        * Configurations/WebCore.xcconfig:

2010-11-18  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=49772
        
        Fix nested ruby.  My previous checkin (for 49717) broke it.  Push the ruby text and ruby base text
        together based off logicalTopOverflow and logicalBottomOverflow rather than lineTop and lineBottom.
        This way the overflow from nested rubies is accounted for.
        
        Added fast/ruby/nested-ruby.html

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

2010-11-18  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Nate Chapin.

        [V8] ASSERT(WTF::isMainThread()) fails in V8Binding::int32ToWebCoreString in workers
        https://bugs.webkit.org/show_bug.cgi?id=49613

        No new tests. Running existing worker tests like
        fast/workers/storage/execute-sql-args-worker.html in chromium
        would verify it.

        * bindings/v8/V8Binding.cpp:
        (WebCore::int32ToWebCoreStringFast):
        (WebCore::int32ToWebCoreString):

2010-11-18  Alexey Proskuryakov  <ap@apple.com>

        Windows build fix.

        https://bugs.webkit.org/show_bug.cgi?id=49762
        Stylesheet wrappers are not GC protected

        * bindings/js/JSBindingsAllInOne.cpp: Added new custom binding files.

2010-11-18  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=49717
        
        Implement better behavior for the logical height and block direction spacing of ruby text and ruby
        base text.

        Added six new tests: ruby-auto-line-expansion.html (one version for each of the four writing modes) to
        test ruby text accommodation and quirks-mode-ruby-spacing.html / quirks-mode-ruby-spacing-bt.html to test
        that ruby doesn't reset line-height.

        * css/html.css:
        Remove the line-height:normal rule for <ruby>  This behavior was incorrect, since a <ruby> on a line
        by itself in quirks mode would cause the overall line-height of the enclosing block to not be honored.

        * rendering/InlineBox.h:
        (WebCore::InlineBox::adjustBlockDirectionPosition):
        Add adjustBlockDirectionPosition as a shorthand for calling adjustPosition with the correct delta (x or y)
        depending on orientation.
        
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesInBlockDirection):
        placeBoxesInBlockDirection now looks for Ruby runs, and when it encounters them it sets a flag, containsRuby,
        to true.  This flag is stored as a bit on the RootInlineBox and lets us know whether we need to do a later
        crawl of the line boxes after they are positioned to see if all the Ruby texts fit or not.
        
        Add the notion of a lineTop and lineBottom that include margins, since flipped lines writing modes (lr and bt)
        mess up the flipping otherwise.  These new variables are lineTopIncludingMargins and lineBottomIncludingMargins.
        This is only relevant for replaced elements, since the block direction margins of inline flows are always 0.
        
        Because RenderRubyRun is implemented as an inline-block (this is probably not a behavior we want to keep long-term),
        the line-height is propagated into the inline-block, and it ends up being counted as part of the overall lineTop
        and lineBottom since it is inside the inline-block's height.  To prevent this from happening, we have to fake it
        as though RenderRubyRun was just a normal inline.  We look at the line boxes of the ruby base and we push lineTop/Bottom
        in by the leading on either side so that it isn't counted as part of lineTop and lineBottom.  This enables the later
        Ruby code that examines the spacing between lines to not be fooled into thinking it can't intrude into an inline-block's
        interior on a previous line.

        (WebCore::InlineFlowBox::computeBlockDirectionRubyAdjustment):
        This function computes the amount that a line box has to be moved in order to accommodate all of the Ruby texts on the
        line.  With tb and rl writing modes, the Ruby is trying to fit between the current line and a previous line, and so
        we're checking some highest previous position and computing the amount we have to move.
        
        For lr and bt writing modes, the lines are flipped relative to the block direction, so we are computing how much we have
        to move the *following* line based off a lowest position.
        
        In all writing modes we will allow Ruby text to intrude into the padding of a block.
        
        * rendering/InlineFlowBox.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlockChildren):
        Ruby text is now considered a special child that should be excluded from normal layout, margin collapsing and height
        computations.  Rename the layoutLegend function to be more generalized and make it apply to both Ruby text and to
        legends.  This means that the RenderRubyRun computes its logical height without any regard for the ruby text.

        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::layoutSpecialExcludedChild):
        layoutSpecialExcludedChild is the new version of layoutLegend and it is implemented by RenderFieldset and RenderRubyRun.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutInlineChildren):
        When we hit the end of line layout, if we're in lr or bt writing modes, we have to potentially grow the height of the block
        to accommodate ruby text along the bottom side of the line.  We call computeBlockDirectionRubyAdjustment here in flipped lines
        writing mode only, and then we increase the logical height of the block if necessary.

        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::layoutSpecialExcludedChild):
        * rendering/RenderFieldset.h:
        No changes here other than the function rename.

        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::staticCreateRubyRun):
        Remove the hack that locked RenderRubyRun's writing mode to tb or rl, since it didn't really work anyway, and it isn't necessary
        now that RenderRubyRun has its own layout method.
    
        (WebCore::RenderRubyRun::layoutSpecialExcludedChild):
        RenderRubyRun lays out the ruby text here but doesn't do anything with its placement yet.  We wait until the base is positioned
        and then handled positioning the RenderRubyText at the end of RenderRubyRun's layout method. 

        (WebCore::RenderRubyRun::layout):
        * rendering/RenderRubyRun.h:
        RenderRubyRun now has its own layout method that calls the base class to get the RenderRubyBase positioned and then moves the
        RenderRubyText such that its bottommost line box's bottom and the RenderRubyBase's topmost line box's line top are flush with
        one another.  The RenderRubyText will commonly be positioned at a negative coordinate now and spill out of the RenderRubyRun
        as overflow.

        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::RootInlineBox):
        Added the m_containsRuby bit for performance to avoid the extra pass to try to accommodate ruby texts when none are present.

        (WebCore::RootInlineBox::adjustPosition):
        Fixed a bug in adjustPosition where the lineTop, lineBottom and blockLogicalHeight values were always being augmented by dy
        even in vertical writing modes (where dx needed to be used instead).

        (WebCore::RootInlineBox::alignBoxesInBlockDirection):
        (WebCore::RootInlineBox::blockDirectionRubyAdjustment):
        * rendering/RootInlineBox.h:
        (WebCore::RootInlineBox::containsRuby):
        RootInlineBox now calls blockDirectionRubyAdjustment to determine the amount of additional spacing that has to exist between
        the lines in order to accommodate all Ruby texts, and then it does adjustPosition to move the new line by the amount required.

2010-11-18  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Geoffrey Garen.

        https://bugs.webkit.org/show_bug.cgi?id=49762
        Stylesheet wrappers are not GC protected

        Tests: fast/dom/StyleSheet/gc-inline-style-cssvalues.html
               fast/dom/StyleSheet/gc-styleheet-wrapper.xhtml

        * Android.jscbindings.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        Added the new custom bindings files.

        * WebCore.xcodeproj/project.pbxproj: Added the new custom bindings files. Also, added some
        existing headers.

        * bindings/js/JSDOMBinding.cpp: (WebCore::isObservableThroughDOM): If a node has a stylesheet
        with a wrapper, it may be the only thing having the stylesheet's wrapper alive, so its own
        wrapper has to stay alive, too.
        While at it, also fixed the same issue with inline style declarations.
        Also, added a FIXME comment about one with attribute nodes. We implement a less conservative
        approach for nodes, so perhaps fixing this is not as easy as removing a hasCustomProperties()
        check.

        * bindings/js/JSHTMLLinkElementCustom.cpp: Added.
        (WebCore::JSHTMLLinkElement::markChildren):
        * bindings/js/JSHTMLStyleElementCustom.cpp: Added.
        (WebCore::JSHTMLStyleElement::markChildren):
        * bindings/js/JSProcessingInstructionCustom.cpp: Added.
        (WebCore::JSProcessingInstruction::markChildren):
        Mark stylesheets owned by these nodes. As always in markChildren() functions, we do it
        conservatively, without checking whether the stylesheet or any of its children have custom
        properties.

        * dom/ProcessingInstruction.idl:
        * html/HTMLLinkElement.idl:
        * html/HTMLStyleElement.idl:
        These have custom mark functions now.

2010-11-18  Jian Li  <jianli@chromium.org>

        Reviewed by Kenneth Russell.

        Move length and slice out of ArrayBufferView interface
        https://bugs.webkit.org/show_bug.cgi?id=49697

        No functionality change. Covered by existing ArrayBuffer tests.

        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSArrayBufferViewCustom.cpp: Removed.
        * bindings/v8/custom/V8ArrayBufferViewCustom.cpp: Removed.
        * html/canvas/ArrayBufferView.h:
        * html/canvas/ArrayBufferView.idl:
        * html/canvas/Float32Array.cpp:
        (WebCore::Float32Array::slice):
        * html/canvas/Float32Array.h:
        * html/canvas/Float32Array.idl:
        * html/canvas/Int16Array.cpp:
        (WebCore::Int16Array::slice):
        * html/canvas/Int16Array.h:
        * html/canvas/Int16Array.idl:
        * html/canvas/Int32Array.cpp:
        (WebCore::Int32Array::slice):
        * html/canvas/Int32Array.h:
        * html/canvas/Int32Array.idl:
        * html/canvas/Int8Array.cpp:
        (WebCore::Int8Array::slice):
        * html/canvas/Int8Array.h:
        * html/canvas/Int8Array.idl:
        * html/canvas/TypedArrayBase.h:
        (WebCore::TypedArrayBase::length):
        * html/canvas/Uint16Array.cpp:
        (WebCore::Uint16Array::slice):
        * html/canvas/Uint16Array.h:
        * html/canvas/Uint16Array.idl:
        * html/canvas/Uint32Array.cpp:
        (WebCore::Uint32Array::slice):
        * html/canvas/Uint32Array.h:
        * html/canvas/Uint32Array.idl:
        * html/canvas/Uint8Array.cpp:
        (WebCore::Uint8Array::slice):
        * html/canvas/Uint8Array.h:
        * html/canvas/Uint8Array.idl:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::readPixels):

2010-11-17  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        Implement UNPACK_COLORSPACE_CONVERSION_WEBGL
        https://bugs.webkit.org/show_bug.cgi?id=47196

        * platform/image-decoders/ImageDecoder.h:
        (WebCore::ImageDecoder::ignoresGammaAndColorProfile): Add a getter function for the ignoreGammaAndColorProfile setting.
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::JPEGImageReader::decode): Hookup ignoreGammaAndColorProfile setting with color profile processing.
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageDecoder::headerAvailable): Ditto.

2010-11-18  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Remove leftover Windows Debug_Internal configurations
        https://bugs.webkit.org/show_bug.cgi?id=49758

        * WebCore.vcproj/QTMovieWin.vcproj:
        * WebCore.vcproj/WebCore.vcproj:

2010-11-18  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r72299.
        http://trac.webkit.org/changeset/72299
        https://bugs.webkit.org/show_bug.cgi?id=49761

        Broke chromium ui test SessionHistoryTest.FrameBackForward.
        (Requested by dave_levin on #webkit).

        * loader/HistoryController.cpp:
        (WebCore::HistoryController::HistoryController):
        (WebCore::HistoryController::saveDocumentState):
        (WebCore::HistoryController::updateForBackForwardNavigation):
        (WebCore::HistoryController::updateForCommit):
        (WebCore::HistoryController::updateForFrameLoadCompleted):
        (WebCore::HistoryController::setCurrentItem):
        (WebCore::HistoryController::createItem):
        (WebCore::HistoryController::createItemTree):
        (WebCore::HistoryController::recursiveGoToItem):
        * loader/HistoryController.h:

2010-11-18  James Robinson  <jamesr@chromium.org>

        Reviewed by Darin Fisher.

        [chromium] REGRESSION(72141): Chromium fails acid3 on windows and linux
        https://bugs.webkit.org/show_bug.cgi?id=49638

        Avoid clamping zero text size to 12pt in FontPlatformData::setupPaint() in FontPlatformDataLinux.cpp
        Set all metrics to 0 if the font size is specified as zero in SimpleFontDataChromiumWin.cpp, just
        like Safari Win did in r72270.

        Test: fast/text/font-size-zero.html

        * platform/graphics/chromium/FontPlatformDataLinux.cpp:
        (WebCore::FontPlatformData::setupPaint):
        * platform/graphics/chromium/SimpleFontDataChromiumWin.cpp:
        (WebCore::SimpleFontData::platformInit):

2010-11-18  Rob Buis  <rwlbuis@gmail.com>

        Reviewed by Simon Fraser.

        Only inject fullscreen.css when in fullscreen
        https://bugs.webkit.org/show_bug.cgi?id=49510

        Refactor to only add fullscreen sheet rules when document is in fullscreen mode.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::CSSStyleSelector):
        (WebCore::loadFullDefaultStyle):
        (WebCore::loadFullScreenRulesIfNeeded):
        (WebCore::CSSStyleSelector::styleForElement):

2010-11-18  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Debug_Internal Windows configuration is unnecessary, should be removed
        https://bugs.webkit.org/show_bug.cgi?id=49753

        * WebCorePrefix.h:

2010-11-18  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Clean up vcproj errors
        https://bugs.webkit.org/show_bug.cgi?id=49741

        * WebCore.vcproj/WebCore.vcproj:

2010-11-18  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=49694
        Add some comments about XSLStyleSheet owner node

        No change in behavior, so no tests.

        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::checkStyleSheet):
        * xml/XSLStyleSheet.h:
        (WebCore::XSLStyleSheet::create):
        (WebCore::XSLStyleSheet::createEmbedded):
        (WebCore::XSLStyleSheet::createForXSLTProcessor):
        * xml/XSLStyleSheetLibxslt.cpp:
        (WebCore::XSLStyleSheet::XSLStyleSheet):
        * xml/XSLTProcessorLibxslt.cpp:
        (WebCore::xsltStylesheetPointer):
        * xml/XSLTProcessorQt.cpp:
        (WebCore::XSLTProcessor::transformToString):

2010-11-18  Jer Noble  <jer.noble@apple.com>

        Reviewed by Eric Carlson.

        REGRESSION (Safari 5.0.1): HTML5 videos on YouTube never start playing on Windows
        https://bugs.webkit.org/show_bug.cgi?id=44439
        <rdar://problem/8342407>
        
        setUpCookiesForQuickTime() previously depended on having setFrameView() called first
        in order to get a Frame, and when it wasn't set, the cookie-copy failed.  Now, 
        setUpCookiesForQuickTime uses the MediaPlayerClient function mediaPlayerOwningDocument() 
        to retrieve the document and subsequently, the Frame.

        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::setUpCookiesForQuickTime):

2010-11-18  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Darin Adler.

        Allow no-store resources to be used for back navigation
        https://bugs.webkit.org/show_bug.cgi?id=49672

        Test: http/tests/cache/history-only-cached-subresource-loads.html

        HTTP allows "Cache-Control: no-store" resources to "cached" for the
        purposes of history, such as back/forward navigation. Previously
        WebCore just immediately evicted these resources, now we leave them in
        the cache as long as they are not "https". This allows us to use them
        if they are used in a back navigation, or lazily evict and replace
        them on other load types expecting non-stale resources.

        (WebCore::CachedResource::CachedResource):
        (WebCore::CachedResource::removeClient): instead of immediately removing the resource from the cache, leave it in the cache.
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::checkForReload):
        (WebCore::CachedResourceLoader::requestResource): allow history only resources if the CachePolicy is CachePolicyHistoryBuffer (back/forward navigation).
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::requestResource): lazily remove history only resources if it is requested for a load type expecting non-stale resources.
        * loader/cache/MemoryCache.h: default the forHistory parameter to false.

          Rename cache policy CachePolicyAllowStale to CachePolicyHistoryBuffer.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::subresourceCachePolicy):
        * loader/cache/CachePolicy.h:
        * loader/cache/CachedResource.cpp:

2010-11-18  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=49700
        XSLTProcessor.importNode is only tested with document nodes, and hits an assertion

        Test: fast/xsl/import-non-document-node.xhtml

        * css/CSSStyleSheet.cpp:
        (WebCore::isAcceptableCSSStyleSheetParent):
        (WebCore::CSSStyleSheet::CSSStyleSheet):
        * css/StyleSheet.cpp:
        (WebCore::StyleSheet::StyleSheet):
        Moved the assertion - hopefully, it's valid for CSS stylesheets.

2010-11-18  Charlie Reis  <creis@chromium.org>

        Reviewed by Darin Fisher.

        Update correct content state during back/forward navigations
        https://bugs.webkit.org/show_bug.cgi?id=48809

        Ensures that history's previousItem is non-null when clients try to
        update content state (e.g., Chromium's UpdateSessionHistory).  We now
        track load completions with a boolean field rather than by clearing
        previousItem.

        Behavior covered by existing tests in fast/history and fast/loader.

        * loader/HistoryController.cpp:

2010-11-18  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r72288.
        http://trac.webkit.org/changeset/72288
        https://bugs.webkit.org/show_bug.cgi?id=49730

        'krit attempted to do that, but revert got stuck' (Requested
        by antonm on #webkit).

        * Android.mk:
        * CMakeLists.txt:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * WebCore.order:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::setDOMException):
        * bindings/js/JSDOMBinding.h:
        (WebCore::createDOMObjectWrapper):
        (WebCore::getDOMObjectWrapper):
        * bindings/js/JSSVGPathSegCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSSVGPathSegListCustom.cpp: Added.
        (WebCore::JSSVGPathSegList::clear):
        (WebCore::JSSVGPathSegList::initialize):
        (WebCore::JSSVGPathSegList::getItem):
        (WebCore::JSSVGPathSegList::insertItemBefore):
        (WebCore::JSSVGPathSegList::replaceItem):
        (WebCore::JSSVGPathSegList::removeItem):
        (WebCore::JSSVGPathSegList::appendItem):
        * bindings/scripts/CodeGenerator.pm:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorObjC.pm:
        * bindings/scripts/CodeGeneratorV8.pm:
        * rendering/SVGRenderTreeAsText.cpp:
        (WebCore::operator<<):
        * svg/SVGAllInOne.cpp:
        * svg/SVGAnimatedPathData.cpp: Added.
        * svg/SVGAnimatedPathData.h: Copied from WebCore/svg/SVGPathSegClosePath.h.
        (WebCore::SVGAnimatedPathData::~SVGAnimatedPathData):
        * svg/SVGAnimatedPathData.idl: Copied from WebCore/svg/SVGPathSegCurvetoQuadraticAbs.idl.
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::SVGPathElement):
        (WebCore::SVGPathElement::getPathSegAtLength):
        (WebCore::SVGPathElement::createSVGPathSegClosePath):
        (WebCore::SVGPathElement::createSVGPathSegMovetoAbs):
        (WebCore::SVGPathElement::createSVGPathSegMovetoRel):
        (WebCore::SVGPathElement::createSVGPathSegLinetoAbs):
        (WebCore::SVGPathElement::createSVGPathSegLinetoRel):
        (WebCore::SVGPathElement::createSVGPathSegCurvetoCubicAbs):
        (WebCore::SVGPathElement::createSVGPathSegCurvetoCubicRel):
        (WebCore::SVGPathElement::createSVGPathSegCurvetoQuadraticAbs):
        (WebCore::SVGPathElement::createSVGPathSegCurvetoQuadraticRel):
        (WebCore::SVGPathElement::createSVGPathSegArcAbs):
        (WebCore::SVGPathElement::createSVGPathSegArcRel):
        (WebCore::SVGPathElement::createSVGPathSegLinetoHorizontalAbs):
        (WebCore::SVGPathElement::createSVGPathSegLinetoHorizontalRel):
        (WebCore::SVGPathElement::createSVGPathSegLinetoVerticalAbs):
        (WebCore::SVGPathElement::createSVGPathSegLinetoVerticalRel):
        (WebCore::SVGPathElement::createSVGPathSegCurvetoCubicSmoothAbs):
        (WebCore::SVGPathElement::createSVGPathSegCurvetoCubicSmoothRel):
        (WebCore::SVGPathElement::createSVGPathSegCurvetoQuadraticSmoothAbs):
        (WebCore::SVGPathElement::createSVGPathSegCurvetoQuadraticSmoothRel):
        (WebCore::SVGPathElement::parseMappedAttribute):
        (WebCore::SVGPathElement::svgAttributeChanged):
        (WebCore::SVGPathElement::synchronizeProperty):
        (WebCore::SVGPathElement::pathSegList):
        (WebCore::SVGPathElement::normalizedPathSegList):
        (WebCore::SVGPathElement::animatedPathSegList):
        (WebCore::SVGPathElement::animatedNormalizedPathSegList):
        (WebCore::SVGPathElement::toPathData):
        * svg/SVGPathElement.h:
        (WebCore::SVGPathElement::isValid):
        (WebCore::SVGPathElement::supportsMarkers):
        * svg/SVGPathElement.idl:
        * svg/SVGPathParserFactory.cpp:
        (WebCore::globalSVGPathSegListBuilder):
        (WebCore::SVGPathParserFactory::buildPathFromByteStream):
        (WebCore::SVGPathParserFactory::buildPathFromSVGPathSegList):
        (WebCore::SVGPathParserFactory::buildSVGPathSegListFromString):
        (WebCore::SVGPathParserFactory::buildSVGPathSegListFromByteStream):
        (WebCore::SVGPathParserFactory::buildStringFromSVGPathSegList):
        (WebCore::SVGPathParserFactory::buildSVGPathByteStreamFromString):
        (WebCore::SVGPathParserFactory::buildAnimatedSVGPathByteStream):
        (WebCore::SVGPathParserFactory::getSVGPathSegAtLengthFromSVGPathSegList):
        * svg/SVGPathParserFactory.h:
        * svg/SVGPathSeg.cpp: Copied from WebCore/svg/SVGPathSegLinetoHorizontalRel.idl.
        (WebCore::SVGPathSeg::associatedAttributeName):
        * svg/SVGPathSeg.h:
        (WebCore::SVGPathSegSingleCoord::setX):
        (WebCore::SVGPathSegSingleCoord::x):
        (WebCore::SVGPathSegSingleCoord::setY):
        (WebCore::SVGPathSegSingleCoord::y):
        (WebCore::SVGPathSegSingleCoord::SVGPathSegSingleCoord):
        * svg/SVGPathSeg.idl:
        * svg/SVGPathSegArc.cpp: Copied from WebCore/svg/SVGPathSegClosePath.h.
        (WebCore::SVGPathSegArcAbs::SVGPathSegArcAbs):
        (WebCore::SVGPathSegArcRel::SVGPathSegArcRel):
        * svg/SVGPathSegArc.h:
        (WebCore::SVGPathSegArc::SVGPathSegArc):
        (WebCore::SVGPathSegArc::setX):
        (WebCore::SVGPathSegArc::x):
        (WebCore::SVGPathSegArc::setY):
        (WebCore::SVGPathSegArc::y):
        (WebCore::SVGPathSegArc::setR1):
        (WebCore::SVGPathSegArc::r1):
        (WebCore::SVGPathSegArc::setR2):
        (WebCore::SVGPathSegArc::r2):
        (WebCore::SVGPathSegArc::setAngle):
        (WebCore::SVGPathSegArc::angle):
        (WebCore::SVGPathSegArc::setLargeArcFlag):
        (WebCore::SVGPathSegArc::largeArcFlag):
        (WebCore::SVGPathSegArc::setSweepFlag):
        (WebCore::SVGPathSegArc::sweepFlag):
        (WebCore::SVGPathSegArcAbs::create):
        (WebCore::SVGPathSegArcAbs::pathSegType):
        (WebCore::SVGPathSegArcAbs::pathSegTypeAsLetter):
        (WebCore::SVGPathSegArcRel::create):
        (WebCore::SVGPathSegArcRel::pathSegType):
        (WebCore::SVGPathSegArcRel::pathSegTypeAsLetter):
        * svg/SVGPathSegArcAbs.idl:
        * svg/SVGPathSegArcRel.idl:
        * svg/SVGPathSegClosePath.cpp: Added.
        * svg/SVGPathSegClosePath.h:
        (WebCore::SVGPathSegClosePath::create):
        (WebCore::SVGPathSegClosePath::SVGPathSegClosePath):
        * svg/SVGPathSegCurvetoCubic.cpp: Copied from WebCore/svg/SVGPathSegClosePath.h.
        (WebCore::SVGPathSegCurvetoCubicAbs::SVGPathSegCurvetoCubicAbs):
        (WebCore::SVGPathSegCurvetoCubicRel::SVGPathSegCurvetoCubicRel):
        * svg/SVGPathSegCurvetoCubic.h:
        (WebCore::SVGPathSegCurvetoCubic::SVGPathSegCurvetoCubic):
        (WebCore::SVGPathSegCurvetoCubic::setX):
        (WebCore::SVGPathSegCurvetoCubic::x):
        (WebCore::SVGPathSegCurvetoCubic::setY):
        (WebCore::SVGPathSegCurvetoCubic::y):
        (WebCore::SVGPathSegCurvetoCubic::setX1):
        (WebCore::SVGPathSegCurvetoCubic::x1):
        (WebCore::SVGPathSegCurvetoCubic::setY1):
        (WebCore::SVGPathSegCurvetoCubic::y1):
        (WebCore::SVGPathSegCurvetoCubic::setX2):
        (WebCore::SVGPathSegCurvetoCubic::x2):
        (WebCore::SVGPathSegCurvetoCubic::setY2):
        (WebCore::SVGPathSegCurvetoCubic::y2):
        (WebCore::SVGPathSegCurvetoCubicAbs::create):
        (WebCore::SVGPathSegCurvetoCubicAbs::pathSegType):
        (WebCore::SVGPathSegCurvetoCubicAbs::pathSegTypeAsLetter):
        (WebCore::SVGPathSegCurvetoCubicRel::create):
        (WebCore::SVGPathSegCurvetoCubicRel::pathSegType):
        (WebCore::SVGPathSegCurvetoCubicRel::pathSegTypeAsLetter):
        * svg/SVGPathSegCurvetoCubicAbs.idl:
        * svg/SVGPathSegCurvetoCubicRel.idl:
        * svg/SVGPathSegCurvetoCubicSmooth.cpp: Copied from WebCore/svg/SVGPathSegClosePath.h.
        (WebCore::SVGPathSegCurvetoCubicSmoothAbs::SVGPathSegCurvetoCubicSmoothAbs):
        (WebCore::SVGPathSegCurvetoCubicSmoothRel::SVGPathSegCurvetoCubicSmoothRel):
        * svg/SVGPathSegCurvetoCubicSmooth.h:
        (WebCore::SVGPathSegCurvetoCubicSmooth::SVGPathSegCurvetoCubicSmooth):
        (WebCore::SVGPathSegCurvetoCubicSmooth::setX):
        (WebCore::SVGPathSegCurvetoCubicSmooth::x):
        (WebCore::SVGPathSegCurvetoCubicSmooth::setY):
        (WebCore::SVGPathSegCurvetoCubicSmooth::y):
        (WebCore::SVGPathSegCurvetoCubicSmooth::setX2):
        (WebCore::SVGPathSegCurvetoCubicSmooth::x2):
        (WebCore::SVGPathSegCurvetoCubicSmooth::setY2):
        (WebCore::SVGPathSegCurvetoCubicSmooth::y2):
        (WebCore::SVGPathSegCurvetoCubicSmoothAbs::create):
        (WebCore::SVGPathSegCurvetoCubicSmoothAbs::pathSegType):
        (WebCore::SVGPathSegCurvetoCubicSmoothAbs::pathSegTypeAsLetter):
        (WebCore::SVGPathSegCurvetoCubicSmoothRel::create):
        (WebCore::SVGPathSegCurvetoCubicSmoothRel::pathSegType):
        (WebCore::SVGPathSegCurvetoCubicSmoothRel::pathSegTypeAsLetter):
        * svg/SVGPathSegCurvetoCubicSmoothAbs.idl:
        * svg/SVGPathSegCurvetoCubicSmoothRel.idl:
        * svg/SVGPathSegCurvetoQuadratic.cpp: Copied from WebCore/svg/SVGPathSegClosePath.h.
        (WebCore::SVGPathSegCurvetoQuadraticAbs::SVGPathSegCurvetoQuadraticAbs):
        (WebCore::SVGPathSegCurvetoQuadraticRel::SVGPathSegCurvetoQuadraticRel):
        * svg/SVGPathSegCurvetoQuadratic.h:
        (WebCore::SVGPathSegCurvetoQuadratic::SVGPathSegCurvetoQuadratic):
        (WebCore::SVGPathSegCurvetoQuadratic::setX):
        (WebCore::SVGPathSegCurvetoQuadratic::x):
        (WebCore::SVGPathSegCurvetoQuadratic::setY):
        (WebCore::SVGPathSegCurvetoQuadratic::y):
        (WebCore::SVGPathSegCurvetoQuadratic::setX1):
        (WebCore::SVGPathSegCurvetoQuadratic::x1):
        (WebCore::SVGPathSegCurvetoQuadratic::setY1):
        (WebCore::SVGPathSegCurvetoQuadratic::y1):
        (WebCore::SVGPathSegCurvetoQuadraticAbs::create):
        (WebCore::SVGPathSegCurvetoQuadraticAbs::pathSegType):
        (WebCore::SVGPathSegCurvetoQuadraticAbs::pathSegTypeAsLetter):
        (WebCore::SVGPathSegCurvetoQuadraticRel::create):
        (WebCore::SVGPathSegCurvetoQuadraticRel::pathSegType):
        (WebCore::SVGPathSegCurvetoQuadraticRel::pathSegTypeAsLetter):
        * svg/SVGPathSegCurvetoQuadraticAbs.idl:
        * svg/SVGPathSegCurvetoQuadraticRel.idl:
        * svg/SVGPathSegCurvetoQuadraticSmooth.cpp: Copied from WebCore/svg/SVGPathSegClosePath.h.
        (WebCore::SVGPathSegCurvetoQuadraticSmoothAbs::SVGPathSegCurvetoQuadraticSmoothAbs):
        (WebCore::SVGPathSegCurvetoQuadraticSmoothRel::SVGPathSegCurvetoQuadraticSmoothRel):
        * svg/SVGPathSegCurvetoQuadraticSmooth.h:
        (WebCore::SVGPathSegCurvetoQuadraticSmoothAbs::create):
        (WebCore::SVGPathSegCurvetoQuadraticSmoothAbs::pathSegType):
        (WebCore::SVGPathSegCurvetoQuadraticSmoothAbs::pathSegTypeAsLetter):
        (WebCore::SVGPathSegCurvetoQuadraticSmoothRel::create):
        (WebCore::SVGPathSegCurvetoQuadraticSmoothRel::pathSegType):
        (WebCore::SVGPathSegCurvetoQuadraticSmoothRel::pathSegTypeAsLetter):
        * svg/SVGPathSegCurvetoQuadraticSmoothAbs.idl:
        * svg/SVGPathSegCurvetoQuadraticSmoothRel.idl:
        * svg/SVGPathSegLineto.cpp: Copied from WebCore/svg/SVGPathSegClosePath.h.
        (WebCore::SVGPathSegLinetoAbs::SVGPathSegLinetoAbs):
        (WebCore::SVGPathSegLinetoRel::SVGPathSegLinetoRel):
        * svg/SVGPathSegLineto.h:
        (WebCore::SVGPathSegLinetoAbs::create):
        (WebCore::SVGPathSegLinetoAbs::pathSegType):
        (WebCore::SVGPathSegLinetoAbs::pathSegTypeAsLetter):
        (WebCore::SVGPathSegLinetoRel::create):
        (WebCore::SVGPathSegLinetoRel::pathSegType):
        (WebCore::SVGPathSegLinetoRel::pathSegTypeAsLetter):
        * svg/SVGPathSegLinetoAbs.idl:
        * svg/SVGPathSegLinetoHorizontal.cpp: Copied from WebCore/svg/SVGPathSegClosePath.h.
        (WebCore::SVGPathSegLinetoHorizontalAbs::SVGPathSegLinetoHorizontalAbs):
        (WebCore::SVGPathSegLinetoHorizontalRel::SVGPathSegLinetoHorizontalRel):
        * svg/SVGPathSegLinetoHorizontal.h:
        (WebCore::SVGPathSegLinetoHorizontal::SVGPathSegLinetoHorizontal):
        (WebCore::SVGPathSegLinetoHorizontal::setX):
        (WebCore::SVGPathSegLinetoHorizontal::x):
        (WebCore::SVGPathSegLinetoHorizontalAbs::create):
        (WebCore::SVGPathSegLinetoHorizontalAbs::pathSegType):
        (WebCore::SVGPathSegLinetoHorizontalAbs::pathSegTypeAsLetter):
        (WebCore::SVGPathSegLinetoHorizontalRel::create):
        (WebCore::SVGPathSegLinetoHorizontalRel::pathSegType):
        (WebCore::SVGPathSegLinetoHorizontalRel::pathSegTypeAsLetter):
        * svg/SVGPathSegLinetoHorizontalAbs.idl:
        * svg/SVGPathSegLinetoHorizontalRel.idl:
        * svg/SVGPathSegLinetoRel.idl:
        * svg/SVGPathSegLinetoVertical.cpp: Copied from WebCore/svg/SVGPathSegClosePath.h.
        (WebCore::SVGPathSegLinetoVerticalAbs::SVGPathSegLinetoVerticalAbs):
        (WebCore::SVGPathSegLinetoVerticalRel::SVGPathSegLinetoVerticalRel):
        * svg/SVGPathSegLinetoVertical.h:
        (WebCore::SVGPathSegLinetoVertical::SVGPathSegLinetoVertical):
        (WebCore::SVGPathSegLinetoVertical::setY):
        (WebCore::SVGPathSegLinetoVertical::y):
        (WebCore::SVGPathSegLinetoVerticalAbs::create):
        (WebCore::SVGPathSegLinetoVerticalAbs::pathSegType):
        (WebCore::SVGPathSegLinetoVerticalAbs::pathSegTypeAsLetter):
        (WebCore::SVGPathSegLinetoVerticalRel::create):
        (WebCore::SVGPathSegLinetoVerticalRel::pathSegType):
        (WebCore::SVGPathSegLinetoVerticalRel::pathSegTypeAsLetter):
        * svg/SVGPathSegLinetoVerticalAbs.idl:
        * svg/SVGPathSegLinetoVerticalRel.idl:
        * svg/SVGPathSegList.cpp:
        (WebCore::SVGPathSegList::SVGPathSegList):
        * svg/SVGPathSegList.h:
        (WebCore::SVGPathSegList::create):
        * svg/SVGPathSegList.idl:
        * svg/SVGPathSegListBuilder.cpp:
        (WebCore::SVGPathSegListBuilder::SVGPathSegListBuilder):
        (WebCore::SVGPathSegListBuilder::moveTo):
        (WebCore::SVGPathSegListBuilder::lineTo):
        (WebCore::SVGPathSegListBuilder::lineToHorizontal):
        (WebCore::SVGPathSegListBuilder::lineToVertical):
        (WebCore::SVGPathSegListBuilder::curveToCubic):
        (WebCore::SVGPathSegListBuilder::curveToCubicSmooth):
        (WebCore::SVGPathSegListBuilder::curveToQuadratic):
        (WebCore::SVGPathSegListBuilder::curveToQuadraticSmooth):
        (WebCore::SVGPathSegListBuilder::arcTo):
        (WebCore::SVGPathSegListBuilder::closePath):
        * svg/SVGPathSegListBuilder.h:
        (WebCore::SVGPathSegListBuilder::setCurrentSVGPathSegList):
        (WebCore::SVGPathSegListBuilder::cleanup):
        * svg/SVGPathSegListSource.cpp:
        (WebCore::SVGPathSegListSource::SVGPathSegListSource):
        (WebCore::SVGPathSegListSource::parseSVGSegmentType):
        (WebCore::SVGPathSegListSource::nextCommand):
        (WebCore::SVGPathSegListSource::parseMoveToSegment):
        (WebCore::SVGPathSegListSource::parseLineToSegment):
        (WebCore::SVGPathSegListSource::parseCurveToQuadraticSmoothSegment):
        * svg/SVGPathSegListSource.h:
        (WebCore::SVGPathSegListSource::create):
        * svg/SVGPathSegMoveto.cpp: Copied from WebCore/svg/SVGPathSegClosePath.h.
        (WebCore::SVGPathSegMovetoAbs::SVGPathSegMovetoAbs):
        (WebCore::SVGPathSegMovetoRel::SVGPathSegMovetoRel):
        * svg/SVGPathSegMoveto.h:
        (WebCore::SVGPathSegMovetoAbs::create):
        (WebCore::SVGPathSegMovetoAbs::pathSegType):
        (WebCore::SVGPathSegMovetoAbs::pathSegTypeAsLetter):
        (WebCore::SVGPathSegMovetoRel::create):
        (WebCore::SVGPathSegMovetoRel::pathSegType):
        (WebCore::SVGPathSegMovetoRel::pathSegTypeAsLetter):
        * svg/SVGPathSegMovetoAbs.idl:
        * svg/SVGPathSegMovetoRel.idl:
        * svg/SVGPathSegWithContext.h: Removed.
        * svg/properties/SVGAnimatedPathSegListPropertyTearOff.h: Removed.
        * svg/properties/SVGPathSegListPropertyTearOff.cpp: Removed.
        * svg/properties/SVGPathSegListPropertyTearOff.h: Removed.

2010-11-18  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r72292.
        http://trac.webkit.org/changeset/72292
        https://bugs.webkit.org/show_bug.cgi?id=49732

        will break win build (Requested by loislo on #webkit).

        * inspector/CodeGeneratorInspector.pm:

2010-11-18  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: reduce the footprint of InspectorBackendDispatcher.
        InspectorBackendDispatcher is a generated file.
        Its content is not optimal and loc may be reduced by a quarter.
        In each generated function we have a code for getting 'in' values from
        the arguments properties object. I've extracted this code into separate getters.
        The side effect is better readability of the generated code.

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

        * inspector/CodeGeneratorInspector.pm:

2010-11-18  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        [v8] fast/css/getFloatValueForUnit.html fails since http://trac.webkit.org/changeset/72189
        https://bugs.webkit.org/show_bug.cgi?id=49656

        Explicitly specify indexerType for the generation of V8WebKitCSSTransformValue binding.

        * bindings/scripts/CodeGeneratorV8.pm:

2010-11-18  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Convert SVGPathSeg/SVGPathSegList to the new SVGPropertyTearOff concept
        https://bugs.webkit.org/show_bug.cgi?id=49580

        SVGPathElement.cloneNode loses generated pathSegList
        https://bugs.webkit.org/show_bug.cgi?id=43388

        SVG Path elements are not correctly updated through pathSegList manipulation on relative values
        https://bugs.webkit.org/show_bug.cgi?id=30219

        Changing an SVGPathSeg does not update a following Smooth Cubic Curveto
        https://bugs.webkit.org/show_bug.cgi?id=19741

        SVGPathElement should only build SVGPathSeg* list on demand
        https://bugs.webkit.org/show_bug.cgi?id=10827

        Tests: svg/W3C-SVG-1.1-SE/paths-dom-02-f.svg
               svg/dom/SVGPathSegList-appendItem.xhtml
               svg/dom/SVGPathSegList-clear-and-initialize.xhtml
               svg/dom/SVGPathSegList-cloning.html
               svg/dom/SVGPathSegList-insertItemBefore.xhtml
               svg/dom/SVGPathSegList-removeItem.xhtml
               svg/dom/SVGPathSegList-replaceItem.xhtml
               svg/dom/SVGPathSegList-xml-dom-synchronization.xhtml
               svg/dom/SVGPathSegList-xml-dom-synchronization2.xhtml
               svg/dom/SVGPathSegList-segment-modification.svg

        Convert SVGPathSeg*/SVGPathSegList to the new SVG(Animated)PropertyTearOff concept.
        Unlike all other SVG* types that use the SVGPropertyTearOff concept, SVGPathSegs are already refcounted,
        and don't need to be wrapped in SVGPropertyTearOff objects. The consequence is that SVGPathSegs need to track
        themselves to which list and path element they belong. Introduce new SVGAnimatedPathSegListPropertyTearOff
        and SVGPathSegListPropertyTearOff classes, that encapsulate the special needed for SVGPathSegList.

        Each SVGPathSeg now needs to store a RefPtr<SVGPathElement> - this makes it impossible to use SVGPathSegList
        to represent the 'd' attribute internally in SVGPathElement. SVGPathSegList is now only used in the SVG DOM bindings
        if someone explicitely requests 'pathElement.pathSegList' (eg. via JS). Switch to use SVGPathByteStream to store
        the 'd' attribute data in SVGPathElement, which is much more compact, and less memory intensive.
        Dirk already prepared SVGPathParserFactory some months ago, which allows easy conversion between
        String/Path/SVGPathSegList/SVGPathByteStream in all directions, including normalizing the lists, when requested.

        As consequence SVGPathSegList is now only built on demand, when explicitely requested. Using the SVGAnimatedProperty
        concept gives us 'd' attribute <-> SVGPathSegList synchronization for free, fixing several bugs, listed above.

        * Android.mk: Remove obsolete SVGPathSeg*.cpp files and SVGAnimatedPathData.cpp from build.
        * CMakeLists.txt: Ditto.
        * DerivedSources.make: Remove SVGAnimatedPathData IDL generation.
        * GNUmakefile.am: Remove obsolete SVGPathSeg*.cpp files and SVGAnimatedPathData.cpp from build.
        * WebCore.gyp/WebCore.gyp: Remove SVGAnimatedPathData IDL generation.
        * WebCore.gypi: Remove obsolete SVGPathSeg*.cpp files and SVGAnimatedPathData.cpp from build.
        * WebCore.order: Remove no-longer existant SVGAnimatedPathData symbols.
        * WebCore.pro:  Remove obsolete SVGPathSeg*.cpp files and SVGAnimatedPathData.cpp / JSSVGPathSegCustom.* from build.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * bindings/js/JSBindingsAllInOne.cpp: Remove JSSVGPathSegCustom.cpp from build.
        * bindings/js/JSDOMBinding.cpp: Adapt to toJS() changes, remove context parameter.
        (WebCore::setDOMException):
        * bindings/js/JSDOMBinding.h: Remove obsolete CREATE_SVG_OBJECT_WRAPPER macro, the context parameter is not existant anymore.
        * bindings/js/JSSVGPathSegCustom.cpp: Replace CREATE_SVG_OBJECT_WRAPPER by CREATE_DOM_OBJECT_WRAPPER. Remove context parameter/handling.
        (WebCore::toJS):
        * bindings/js/JSSVGPathSegListCustom.cpp: Removed.
        * bindings/scripts/CodeGenerator.pm: Map 'SVGPathSegList' IDL type to SVG 'SVGPathSegListPropertyTearOff' native type.
        * bindings/scripts/CodeGeneratorJS.pm: Remove IsSVGTypeNeedingContextParameter() methods and usages. Handle SVGPathSegListPropertyTearOff.
        * bindings/scripts/CodeGeneratorObjC.pm: Handle SVGPathSegListPropertyTearOff.
        * bindings/scripts/CodeGeneratorV8.pm: Remove IsSVGTypeNeedingContextParameter() methods and usages.
        * rendering/SVGRenderTreeAsText.cpp: Build path string from byte stream, not path segment list.
        (WebCore::operator<<):
        * svg/SVGAllInOne.cpp: Remove obsolete cpp files.
        * svg/SVGAnimatedPathData.cpp: Removed.
        * svg/SVGAnimatedPathData.h: Removed.
        * svg/SVGAnimatedPathData.idl: Removed.
        * svg/SVGPathElement.cpp: Build SVGPathList on demand. Use SVGPathByteStream to parse/store the 'd' attribute content.
        (WebCore::SVGPathElement::SVGPathElement):
        (WebCore::SVGPathElement::getPathSegAtLength): Use SVGPathByteStream, not SVGPathSegList to determine the getPathSegAtLength() information.
        (WebCore::SVGPathElement::createSVGPathSegClosePath): Pass SVGPathElement to SVGPathSeg and a SVGPathSegRole parameter and store it to track the list origin.
        (WebCore::SVGPathElement::createSVGPathSegMovetoAbs): Ditto.
        (WebCore::SVGPathElement::createSVGPathSegMovetoRel): Ditto.
        (WebCore::SVGPathElement::createSVGPathSegLinetoAbs): Ditto.
        (WebCore::SVGPathElement::createSVGPathSegLinetoRel): Ditto.
        (WebCore::SVGPathElement::createSVGPathSegCurvetoCubicAbs): Ditto.
        (WebCore::SVGPathElement::createSVGPathSegCurvetoCubicRel): Ditto.
        (WebCore::SVGPathElement::createSVGPathSegCurvetoQuadraticAbs): Ditto.
        (WebCore::SVGPathElement::createSVGPathSegCurvetoQuadraticRel): Ditto.
        (WebCore::SVGPathElement::createSVGPathSegArcAbs): Ditto.
        (WebCore::SVGPathElement::createSVGPathSegArcRel): Ditto.
        (WebCore::SVGPathElement::createSVGPathSegLinetoHorizontalAbs): Ditto.
        (WebCore::SVGPathElement::createSVGPathSegLinetoHorizontalRel): Ditto.
        (WebCore::SVGPathElement::createSVGPathSegLinetoVerticalAbs): Ditto.
        (WebCore::SVGPathElement::createSVGPathSegLinetoVerticalRel): Ditto.
        (WebCore::SVGPathElement::createSVGPathSegCurvetoCubicSmoothAbs): Ditto.
        (WebCore::SVGPathElement::createSVGPathSegCurvetoCubicSmoothRel): Ditto.
        (WebCore::SVGPathElement::createSVGPathSegCurvetoQuadraticSmoothAbs): Ditto.
        (WebCore::SVGPathElement::createSVGPathSegCurvetoQuadraticSmoothRel): Ditto.
        (WebCore::SVGPathElement::parseMappedAttribute): Build SVGPathByteStream from 'd' attribute, not a SVGPathSegList.
        (WebCore::SVGPathElement::svgAttributeChanged): If a SVGPathSegList object has been built, synchronize it with the 'd' attribute.
        (WebCore::SVGPathElement::synchronizeProperty): Synchronize 'd' attribute with the SVGPathSegList, if needed.
        (WebCore::SVGPathElement::synchronizeD): Added.
        (WebCore::SVGPathElement::pathSegList): Use same trick as in SVGPolyElement to expose the 'pathSegList' / 'animatedPathSegList' object to the SVG DOM bindings.
        (WebCore::SVGPathElement::normalizedPathSegList): Ditto.
        (WebCore::SVGPathElement::animatedPathSegList): Ditto.
        (WebCore::SVGPathElement::animatedNormalizedPathSegList): Ditto.
        (WebCore::SVGPathElement::toPathData): Build 'Path' object from SVGPathByteStream, not from SVGPathSegList.
        (WebCore::SVGPathElement::pathSegListChanged): Used to synchronize the SVGPathSegLists and the d attribute, as well as any changes from any SVGPathSeg associated with this SVGPathElement.
        * svg/SVGPathElement.h: Add new accessors...
        (WebCore::SVGPathElement::pathByteStream): ... needed by SVGRenderTreeAsText.
        (WebCore::SVGPathElement::animatablePathSegList): ... needed by SVGPathSegListPropertyTearOff.
        * svg/SVGPathElement.idl: Merge SVGAnimatedPathData interface into SVGPathElement.
        * svg/SVGPathParserFactory.cpp: Cleanup SVGPathParserFactory, remove obsolete methods, now that SVGPathElement switched to using SVGPathByteStream internally.
        (WebCore::globalSVGPathSegListBuilder):
        (WebCore::SVGPathParserFactory::buildSVGPathByteStreamFromSVGPathSegList):
        (WebCore::SVGPathParserFactory::buildPathFromByteStream):
        (WebCore::SVGPathParserFactory::buildSVGPathSegListFromByteStream):
        (WebCore::SVGPathParserFactory::buildStringFromSVGPathSegList):
        (WebCore::SVGPathParserFactory::buildSVGPathByteStreamFromString):
        (WebCore::SVGPathParserFactory::buildAnimatedSVGPathByteStream):
        (WebCore::SVGPathParserFactory::getSVGPathSegAtLengthFromSVGPathByteStream):
        * svg/SVGPathParserFactory.h:
        * svg/SVGPathSeg.cpp: Removed.
        * svg/SVGPathSeg.h: Add new SVGPathSegRole enum, identifying to which list a path segment belongs.
        (WebCore::SVGPathSeg::SVGPathSeg):
        * svg/SVGPathSeg.idl: Reindented.
        * svg/SVGPathSegArc.cpp: Removed.
        * svg/SVGPathSegArc.h: All setters now call the commitChange() method.
        * svg/SVGPathSegArcAbs.idl: Enable StrictTypeChecking.
        * svg/SVGPathSegArcRel.idl: Ditto.
        * svg/SVGPathSegClosePath.cpp: Removed.
        * svg/SVGPathSegClosePath.h:
        * svg/SVGPathSegCurvetoCubic.cpp: Removed.
        * svg/SVGPathSegCurvetoCubic.h: All setters now call the commitChange() method.
        * svg/SVGPathSegCurvetoCubicAbs.idl: Enable StrictTypeChecking.
        * svg/SVGPathSegCurvetoCubicRel.idl: Ditto.
        * svg/SVGPathSegCurvetoCubicSmooth.cpp: Removed.
        * svg/SVGPathSegCurvetoCubicSmooth.h: All setters now call the commitChange() method.
        * svg/SVGPathSegCurvetoCubicSmoothAbs.idl: Enable StrictTypeChecking.
        * svg/SVGPathSegCurvetoCubicSmoothRel.idl: Ditto.
        * svg/SVGPathSegCurvetoQuadratic.cpp: Removed.
        * svg/SVGPathSegCurvetoQuadratic.h: All setters now call the commitChange() method.
        * svg/SVGPathSegCurvetoQuadraticAbs.idl: Enable StrictTypeChecking.
        * svg/SVGPathSegCurvetoQuadraticRel.idl: Ditto.
        * svg/SVGPathSegCurvetoQuadraticSmooth.cpp: Removed.
        * svg/SVGPathSegCurvetoQuadraticSmooth.h: All setters now call the commitChange() method.
        * svg/SVGPathSegCurvetoQuadraticSmoothAbs.idl: Enable StrictTypeChecking.
        * svg/SVGPathSegCurvetoQuadraticSmoothRel.idl: Ditto.
        * svg/SVGPathSegLineto.cpp: Removed.
        * svg/SVGPathSegLineto.h: All setters now call the commitChange() method.
        * svg/SVGPathSegLinetoAbs.idl: Enable StrictTypeChecking.
        * svg/SVGPathSegLinetoHorizontal.cpp: Removed.
        * svg/SVGPathSegLinetoHorizontal.h: All setters now call the commitChange() method.
        * svg/SVGPathSegLinetoHorizontalAbs.idl: Enable StrictTypeChecking.
        * svg/SVGPathSegLinetoHorizontalRel.idl: Ditto.
        * svg/SVGPathSegLinetoRel.idl: Enable StrictTypeChecking.
        * svg/SVGPathSegLinetoVertical.cpp: Removed.
        * svg/SVGPathSegLinetoVertical.h: All setters now call the commitChange() method.
        * svg/SVGPathSegLinetoVerticalAbs.idl: Enable StrictTypeChecking.
        * svg/SVGPathSegLinetoVerticalRel.idl: Ditto.
        * svg/SVGPathSegList.cpp: Switch from SVGList<RefPtr<SVGPathSeg> > to a plain Vector<RefPtr<SVGPathSeg> >.
        (WebCore::SVGPathSegList::valueAsString): Utilize SVGPathParserFactory to build a String from a SVGPathSegList.
        (WebCore::SVGPathSegList::commitChange): Call SVGPathElement::pathSegListChanged().
        * svg/SVGPathSegList.h:
        (WebCore::SVGPathSegList::SVGPathSegList):
        * svg/SVGPathSegList.idl: Remove [JSCCustom] flags, no longer needed. 
        * svg/SVGPathSegListBuilder.cpp: Adapt to SVGPathSegList API changes.
        (WebCore::SVGPathSegListBuilder::SVGPathSegListBuilder):
        (WebCore::SVGPathSegListBuilder::moveTo):
        (WebCore::SVGPathSegListBuilder::lineTo):
        (WebCore::SVGPathSegListBuilder::lineToHorizontal):
        (WebCore::SVGPathSegListBuilder::lineToVertical):
        (WebCore::SVGPathSegListBuilder::curveToCubic):
        (WebCore::SVGPathSegListBuilder::curveToCubicSmooth):
        (WebCore::SVGPathSegListBuilder::curveToQuadratic):
        (WebCore::SVGPathSegListBuilder::curveToQuadraticSmooth):
        (WebCore::SVGPathSegListBuilder::arcTo):
        (WebCore::SVGPathSegListBuilder::closePath):
        * svg/SVGPathSegListBuilder.h: Ditto.
        (WebCore::SVGPathSegListBuilder::setCurrentSVGPathElement):
        (WebCore::SVGPathSegListBuilder::setCurrentSVGPathSegList):
        (WebCore::SVGPathSegListBuilder::setCurrentSVGPathSegRole):
        (WebCore::SVGPathSegListBuilder::cleanup):
        * svg/SVGPathSegListSource.cpp: Ditto.
        (WebCore::SVGPathSegListSource::SVGPathSegListSource):
        (WebCore::SVGPathSegListSource::parseSVGSegmentType):
        (WebCore::SVGPathSegListSource::nextCommand):
        (WebCore::SVGPathSegListSource::parseMoveToSegment):
        (WebCore::SVGPathSegListSource::parseLineToSegment):
        (WebCore::SVGPathSegListSource::parseCurveToQuadraticSmoothSegment):
        * svg/SVGPathSegListSource.h: Ditto.
        (WebCore::SVGPathSegListSource::create):
        * svg/SVGPathSegMoveto.cpp: Removed.
        * svg/SVGPathSegMoveto.h: All setters now call the commitChange() method.
        * svg/SVGPathSegMovetoAbs.idl: Enable StrictTypeChecking.
        * svg/SVGPathSegMovetoRel.idl: Ditto.
        * svg/SVGPathSegWithContext.h: Added. This is the new base class for all SVGPathSeg derived types, that's associated with a SVGPathElement and a 'role' (normalized/unaltered segment list).
        (WebCore::SVGPathSegWithContext::SVGPathSegWithContext):
        (WebCore::SVGPathSegWithContext::animatedProperty):
        (WebCore::SVGPathSegWithContext::setContextAndRole):
        (WebCore::SVGPathSegWithContext::commitChange):
        (WebCore::SVGPathSegSingleCoordinate::x):
        (WebCore::SVGPathSegSingleCoordinate::setX):
        (WebCore::SVGPathSegSingleCoordinate::y):
        (WebCore::SVGPathSegSingleCoordinate::setY):
        (WebCore::SVGPathSegSingleCoordinate::SVGPathSegSingleCoordinate):
        * svg/properties/SVGAnimatedPathSegListPropertyTearOff.h: Added. 
        (WebCore::SVGAnimatedPathSegListPropertyTearOff::baseVal):
        (WebCore::SVGAnimatedPathSegListPropertyTearOff::animVal):
        (WebCore::SVGAnimatedPathSegListPropertyTearOff::removeItemFromList):
        (WebCore::SVGAnimatedPathSegListPropertyTearOff::create):
        (WebCore::SVGAnimatedPathSegListPropertyTearOff::SVGAnimatedPathSegListPropertyTearOff):
        * svg/properties/SVGPathSegListPropertyTearOff.cpp: Added.
        (WebCore::SVGPathSegListPropertyTearOff::clear): Added in the cpp file, not in the header, as it needs access to SVGPathSegWithContext, which we can't include from the header.
        (WebCore::SVGPathSegListPropertyTearOff::getItem): Ditto.
        (WebCore::SVGPathSegListPropertyTearOff::removeItem): Ditto.
        (WebCore::SVGPathSegListPropertyTearOff::contextElement): Needs access to SVGPathElement, that's why it lives in the cpp file.
        (WebCore::SVGPathSegListPropertyTearOff::processIncomingListItemValue): Needs access to SVGPathSegWithContext.
        * svg/properties/SVGPathSegListPropertyTearOff.h: Added.
        (WebCore::SVGPathSegListPropertyTearOff::create):
        (WebCore::SVGPathSegListPropertyTearOff::removeItemFromList):
        (WebCore::SVGPathSegListPropertyTearOff::numberOfItems):
        (WebCore::SVGPathSegListPropertyTearOff::initialize):
        (WebCore::SVGPathSegListPropertyTearOff::insertItemBefore):
        (WebCore::SVGPathSegListPropertyTearOff::replaceItem):
        (WebCore::SVGPathSegListPropertyTearOff::appendItem):
        (WebCore::SVGPathSegListPropertyTearOff::SVGPathSegListPropertyTearOff):
        (WebCore::SVGPathSegListPropertyTearOff::commitChange):
        (WebCore::SVGPathSegListPropertyTearOff::processIncomingListItemWrapper):

2010-11-18  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Martin Robinson.

        [Gtk]  atk_text_get_selection returns the wrong offsets after a link
        https://bugs.webkit.org/show_bug.cgi?id=49514

        Consider possible embedded objects to calculate startOffset.

        So far we were using offsetInContainerNode() to calculate the
        value of startOffset when checking the offsets for the current
        selection, which was wrong because that wouldn't work ok if any
        embedded object was present in the paragraph before the
        selection. Thus, we need to consider this fact when calculating
        the startOffset from the point of view of the object this function
        is called on, in order to return the right and actual values.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (getSelectionOffsetsForObject): Check range length from the first
        position in the object the function is called on until the first
        position of current selection, and use it as startOffset.

2010-11-12  Stephen White  <senorblanco@chromium.org>

        Reviewed by Simon Fraser.

        Fix for multiple urls in a background-image causing repeated repaints.
        https://bugs.webkit.org/show_bug.cgi?id=42390

        Change the key of RenderBoxModelObject's LastPaintSizeMap to include
        the layer of the element being drawn, so that the same URL used
        repeated in the same background-image, or another element's
        background-image, can be uniquely identified.  The layer is a void
        pointer, since it is only used as part of the key and using a
        void pointer will discourage dereferencing it.  This pointer is NULL
        when called from RenderImage (<img> elements).

        Covered by fast/backgrounds/size/contain-and-cover.html

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::ImageQualityController::keyDestroyed):
        The old objectDestroyed() is renamed to keyDestroyed().
        (WebCore::ImageQualityController::objectDestroyed):
        The new objectDestroyed() iterates over all outstanding resizes
        to remove any resizes pertaining to this object.
        (WebCore::ImageQualityController::highQualityRepaintTimerFired):
        Retrieve the RenderBoxModelObject from the pair's "first" member.
        (WebCore::ImageQualityController::shouldPaintAtLowQuality):
        Create a key from the {object, layer} pair, and use it to access
        the repaint size map.
        (WebCore::RenderBoxModelObject::shouldPaintAtLowQuality):
        Plumb the layer through to the image quality controller.
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        Pass the bgLayer when checking 
        * rendering/RenderBoxModelObject.h:
        Add the void* layer parameter to shouldPaintAtLowQuality.
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintIntoRect):
        Pass 0 (null) for the layer parameter in this case.

2010-11-18  Chris Rogers  <crogers@google.com>

        Reviewed by Dimitri Glazkov.

        Add loadPlatformAudioResource() and decodeAudioFileData() to ChromiumBridge
        https://bugs.webkit.org/show_bug.cgi?id=49557

        No new tests since audio API is not yet implemented.

        * platform/chromium/ChromiumBridge.h:

2010-11-17  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r72228.
        http://trac.webkit.org/changeset/72228
        https://bugs.webkit.org/show_bug.cgi?id=49712

        Caused many >10 regressions on Win and Linux gpu layout test
        runs. (Requested by dave_levin on #webkit).

        * html/canvas/WebGLFramebuffer.cpp:
        (WebCore::WebGLFramebuffer::onAccess):
        (WebCore::WebGLFramebuffer::initializeRenderbuffers):
        * html/canvas/WebGLFramebuffer.h:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::clear):
        (WebCore::WebGLRenderingContext::copyTexImage2D):
        (WebCore::WebGLRenderingContext::copyTexSubImage2D):
        (WebCore::WebGLRenderingContext::drawArrays):
        (WebCore::WebGLRenderingContext::drawElements):
        (WebCore::WebGLRenderingContext::readPixels):
        (WebCore::WebGLRenderingContext::texImage2DBase):

2010-11-17  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r72243.
        http://trac.webkit.org/changeset/72243
        https://bugs.webkit.org/show_bug.cgi?id=49710

        Seemed to cause a large set of Chromium layout test to start
        failing. (Requested by dave_levin on #webkit).

        * bindings/v8/V8NPUtils.cpp:
        (WebCore::convertV8ObjectToNPVariant):

2010-11-17  Adam Roben  <aroben@apple.com>

        Fix Acid3 in Safari for Windows

        Reviewed by Dave Hyatt.

        * platform/graphics/win/SimpleFontDataWin.cpp:
        (WebCore::SimpleFontData::initGDIFont): Initialize all our metrics to 0
        if we have a font size of 0.

2010-11-17  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Converge means of querying a parent node into one way, which is Node::parentNode.
        https://bugs.webkit.org/show_bug.cgi?id=49686

        No change in behavior, so no new tests.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::renderListItemContainerForNode): Changed to use parentNode.
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::mouseButtonListener): Ditto.
        (WebCore::siblingWithAriaRole): Ditto.
        (WebCore::AccessibilityRenderObject::getDocumentLinks): Ditto.
        (WebCore::AccessibilityRenderObject::accessibilityImageMapHitTest): Ditto.
        * accessibility/mac/AccessibilityObjectWrapper.mm: Ditto.
        (blockquoteLevel): Ditto.
        * bindings/v8/V8GCController.cpp:
        (WebCore::ObjectGrouperVisitor::visitDOMWrapper): Ditto.
        * dom/ContainerNode.cpp: Ditto.
        (WebCore::ContainerNode::insertBefore): Ditto.
        (WebCore::ContainerNode::insertBeforeCommon): Ditto.
        (WebCore::ContainerNode::replaceChild): Ditto.
        (WebCore::ContainerNode::removeChild): Ditto.
        (WebCore::ContainerNode::appendChild): Ditto.
        (WebCore::ContainerNode::parserAddChild): Ditto.
        * dom/DocumentType.cpp:
        (WebCore::DocumentType::insertedIntoDocument): Ditto.
        * dom/Element.cpp:
        (WebCore::Element::computeInheritedLanguage): Ditto.
        * dom/MouseRelatedEvent.cpp:
        (WebCore::MouseRelatedEvent::receivedTarget): Ditto.
        * dom/Position.cpp:
        (WebCore::Position::isCandidate): Changed to use parentNode.
        * dom/PositionIterator.cpp:
        (WebCore::PositionIterator::isCandidate): Ditto.
        * editing/AppendNodeCommand.cpp:
        (WebCore::AppendNodeCommand::AppendNodeCommand): Ditto.
        * editing/ApplyStyleCommand.cpp:
        (WebCore::dummySpanAncestorForNode): Ditto.
        (WebCore::ApplyStyleCommand::splitAncestorsWithUnicodeBidi): Ditto.
        (WebCore::ApplyStyleCommand::removeEmbeddingUpToEnclosingBlock): Ditto.
        (WebCore::highestEmbeddingAncestor): Ditto.
        (WebCore::ApplyStyleCommand::splitTextElementAtEnd): Ditto.
        (WebCore::ApplyStyleCommand::mergeStartWithPreviousIfIdentical): Ditto.
        (WebCore::ApplyStyleCommand::mergeEndWithNextIfIdentical): Ditto.
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::splitTreeToNode): Ditto.
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::updatePositionForNodeRemoval): Ditto.
        * editing/Editor.cpp:
        (WebCore::Editor::textDirectionForSelection): Ditto.
        * editing/MergeIdenticalElementsCommand.cpp:
        (WebCore::MergeIdenticalElementsCommand::doUnapply): Ditto.
        * editing/htmlediting.cpp:
        (WebCore::isEmptyTableCell): Ditto.
        * editing/markup.cpp:
        (WebCore::StyledMarkupAccumulator::serializeNodes): Ditto.
        * editing/visible_units.cpp:
        (WebCore::previousLinePosition): Ditto.
        (WebCore::nextLinePosition): Ditto.
        * html/HTMLAreaElement.cpp:
        (WebCore::HTMLAreaElement::imageElement): Ditto.
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::setOuterHTML): Ditto.
        (WebCore::HTMLElement::insertAdjacent): Ditto.
        (WebCore::HTMLElement::supportsFocus): Ditto.
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::insertedIntoDocument): Ditto.
        (WebCore::HTMLEmbedElement::attributeChanged): Ditto.
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::insertRow): Ditto.
        * html/HTMLTableRowsCollection.cpp: Ditto.
        (WebCore::isInHead): Ditto.
        (WebCore::isInBody): Ditto.
        (WebCore::isInFoot): Ditto.
        (WebCore::HTMLTableRowsCollection::rowAfter): Ditto.
        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::addRange): Ditto.
        * html/MediaDocument.cpp:
        (WebCore::MediaDocument::replaceMediaElementTimerFired): Ditto.
        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::attach): Ditto.
        (WebCore::HTMLConstructionSite::findFosterSite): Ditto.
        * html/parser/HTMLTreeBuilder.cpp:
        * page/FocusController.cpp:
        (WebCore::FocusController::findFocusableNodeInDirection): Ditto.
        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlElement::rendererIsNeeded): Ditto.
        (WebCore::MediaControlElement::attach): Ditto.
        (WebCore::MediaControlElement::updateStyle): Ditto.
        (WebCore::MediaControlInputElement::rendererIsNeeded): Ditto.
        (WebCore::MediaControlInputElement::attach): Ditto.
        (WebCore::MediaControlInputElement::updateStyle): Ditto.
        * rendering/RenderSVGGradientStop.cpp:
        (WebCore::RenderSVGGradientStop::gradientElement): Ditto.
        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::createRenderer): Ditto.
        (WebCore::SVGAElement::childShouldCreateRenderer): Ditto.
        * svg/SVGFELightElement.cpp:
        (WebCore::SVGFELightElement::svgAttributeChanged): Ditto.
        (WebCore::SVGFELightElement::childrenChanged): Ditto.
        * svg/SVGFEMergeNodeElement.cpp:
        (WebCore::SVGFEMergeNodeElement::svgAttributeChanged): Ditto.
        * svg/SVGLength.cpp:
        (WebCore::SVGLength::determineViewport): Ditto.
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::updateRelativeLengthsInformation): Ditto.
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::removeDisallowedElementsFromSubtree): Ditto.
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::insertedIntoDocument): Ditto.
        * xml/XPathNodeSet.cpp:
        (WebCore::XPath::NodeSet::sort): Ditto.
        * xml/XPathStep.cpp:
        (WebCore::XPath::Step::nodesInAxis): Ditto.
        * xml/XSLTProcessorLibxslt.cpp:
        (WebCore::xsltStylesheetPointer): Ditto.

2010-11-17  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Andreas Kling.

        ScrollView: Don't translate by scrollX/scrollY or clip when paintsEntireContents()

        This makes paint() with paintEntireContents() do exactly what it's supposed to:
        paint from 0,0 to contentsSize().

        The clipping was a no-op anyway since visibleContentRect() will return the whole
        rect in paintsEntireContents() mode.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::paint):

2010-11-17  Kenneth Rohde Christansen  <kenneth@webkit.org>

        Reviewed by Andreas Kling.

        ScrollView: Update the actualVisibleContentRect after delegating a scroll.

        This lets us avoid updating the actualVisibleContentRect from the client
        after each scroll. We had to do this synchronously for WebKit2 to support
        programmatic "animated scrolling" from JS.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::setScrollPosition):

2010-11-17  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        ScrollView: Decouple actualVisibleContentRect from visibleContentRect

        Added actualVisibleContentRect() which will return the override provided
        by setActualVisibleContentRect() or fall back to visibleContentRect()
        if no override has been set.

        This is similar to what the iPhone does.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::visibleContentRect):
        * platform/ScrollView.h:
        (WebCore::ScrollView::actualVisibleContentRect):
        (WebCore::ScrollView::setActualVisibleContentRect): IntRect -> const IntRect&

2010-11-17  Tony Chang  <tony@chromium.org>

        Reviewed by Adam Barth.

        [chromium] fix get-int-identifier-special-values.html using TestNetscapePlugIn
        https://bugs.webkit.org/show_bug.cgi?id=49036

        No new tests: Covered by plugins/npruntime/get-int-identifier-special-values.html

        In http://codereview.chromium.org/11574, the forked chromium test
        plugin changed how it testGetIntIdentifier to work around a change
        caused by a silverlight specific plugin fix:
        http://codereview.chromium.org/11569/diff/1/2

        It's not clear to me that this change is needed anymore since
        silverlight has had multiple releases, testing without this patch
        works on a test windows build, and safari win seems to run silverlight
        without this either.  Since there's no test for this behavior, I'm
        rolling it out so we can match the upstream test.

        * bindings/v8/V8NPUtils.cpp:
        (WebCore::convertV8ObjectToNPVariant):

2010-11-17  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        ScrollView: Let visibleContentRect() return the contentsSize() if paintsEntireContents()

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::visibleContentRect):

2010-11-17  James Simonsen  <simonjam@chromium.org>

        Reviewed by Tony Chang.

        [chromium] Fix negative letter spacing in complex text on linux
        https://bugs.webkit.org/show_bug.cgi?id=49563

        Test: fast/text/atsui-negative-spacing-features.html

        * platform/graphics/chromium/FontLinux.cpp: Make spacing signed.

2010-11-17  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        ScrollView: Avoid unnecessary work in setScrollPosition() when scrolling is delegated.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::setScrollPosition): If delegatesScrolling(), we never use the
        newScrollPosition, so move that calculation below the delegation path.

2010-11-17  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

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

        Fonts with no vertical metrics should synthesize baselines when they appear
        on lines that do use fonts with vertical metrics.  Basically we want to make
        sure that English text behaves like vertical-align:middle, i.e., its baseline
        should be treated as though it cuts through the middle of the ascent+descent.
        
        The way this works is that each line in the line box tree is labeled as having
        a baseline type that is either ideographic or alphabetic for the purposes of
        vertical alignment.  A line becomes ideographic if any font with vertical tables
        is either explicitly specified as the primary font or in any of the used fonts
        in the text on that line.
        
        This baselineType is passed down to computeLogicalBoxHeights and placeBoxesInBlockDirection,
        and passed to the ascent and descent methods of the fonts that are examined.
        The underlying Font code selects an appropriate baseline given the type passed in.
        
        This patch also rewrites vertical alignment to lop 4 bytes off all RenderInlines and
        to instead carry around the cached vertical positions for RenderInlines in a new
        VerticalPositionCache object.  This cache only lives for a single layout
        operation, but it does cache information across all the lines built and placed during the
        layout.
        
        This matches the old behavior, since every call to layoutInlineChildren invalidated
        all of the vertical positions in all of the RenderInlines anyway.
        
        The VerticalPositionCache consists of two HashMaps, and it caches vertical alignment
        positions for both alphabetic and ideographic baseline types.
        
        The vertical-align computation has now been moved out of RenderBoxModelObject and
        RenderInline and just placed right into verticalPositionForBox in InlineFlowBox.
        This function has been changed to no longer be recursive when checking parents,
        and it now relies on the fact that the parent vertical alignment computation result
        has already been stored in the logicalTop() of that parent's line box.  By checking
        the line box logicalTop() value instead of recurring, the performance of first lines
        now significantly improves to no longer have O(n^2) behavior in the depth of the line
        box tree on the first line.
        
        All of the baselinePosition functions on the various RenderObjects have been amended
        to take a FontBaseline as the first argument.  This patch does not attempt to fix up
        MathML or form controls yet and just hardcodes AlphabeticBaselines for those renderers.
        
        The RenderTableCell baselinePosition virtual method has been made non-virtual and had
        all arguments removed, since it actually had no real connection with the rest of the 
        baseline positioning system.  Cell baseline positioning works by calling firstLineBoxBaseline,
        and that method has been patched to use the cached baselineType for the first line box
        when computing the baseline of that line.
         
        Added fast/blockflow/vertical-baseline-alignment.html and fast/blockflow/vertical-align-table-baseline.html.

        * WebCore.xcodeproj/project.pbxproj:
        * mathml/RenderMathMLFraction.cpp:
        (WebCore::RenderMathMLFraction::baselinePosition):
        * mathml/RenderMathMLFraction.h:
        * mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::baselinePosition):
        * mathml/RenderMathMLOperator.h:
        * mathml/RenderMathMLRow.cpp:
        (WebCore::RenderMathMLRow::baselinePosition):
        * mathml/RenderMathMLRow.h:
        * mathml/RenderMathMLSubSup.cpp:
        (WebCore::RenderMathMLSubSup::baselinePosition):
        * mathml/RenderMathMLSubSup.h:
        * mathml/RenderMathMLUnderOver.cpp:
        (WebCore::RenderMathMLUnderOver::layout):
        (WebCore::RenderMathMLUnderOver::baselinePosition):
        * mathml/RenderMathMLUnderOver.h:
        * platform/graphics/SimpleFontData.h:
        * rendering/InlineBox.h:
        (WebCore::InlineBox::baselinePosition):
        * rendering/InlineFlowBox.cpp:
        (WebCore::verticalPositionForBox):
        (WebCore::InlineFlowBox::computeLogicalBoxHeights):
        (WebCore::InlineFlowBox::placeBoxesInBlockDirection):
        * rendering/InlineFlowBox.h:
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::baselinePosition):
        * rendering/InlineTextBox.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::baselinePosition):
        (WebCore::RenderBlock::firstLineBoxBaseline):
        (WebCore::RenderBlock::lastLineBoxBaseline):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::computeBlockDirectionPositionsForLine):
        (WebCore::RenderBlock::layoutInlineChildren):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::baselinePosition):
        * rendering/RenderBox.h:
        * rendering/RenderBoxModelObject.cpp:
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::paintObject):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::RenderInline):
        (WebCore::RenderInline::baselinePosition):
        * rendering/RenderInline.h:
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::baselinePosition):
        * rendering/RenderListBox.h:
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::baselinePosition):
        * rendering/RenderListMarker.h:
        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::baselinePosition):
        * rendering/RenderSlider.h:
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::baselinePosition):
        * rendering/RenderTableCell.h:
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::baselinePosition):
        * rendering/RenderTextControlMultiLine.h:
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::alignBoxesInBlockDirection):
        * rendering/RootInlineBox.h:
        (WebCore::RootInlineBox::baselinePosition):
        * rendering/VerticalPositionCache.h: Added.
        (WebCore::VerticalPositionCache::VerticalPositionCache):
        (WebCore::VerticalPositionCache::get):
        (WebCore::VerticalPositionCache::set):
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::calculateBoundaries):

2010-11-17  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add stubbed out ScrollAnimator for the Mac
        https://bugs.webkit.org/show_bug.cgi?id=49678

        * WebCore.xcodeproj/project.pbxproj:
        Add ScrollAnimator.h/cpp.

        * platform/mac/ScrollAnimatorMac.cpp: Added.
        (WebCore::ScrollAnimator::create):
        (WebCore::ScrollAnimatorMac::ScrollAnimatorMac):
        (WebCore::ScrollAnimatorMac::~ScrollAnimatorMac):
        (WebCore::ScrollAnimatorMac::scroll):
        (WebCore::ScrollAnimatorMac::setScrollPositionAndStopAnimation):
        * platform/mac/ScrollAnimatorMac.h: Added.
        ScrollAnimatorMac just calls through to the base class for now.

2010-11-17  Cris Neckar  <cdn@chromium.org>

        Reviewed by Adam Barth.

        Modified codepath for object fallback content which has failed to load.
        Refactored CachedResource error handling to use more granular statuses instead of a boolean value.
        https://bugs.webkit.org/show_bug.cgi?id=46921

        Test: fast/html/object-image-nested-fallback.html

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::renderFallbackContent):
        * loader/cache/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::error):
        * loader/cache/CachedCSSStyleSheet.h:
        * loader/cache/CachedFont.cpp:
        (WebCore::CachedFont::ensureCustomFontData):
        (WebCore::CachedFont::error):
        * loader/cache/CachedFont.h:
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::data):
        (WebCore::CachedImage::error):
        * loader/cache/CachedImage.h:
        * loader/cache/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource):
        (WebCore::CachedResource::canUseCacheValidator):
        (WebCore::CachedResource::mustRevalidate):
        * loader/cache/CachedResource.h:
        (WebCore::CachedResource::error):
        (WebCore::CachedResource::httpStatusCodeError):
        (WebCore::CachedResource::errorOccurred):
        * loader/cache/CachedScript.cpp:
        (WebCore::CachedScript::error):
        * loader/cache/CachedScript.h:
        * loader/cache/CachedXSLStyleSheet.cpp:
        (WebCore::CachedXSLStyleSheet::error):
        * loader/cache/CachedXSLStyleSheet.h:
        * loader/loader.cpp:
        (WebCore::Loader::load):
        (WebCore::Loader::didFinishLoading):
        (WebCore::Loader::didFail):
        (WebCore::Loader::didReceiveData):

2010-11-16  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        WebGLRenderingContext needs to zero textures and renderbuffers
        https://bugs.webkit.org/show_bug.cgi?id=49355

        Test: fast/canvas/webgl/uninitialized-test.html

        * html/canvas/WebGLFramebuffer.cpp:
        (WebCore::WebGLFramebuffer::onAccess): Use a parameter to decide if renderbuffer initialization is needed.
        (WebCore::WebGLFramebuffer::initializeRenderbuffers): Don't return false if color buffer doesn't exist.
        * html/canvas/WebGLFramebuffer.h: Modify onAccess function signature.
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::clear): Call onAccess with an added parameter.
        (WebCore::WebGLRenderingContext::copyTexImage2D): Ditto.
        (WebCore::WebGLRenderingContext::copyTexSubImage2D): Ditto.
        (WebCore::WebGLRenderingContext::drawArrays): Ditto.
        (WebCore::WebGLRenderingContext::drawElements): Ditto.
        (WebCore::WebGLRenderingContext::readPixels): Ditto.
        (WebCore::WebGLRenderingContext::texImage2DBase): Create buffer data of 0s if input is null to initialize textures.

2010-11-17  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        Merge ScriptElement and ScriptElementData
        https://bugs.webkit.org/show_bug.cgi?id=49647

        Merged two classes.

        * dom/AsyncScriptRunner.cpp:
        (WebCore::AsyncScriptRunner::executeScriptSoon): Takes ScriptElement* instead of ScriptElementData*.
        (WebCore::AsyncScriptRunner::timerFired): Uses ScriptElement* instead of ScriptElementData*.
        * dom/AsyncScriptRunner.h:
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::ScriptElement): Merged with ScriptElementData::ScriptElementData.
        (WebCore::ScriptElement::~ScriptElement): Merged with ScriptElementData::~ScriptElementData.
        (WebCore::ScriptElement::insertedIntoDocument): Calls createdByParser, isAsynchronous, requestScript, and scriptContent.
        (WebCore::ScriptElement::removedFromDocument): Calls stopLoadRequest.
        (WebCore::ScriptElement::childrenChanged): Calls createdByParser and accesses m_element.
        (WebCore::ScriptElement::finishParsingChildren): Calls scriptContent.
        (WebCore::ScriptElement::handleSourceAttribute): Calls ignoresLoadRequest and requestScript.
        (WebCore::ScriptElement::requestScript): Moved from ScriptElementData; calls dispatchErrorEvent.
        (WebCore::ScriptElement::evaluateScript): Moved from ScriptElementData.
        (WebCore::ScriptElement::executeScript): Ditto.
        (WebCore::ScriptElement::stopLoadRequest): Ditto.
        (WebCore::ScriptElement::execute): Moved from ScriptElementData; calls dispatchErrorEvent and dispatchLoadEvent.
        (WebCore::ScriptElement::notifyFinished): Moved from ScriptElementData.
        (WebCore::ScriptElement::ignoresLoadRequest): Ditto.
        (WebCore::ScriptElement::shouldExecuteAsJavaScript): Moved from ScriptElementData; calls typeAttributeValue, languageAttributeValue,
        forAttributeValue, and eventAttributeValue.
        (WebCore::ScriptElement::scriptCharset): Moved from ScriptElementData.
        (WebCore::ScriptElement::scriptContent): Ditto.
        (WebCore::ScriptElement::isAsynchronous): Moved from ScriptElementData; calls sourceAttributeValue and asyncAttributeValue.
        (WebCore::ScriptElement::isDeferred): Moved from ScriptElementData; calls sourceAttributeValue, asyncAttributeValue,
        and deferAttributeValue.
        * dom/ScriptElement.h:
        (WebCore::ScriptElement::element):
        (WebCore::ScriptElement::haveFiredLoadEvent):
        (WebCore::ScriptElement::setHaveFiredLoadEvent):
        (WebCore::ScriptElement::createdByParser):
        (WebCore::ScriptElement::isEvaluated):

2010-11-17  Tenghui Zhu  <ztenghui@google.com>

        Reviewed by Jeremy Orlow.

        profileCallback and profileEndCallback  should be guarded with ENABLE_JAVASCRIPT_DEBUGGER
        https://bugs.webkit.org/show_bug.cgi?id=49623

        No new tests. Just a compiling error fix.

        * bindings/v8/custom/V8ConsoleCustom.cpp:
          Add the guard ENABLE_JAVA_SCRIPT_DEBUGGER to profileCallback and profileEndCallback

2010-11-17  John Knottenbelt  <jknotten@chromium.org>

        Reviewed by Jeremy Orlow.

        Introduce GeoNotifierVector typedef for increased readability
        https://bugs.webkit.org/show_bug.cgi?id=49597

        * page/Geolocation.cpp:
        (WebCore::Geolocation::Watchers::getNotifiersVector):
        (WebCore::Geolocation::sendError):
        (WebCore::Geolocation::sendPosition):
        (WebCore::Geolocation::stopTimer):
        (WebCore::Geolocation::stopTimersForOneShots):
        (WebCore::Geolocation::stopTimersForWatchers):
        (WebCore::Geolocation::cancelRequests):
        (WebCore::Geolocation::cancelAllRequests):
        (WebCore::Geolocation::handleError):
        (WebCore::Geolocation::makeSuccessCallbacks):
        * page/Geolocation.h:

2010-11-17  John Knottenbelt  <jknotten@chromium.org>

        Reviewed by Jeremy Orlow.

        Convert correctly between GeolocationPosition and Geoposition
        timestamp formats.
        https://bugs.webkit.org/show_bug.cgi?id=48518

        Test: fast/dom/Geolocation/timestamp.html

        * page/Geolocation.cpp:
        (WebCore::createGeoposition):

2010-11-17  Chang Shu  <chang.shu@nokia.com>

        Reviewed by Antonio Gomes.

        [Mac] Suppress single select popup menu when spatial navigation is enabled on Mac.
        This makes spatial navigation work properly for single select box.

        Test: fast/events/spatial-navigation/snav-single-select.html

        * dom/SelectElement.cpp:
        (WebCore::nextValidIndex):
        (WebCore::SelectElement::menuListDefaultEventHandler):

2010-11-17  Satish Sampath  <satish@chromium.org>

        Reviewed by Jeremy Orlow.

        Clear the speech input mock explicitly before each test.
        https://bugs.webkit.org/show_bug.cgi?id=49660

        * platform/mock/SpeechInputClientMock.cpp:
        (WebCore::SpeechInputClientMock::clearResults): Added clearResults method.
        * platform/mock/SpeechInputClientMock.h:

2010-11-17  Alexander Pavlov  <apavlov@chromium.org>

        [Chromium] Unreviewed, fix Chromium-Mac build from r72189.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::getDoubleValue):

2010-11-17  Hans Wennborg  <hans@chromium.org>

        Reviewed by Jeremy Orlow.

        IndexedDB: IDBKey::whereSyntax should impose conditions on all columns
        https://bugs.webkit.org/show_bug.cgi?id=49601

        The WHERE clause should specifiy a condition for each key column to
        make sure that the ObjectStoreData_composit index can be used when
        querying the object store based on key. Not using the index causes
        severe performance degradation for common IDB operations.

        * storage/IDBKey.cpp:
        (WebCore::IDBKey::whereSyntax):

2010-11-17  Eric Uhrhane  <ericu@chromium.org>

        Reviewed by David Levin.

        [Chromium] implementation of async FileWriter for workers
        https://bugs.webkit.org/show_bug.cgi?id=47681

        Tests are in a separate changelist.

        * platform/CrossThreadCopier.h: Changed CrossThreadCopier[Base] to support PassRefPtrs

2010-11-17  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        [gtk] r69119 modified just the gtk2 version of the
        scrolled_window_paint function but not the gtk3 version
        https://bugs.webkit.org/show_bug.cgi?id=49585

        Use gtk_paint_shadow the same as the actual code from GTK+. Avoid
        using state and use the same values we are using for gtk2 in the
        paint function.

        * platform/gtk/ScrollbarThemeGtk.cpp:
        (WebCore::ScrollbarThemeGtk::paintButton): Initialized the
        depressed attribute of the state variable to avoid using it
        without initialization.
        * platform/gtk/gtk3drawing.c:
        (moz_gtk_scrolled_window_paint):

2010-11-16  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Simon Fraser.

        CSSPrimitiveValue.getFloatValue does not convert sizes
        https://bugs.webkit.org/show_bug.cgi?id=35770

        Implemented all same-category unit conversions (length, angle, time, frequency) and retained
        absolute-relative (cm, mm, in, pt, pc) length conversions intact.
        Illegal unit conversion attempts will throw an INVALID_ACCESS_ERR DOMException.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::unitCategory):
        (WebCore::conversionToCanonicalUnitsScaleFactor):
        (WebCore::CSSPrimitiveValue::getDoubleValue):
        (WebCore::CSSPrimitiveValue::canonicalUnitTypeForCategory):
        (WebCore::CSSPrimitiveValue::getDoubleValueInternal):
        (WebCore::CSSPrimitiveValue::getIdent):
        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::getFloatValue):
        (WebCore::CSSPrimitiveValue::getIntValue):

2010-11-17  Ademar de Souza Reis Jr.  <ademar.reis@openbossa.org>

        Reviewed by Andreas Kling.

        Document::nodesFromRect() has wrong source code documentation
        https://bugs.webkit.org/show_bug.cgi?id=49610

        * dom/Document.h: fix nodesFromRect() documentation

2010-11-17  Alexis Menard  <alexis.menard@nokia.com>, Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Kenneth Christiansen, Tor Arne Vestbø.

        [Qt] Add support for use GStreamer with the Qt build

        Make it possible to use gstreamer with the Qt build via the USE_GSTREAMER macro. The
        integration is rather basic at this point, allowing for software based rendering
        only at the moment. AC integration and fullscreen playback is still missing.

        * WebCore.pro: Added a bunch of gstreamer files to the build and guard it as a
        build option with the USE_GSTREAMER macro.
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::installedMediaEngines): Don't use the generic media player registration
        when using GStreamer. These #ifdefs should be removed, but the gstreamer folks want
        to be able to build with gstreamer _and_ another backend simultaenously.
        * platform/graphics/gstreamer/ImageGStreamer.h:
        * platform/graphics/gstreamer/ImageGStreamerQt.cpp: Added.
        (ImageGStreamer::createImage):
        (ImageGStreamer::ImageGStreamer):
        (ImageGStreamer::~ImageGStreamer):
        * platform/graphics/gstreamer/PlatformVideoWindowPrivate.h: Added.
        * platform/graphics/gstreamer/PlatformVideoWindowQt.cpp: Added.
        (FullScreenVideoWindow::FullScreenVideoWindow):
        (FullScreenVideoWindow::keyPressEvent):
        (FullScreenVideoWindow::event):
        (PlatformVideoWindow::PlatformVideoWindow):
        (PlatformVideoWindow::~PlatformVideoWindow):
        (PlatformVideoWindow::prepareForOverlay):

2010-11-17  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [REGRESSION] editing disabled styles breaks style bodies.
        https://bugs.webkit.org/show_bug.cgi?id=49602

        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyle::setPropertyText):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertyTreeElement.prototype.get name):
        (WebInspector.StylePropertyTreeElement.prototype.get priority):
        (WebInspector.StylePropertyTreeElement.prototype.get value):

2010-11-16  Adam Roben  <aroben@apple.com>

        Move QTMovieWin's settings into a vsprops file

        Fixes <http://webkit.org/b/49644> QTMovieWin should use a vsprops file

        Reviewed by Steve Falkenburg.

        * WebCore.vcproj/QTMovieWin.vcproj:
        * WebCore.vcproj/QTMovieWinCommon.vsprops: Added.

2010-11-16  Andy Estes  <aestes@apple.com>

        Reviewed by Dave Hyatt.

        WebKit mishandles line boxes where the content height exceeds the
        specified line-height.
        https://bugs.webkit.org/show_bug.cgi?id=49410

        If a line height is explicitly specified on a text box and fallback
        fonts are in use, only the primary font should be considered when
        computing the box's ascent and descent. This prevents the inline box
        from being sized larger than the specified line height.

        This patch also fixes a math error when computing a used font's descent
        in the case where line height isn't explicitly set. This change results
        in a number of layout tests needing re-baselining.

        Test: fast/css/line-height-determined-by-primary-font.html

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::computeLogicalBoxHeights):

2010-11-15  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        ScriptElementData should be a private member of ScriptElement
        https://bugs.webkit.org/show_bug.cgi?id=49578

        Privatized m_data of ScriptElement. Added haveFiredLoadEvent, setHaveFiredLoadEvent, createdByParser,
        and isEvaluated to ScriptElement to proxy calls from HTMLScriptElement and SVGScriptElement to ScriptElementData.

        No tests are added since this is a cleanup.

        * dom/ScriptElement.h:
        (WebCore::ScriptElement::haveFiredLoadEvent): Added.
        (WebCore::ScriptElement::setHaveFiredLoadEvent): Added.
        (WebCore::ScriptElement::createdByParser): Added.
        (WebCore::ScriptElement::isEvaluated): Added.
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::dispatchLoadEvent): Calls haveFiredLoadEvent and setHaveFiredLoadEvent.
        (WebCore::HTMLScriptElement::cloneElementWithoutAttributesAndChildren): Calls isEvaluated.
        * html/HTMLScriptElement.h:
        (WebCore::HTMLScriptElement::text): Calls scriptContent.
        (WebCore::HTMLScriptElement::haveFiredLoadEvent): Calls haveFiredLoadEvent.
        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::svgAttributeChanged): Calls haveFiredLoadEvent and createdByParser.
        (WebCore::SVGScriptElement::insertedIntoDocument): Calls createdByParser.
        (WebCore::SVGScriptElement::finishParsingChildren): Calls setHaveFiredLoadEvent.
        (WebCore::SVGScriptElement::haveLoadedRequiredResources): Ditto.
        (WebCore::SVGScriptElement::dispatchLoadEvent): Calls haveFiredLoadEvent.
        (WebCore::SVGScriptElement::cloneElementWithoutAttributesAndChildren): Calls createdByParser,
        haveFiredLoadEvent, and setHaveFiredLoadEvent.

2010-11-16  Antti Koivisto  <antti@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=49320
        Minor ResourceLoadScheduler cleanups

        * loader/ResourceLoadScheduler.cpp:
        (WebCore::ResourceLoadScheduler::scheduleLoad):
        (WebCore::ResourceLoadScheduler::servePendingRequests):
        (WebCore::ResourceLoadScheduler::HostInformation::~HostInformation):
        (WebCore::ResourceLoadScheduler::HostInformation::remove):
        (WebCore::ResourceLoadScheduler::HostInformation::hasRequests):
        * loader/ResourceLoadScheduler.h:

2010-11-16  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

        Add a baselineType member to RootInlineBox that caches whether the default baseline behavior for that
        line should be ideographic or alphabetic.  Add a requiresIdeographicsBaseline recursive function to
        InlineFlowBox that scans for the use of any vertical fonts.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::requiresIdeographicBaseline):
        * rendering/InlineFlowBox.h:
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::RootInlineBox):
        (WebCore::RootInlineBox::alignBoxesInBlockDirection):
        * rendering/RootInlineBox.h:
        (WebCore::RootInlineBox::baselineType):

2010-11-16  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

        Add FontBaseline.h and make ascent and descent take a baseline parameter so that both an
        alphabetic and ideographic baseline can be requested.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/Font.h:
        (WebCore::Font::ascent):
        (WebCore::Font::descent):
        * platform/graphics/FontBaseline.h: Added.
        * platform/graphics/SimpleFontData.h:
        (WebCore::SimpleFontData::ascent):
        (WebCore::SimpleFontData::descent):
        (WebCore::SimpleFontData::height):

2010-11-16  Antti Koivisto  <koivisto@iki.fi>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=31223
        Make primitive values immutable.
        
        Make CSSPrimitiveValue setFloatValue and setStringValue always throw NO_MODIFICATION_ALLOWED exception.
    
        Reasoning:
        - these setters never worked correctly, style was not invalidated so changing values would have no effect on rendering
        - computed style is immutable in all cases, and it wasn't
        - no other engine seems to support mutable primitives, as a result there is no content using these APIs
        - mutable primitive values are pointless, the usual way to change the value of a propertly is to replace it with a new value
        - allowing mutation of primitive values makes optimizations harder

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::setFloatValue):
        (WebCore::CSSPrimitiveValue::setStringValue):

2010-11-16  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Adam Roben.

        Disable LTCG for Windows Release builds. Add new Release_LTCG configuration.
        https://bugs.webkit.org/show_bug.cgi?id=49632

        * WebCore.vcproj/QTMovieWin.vcproj:
        * WebCore.vcproj/WebCore.make:
        * WebCore.vcproj/WebCore.sln:
        * WebCore.vcproj/WebCore.vcproj:

2010-11-16  Anders Carlsson  <andersca@apple.com>

        Reviewed by John Sullivan.

        Set the original URL for downloads
        https://bugs.webkit.org/show_bug.cgi?id=49628

        Export symbols needed by WebKit2.

        * WebCore.exp.in:

2010-11-16  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=11004
        
        font-size:0 is ignored.  Remove the minimum font size of 1 in CSSStyleSelector.
        Change the pref value for minimum font size from 1 to 0.  Make sure to never use the NSFont's size,
        since it doesn't honor a size of 0.  Instead pass the size in to the FontPlatformData(NSFont*) version
        of the constructor rather than using [NSFont pointSize].

        https://bugs.webkit.org/show_bug.cgi?id=49582
        
        Negative leading is not handled correctly.  There are two bugs here.  The first is that
        maxAscent and maxDescent can be negative, so we need a notion of whether or not we have
        set them before so that we can allow them to be < 0.
        
        The second issue is that we should understand where fonts will end up relative to
        our baseline (excluding line height), and only allow those boxes to impact ascent and
        descent if the actual font box (without factoring in line height) is above or below the
        root line box baseline.

        Added fast/css/negative-leading.html
        
        These two bug fixes have to land together to keep the Acid 3 test rendering correctly.

        * WebCore.exp.in:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::getComputedSizeFromSpecifiedSize):
        * platform/graphics/cocoa/FontPlatformData.h:
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::FontPlatformData::FontPlatformData):
        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::FontCache::getFontDataForCharacters):
        (WebCore::FontCache::createFontPlatformData):
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::smallCapsFontData):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::computeLogicalBoxHeights):
        * rendering/InlineFlowBox.h:
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::alignBoxesInBlockDirection):

2010-11-16  Darin Adler  <darin@apple.com>

        https://bugs.webkit.org/show_bug.cgi?id=49611
        REGRESSION (r72115): 5 layout tests are broken

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadFrameRequest): Roll change from
        https://bugs.webkit.org/show_bug.cgi?id=48603 out. I'll roll
        it back in after fixing the failing tests.

2010-11-16  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/8672000> REGRESSION (r72040): Error image with alt text can cause style to be frozen in a subtree
        https://bugs.webkit.org/show_bug.cgi?id=49579

        r72040 introduced a call to setNeedsStyleRecalc() from RenderImage::imageChanged(). When imageChanged()
        got called beneath recalcStyle() on some ancestor element, the result was that the ancestor’s
        childNeedsStyleRecalc flag got cleared, but its descendants all the way down to the image did not.
        Thereafter, setNeedsStyleRecalc() would fail to propagate from that subtree up to the root. The fix
        is to avoid the newly-added setNeedsStyleRecalc() in most cases, including during reclacStyle(), and
        just keep it for when it is needed.

        Tests: fast/block/float/015.html
               fast/images/style-access-during-imageChanged-style-freeze.html

        * dom/Document.cpp:
        (WebCore::Document::isPendingStyleRecalc): Added.
        * dom/Document.h:
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::imageChanged): Only defer intrinsic size compoutation if a style recalc
        is coming (indicating that current style() is stale).

2010-11-11  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        Implement UNPACK_COLORSPACE_CONVERSION_WEBGL
        https://bugs.webkit.org/show_bug.cgi?id=47196

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::texImage2DImpl): Apply UNPACK_COLORSPACE_CONVERSION settings to image uploading.
        (WebCore::WebGLRenderingContext::texSubImage2DImpl): Ditto.
        * platform/graphics/GraphicsContext3D.cpp:
        (WebCore::GraphicsContext3D::extractImageData): Ditto.
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::ImageSource): Add ignoreGammaColorProfile parameter.
        (WebCore::ImageSource::setData): Ditto.
        * platform/graphics/ImageSource.h:
        * platform/graphics/cg/GraphicsContext3DCG.cpp:
        (WebCore::GraphicsContext3D::getImageData): Ditto.
        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::ImageSource): Ditto.
        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3D::getImageData): Ditto.
        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoder::create): Ditto.
        (WebCore::ImageDecoderQt::ImageDecoderQt): Ditto.
        * platform/graphics/qt/ImageDecoderQt.h:
        * platform/graphics/skia/GraphicsContext3DSkia.cpp:
        (WebCore::GraphicsContext3D::getImageData): Ditto.
        * platform/image-decoders/ImageDecoder.cpp:
        (WebCore::ImageDecoder::create): Ditto.
        * platform/image-decoders/ImageDecoder.h:
        (WebCore::ImageDecoder::ImageDecoder): Ditto.
        * platform/image-decoders/bmp/BMPImageDecoder.cpp:
        (WebCore::BMPImageDecoder::BMPImageDecoder):
        * platform/image-decoders/bmp/BMPImageDecoder.h:
        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::GIFImageDecoder): Ditto.
        * platform/image-decoders/gif/GIFImageDecoder.h:
        * platform/image-decoders/ico/ICOImageDecoder.cpp:
        (WebCore::ICOImageDecoder::ICOImageDecoder): Ditto.
        (WebCore::ICOImageDecoder::decodeAtIndex): Ditto.
        * platform/image-decoders/ico/ICOImageDecoder.h:
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::JPEGImageDecoder::JPEGImageDecoder): Ditto.
        * platform/image-decoders/jpeg/JPEGImageDecoder.h:
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageDecoder::PNGImageDecoder): Ditto.
        (WebCore::PNGImageDecoder::headerAvailable): Ignore gamma settings if ignoreGammaAndColorProfile is true.
        * platform/image-decoders/png/PNGImageDecoder.h:
        * platform/image-decoders/webp/WEBPImageDecoder.cpp:
        (WebCore::WEBPImageDecoder::WEBPImageDecoder): Add ignoreGammaAndColorProfile parameter.
        * platform/image-decoders/webp/WEBPImageDecoder.h:

2010-11-16  Eric Carlson  <eric.carlson@apple.com>

        Unreviewed attempt to fix GTK build after http://trac.webkit.org/changeset/72117

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::installedMediaEngines):

2010-11-12  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        Refactor GL backend flags
        https://bugs.webkit.org/show_bug.cgi?id=49460

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::WebGLRenderingContext): Call setupFlags().
        (WebCore::WebGLRenderingContext::initializeNewContext): Remove flag initialization to setupFlags().
        (WebCore::WebGLRenderingContext::setupFlags): Initialize GL flags.
        (WebCore::WebGLRenderingContext::getRenderbufferParameter): Use accessor function instead of member.
        (WebCore::WebGLRenderingContext::renderbufferStorage): Ditto.
        * html/canvas/WebGLRenderingContext.h: Use flags set in setupFlags instead of querying underlying GL implementation.
        (WebCore::WebGLRenderingContext::isGLES2Compliant):
        (WebCore::WebGLRenderingContext::isGLES2NPOTStrict):
        (WebCore::WebGLRenderingContext::isErrorGeneratedOnOutOfBoundsAccesses):
        (WebCore::WebGLRenderingContext::isResourceSafe):
        (WebCore::WebGLRenderingContext::isDepthStencilSupported):
        * platform/graphics/Extensions3D.h: Add NPOT extension.
        * platform/graphics/GraphicsContext3D.h: Remove GL flag queries at this level.
        * platform/graphics/chromium/Extensions3DChromium.h: Add resource_safe and strict_attribs extensions.
        * platform/graphics/mac/GraphicsContext3DMac.mm: Remove GL flag queries at this level.

2010-11-16  Kenneth Russell  <kbr@google.com>

        Reviewed by Dimitri Glazkov.

        WebIDL conversions from string to number and array to number should not generate TypeError
        https://bugs.webkit.org/show_bug.cgi?id=49218

        Recent SVG-related changes to the StrictTypeChecking extended attribute in
        CodeGeneratorJS.pm and CodeGeneratorV8.pm were not correct according to the Web IDL and
        ECMA-262 specifications. In particular, when an attribute or function argument is specified
        as a number type (floating-point or integer), passing in a String or object is not supposed
        to raise an exception.

        The original intent of the StrictTypeChecking extended attribute was to properly raise
        TypeError when an interface type is required, but the supplied object does not implement the
        interface type (http://dev.w3.org/2006/webapi/WebIDL/#es-interface). Historically WebKit has
        silently passed null to the C++ bindings in this case. The handling of strings in the
        original StrictTypeChecking implementation was also incorrect, raising exceptions when it
        should not.

        The semantics of StrictTypeChecking have been changed to enforce only the restrictions on
        interface types. The V8 custom bindings for WebGL have been updated to match the behavior of
        the autogenerated code.

        Test: fast/canvas/webgl/type-conversion-test.html

        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        (WebCore::getObjectParameter):
        (WebCore::V8WebGLRenderingContext::getFramebufferAttachmentParameterCallback):
        (WebCore::V8WebGLRenderingContext::getParameterCallback):
        (WebCore::V8WebGLRenderingContext::getProgramParameterCallback):
        (WebCore::V8WebGLRenderingContext::getShaderParameterCallback):
        (WebCore::vertexAttribAndUniformHelperf):

2010-11-16  Alexey Proskuryakov  <ap@apple.com>

        Windows build fix.

        * DerivedSources.cpp: Removing CSS Variables generated files.

2010-11-16  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by John Sullivan.

        getMIMEType(s)ForExtension should consult system mapping
        https://bugs.webkit.org/show_bug.cgi?id=49497

        No new tests possible.

        * platform/MIMETypeRegistry.cpp:
        (WebCore::MIMETypeRegistry::getMediaMIMETypeForExtension): Add the type returned by getMIMETypeForExtension. 
        Put the result of mediaMIMETypeMap().get() in a local variable and test instead of calling
        constains() and then get().
        (WebCore::MIMETypeRegistry::getMediaMIMETypesForExtension): Ditto.

2010-11-16  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Darin Adler.

        Rename QTKit based media engine class name
        https://bugs.webkit.org/show_bug.cgi?id=36663

        No new tests as this just renames a class and restructures existing code.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::installedMediaEngines): Use a macro with the platform media player class name to reduce the
        number of #ifs in the code.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.h: Rename MediaPlayerPrivate to MediaPlayerPrivateQTKit.
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivateQTKit::create):
        (WebCore::MediaPlayerPrivateQTKit::registerMediaEngine):
        (WebCore::MediaPlayerPrivateQTKit::MediaPlayerPrivateQTKit):
        (WebCore::MediaPlayerPrivateQTKit::~MediaPlayerPrivateQTKit):
        (WebCore::MediaPlayerPrivateQTKit::createQTMovie):
        (WebCore::MediaPlayerPrivateQTKit::createQTMovieView):
        (WebCore::MediaPlayerPrivateQTKit::detachQTMovieView):
        (WebCore::MediaPlayerPrivateQTKit::createQTVideoRenderer):
        (WebCore::MediaPlayerPrivateQTKit::destroyQTVideoRenderer):
        (WebCore::MediaPlayerPrivateQTKit::createQTMovieLayer):
        (WebCore::MediaPlayerPrivateQTKit::destroyQTMovieLayer):
        (WebCore::MediaPlayerPrivateQTKit::currentRenderingMode):
        (WebCore::MediaPlayerPrivateQTKit::preferredRenderingMode):
        (WebCore::MediaPlayerPrivateQTKit::setUpVideoRendering):
        (WebCore::MediaPlayerPrivateQTKit::tearDownVideoRendering):
        (WebCore::MediaPlayerPrivateQTKit::hasSetUpVideoRendering):
        (WebCore::MediaPlayerPrivateQTKit::createQTTime):
        (WebCore::MediaPlayerPrivateQTKit::resumeLoad):
        (WebCore::MediaPlayerPrivateQTKit::load):
        (WebCore::MediaPlayerPrivateQTKit::loadInternal):
        (WebCore::MediaPlayerPrivateQTKit::prepareToPlay):
        (WebCore::MediaPlayerPrivateQTKit::platformMedia):
        (WebCore::MediaPlayerPrivateQTKit::platformLayer):
        (WebCore::MediaPlayerPrivateQTKit::play):
        (WebCore::MediaPlayerPrivateQTKit::pause):
        (WebCore::MediaPlayerPrivateQTKit::duration):
        (WebCore::MediaPlayerPrivateQTKit::currentTime):
        (WebCore::MediaPlayerPrivateQTKit::seek):
        (WebCore::MediaPlayerPrivateQTKit::doSeek):
        (WebCore::MediaPlayerPrivateQTKit::cancelSeek):
        (WebCore::MediaPlayerPrivateQTKit::seekTimerFired):
        (WebCore::MediaPlayerPrivateQTKit::paused):
        (WebCore::MediaPlayerPrivateQTKit::seeking):
        (WebCore::MediaPlayerPrivateQTKit::naturalSize):
        (WebCore::MediaPlayerPrivateQTKit::hasVideo):
        (WebCore::MediaPlayerPrivateQTKit::hasAudio):
        (WebCore::MediaPlayerPrivateQTKit::supportsFullscreen):
        (WebCore::MediaPlayerPrivateQTKit::setVolume):
        (WebCore::MediaPlayerPrivateQTKit::hasClosedCaptions):
        (WebCore::MediaPlayerPrivateQTKit::setClosedCaptionsVisible):
        (WebCore::MediaPlayerPrivateQTKit::setRate):
        (WebCore::MediaPlayerPrivateQTKit::setPreservesPitch):
        (WebCore::MediaPlayerPrivateQTKit::buffered):
        (WebCore::MediaPlayerPrivateQTKit::maxTimeSeekable):
        (WebCore::MediaPlayerPrivateQTKit::maxTimeLoaded):
        (WebCore::MediaPlayerPrivateQTKit::bytesLoaded):
        (WebCore::MediaPlayerPrivateQTKit::totalBytes):
        (WebCore::MediaPlayerPrivateQTKit::cancelLoad):
        (WebCore::MediaPlayerPrivateQTKit::cacheMovieScale):
        (WebCore::MediaPlayerPrivateQTKit::isReadyForVideoSetup):
        (WebCore::MediaPlayerPrivateQTKit::prepareForRendering):
        (WebCore::MediaPlayerPrivateQTKit::updateStates):
        (WebCore::MediaPlayerPrivateQTKit::loadStateChanged):
        (WebCore::MediaPlayerPrivateQTKit::rateChanged):
        (WebCore::MediaPlayerPrivateQTKit::sizeChanged):
        (WebCore::MediaPlayerPrivateQTKit::timeChanged):
        (WebCore::MediaPlayerPrivateQTKit::didEnd):
        (WebCore::MediaPlayerPrivateQTKit::setSize):
        (WebCore::MediaPlayerPrivateQTKit::setVisible):
        (WebCore::MediaPlayerPrivateQTKit::hasAvailableVideoFrame):
        (WebCore::MediaPlayerPrivateQTKit::repaint):
        (WebCore::MediaPlayerPrivateQTKit::paintCurrentFrameInContext):
        (WebCore::MediaPlayerPrivateQTKit::paint):
        (WebCore::MediaPlayerPrivateQTKit::getSupportedTypes):
        (WebCore::MediaPlayerPrivateQTKit::supportsType):
        (WebCore::MediaPlayerPrivateQTKit::isAvailable):
        (WebCore::MediaPlayerPrivateQTKit::disableUnsupportedTracks):
        (WebCore::MediaPlayerPrivateQTKit::sawUnsupportedTracks):
        (WebCore::MediaPlayerPrivateQTKit::supportsAcceleratedRendering):
        (WebCore::MediaPlayerPrivateQTKit::acceleratedRenderingStateChanged):
        (WebCore::MediaPlayerPrivateQTKit::hasSingleSecurityOrigin):
        (WebCore::MediaPlayerPrivateQTKit::movieLoadType):
        (WebCore::MediaPlayerPrivateQTKit::setPreload):
        (WebCore::MediaPlayerPrivateQTKit::mediaTimeForTimeValue):
        (-[WebCoreMovieObserver initWithCallback:]):

2010-11-16  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Dave Hyatt.

        https://bugs.webkit.org/show_bug.cgi?id=49483
        Remove CSS Variable support

        * Android.derived.jscbindings.mk:
        * Android.derived.v8bindings.mk:
        * Android.mk:
        * CMakeLists.txt:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCSSRuleCustom.cpp:
        (WebCore::toJS):
        * bindings/v8/custom/V8DOMWindowCustom.cpp
        * bindings/objc/DOMCSS.mm:
        (kitClass):
        * bindings/scripts/CodeGeneratorJS.pm:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSGrammar.y:
        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::CSSMutableStyleDeclaration):
        (WebCore::CSSMutableStyleDeclaration::removeProperty):
        (WebCore::CSSMutableStyleDeclaration::addParsedProperties):
        (WebCore::CSSMutableStyleDeclaration::copy):
        * css/CSSMutableStyleDeclaration.h:
        (WebCore::CSSMutableStyleDeclaration::create):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::CSSParser):
        (WebCore::CSSParser::~CSSParser):
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::lex):
        (WebCore::CSSParser::recheckAtKeyword):
        (WebCore::CSSParser::text):
        (WebCore::CSSParser::createMediaRule):
        (WebCore::CSSParser::createKeyframesRule):
        (WebCore::CSSParser::createStyleRule):
        (WebCore::CSSParser::createFontFaceRule):
        (WebCore::CSSParser::addNamespace):
        (WebCore::CSSParser::createPageRule):
        * css/CSSParser.h:
        * css/CSSParserValues.cpp:
        (WebCore::CSSParserValueList::addValue):
        (WebCore::CSSParserValueList::deleteValueAt):
        (WebCore::CSSParserValue::createCSSValue):
        * css/CSSParserValues.h:
        (WebCore::CSSParserValueList::CSSParserValueList):
        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::cleanup):
        (WebCore::CSSPrimitiveValue::getStringValue):
        (WebCore::CSSPrimitiveValue::cssText):
        (WebCore::CSSPrimitiveValue::parserValue):
        * css/CSSPrimitiveValue.h:
        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::cssText):
        * css/CSSPropertyNames.in:
        * css/CSSRule.h:
        * css/CSSRule.idl:
        * css/CSSStyleDeclaration.cpp:
        (WebCore::CSSStyleDeclaration::copyPropertiesInSet):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::addMatchedDeclaration):
        (WebCore::CSSRuleSet::addRulesFromSheet):
        (WebCore::CSSStyleSelector::applyProperty):
        * css/CSSStyleSelector.h:
        * css/CSSValue.h:
        * css/CSSVariableDependentValue.cpp: Removed.
        * css/CSSVariableDependentValue.h: Removed.
        * css/CSSVariablesDeclaration.cpp: Removed.
        * css/CSSVariablesDeclaration.h: Removed.
        * css/CSSVariablesDeclaration.idl: Removed.
        * css/CSSVariablesRule.cpp: Removed.
        * css/CSSVariablesRule.h: Removed.
        * css/CSSVariablesRule.idl: Removed.
        * css/StyleBase.h:
        (WebCore::StyleBase::isMediaRule):
        * css/tokenizer.flex:
        * page/DOMWindow.idl:

2010-11-16  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=48603
        Boolean logic mistake in local file check

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadFrameRequest): Fix logic so that both checks have to pass
        before accepting a local file load.

2010-11-15  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Harden additional string functions against large lengths
        https://bugs.webkit.org/show_bug.cgi?id=49574

        * platform/text/TextCodecUTF16.cpp:
        (WebCore::TextCodecUTF16::encode): Check for length that is
        too large for size_t.

        * platform/text/TextStream.cpp:
        (WebCore::TextStream::operator<<): Check for length that is
        too large for size_t.

2010-11-16  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed. Touching inspector controller to make gtk / qt happier.

        * inspector/InspectorController.cpp:

2010-11-16  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Use gdk_pixbuf_get_from_surface() when available
        https://bugs.webkit.org/show_bug.cgi?id=49532

        * platform/graphics/gtk/GdkCairoUtilities.cpp:
        (cairoImageSurfaceToGdkPixbuf):

2010-11-16  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: init front-end UI upon DOMContentLoaded, not load event.
        https://bugs.webkit.org/show_bug.cgi?id=49596

        * inspector/front-end/inspector.js:
        (windowLoaded):

2010-11-15  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Migrate frontend to the new CSS editing/retrieval API
        https://bugs.webkit.org/show_bug.cgi?id=49492

        Test: inspector/styles-new-API.html

        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.evalCallback.selectorsCallback):
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.evalCallback.routine):
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.evalCallback):
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.styleSheetCallback):
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.allStylesCallback):
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun):
        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun):
        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun.receivedImages):
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleModel.prototype.getStylesAsync):
        (WebInspector.CSSStyleModel.prototype.getComputedStyleAsync):
        (WebInspector.CSSStyleModel.prototype.getInlineStyleAsync):
        (WebInspector.CSSStyleModel.prototype.setRuleSelector):
        (WebInspector.CSSStyleModel.prototype.setRuleSelector.callback):
        (WebInspector.CSSStyleModel.prototype.addRule):
        (WebInspector.CSSStyleModel.prototype.addRule.callback):
        (WebInspector.CSSStyleDeclaration):
        (WebInspector.CSSStyleDeclaration.prototype.propertyAt):
        (WebInspector.CSSStyleDeclaration.prototype.pastLastSourcePropertyIndex):
        (WebInspector.CSSStyleDeclaration.prototype.newBlankProperty):
        (WebInspector.CSSStyleDeclaration.prototype.insertPropertyAt):
        (WebInspector.CSSStyleDeclaration.prototype.appendProperty):
        (WebInspector.CSSRule):
        (WebInspector.CSSProperty.prototype.get propertyText):
        (WebInspector.CSSProperty.prototype.setText):
        (WebInspector.CSSProperty.prototype.setDisabled):
        (WebInspector.CSSStyleSheet):
        (WebInspector.CSSStyleSheet.createForId):
        (WebInspector.CSSStyleSheet.prototype.getText):
        (WebInspector.CSSStyleSheet.prototype.setText):
        * inspector/front-end/Settings.js:
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertiesSection.prototype.onpopulate):
        (WebInspector.StylePropertiesSection.prototype.addNewBlankProperty):
        (WebInspector.StylePropertiesSection.prototype._debugShowStyle.removeStyleBox):
        (WebInspector.StylePropertiesSection.prototype._debugShowStyle):
        (WebInspector.StylePropertiesSection.prototype.editingSelectorCommitted):
        (WebInspector.StylePropertyTreeElement.prototype):
        (WebInspector.StylePropertyTreeElement.prototype.):
        * inspector/front-end/inspector.css:
        (.styles-section .properties li.not-parsed-ok):
        (.styles-section .properties li.not-parsed-ok::before):
        (.styles-section .properties .inactive):

2010-11-16  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r72082.
        http://trac.webkit.org/changeset/72082
        https://bugs.webkit.org/show_bug.cgi?id=49594

        "broken SnowLeopard build" (Requested by apavlov on #webkit).

        * css/CSSPrimitiveValue.cpp:
        (WebCore::scaleFactorForConversion):
        (WebCore::CSSPrimitiveValue::getDoubleValue):
        (WebCore::CSSPrimitiveValue::getIdent):
        * css/CSSPrimitiveValue.h:
        (WebCore::CSSPrimitiveValue::getFloatValue):
        (WebCore::CSSPrimitiveValue::getIntValue):

2010-11-16  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r72087.
        http://trac.webkit.org/changeset/72087
        https://bugs.webkit.org/show_bug.cgi?id=49593

        "broken build" (Requested by apavlov on #webkit).

        * css/CSSPrimitiveValue.cpp:
        (WebCore::unitCategory):

2010-11-15  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: rename StoragePanel to ResourcesPanel.
        https://bugs.webkit.org/show_bug.cgi?id=49534

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/DatabaseQueryView.js:
        (WebInspector.DatabaseQueryView.prototype._queryFinished):
        * inspector/front-end/DatabaseTableView.js:
        (WebInspector.DatabaseTableView.prototype._queryFinished):
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._onRevealAndSelectResource):
        * inspector/front-end/Images/storageIcon.png: Removed.
        * inspector/front-end/ResourceManager.js:
        (WebInspector.ResourceManager.prototype.setOverrideContent):
        (WebInspector.ResourceTreeModel.prototype.addOrUpdateFrame):
        (WebInspector.ResourceTreeModel.prototype.didCommitLoadForFrame):
        (WebInspector.ResourceTreeModel.prototype.frameDetachedFromParent):
        (WebInspector.ResourceTreeModel.prototype._clearChildFramesAndResources):
        (WebInspector.ResourceTreeModel.prototype.addResourceToFrame):
        * inspector/front-end/StoragePanel.js: Removed.
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.css:
        (.resources.panel .sidebar):
        (.resources.panel .sidebar li):
        (.resources.panel .sidebar li.parent):
        (.resources.panel .sidebar li.selected):
        (.resources.panel .sidebar li.selected .selection):
        (.resources.panel .sidebar :focus li.selected .selection):
        (body.inactive .resources.panel .sidebar li.selected .selection):
        (.resources.panel .sidebar .icon):
        (.resources.panel .base-storage-tree-element-title):
        (.resources.panel .status):
        (.resources.panel li .status .bubble):
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        (WebInspector._createPanels):
        (WebInspector.openResource):
        (WebInspector.showPanel):
        (WebInspector.selectDatabase):
        (WebInspector.selectDOMStorage):
        (WebInspector.addDatabase):
        (WebInspector.addDOMStorage):
        (WebInspector.updateDOMStorage):
        (WebInspector.updateApplicationCacheStatus):
        (WebInspector.didGetFileSystemPath):
        (WebInspector.didGetFileSystemError):
        (WebInspector.didGetFileSystemDisabled):
        (WebInspector.updateNetworkState):
        (WebInspector._choosePanelToShowSourceLine):

2010-11-16  Alexander Pavlov  <apavlov@chromium.org>

        Unreviewed SnowLeopard build fix.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::unitCategory):

2010-11-16  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Andreas Kling.

        Viewport meta tag: Fix geometry computation

        Available width and height should also be divided by the device pixel ratio.

        * dom/ViewportArguments.cpp:
        (WebCore::computeViewportAttributes):
        * platform/network/qt/DnsPrefetchHelper.cpp:

2010-11-12  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Simon Fraser.

        CSSPrimitiveValue.getFloatValue does not convert sizes
        https://bugs.webkit.org/show_bug.cgi?id=35770

        Implemented all same-category unit conversions (length, angle, time, frequency) and retained
        absolute-relative (cm, mm, in, pt, pc) length conversions intact.
        Illegal unit conversion attempts will throw an INVALID_ACCESS_ERR DOMException.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::unitCategory):
        (WebCore::scaleFactorForConversion):
        (WebCore::CSSPrimitiveValue::getDoubleValue):
        (WebCore::CSSPrimitiveValue::canonicalUnitTypeForCategory):
        (WebCore::CSSPrimitiveValue::getDoubleValueInternal):
        * css/CSSPrimitiveValue.h:

2010-11-15  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: extract HTML title setter in treeoutline.js.
        https://bugs.webkit.org/show_bug.cgi?id=49540

        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype.adjustCollapsedRange):
        (WebInspector.ElementsTreeElement.prototype.updateTitle):
        * inspector/front-end/treeoutline.js:
        (TreeElement.prototype.get titleHTML):
        (TreeElement.prototype.set titleHTML):
        (TreeElement.prototype._setListItemNodeContent):

2010-11-16  John Knottenbelt  <jknotten@chromium.org>

        Reviewed by Jeremy Orlow.

        Assert that DeviceOrientationClientMock is used by only one controller.
        https://bugs.webkit.org/show_bug.cgi?id=48506

        This is a design constraint of the DeviceOrientationClientMock because the
        m_controller field can only store a pointer to a single instance of the
        corresponding DeviceOrientationController.

        * platform/mock/DeviceOrientationClientMock.cpp:
        (WebCore::DeviceOrientationClientMock::setController):

2010-11-16  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Adam Barth.

        fast/images/size-failure.html results in malloc of 2 Gb after switching to WebKit image decoders
        https://bugs.webkit.org/show_bug.cgi?id=48634
        
        Specify the capacity when calling CFDataCreateMutable, which can signal
        malloc failures (by returning NULL), unlike CFDataSetLength.

        * platform/image-decoders/cg/ImageDecoderCG.cpp:
        (WebCore::RGBA32Buffer::setSize):

2010-11-15  Rob Buis  <rwlbuis@gmail.com>

        Reviewed by Dirk Schulze and Darin Adler.

        requiredFeatures does not adapt to SVGStringList changes
        https://bugs.webkit.org/show_bug.cgi?id=40887

        Centralize the const_cast handling and only do it if needed.
        Remove the const_cast in all svgAttributeChanged functions and move
        it to SVGTest::handleAttributeChange. Add an early return to
        handleAttributeChange to avoid unnecessary const_casts.

        No tests necessary as functionality has not changed.

        * svg/SVGCircleElement.cpp:
        (WebCore::SVGCircleElement::svgAttributeChanged):
        * svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::svgAttributeChanged):
        * svg/SVGForeignObjectElement.cpp:
        (WebCore::SVGForeignObjectElement::svgAttributeChanged):
        * svg/SVGGElement.cpp:
        (WebCore::SVGGElement::svgAttributeChanged):
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::svgAttributeChanged):
        * svg/SVGLineElement.cpp:
        (WebCore::SVGLineElement::svgAttributeChanged):
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::svgAttributeChanged):
        * svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::svgAttributeChanged):
        * svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::svgAttributeChanged):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::svgAttributeChanged):
        * svg/SVGTests.cpp:
        (WebCore::SVGTests::handleAttributeChange):
        * svg/SVGTests.h:
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::svgAttributeChanged):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::svgAttributeChanged):

2010-11-15  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        REGRESSION(r71934): Removing an element with a shadow DOM from under a cursor causes a crash.
        https://bugs.webkit.org/show_bug.cgi?id=49569

        Test: fast/events/remove-shadow-host-crash.html

        * rendering/TextControlInnerElements.h:
        (WebCore::TextControlInnerElement::isShadowNode):
        (WebCore::TextControlInnerElement::shadowParentNode):

2010-11-12  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        ScriptElement rather than HTMLScriptElement and SVGScriptElement should have ScriptElementData
        https://bugs.webkit.org/show_bug.cgi?id=49469

        Moved m_data, scriptCharset, scriptContent, shouldExecuteAsJavaScript, and executeScript from
        HTMLScriptElement and SVGScriptElement to ScriptElementData.

        Also made insertedIntoDocument, removedFromDocument, childrenChanged, finishParsingChildren,
        and handleSourceAttribute of ScriptElement non-static.

        No new tests are added since this is a cleanup.

        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::scriptCharset): Added.
        (WebCore::ScriptElement::scriptContent): Added.
        (WebCore::ScriptElement::shouldExecuteAsJavaScript): Added.
        (WebCore::ScriptElement::executeScript): Added.
        (WebCore::ScriptElement::insertedIntoDocument): Made non-static. Accesses m_data.
        (WebCore::ScriptElement::removedFromDocument): Ditto.
        (WebCore::ScriptElement::childrenChanged): Ditto.
        (WebCore::ScriptElement::finishParsingChildren): Ditto.
        (WebCore::ScriptElement::handleSourceAttribute): Ditto.
        * dom/ScriptElement.h: Moved the declaration of ScriptElement after that of ScriptElementData
        because ScriptElement has to instantiate ScriptElementData.
        (WebCore::ScriptElement::ScriptElement): Initializes m_data.
        * html/HTMLScriptElement.cpp: Removed scriptCharset, scriptContent, shouldExecuteAsJavaScript, and executeScript.
        (WebCore::HTMLScriptElement::HTMLScriptElement): Initializes ScriptElement instead of ScriptElementData.
        (WebCore::HTMLScriptElement::childrenChanged): Calls ScriptElement::childrenChanged.
        (WebCore::HTMLScriptElement::parseMappedAttribute): Calls ScriptElement::handleSourceAttribute.
        (WebCore::HTMLScriptElement::finishParsingChildren): Calls ScriptElement::finishParsingChildren.
        (WebCore::HTMLScriptElement::insertedIntoDocument): Calls ScriptElement::insertedIntoDocument.
        (WebCore::HTMLScriptElement::removedFromDocument): Calls ScriptElement::removedFromDocument.
        * html/HTMLScriptElement.h:
        * svg/SVGScriptElement.cpp: Removed scriptCharset, scriptContent, shouldExecuteAsJavaScript, and executeScript.
        (WebCore::SVGScriptElement::SVGScriptElement): Initializes ScriptElement instead of ScriptElementData.
        (WebCore::SVGScriptElement::svgAttributeChanged): Calls ScriptElement::handleSourceAttribute.
        (WebCore::SVGScriptElement::insertedIntoDocument): Calls ScriptElement::insertedIntoDocument.
        (WebCore::SVGScriptElement::removedFromDocument): Calls ScriptElement::removedFromDocument.
        (WebCore::SVGScriptElement::childrenChanged): Calls ScriptElement::childrenChanged.
        (WebCore::SVGScriptElement::finishParsingChildren): Calls ScriptElement::finishParsingChildren.
        * svg/SVGScriptElement.h:

2010-11-15  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Refactor HTMLInputElement: Move a part of HTMLInputElement::
        defaultEventHandler() to InputTypes.
        https://bugs.webkit.org/show_bug.cgi?id=48317

        Move out the followings to InputTypes:
         - click event processing,
         - the first keydown event processing, and
         - DOMActivate event processing.

        Move m_xPos and m_yPos from HTMLInputElement to ImageInputType as
        m_clickLocation. It's ok to move them because they should be valid only
        when HTMLInputElement::m_activeSubmit is true. For type=image,
        m_activeSubmit is true only in DOMActivate event handling. So we reset
        m_clickLocation in handleDOMActivateEvent() with Event::underlyingEvent().

        No new tests because this is just a refactoring.

        * html/BaseDateAndTimeInputType.cpp:
        (WebCore::BaseDateAndTimeInputType::handleKeydownEvent):
        * html/BaseDateAndTimeInputType.h:
        * html/FileInputType.cpp:
        (WebCore::FileInputType::handleDOMActivateEvent):
        * html/FileInputType.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::HTMLInputElement):
        (WebCore::HTMLInputElement::defaultEventHandler):
        * html/HTMLInputElement.h:
        * html/ImageInputType.cpp:
        (WebCore::ImageInputType::appendFormData):
        (WebCore::ImageInputType::handleDOMActivateEvent):
        * html/ImageInputType.h:
        * html/InputType.cpp:
        (WebCore::InputType::handleClickEvent):
        (WebCore::InputType::handleDOMActivateEvent):
        (WebCore::InputType::handleKeydownEvent):
        * html/InputType.h:
        * html/NumberInputType.cpp:
        (WebCore::NumberInputType::handleKeydownEvent):
        * html/NumberInputType.h:
        * html/RadioInputType.cpp:
        (WebCore::RadioInputType::handleClickEvent):
        * html/RadioInputType.h:
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::handleKeydownEvent):
        * html/RangeInputType.h:
        * html/ResetInputType.cpp:
        (WebCore::ResetInputType::handleDOMActivateEvent):
        * html/ResetInputType.h:
        * html/SubmitInputType.cpp:
        (WebCore::SubmitInputType::handleDOMActivateEvent):
        * html/SubmitInputType.h:
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::handleKeydownEvent):
        (WebCore::TextFieldInputType::handleKeydownEventForSpinButton):
        * html/TextFieldInputType.h:

2010-11-15  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Add AudioNode custom bindings
        https://bugs.webkit.org/show_bug.cgi?id=49119

        No new tests since audio API is not yet implemented.

        * bindings/js/JSAudioNodeCustom.cpp: Added.
        (WebCore::JSAudioNode::connect):
        (WebCore::JSAudioNode::disconnect):
        * bindings/v8/custom/V8AudioNodeCustom.cpp: Added.
        (WebCore::V8AudioNode::connectCallback):
        (WebCore::V8AudioNode::disconnectCallback):
        * webaudio/AudioNode.idl:

2010-11-15  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=49570
        
        Put italics specialization check back in CSSFontSelector.  I had to back it out, since it broke
        a layout test, and the issue was that local font fallback fonts should not be considered by the
        specialization check (since you never want to pick a fallback over an actual @font-face rule if
        the @font-face rule can handle it).
 
        * css/CSSFontFace.h:
        (WebCore::CSSFontFace::create):
        (WebCore::CSSFontFace::isLocalFallback):
        (WebCore::CSSFontFace::CSSFontFace):
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::addFontFaceRule):
        (WebCore::compareFontFaces):

2010-11-15  Adele Peterson  <adele@apple.com>

        Reviewed by Darin Adler.

        Fix for: https://bugs.webkit.org/show_bug.cgi?id=49452
        Placeholder should not be swapped in and out of the text control's inner text element

        There's no need to swap the placeholder text in and out of the inner text element.  Instead, just paint the text.
        This reduces complexity and makes it easier to make independent decisions about the placeholder text and the text control value.

        * html/HTMLInputElement.cpp: (WebCore::HTMLInputElement::setValueFromRenderer):
        Since updatePlaceholderVisibility checks the value, set the value before calling updatePlaceholderVisibility.
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::updatePlaceholderVisibility): Remove code that set the inner text value with the placeholder text.
        (WebCore::RenderTextControl::paintObject):  Paint the placeholder text during the background phase.
        * rendering/RenderTextControl.h:
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::nodeAtPoint): Remove custom hit testing that tried to avoid hitting the placeholder text at the wrong time.
        (WebCore::RenderTextControlMultiLine::updateFromElement):  Remove code that set the inner text value with the placeholder text.
        (WebCore::RenderTextControlMultiLine::createInnerTextStyle): Remove code that created the inner text style based on the placeholder pseudoelement.
        (WebCore::RenderTextControlMultiLine::textBoxInsetLeft): Added.
        (WebCore::RenderTextControlMultiLine::textBoxInsetRight): Added.
        * rendering/RenderTextControlMultiLine.h:
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::updateFromElement): Remove code that set the inner text value with the placeholder text.
        (WebCore::RenderTextControlSingleLine::createInnerTextStyle): Remove code that created the inner text style based on the placeholder pseudoelement.
        (WebCore::RenderTextControlSingleLine::textBoxInsetLeft): Added.
        (WebCore::RenderTextControlSingleLine::textBoxInsetRight): Added.
        * rendering/RenderTextControlSingleLine.h:
        * rendering/TextControlInnerElements.cpp: Removed custom hit testing that tried to avoid hitting the placeholder text at the wrong time.

2010-11-15  Andreas Kling  <kling@webkit.org>

        Unreviewed buildfix (Qt WebKit2 minimal)

        * platform/qt/CookieJarQt.cpp: Add missing <QStringList> include.

2010-11-15  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Add Event and EventListener hooks for JavaScriptAudioNode and AudioProcessingEvent
        https://bugs.webkit.org/show_bug.cgi?id=49357

        No new tests since audio API is not yet implemented.

        * bindings/js/JSEventCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSEventTarget.cpp:
        (WebCore::toJS):
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::convertEventTargetToV8Object):
        * bindings/v8/custom/V8EventCustom.cpp:
        (WebCore::toV8):
        * dom/Event.cpp:
        (WebCore::Event::isAudioProcessingEvent):
        * dom/Event.h:
        * dom/EventNames.h:
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::toJavaScriptAudioNode):
        * dom/EventTarget.h:

2010-11-15  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        A minor style fix in StyledElement.cpp.

        * dom/StyledElement.cpp:
        (WebCore::StyledElement::addCSSProperty):
        (WebCore::StyledElement::addCSSImageProperty):

2010-11-15  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=49565
        Remove Attr.style accessor

        * dom/Attr.idl: Only keep the accessor for Objective C API. Inspector doesn't seem to need
        it any more.

2010-11-15  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=49555 
        Frame::scalePage() should treat the origin as an absolute 
        coordinate
        -and corresponding-
        <rdar://problem/8667138>

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

2010-11-15  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/8662770> Error image has incorrect size when a custom font is used

        Test: fast/images/style-access-during-imageChanged-crash.html

        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::RenderImage): Added initialization of m_needsToSetSizeForAltText.
        (WebCore::RenderImage::imageSizeForError): Factored the non-alt-text dependent size computation
        out of setImageSizeForAltText() into this function.
        (WebCore::RenderImage::setImageSizeForAltText): Changed to use imageSizeForError().
        (WebCore::RenderImage::styleDidChange): Added. If m_needsToSetSizeForAltText is true, sets the
        intrinsic size and calls imageDimensionsChanged() as needed to cause layout or invalidation.
        (WebCore::RenderImage::imageChanged): Moved some code from here...
        (WebCore::RenderImage::imageDimensionsChanged): ...to here.
        * rendering/RenderImage.h:

2010-11-15  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dimitri Glazkov.

        ASSERTION (r72003): Assertion failure when running layout tests
        https://bugs.webkit.org/show_bug.cgi?id=49561

        r72003 added the 'formaction' URL attribute to HTMLButtonElement and HTMLInputElement,
        but did not add the attribute to the isURLAttribute which lead to assertion failures
        when running the layout tests with a debug build.

        * html/HTMLButtonElement.cpp:
        (WebCore::HTMLButtonElement::isURLAttribute):
        * html/HTMLButtonElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::isURLAttribute):

2010-11-15  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=49559
        DOMWindow.getComputedStyle pseudo element argument lacks ConvertUndefinedOrNullToNullString

        No observable change in behavior, so no tests.

        * page/DOMWindow.idl: Added ConvertUndefinedOrNullToNullString.

2010-11-15  Andreas Kling  <kling@webkit.org>

        Reviewed by Tor Arne Vestbø.

        [Qt] Make WTF_USE_MEEGOTOUCH available for WebKit2 as well

        Move this into WebCore/features.pri which is used by both WebCore and WebKit2.

        * WebCore.pro:
        * features.pri:

2010-11-15  Martin Robinson  <mrobinson@igalia.com>

        Build fix for GTK+.

        * GNUmakefile.am: Add some missing generated files to the source list.

2010-11-15  Kenneth Russell  <kbr@google.com>

        Reviewed by James Robinson.

        [chromium] Avoid copying of SkBitmap in LayerRendererChromium
        https://bugs.webkit.org/show_bug.cgi?id=49560

        Ran CSS 3D content to test. No other new tests.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::updateRootLayerTextureRect):

2010-11-15  Vangelis Kokkevis  <vangelis@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Fixes layer opacity implementation of composited layers
        https://bugs.webkit.org/show_bug.cgi?id=49233

        This introduces a fairly drastic change in how LayerRendererChromium draws
        composited layers. Layers that have non-zero opacity as well as layers that
        clip their descendants (and have non-trivial transforms) are now first
        rendered onto off-screen surfaces (RenderSurfaceChromium's). The compositing
        operation now consists of two distinct phases: First a hierarchical traversal
        of the layer tree to compute the layer transforms, determine what the necessary
        RenderSurfaces are and sort layer that preserve-3d based on their z-value. A second
        pass goes through all the RenderSurfaces discovered by the first pass and updates
        their contents.
        Additional significant side-effects of this change are:
        1. Depth buffer and depth testing is no longer used. Drawing relies on a painter's
           algorithm to render layers with the preserves-3d property from back to front using
           the Z coordinate of their center. This will further be improved in the future with
           the intoduction of a BSP tree to properly deal with intersecting layers.
        2. Compositor no longer uses the stencil buffer to do clipping. Clipping is now performed
           by rendering layer subtrees into an offscreen buffer and setting the appropriate
           scissor and viewport transformation.

        Tests: abs-position-inside-opacity.html (for the opacity implementation)
               and the rest of the compositing layout tests to verify that
               everything still works.

        * WebCore.gypi:
        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::cleanupResources):
        (WebCore::ContentLayerChromium::requiresClippedUpdateRect):
        (WebCore::ContentLayerChromium::calculateClippedUpdateRect):
        (WebCore::ContentLayerChromium::updateContents):
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::LayerChromium):
        (WebCore::LayerChromium::cleanupResources):
        (WebCore::LayerChromium::createRenderSurface):
        (WebCore::LayerChromium::descendantsDrawContent):
        (WebCore::LayerChromium::descendantsDrawContentRecursive):
        * platform/graphics/chromium/LayerChromium.h:
        (WebCore::LayerChromium::drawTransform):
        (WebCore::LayerChromium::layerRenderer):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::orthoMatrix):
        (WebCore::isScaleOrTranslation):
        (WebCore::LayerRendererChromium::compareLayerZ):
        (WebCore::LayerRendererChromium::LayerRendererChromium):
        (WebCore::LayerRendererChromium::prepareToDrawLayers):
        (WebCore::LayerRendererChromium::drawLayers):
        (WebCore::LayerRendererChromium::updateLayersRecursive):
        (WebCore::LayerRendererChromium::useRenderSurface):
        (WebCore::LayerRendererChromium::drawLayer):
        (WebCore::LayerRendererChromium::setScissorToRect):
        (WebCore::LayerRendererChromium::setDrawViewportRect):
        (WebCore::LayerRendererChromium::initializeSharedObjects):
        (WebCore::LayerRendererChromium::cleanupSharedObjects):
        * platform/graphics/chromium/LayerRendererChromium.h:
        * platform/graphics/chromium/RenderSurfaceChromium.cpp: Added.
        (WebCore::RenderSurfaceChromium::RenderSurfaceChromium):
        (WebCore::RenderSurfaceChromium::~RenderSurfaceChromium):
        (WebCore::RenderSurfaceChromium::cleanupResources):
        (WebCore::RenderSurfaceChromium::layerRenderer):
        (WebCore::RenderSurfaceChromium::prepareContentsTexture):
        * platform/graphics/chromium/RenderSurfaceChromium.h: Added.
        (WebCore::RenderSurfaceChromium::contentRectCenter):
        (WebCore::RenderSurfaceChromium::contentRect):
        * platform/graphics/chromium/VideoLayerChromium.cpp:
        (WebCore::VideoLayerChromium::cleanupResources):

2010-11-15  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Andreas Kling.

        [GTK] gdk_pixbuf_get_from_surface from GtkVersioning.h is broken on GTK+ 2 builds
        https://bugs.webkit.org/show_bug.cgi?id=49549

        No new tests. This can be verified by loading any existing vertical text test
        in GtkLauncher and noticing the lack of CRITICAL GLib exceptions. There's currently
        no automatic way of verifying custom cursors.

        * platform/gtk/GtkVersioning.c:
        (gdk_pixbuf_get_from_surface): Reverse a sanity check in this method to be correct.

2010-11-12  Jer Noble  <jer.noble@apple.com>

        Reviewed by Brady Eidson.

        Can't view HTML5 video when running Safari with an authenticated proxy server
        <rdar://problem/8351926>
        
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::createQTMovie):

2010-11-14  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Dimitri Glazkov.

        Event dispatch call can blow away the node's renderer initialized
        before the call in updateSelectionForMouseDrag function. We need
        to initialize it after the call.
        https://bugs.webkit.org/show_bug.cgi?id=49524

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

2010-11-15  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Martin Robinson.

        Make ContextShadow compile on all platforms
        https://bugs.webkit.org/show_bug.cgi?id=49535

        Add a void* typedef for PlatformImage and PlatformContext for unsupported platforms
        and move them into the WebCore namespace like all other Platform* typedefs.

        * platform/graphics/ContextShadow.h:

2010-11-15  Renata Hodovan  <reni@webkit.org>

        Reviewed by Andreas Kling.

        SVGFEImageElement doesn't support dynamic invalidation
        https://bugs.webkit.org/show_bug.cgi?id=49536

        The dynamic changes are captured by the svgAttributeChanged function. Invalidate the filter primitive if necessary.

        Tests: svg/dynamic-updates/SVGFEImageElement-dom-preserveAspectRatio-attr.html
               svg/dynamic-updates/SVGFEImageElement-svgdom-preserveAspectRatio-prop.html

        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::svgAttributeChanged):
        * svg/SVGFEImageElement.h:

2010-11-15  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Antonio Gomes.

        [Qt] Focus ring does not show on focused links.
        https://bugs.webkit.org/show_bug.cgi?id=49515

        After http://trac.webkit.org/changeset/69766 the focus ring on links is no longer
        visible in Qt.
        The reason is that Qt always returned true in RenderTheme::supportsFocusRing(),
        but until r69766, we did not check that for links. Qt draws its own focus ring
        for controls that it draws, but not for links.
        Change the return value to false if the style's appearance is not something that Qt
        draws by itself or does not support.
        Added a Qt specific test result for the new test added in r69766.

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

2010-11-15  Dai Mikurube  <dmikurube@google.com>

        Reviewed by Kent Tamura.

        Implement formaction, formenctype, formmethod and formtarget attributes for input and button tags
        https://bugs.webkit.org/show_bug.cgi?id=49240

        Tests: fast/forms/formaction-attribute.html
               fast/forms/formmethod-attribute-button-html.html
               fast/forms/formmethod-attribute-input-html.html
               fast/forms/formtarget-attribute-button-html.html
               fast/forms/formtarget-attribute-input-html.html
               fast/forms/mailto/formenctype-attribute-button-html.html
               fast/forms/mailto/formenctype-attribute-input-html.html
               fast/forms/submit-form-attributes.html

        * html/HTMLAttributeNames.in: Added formaction, formmethod, formtarget and formenctype attributes
        * html/HTMLButtonElement.idl:
        * html/HTMLInputElement.idl:
        * loader/FormSubmission.cpp: Modified to check the pressed button and its attributes
        (WebCore::FormSubmission::Attributes::copyFrom):
        (WebCore::FormSubmission::create):
        * loader/FormSubmission.h:

2010-11-15  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Do not hide default Ctrl+A behavior on non-Mac.
        https://bugs.webkit.org/show_bug.cgi?id=49527

        * inspector/front-end/TextPrompt.js:
        (WebInspector.TextPrompt.prototype._onKeyDown):

2010-11-15  Ilya Sherman  <isherman@chromium.org>

        Reviewed by Kent Tamura.

        Add capability for displaying warnings to autofill popup
        Warnings are displayed in dark gray italic.
        https://bugs.webkit.org/show_bug.cgi?id=49291
        http://code.google.com/p/chromium/issues/detail?id=58509

        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupListBox::getRowFont):
          Use item-specific font, not just the generic menu font.
        (WebCore::PopupListBox::selectIndex):
          Updated to clear the selection when hovering over a non-selectable item.
        * platform/chromium/PopupMenuChromium.h: Minor cleanup

2010-11-14  David Hyatt  <hyatt@apple.com>

        Back out the italics portion of the previous patch until I can figure out why it
        doesn't work.

        * css/CSSFontSelector.cpp:
        (WebCore::compareFontFaces):

2010-11-14  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        Improve API for form validation message strings
        https://bugs.webkit.org/show_bug.cgi?id=34945
        
        This change introduces three new functions;
        validationMessageTypeMismatchFor*Text(). The implementation for each
        platform is just a call to validationMessageTypeMismatchText().

        Some validationMessage*() functions have new parameters.  The parameters
        are ignored in all platforms for now.

        This change doesn't change any behavior. However a platform can add
        additional information to validation messages.  e.g. Changing "type
        mismatch" to "Please specify an e-mail address" for <input type=email>.

        * html/EmailInputType.cpp:
        (WebCore::EmailInputType::typeMismatchText): Call validationMessageTypeMismatchForEmailText()
          or validationMessageTypeMismatchForMultipleEmailText().
        * html/EmailInputType.h:
        * html/HTMLFormControlElement.h: Add maxLength() and value() to access them from ValidityState.
        * html/HTMLInputElement.cpp: Add the following functions to pass extra
          information to validation message string functions.
        (WebCore::HTMLInputElement::minimumString):
        (WebCore::HTMLInputElement::maximumString):
        (WebCore::HTMLInputElement::stepBaseString):
        (WebCore::HTMLInputElement::stepString):
        (WebCore::HTMLInputElement::typeMismatchText):
        * html/HTMLInputElement.h:
        * html/HTMLTextAreaElement.h:
        * html/InputType.cpp:
        (WebCore::InputType::typeMismatchText): Call validationMessageTypeMismatchText().
        * html/InputType.h:
        * html/URLInputType.cpp:
        (WebCore::URLInputType::typeMismatchText): Call validationMessageTypeMismatchForURLText().
        * html/URLInputType.h:
        * html/ValidityState.cpp:
        (WebCore::ValidityState::validationMessage):
        * platform/LocalizedStrings.cpp:
        (WebCore::validationMessageTypeMismatchForEmailText):
        (WebCore::validationMessageTypeMismatchForMultipleEmailText):
        (WebCore::validationMessageTypeMismatchForURLText):
        (WebCore::validationMessageTooLongText):
        (WebCore::validationMessageRangeUnderflowText):
        (WebCore::validationMessageRangeOverflowText):
        (WebCore::validationMessageStepMismatchText):
        * platform/LocalizedStrings.h:
          - Add validationMessageTypeMismatchForEmailText(),
            validationMessageTypeMismatchForMultipleEmailText() and
            validationMessageTypeMismatchForURLText()
          - Add length parameters to validationMessageTooLongText().
          - Add the minimum value parameter to validationMessageRangeUnderflowText()
          - Add the maximum value parameter to validationMessageRangeOverflowText()
          - Add parameters of the base value and the step value to validationMessageStepMismatchText()
        * platform/android/LocalizedStringsAndroid.cpp:
        (WebCore::validationMessageTypeMismatchForEmailText):
        (WebCore::validationMessageTypeMismatchForMultipleEmailText):
        (WebCore::validationMessageTypeMismatchForURLText):
        (WebCore::validationMessageTooLongText):
        (WebCore::validationMessageRangeUnderflowText):
        (WebCore::validationMessageRangeOverflowText):
        (WebCore::validationMessageStepMismatchText):
        * platform/brew/LocalizedStringsBrew.cpp:
        (WebCore::validationMessageTypeMismatchForEmailText):
        (WebCore::validationMessageTypeMismatchForMultipleEmailText):
        (WebCore::validationMessageTypeMismatchForURLText):
        (WebCore::validationMessageTooLongText):
        (WebCore::validationMessageRangeUnderflowText):
        (WebCore::validationMessageRangeOverflowText):
        (WebCore::validationMessageStepMismatchText):
        * platform/efl/LocalizedStringsEfl.cpp:
        (WebCore::validationMessageRangeOverflowText):
        (WebCore::validationMessageRangeUnderflowText):
        (WebCore::validationMessageStepMismatchText):
        (WebCore::validationMessageTooLongText):
        (WebCore::validationMessageTypeMismatchForEmailText):
        (WebCore::validationMessageTypeMismatchForMultipleEmailText):
        (WebCore::validationMessageTypeMismatchForURLText):
        * platform/gtk/LocalizedStringsGtk.cpp:
        (WebCore::validationMessageTypeMismatchForEmailText):
        (WebCore::validationMessageTypeMismatchForMultipleEmailText):
        (WebCore::validationMessageTypeMismatchForURLText):
        (WebCore::validationMessageTooLongText):
        (WebCore::validationMessageRangeUnderflowText):
        (WebCore::validationMessageRangeOverflowText):
        (WebCore::validationMessageStepMismatchText):
        * platform/haiku/LocalizedStringsHaiku.cpp:
        (WebCore::validationMessageTypeMismatchForEmailText):
        (WebCore::validationMessageTypeMismatchForMultipleEmailText):
        (WebCore::validationMessageTypeMismatchForURLText):
        (WebCore::validationMessageTooLongText):
        (WebCore::validationMessageRangeUnderflowText):
        (WebCore::validationMessageRangeOverflowText):
        (WebCore::validationMessageStepMismatchText):
        * platform/wx/LocalizedStringsWx.cpp:
        (WebCore::validationMessageTypeMismatchForEmailText):
        (WebCore::validationMessageTypeMismatchForMultipleEmailText):
        (WebCore::validationMessageTypeMismatchForURLText):
        (WebCore::validationMessageTooLongText):
        (WebCore::validationMessageRangeUnderflowText):
        (WebCore::validationMessageRangeOverflowText):
        (WebCore::validationMessageStepMismatchText):

2010-11-14  Kent Tamura  <tkent@chromium.org>

        Reviewed by Andreas Kling.

        KeyboardEvent::keyIdentifier() should return "const String&"
        https://bugs.webkit.org/show_bug.cgi?id=49426

        No new tests. This shouldn't change the current behavior.

        * dom/KeyboardEvent.h:
        (WebCore::KeyboardEvent::keyIdentifier): Change the return type; String -> const String&
        * dom/SelectElement.cpp:
        (WebCore::SelectElement::menuListDefaultEventHandler):
          Change the type of a variable to have keyIdentifier(); String -> const String&
        (WebCore::SelectElement::listBoxDefaultEventHandler): ditto.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::defaultEventHandler): ditto.
        (WebCore::HTMLInputElement::handleKeyEventForRange): ditto.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleKeyboardSelectionMovement): ditto.

2010-11-14  Kenichi Ishibashi  <bashi@google.com>

        Reviewed by Kent Tamura.

        [HTML5] "form" attribute support for form control elements
        https://bugs.webkit.org/show_bug.cgi?id=47813

        Adds a list of form-associated elements with form attribute into
        the Document class to support form attribute.
        Adds a function to determine the right place to locate
        form-associated elements with form attribute into
        m_associatedElements of HTMLFormElement class.

        Tests: fast/forms/form-attribute-elements-order.html
               fast/forms/form-attribute-elements-order2.html
               fast/forms/form-attribute-elements.html
               fast/forms/form-attribute.html

        * dom/Document.cpp:
        (WebCore::Document::registerFormElementWithFormAttribute): Added.
        (WebCore::Document::unregisterFormElementWithFormAttribute): Added.
        (WebCore::Document::resetFormElementsOwner): Added.
        * dom/Document.h: Added the list for elements with form attribute.
        * html/HTMLAttributeNames.in: Added form attribute.
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::insertedIntoTree): Modified to handle
        form attribute.
        (WebCore::HTMLFormControlElement::removedFromTree): Ditto.
        (WebCore::HTMLFormControlElement::resetFormOwner): Added.
        (WebCore::HTMLFormControlElement::attributeChanged): Added.
        * html/HTMLFormControlElement.h:
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::HTMLFormElement): Modified to initialize
        newly-added variables.
        (WebCore::HTMLFormElement::insertedIntoDocument): Modified to reset
        form owner of form-associated elements.
        (WebCore::HTMLFormElement::removedFromDocument): Ditto.
        (WebCore::HTMLFormElement::formElementIndexWithFormAttribute): Added.
        (WebCore::HTMLFormElement::formElementIndex): Modified to treat
        form-associated elements with form attribute separately.
        (WebCore::HTMLFormElement::removeFormElement): Modified to handle
        form-associated elements with form attribute.
        * html/HTMLFormElement.h: Added three variables to handle form attribute.
        * html/HTMLOutputElement.cpp: Removed "FIXME" comment.
        (WebCore::HTMLOutputElement::parseMappedAttribute):
        * html/HTMLOutputElement.h: Removed setForm().

2010-11-14  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

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

        REGRESSION svg/W3C-SVG-1.1/fonts-desc-02-t.svg broken by r71979.
        
        Refine the font selection function for @font-face to be smarter about what fonts it prefers.  If
        a font is labeled as only supporting small-caps, then prefer it to one that claims to support both
        normal and small-caps.  The specialized font is more likely to be true small-caps and to not rely
        on synthesis.
        
        Added the same logic for italic as well.  Prefer the font that is specifically restricted to
        italic to one that claims it can support anything.

        * css/CSSFontSelector.cpp:
        (WebCore::compareFontFaces):

2010-11-14  Ryuan Choi  <ryuan.choi@samsung.com>

        Reviewed by Martin Robinson.

        [EFL] add pango support
        https://bugs.webkit.org/show_bug.cgi?id=46029

        Include pango related files.
        No new tests; functionality is unchanged.

        * CMakeListsEfl.txt:

2010-11-12  Tenghui Zhu  <ztenghui@google.com>

        Reviewed by Andreas Kling.

        [V8] Code generation script error in generating the SVGStaticListPropertyTearOff
        https://bugs.webkit.org/show_bug.cgi?id=49463

        * bindings/scripts/CodeGeneratorV8.pm: The svgNativeType is the one containing
        the SVGStaticListPropertyTearOff string, not the svgListPropertyType.

2010-11-14  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Andreas Kling.

        Sort CMakeLists.txt
        https://bugs.webkit.org/show_bug.cgi?id=49507

        * CMakeLists.txt:

2010-11-13  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Yury Semikhatsky.

        Buildfix for !ENABLE(INSPECTOR)
        https://bugs.webkit.org/show_bug.cgi?id=49500

        Also unify the position of the condition in the cpp files.

        * inspector/ConsoleMessage.cpp:
        * inspector/InspectorResourceAgent.cpp:
        * inspector/InspectorState.cpp:
        * inspector/ScriptCallFrame.cpp:
        * inspector/ScriptCallStack.cpp:

2010-11-13  David Hyatt  <hyatt@apple.com>

        Reviewed by Anders Carlsson.

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

        Repaint is broken across writing mode boundaries.  It's not enough to add in flipped offsets.  You have
        to flip the rect itself.

        Added fast/repaint/repaint-across-writing-mode-boundary.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeRectForRepaint):

2010-11-13  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=49505
        
        REGRESSION: @font-face doesn't work with the small-caps variant.  This was broken by the addition of SVG fonts
        support long ago.  This patch fixes the SVG code so that it doesn't break non-SVG fonts.

        Added fast/blockflow/broken-ideograph-small-caps.html

        * css/CSSFontFace.cpp:
        (WebCore::CSSFontFace::hasSVGFontFaceSource):
        * css/CSSFontFace.h:
        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::getFontData):
        * css/CSSFontFaceSource.h:
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::addFontFaceRule):
        (WebCore::CSSFontSelector::getFontData):

2010-11-13  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        fast/text/hyphen* tests have different results on Leopard
        https://bugs.webkit.org/show_bug.cgi?id=43296

        * platform/text/mac/TextBreakIteratorInternalICUMac.mm:
        (WebCore::topLanguagePreference): Changed to look up the value of the AppleLanguages default
        through the normal NSUserDefaults search order rather than skipping the application domain.
        This makes this function respect DumpRenderTree’s setting of the default in the application
        domain.

2010-11-13  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=49499
        
        broken-ideographic-font.html causes layout test flakiness in release builds.  The reason for this is
        that the custom font data for m_brokenIdeographFontData was never getting pruned out of the tree.
        The same problem exists for custom small caps fonts, so I made sure that the small caps fonts get
        pruned as well.  In addition, custom small caps fonts were never getting deleted either.
        
        I also made allowsLigatures in FontPlatformData orientation-independent, and the callers check it
        instead.
        
        Unskip fast/blockflow/broken-ideographic-font.html

        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::~SimpleFontData):
        * platform/graphics/chromium/SimpleFontDataChromiumWin.cpp:
        (WebCore::SimpleFontData::platformDestroy):
        (WebCore::SimpleFontData::smallCapsFontData):
        * platform/graphics/chromium/SimpleFontDataLinux.cpp:
        (WebCore::SimpleFontData::platformDestroy):
        (WebCore::SimpleFontData::smallCapsFontData):
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::FontPlatformData::allowsLigatures):
        * platform/graphics/freetype/SimpleFontDataFreeType.cpp:
        (WebCore::SimpleFontData::platformDestroy):
        (WebCore::SimpleFontData::smallCapsFontData):
        * platform/graphics/haiku/SimpleFontDataHaiku.cpp:
        (WebCore::SimpleFontData::platformDestroy):
        (WebCore::SimpleFontData::smallCapsFontData):
        * platform/graphics/mac/ComplexTextControllerATSUI.cpp:
        (WebCore::disableLigatures):
        * platform/graphics/mac/SimpleFontDataCoreText.cpp:
        (WebCore::SimpleFontData::getCFStringAttributes):
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::platformDestroy):
        * platform/graphics/win/SimpleFontDataWin.cpp:
        (WebCore::SimpleFontData::platformDestroy):
        (WebCore::SimpleFontData::smallCapsFontData):
        * platform/graphics/wx/SimpleFontDataWx.cpp:
        (WebCore::SimpleFontData::platformDestroy):
        (WebCore::SimpleFontData::smallCapsFontData):

2010-11-13  David Hyatt  <hyatt@apple.com>

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

        Fix broken-ideographic-font.html.  I had the font installed locally on my machine, and this covered up
        the fact that CoreText was implicitly using it as fallback in the vertical case only.  The bots don't have
        the font installed locally, and so they showed the bug.

        Make sure the GlyphPage is filled with horizontal glyphs for a broken ideograph font, so that CoreText is
        willing to fill.

        * platform/graphics/mac/SimpleFontDataCoreText.cpp:
        (WebCore::SimpleFontData::getCFStringAttributes):

2010-11-13  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=49464
        
        Fix bugs with the orientation of fonts when the font is brought in via fallback, when the font contains no
        vertical tables, or when the font is loaded via font-face in both horizontal and vertical forms.
        
        (1) Include orientation as part of the @font-face hashtables so that the fonts are treated as
        distinct when used in horizontal and vertical forms.
        
        (2) Let the orientation member of FontPlatformData represent the desired orientation rather than
        the supported one.  Add an orientation member to SimpleFontData that represents the actual
        supported orientation of the font.
        
        (3) For fonts with no vertical tables, add a brokenIdeographicsFont accessor that is invoked when
        CJK ideographs are encountered.  This is essentially identical to the small caps fallback mechanism
        but invoked only for ideographs.  The special ideograph font locks the orientation to vertical and
        renders the glyphs upright even when the font has no vertical tables.  Punctuation and such will
        still look funny, and really this is a bug in the font, but at least this way it will be apparent
        that the font is to blame.

        Added fast/blockflow/broken-ideographic-font.html and fast/blockflow/vertical-font-fallback.html.

        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::getFontData):
        * css/CSSSegmentedFontFace.cpp:
        (WebCore::CSSSegmentedFontFace::getFontData):
        * platform/graphics/Font.cpp:
        (WebCore::Font::isCJKIdeograph):
        * platform/graphics/Font.h:
        * platform/graphics/FontFastPath.cpp:
        (WebCore::Font::glyphDataForCharacter):
        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::SimpleFontData):
        (WebCore::SimpleFontData::~SimpleFontData):
        (WebCore::SimpleFontData::brokenIdeographFontData):
        * platform/graphics/SimpleFontData.h:
        (WebCore::SimpleFontData::orientation):
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::FontPlatformData::FontPlatformData):
        * platform/graphics/mac/FontMac.mm:
        (WebCore::showGlyphsWithAdvances):
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::platformInit):
        (WebCore::SimpleFontData::platformBoundsForGlyph):
        (WebCore::SimpleFontData::platformWidthForGlyph):

2010-11-13  Rob Buis  <rwlbuis@gmail.com>

        Reviewed by Dirk Schulze.

        requiredFeatures does not adapt to SVGStringList changes
        https://bugs.webkit.org/show_bug.cgi?id=40887

        Centralize logic of handling of SVGElement validity changes.
        The logic is to detach the SVGElement when changing from valid
        to invalid, and to attach when changing from invalid to valid.

        Tests: svg/dynamic-updates/SVGCircleElement-dom-requiredFeatures.html
               svg/dynamic-updates/SVGCircleElement-svgdom-requiredFeatures.html
               svg/dynamic-updates/SVGEllipseElement-dom-requiredFeatures.html
               svg/dynamic-updates/SVGEllipseElement-svgdom-requiredFeatures.html
               svg/dynamic-updates/SVGForeignObjectElement-dom-requiredFeatures.html
               svg/dynamic-updates/SVGForeignObjectElement-svgdom-requiredFeatures.html
               svg/dynamic-updates/SVGGElement-dom-requiredFeatures.html
               svg/dynamic-updates/SVGGElement-svgdom-requiredFeatures.html
               svg/dynamic-updates/SVGImageElement-dom-requiredFeatures.html
               svg/dynamic-updates/SVGImageElement-svgdom-requiredFeatures.html
               svg/dynamic-updates/SVGLineElement-dom-requiredFeatures.html
               svg/dynamic-updates/SVGLineElement-svgdom-requiredFeatures.html
               svg/dynamic-updates/SVGPathElement-dom-requiredFeatures.html
               svg/dynamic-updates/SVGPathElement-svgdom-requiredFeatures.html
               svg/dynamic-updates/SVGPolygonElement-dom-requiredFeatures.html
               svg/dynamic-updates/SVGPolygonElement-svgdom-requiredFeatures.html
               svg/dynamic-updates/SVGPolylineElement-dom-requiredFeatures.html
               svg/dynamic-updates/SVGPolylineElement-svgdom-requiredFeatures.html
               svg/dynamic-updates/SVGRectElement-dom-requiredFeatures.html
               svg/dynamic-updates/SVGRectElement-svgdom-requiredFeatures.html
               svg/dynamic-updates/SVGSVGElement-dom-requiredFeatures.html
               svg/dynamic-updates/SVGSVGElement-svgdom-requiredFeatures.html
               svg/dynamic-updates/SVGTextElement-dom-requiredFeatures.html
               svg/dynamic-updates/SVGTextElement-svgdom-requiredFeatures.html
               svg/dynamic-updates/SVGUseElement-dom-requiredFeatures.html
               svg/dynamic-updates/SVGUseElement-svgdom-requiredFeatures.html

        * svg/SVGCircleElement.cpp:
        (WebCore::SVGCircleElement::svgAttributeChanged):
        * svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::svgAttributeChanged):
        * svg/SVGForeignObjectElement.cpp:
        (WebCore::SVGForeignObjectElement::svgAttributeChanged):
        * svg/SVGGElement.cpp:
        (WebCore::SVGGElement::svgAttributeChanged):
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::svgAttributeChanged):
        * svg/SVGLineElement.cpp:
        (WebCore::SVGLineElement::svgAttributeChanged):
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::svgAttributeChanged):
        * svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::svgAttributeChanged):
        * svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::svgAttributeChanged):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::svgAttributeChanged):
        * svg/SVGTests.cpp:
        (WebCore::knownAttribute):
        (WebCore::SVGTests::isKnownAttribute):
        (WebCore::SVGTests::handleAttributeChange): Centralized handling of SVGElement validity changes.
        * svg/SVGTests.h:
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::svgAttributeChanged):
        (WebCore::SVGTextContentElement::isKnownAttribute):
        * svg/SVGTextContentElement.h:
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::svgAttributeChanged):

2010-11-13  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [refactoring] support Views in TabbedPane and streamline tab selection in resource view
        https://bugs.webkit.org/show_bug.cgi?id=49493

        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel.prototype._showResource):
        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceView):
        (WebInspector.ResourceView.prototype.selectContentTab):
        (WebInspector.ResourceView.prototype._selectTab):
        (WebInspector.ResourceView.prototype._refreshCookies):
        (WebInspector.ResourceCookiesTab.prototype.show):
        * inspector/front-end/StoragePanel.js:
        (WebInspector.StoragePanel.prototype.showResource):
        * inspector/front-end/TabbedPane.js:
        (WebInspector.TabbedPane.prototype.appendTab):
        (WebInspector.TabbedPane.prototype.hasTab):
        (WebInspector.TabbedPane.prototype.selectTabById):
        (WebInspector.TabbedPane.prototype._hideTab):
        (WebInspector.TabbedPane.prototype._showTab):
        * inspector/front-end/inspector.css:
        (.resource-view-cookies):
        (.resource-view-cookies.visible):

2010-11-13  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        REGRESSION(71515): Web Inspector: Safari crash calling console.log when Log JavaScript Exceptions to Console is checked
        https://bugs.webkit.org/show_bug.cgi?id=49362

        * page/Console.cpp:
        (WebCore::Console::addMessage): avoid accessing ScriptArguments and ScriptCallStack after their ownership
        has been passed to the inspector.

2010-11-13  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: DOM event listener name is cropped in Elements panel
        https://bugs.webkit.org/show_bug.cgi?id=49387

        * inspector/front-end/inspector.css:
        (.event-bar): use margin-left instead of left to fit child node into its parent

2010-11-13  Ilya Sherman  <isherman@chromium.org>

        Reviewed by Shinichiro Hamaji.

        Fixes regression from previous patch -- computes y offsets for elements
        that are scrolled out of the window.
        https://bugs.webkit.org/show_bug.cgi?id=49306

        * manual-tests/select-scroll.html: Added.
        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupListBox::layout):

2010-11-12  Daniel Bates  <dbates@rim.com>

        Reviewed by Adam Barth.

        Transferred <iframe>s may not have a unique internal name
        https://bugs.webkit.org/show_bug.cgi?id=48768

        Fixes an issue where an <iframe> that is transferred from
        document A to document B, where A != B, may not have a
        unique internal name in B.

        Test: fast/frames/iframe-reparenting-unique-name.html

        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::setNameAndOpenURL): Inlined code from
        HTMLFrameElementBase::setName() so that we can remove setName(), which
        was only called being called by HTMLFrameElementBase::setNameAndOpenURL().
        * html/HTMLFrameElementBase.h: Removed HTMLFrameElementBase::setName().
        * html/HTMLFrameOwnerElement.h: Removed HTMLFrameOwnerElement::setName().
        * page/Frame.cpp:
        (WebCore::Frame::transferChildFrameToNewDocument): Modified to call FrameTree::transferChild().
        * page/FrameTree.cpp:
        (WebCore::FrameTree::transferChild): Added.
        (WebCore::FrameTree::appendChild): Moved the majority of the code into FrameTree::actuallyAppendChild().
        (WebCore::FrameTree::actuallyAppendChild): Added.
        * page/FrameTree.h:

2010-11-12  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Alexey Proskuryakov.

        Some FrameLoader.h Cleanup
        https://bugs.webkit.org/show_bug.cgi?id=49484

        Removed function signatures without any implementation. The functions
        used to exist, and were nicely refactored into PageCache in r60688 and
        the signatures were left behind.

        Removed function signature setLoadType. Added in r17238 back when the
        file was named WebFrameLoader, and the implementation was lost during
        the transition from its mm implementation.

        Removed function signature updateHistoryAfterClientRedirect. Implementation
        and call points were removed in r18541 but the signature was left behind,
        and jumped files!

        Removed unused debug variable m_didDispatchDidCommitLoad. It was added
        and used in Assertions in r28399. It was removed soon after, in r28464
        because they were, "firing like crazy. Not sure why yet." It was
        never used again.

        Added const qualifier and moved interruptionForPolicyChangeError to
        be more like its buddies.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameLoader):
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame):
        (WebCore::FrameLoader::interruptionForPolicyChangeError):
        (WebCore::FrameLoader::dispatchDidCommitLoad):
        * loader/FrameLoader.h:

2010-11-12  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by David Hyatt.

        Spatial Navigation: Cannot focus on some ContainerNode
        https://bugs.webkit.org/show_bug.cgi?id=48393

        ContainerNode::getLowerRightCorner() assumes that the lowest right corner of its last child 
        is its own lowest right corner. If that child is an empty text node after an image, it does 
        not have size and position information, so we should go to the previous child.

        Tests: fast/events/spatial-navigation/snav-container-only-white-space.html
               fast/events/spatial-navigation/snav-container-white-space.html

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

2010-11-12  James Simonsen  <simonjam@chromium.org>

        Reviewed by Darin Fisher.

        [Web Timing] Rename interfaces:
        - Navigation -> PerformanceNavigation
        - Timing -> PerformanceTiming
        https://bugs.webkit.org/show_bug.cgi?id=48919

        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * page/Performance.cpp:
        (WebCore::Performance::navigation):
        (WebCore::Performance::timing):
        * page/Performance.h:
        * page/Performance.idl:
        * page/PerformanceNavigation.cpp: Renamed from WebCore/page/Navigation.cpp.
        (WebCore::PerformanceNavigation::PerformanceNavigation):
        (WebCore::PerformanceNavigation::frame):
        (WebCore::PerformanceNavigation::disconnectFrame):
        (WebCore::PerformanceNavigation::type):
        (WebCore::PerformanceNavigation::redirectCount):
        * page/PerformanceNavigation.h: Renamed from WebCore/page/Navigation.h.
        (WebCore::PerformanceNavigation::create):
        * page/PerformanceNavigation.idl: Renamed from WebCore/page/Navigation.idl.
        * page/PerformanceTiming.cpp: Renamed from WebCore/page/Timing.cpp.
        (WebCore::toIntegerMilliseconds):
        (WebCore::getPossiblySkewedTimeInKnownRange):
        (WebCore::PerformanceTiming::PerformanceTiming):
        (WebCore::PerformanceTiming::frame):
        (WebCore::PerformanceTiming::disconnectFrame):
        (WebCore::PerformanceTiming::navigationStart):
        (WebCore::PerformanceTiming::unloadEventEnd):
        (WebCore::PerformanceTiming::redirectStart):
        (WebCore::PerformanceTiming::redirectEnd):
        (WebCore::PerformanceTiming::fetchStart):
        (WebCore::PerformanceTiming::domainLookupStart):
        (WebCore::PerformanceTiming::domainLookupEnd):
        (WebCore::PerformanceTiming::connectStart):
        (WebCore::PerformanceTiming::connectEnd):
        (WebCore::PerformanceTiming::requestStart):
        (WebCore::PerformanceTiming::requestEnd):
        (WebCore::PerformanceTiming::responseStart):
        (WebCore::PerformanceTiming::responseEnd):
        (WebCore::PerformanceTiming::domLoading):
        (WebCore::PerformanceTiming::domInteractive):
        (WebCore::PerformanceTiming::domContentLoaded):
        (WebCore::PerformanceTiming::domComplete):
        (WebCore::PerformanceTiming::loadEventStart):
        (WebCore::PerformanceTiming::loadEventEnd):
        (WebCore::PerformanceTiming::documentLoader):
        (WebCore::PerformanceTiming::documentTiming):
        (WebCore::PerformanceTiming::documentLoadTiming):
        (WebCore::PerformanceTiming::resourceLoadTiming):
        (WebCore::PerformanceTiming::resourceLoadTimeRelativeToAbsolute):
        * page/PerformanceTiming.h: Renamed from WebCore/page/Timing.h.
        (WebCore::PerformanceTiming::create):
        * page/PerformanceTiming.idl: Renamed from WebCore/page/Timing.idl.

2010-11-12  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        Remove unused code from HTMLMediaElement
        https://bugs.webkit.org/show_bug.cgi?id=49451

        Just removing code, so no new tests.

        * html/HTMLMediaElement.cpp: Removed unused functions.
        * html/HTMLMediaElement.h:

2010-11-12  Ryosuke Niwa  <rniwa@webkit.org>

        Unreviewed Xcode project fix.

        * WebCore.xcodeproj/project.pbxproj:

2010-11-12  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=49473
        WebKitCSSMatrix shouldn't inherit from StyleBase

        No change in behavior, so no tests.

        * css/WebKitCSSMatrix.cpp:
        (WebCore::WebKitCSSMatrix::WebKitCSSMatrix): We don't inherit from StyleBase any more, so
        no need to initialize always-null parent.
        (WebCore::WebKitCSSMatrix::setMatrixValue): Since there was never a parent, useStrictParsing()
        just returned true.

        * css/WebKitCSSMatrix.h: Just inherit from RefCounted<WebKitCSSMatrix>. Removed unused default
        constructor and copy constructor.

        * html/canvas/WebGLRenderingContext.h: Removed an unnneded forward declaration.

2010-11-12  Helder Correia  <helder@sencha.com>

        Reviewed by Andreas Kling.

        [Qt] Path::addArc() does not set right angle direction on full arcs
        https://bugs.webkit.org/show_bug.cgi?id=49138

        Ensure correctness of nonzero winding rule for full arc paths.
        Invert the sign of the span if the direction is counterclockwise.

        Test: fast/canvas/canvas-arc-360-winding.html

        * platform/graphics/qt/PathQt.cpp:
        (WebCore::Path::addArc):

2010-11-05  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Implement shadow DOM-aware event targeting and introduce EventContext to track the context of each event dispatch.
        https://bugs.webkit.org/show_bug.cgi?id=46015

        Test: fast/events/shadow-boundary-crossing-2.html

        This patch adds the notion of EventContext (and a very similar-acting WindowEventContext, specifically
        for DOMWindow), an abstraction that carries information around dispatching an event for any given Node.

        This abstraction is necessary to ensure that events, fired from shadow DOM nodes are properly retargeted to
        appear as if they are coming from their host, thus never exposing the shadow DOM nodes to the world outside.

        * Android.mk: Added EventContext, WindowEventContext files.
        * CMakeLists.txt: Ditto.
        * GNUmakefile.am: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * dom/ContainerNode.cpp:
        (WebCore::notifyChildInserted): Changed to be shadow DOM-aware.
        * dom/EventContext.cpp: Added.
        * dom/EventContext.h: Added.
        * dom/Node.cpp:
        (WebCore::Node::markAncestorsWithChildNeedsStyleRecalc): Changed to be shadow DOM-aware.
        (WebCore::Node::createRendererIfNeeded): Ditto.
        (WebCore::Node::parentOrHostNode): Added new helper method.
        (WebCore::Node::enclosingLinkEventParentOrSelf): Changed to be shadow DOM-aware.
        (WebCore::eventTargetRespectingSVGTargetRules): Collapsed two helper methods into one.
        (WebCore::Node::getEventAncestors): Renamed and refactored to collect a vector of EventContexts.
        (WebCore::Node::topEventContext): Added.
        (WebCore::eventHasListeners): Changed to use EventContexts.
        (WebCore::Node::dispatchGenericEvent): Ditto.
        * dom/Node.h: Removed eventParentNode that's no longer needed, added parentOrHostNode decl,
            and changed signature of eventAncestors to use EventContexts.
        * dom/Text.cpp:
        (WebCore::Text::createRenderer): Changed to be shadow DOM-aware.
        * dom/WindowEventContext.cpp: Added.
        * dom/WindowEventContext.h: Added.
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::getEventListenersForNode): Changed to use EventContexts.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::updateMouseEventTargetNode): Removed code that's no longer necessary.
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::subtreeHasChanged): Removed event invocation that's
            no longer necessary.
        * rendering/ShadowElement.h: Made m_shadowParent a RefPtr to avoid stale references when parent
        is deleted.
        * rendering/TextControlInnerElements.cpp:
        (WebCore::TextControlInnerTextElement::defaultEventHandler): Flipped the condition back
            from where it was prior to r60418.
        * svg/SVGElement.cpp: Removed eventParentNode that's no longer needed.
        * svg/SVGElement.h: Ditto.

2010-11-12  Ryuan Choi  <ryuan.choi@samsung.com>

        Reviewed by Martin Robinson.

        [GTK] Remove unnecessary header for FontPlatformDataPango.cpp
        https://bugs.webkit.org/show_bug.cgi?id=46029

        Remove unnecessary header includes.
        No new tests, as there's no functionality.

        * platform/graphics/pango/FontPlatformDataPango.cpp:

2010-11-11  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Adam Barth.

        Not allow drag and drop across different origins.
        https://bugs.webkit.org/show_bug.cgi?id=49098

        Test: http/tests/security/drag-drop-different-origin.html

        * page/DragController.cpp:
        (WebCore::DragController::tryDocumentDrag):
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::canDropOnTarget):
        * page/SecurityOrigin.h:

2010-11-11  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Inspect element tooltip obscures element metrics
        https://bugs.webkit.org/show_bug.cgi?id=47822

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::drawNodeHighlight):
        (WebCore::InspectorController::drawElementTitle):

2010-11-12  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Button's background style from default Qt Mobile Theme  is overriding facebook's button style
        https://bugs.webkit.org/show_bug.cgi?id=48198

        Instead of creating gradients that goes from white to grey and cover the whole element the gradients
        are created by varying the alpha channel of a dark color. This way the effect will not override the
        background color of the elements.

        * css/themeQtMobile.css:

2010-11-12  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Adam Barth.

        Use a RefPtr inside ContainerNode::willRemove loop
        https://bugs.webkit.org/show_bug.cgi?id=49237

        Test: fast/innerHTML/innerHTML-iframe.html

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

2010-11-12  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: add more event listener breakpoint types, add support for regular breakpoint hit state, beautify hit rendering.
        https://bugs.webkit.org/show_bug.cgi?id=49130

        * English.lproj/localizedStrings.js:
        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager.prototype.debuggerPaused):
        (WebInspector.Breakpoint.jsBreakpointId):
        (WebInspector.Breakpoint.prototype.get id):
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.EventListenerBreakpointsSidebarPane):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._createCategory):
        * inspector/front-end/CallStackSidebarPane.js:
        (WebInspector.CallStackSidebarPane.prototype._breakpointHit): don't call populateStatusMessage for JS breakpoints
        since there is no specific message in that case.
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype.reset):
        * inspector/front-end/inspector.css:
        (#elements-sidebar):
        (.pane > .body):
        (#scripts-sidebar):
        (li.breakpoint-hit .breakpoint-hit-marker):

2010-11-12  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: [Extensions API] [refactoring] generate public API interfaces automatically
        https://bugs.webkit.org/show_bug.cgi?id=49441

        * inspector/front-end/ExtensionAPI.js:
        (WebInspector.injectedExtensionAPI.PanelImpl):
        (WebInspector.injectedExtensionAPI):
        (WebInspector.injectedExtensionAPI.WatchExpressionSidebarPane):
        (WebInspector.injectedExtensionAPI.AuditCategoryImpl):
        (WebInspector.injectedExtensionAPI.AuditResultImpl):
        (WebInspector.injectedExtensionAPI.AuditResultImpl.prototype.get Severity):
        (WebInspector.injectedExtensionAPI.):

2010-11-12  Renata Hodovan  <reni@webkit.org>

        Reviewed by Nikolas Zimmermann.

        SVGFEDisplacementMapElement doesn't support dynamic invalidation
        https://bugs.webkit.org/show_bug.cgi?id=49430

        The dynamic changes are captured by the svgAttributeChanged function. Invalidate the filter primitive if necessary.

        Tests: svg/dynamic-updates/SVGFEDisplacementMapElement-dom-in-attr.html
               svg/dynamic-updates/SVGFEDisplacementMapElement-dom-in2-attr.html
               svg/dynamic-updates/SVGFEDisplacementMapElement-dom-scale-attr.html
               svg/dynamic-updates/SVGFEDisplacementMapElement-dom-xChannelSelector-attr.html
               svg/dynamic-updates/SVGFEDisplacementMapElement-dom-yChannelSelector-attr.html
               svg/dynamic-updates/SVGFEDisplacementMapElement-svgdom-in-prop.html
               svg/dynamic-updates/SVGFEDisplacementMapElement-svgdom-in2-prop.html
               svg/dynamic-updates/SVGFEDisplacementMapElement-svgdom-scale-prop.html
               svg/dynamic-updates/SVGFEDisplacementMapElement-svgdom-xChannelSelector-prop.html
               svg/dynamic-updates/SVGFEDisplacementMapElement-svgdom-yChannelSelector-prop.html

        * svg/SVGFEDisplacementMapElement.cpp:
        (WebCore::SVGFEDisplacementMapElement::svgAttributeChanged):
        * svg/SVGFEDisplacementMapElement.h:

2010-11-12  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: [refactoring] do not use absolute positioning for tabbed panes
        https://bugs.webkit.org/show_bug.cgi?id=49439

        * inspector/front-end/TabbedPane.js:
        (WebInspector.TabbedPane):
        (WebInspector.TabbedPane.prototype.appendTab):
        * inspector/front-end/inspector.css:
        (.resource-view.visible):
        (.resource-view .tabbed-pane-header):
        (.resource-view-cookies):
        (.tabbed-pane):
        (.tabbed-pane-content):
        * inspector/front-end/networkPanel.css:

2010-11-12  John Knottenbelt  <jknotten@chromium.org>

        Reviewed by Steve Block.

        Rename GeolocationControllerClient to GeolocationClient.
        https://bugs.webkit.org/show_bug.cgi?id=49259

        No new tests, renaming only.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.order:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * page/GeolocationClient.h: Renamed from WebCore/page/GeolocationControllerClient.h.
        (WebCore::GeolocationClient::~GeolocationClient):
        * page/GeolocationController.cpp:
        (WebCore::GeolocationController::GeolocationController):
        * page/GeolocationController.h:
        * page/Page.h:

2010-11-12  Ilya Sherman  <isherman@chromium.org>

        Reviewed by Eric Seidel.

        Remove some trailing whitespace
        https://bugs.webkit.org/show_bug.cgi?id=49433

        * platform/PopupMenuClient.h:
        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupContainer::show):
        (WebCore::PopupListBox::paintRow):
        (WebCore::PopupListBox::scrollToRevealRow):
        * platform/chromium/PopupMenuChromium.h:
        * platform/chromium/SearchPopupMenuChromium.cpp:
        * rendering/RenderMenuList.h:
        (WebCore::RenderMenuList::toRenderMenuList):
        * rendering/RenderTextControlSingleLine.h:
        (WebCore::toRenderTextControlSingleLine):

2010-11-12  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [qt] script-clone tests added in r71895 fails on qt platform
        https://bugs.webkit.org/show_bug.cgi?id=49429

        Fixed parseEndElement to call ScriptElement's executeScript as supposed to that of ScriptController.

        * dom/XMLDocumentParserQt.cpp:
        (WebCore::XMLDocumentParser::parseEndElement):

2010-11-05  MORITA Hajime  <morrita@google.com>

        Reviewed by Kent Tamura.

        Refactoring: Return values of TextCheckingHelper::paragraphAlignedRange should form a class.
        https://bugs.webkit.org/show_bug.cgi?id=49053

        Replaced paragraphAlignedRange() function call into
        TextCheckingParagraph class. The class encapsulates a range of a
        paragraph, and its relation within associated checking range.
        Instance variables of the class are computed lazily. So we can save unnecessary
        memory allocation and DOM tree traversal.
        
        No new tests, no behavior change. 

        * editing/Editor.cpp:
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges): Replaced paragraphAlignedRange() call.
        (WebCore::Editor::changeBackToReplacedString): Replaced paragraphAlignedRange() call.
        * editing/TextCheckingHelper.cpp:
        (WebCore::expandToParagraphBoundary):
        (WebCore::TextCheckingParagraph::TextCheckingParagraph):
        (WebCore::TextCheckingParagraph::~TextCheckingParagraph):
        (WebCore::TextCheckingParagraph::expandRangeToNextEnd):
        (WebCore::TextCheckingParagraph::invalidateParagraphRangeValues):
        (WebCore::TextCheckingParagraph::rangeLength):
        (WebCore::TextCheckingParagraph::paragraphRange):
        (WebCore::TextCheckingParagraph::subrange):
        (WebCore::TextCheckingParagraph::offsetTo):
        (WebCore::TextCheckingParagraph::isEmpty):
        (WebCore::TextCheckingParagraph::offsetAsRange):
        (WebCore::TextCheckingParagraph::text):
        (WebCore::TextCheckingParagraph::checkingStart):
        (WebCore::TextCheckingParagraph::checkingEnd):
        (WebCore::TextCheckingParagraph::checkingLength):
        (WebCore::TextCheckingHelper::findFirstBadGrammar): Replaced paragraphAlignedRange() call.
        (WebCore::TextCheckingHelper::guessesForMisspelledOrUngrammaticalRange): Replaced paragraphAlignedRange() call.
        * editing/TextCheckingHelper.h:
        (WebCore::TextCheckingParagraph::textLength):
        (WebCore::TextCheckingParagraph::textSubstring):
        (WebCore::TextCheckingParagraph::textCharacters):
        (WebCore::TextCheckingParagraph::textCharAt):
        (WebCore::TextCheckingParagraph::checkingSubstring):
        (WebCore::TextCheckingParagraph::checkingRangeMatches):
        (WebCore::TextCheckingParagraph::isCheckingRangeCoveredBy):
        (WebCore::TextCheckingParagraph::checkingRangeCovers):
        (WebCore::TextCheckingParagraph::checkingRange):
        (WebCore::TextCheckingParagraph::isTextEmpty):
        (WebCore::TextCheckingParagraph::isRangeEmpty):

2010-11-11  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        Script runs more than once after a clone
        https://bugs.webkit.org/show_bug.cgi?id=48966

        The bug was caused by cloneElementWithoutChildren's not propagating isEvaluated flag,
        which indicates whether or not the script has already started, and the fact
        neither HTMLScriptRunner nor XMLDocumentParser was setting isEvaluated flag to true.

        Fixed the bug by making cloneElementWithoutChildren call a virtual cloneElementWithoutAttributesAndChildren,
        and override it in HTMLScriptElement and SVGScriptElement to propagate isEvaluated flag,
        and replacing direct access to ScriptController by a call to new ScriptElementData::executeScript,
        which updates the isEvaluated flag properly.

        See also: http://www.whatwg.org/specs/web-apps/current-work/#already-started

        Tests: fast/dom/script-clone-rerun-self.html
               fast/dom/script-clone-rerun.html
               svg/dom/SVGScriptElement/script-clone-rerun-self.svg
               svg/dom/SVGScriptElement/script-clone-rerun.svg

        * dom/Element.cpp:
        (WebCore::Element::cloneElementWithoutChildren): Calls cloneElementWithoutChildren.
        (WebCore::Element::cloneElementWithoutAttributesAndChildren): Extracted from cloneElementWithoutChildren.
        * dom/Element.h:
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElementData::ScriptElementData): Added isEvaluated flag to the argument list.
        (WebCore::ScriptElementData::evaluateScript): Extracted from HTMLScriptRunner::executeScript.
        (WebCore::ScriptElementData::executeScript): Renamed evaluated to isEvaluated.
        (WebCore::ScriptElementData::ignoresLoadRequest): Renamed evaluated to isEvaluated.
        * dom/ScriptElement.h: Renamed evaluated to isEvaluated.
        (WebCore::ScriptElementData::isEvaluated): Added.
        * dom/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::endElementNs): Calls ScriptElement::executeScript.
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::HTMLScriptElement): Added isEvaluated flag to the argument list.
        (WebCore::HTMLScriptElement::create): Calls the constructor with the isEvaluated flag set to false.
        (WebCore::HTMLScriptElement::cloneElementWithoutAttributesAndChildren): Propagates isEvaluated.
        (WebCore::HTMLScriptElement::executeScript): Added; calls ScriptElementData::executeScript.
        * html/HTMLScriptElement.h:
        * html/parser/HTMLScriptRunner.cpp:
        (WebCore::HTMLScriptRunner::executePendingScriptAndDispatchEvent): Added an assertion that was lost
        in extracting ScriptElementData::executeScript.
        (WebCore::HTMLScriptRunner::runScript): Calls ScriptElementData::executeScript.
        * html/parser/HTMLScriptRunner.h:
        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::SVGScriptElement): Added isEvaluated flag to the argument list.
        (WebCore::SVGScriptElement::create): Calls the constructor with the isEvaluated flag set to false.
        (WebCore::SVGScriptElement::cloneElementWithoutAttributesAndChildren): Propagates isEvaluated.
        (WebCore::SVGScriptElement::executeScript): Added; calls ScriptElementData::executeScript.
        * svg/SVGScriptElement.h:

2010-11-11  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Darin Adler.

        REGRESSION: window.print in onload doesn't fire if there's an img
        https://bugs.webkit.org/show_bug.cgi?id=48195

        This issue was introduced in
        https://bugs.webkit.org/show_bug.cgi?id=43658
        This happens because FrameLoader::isLoading() is false while an
        image is still loading. Now, window.print() happens after all
        resources are loaded.

        Also changed the name of a member variable as Darin suggested in Bug 43658.

        Added a manual test as DRT doesn't support window.print() yet.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::DocumentLoader):
        (WebCore::DocumentLoader::updateLoading):
        * loader/DocumentLoader.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::DOMWindow):
        (WebCore::DOMWindow::print):
        (WebCore::DOMWindow::finishedLoading):
        * page/DOMWindow.h:

2010-11-11  James Simonsen  <simonjam@chromium.org>

        Reviewed by Tony Chang.

        [chromium] Support letter spacing and fix whitespace wrapping on linux

        When lines wrapped on RTL text, the whitespace was inserted before
        the first character on the new line instead of at the end of the
        previous line. This has been fixed.

        The missing cluster information needed for letter spacing was hidden in
        harfbuzz's attributes struct.

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

        * platform/graphics/chromium/FontLinux.cpp:
        (WebCore::TextRunWalker::letterSpacing): Added.
        (WebCore::TextRunWalker::isWordBreak): No need for isRTL.
        (WebCore::TextRunWalker::setPadding): Ditto.
        (WebCore::TextRunWalker::setGlyphXPositions): Support letter spacing. No whitespace before RTL text on new line.
        (WebCore::glyphIndexForXPositionInScriptRun): Support letter spacing.

2010-11-11  Kavita Kanetkar  <kkanetkar@chromium.org>

        Reviewed by Dumitru Daniliuc.

        FileSystem: Fix a link error for non-chromium WebKit build
        https://bugs.webkit.org/show_bug.cgi?id=49296

        * WebCore.xcodeproj/project.pbxproj:
        * inspector/InspectorFileSystemAgent.cpp:
        (WebCore::InspectorFileSystemAgentCallbacks::didOpenFileSystem):
        (WebCore::InspectorFileSystemAgentCallbacks::didReadDirectoryEntry):
        (WebCore::InspectorFileSystemAgentCallbacks::didReadDirectoryEntries):
        (WebCore::InspectorFileSystemAgentCallbacks::didCreateFileWriter):
        (WebCore::InspectorFileSystemAgentCallbacks::didFail):
        (WebCore::InspectorFileSystemAgent::revealFolderInOS):

2010-11-11  Nate Chapin  <japhet@chromium.org>

        Reviewed by Antti Koivisto.

        Cleanup after http://trac.webkit.org/changeset/71562, namely:
        Make deferred request handle simpler.
        Don't perform callbacks associated with network load starting
        (e.g., willSendRequest) until the load is in fact sent to the network.
        Make ResourceLoadScheduler a friend of ResourceLoader and make
        ResourceLoader::start() protected to try to ensure loads actually
        go through the scheduler.
        https://bugs.webkit.org/show_bug.cgi?id=49351

        Behavior should be covered by existing tests.

        * loader/NetscapePlugInStreamLoader.cpp:
        (WebCore::NetscapePlugInStreamLoader::create):
        * loader/ResourceLoadScheduler.cpp:
        (WebCore::ResourceLoadScheduler::servePendingRequests):
        * loader/ResourceLoadScheduler.h:
        (WebCore::ResourceLoadScheduler::HostInformation::limitRequests):
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::init):
        (WebCore::ResourceLoader::start):
        (WebCore::ResourceLoader::setDefersLoading):
        (WebCore::ResourceLoader::didCancel):
        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::reachedTerminalState):
        (WebCore::ResourceLoader::request):
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::create):
        * loader/loader.cpp:
        (WebCore::Loader::load):
        (WebCore::Loader::willSendRequest):
        * loader/loader.h:

2010-11-11  Carol Szabo <carol.szabo@nokia.com>

        Reviewed by Kent Tamura.

        css2:order of counters in out-of flow content
        https://bugs.webkit.org/show_bug.cgi?id=32412

        Tests: fast/css/content/content-none.html
               fast/css/content/content-normal.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseContent):
        Added support for none, normal, open-quote, no-open-quote, etc.
        identifiers in terms of parsing only, as this has effect on the
        evaluation of counters. No further implementation needed for 
        none and normal, the others are parsed but do not work as expected.

2010-11-11  Julie-Jeongeun-Kim  <jiyuluna@gmail.com>

        Reviewed by Kent Tamura.

        SelectionStart, selectionEnd properties return wrong values when the selection is in a read-only input or textarea element
        https://bugs.webkit.org/show_bug.cgi?id=25444

        'rootEditableElement()' is checked on RenderTextControl::indexForVisiblePosition.
        It means that just editable elements can get selection information.
        ReadOnly element is not editable element. So, it just returns and can't get correct selection information.
        INPUT and TEXTAREA elements can be read-only but 'indexForVisiblePosition' doesn't accept them.
        So, Selectable elements, INPUT and TEXTAREA, checking is added for that case.
        Even if they are read-only, they are selectable.

        new tests:fast/forms/selection-start-end-readonly.html

        * html/HTMLInputElement.idl:
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::isSelectableElement):
        (WebCore::RenderTextControl::indexForVisiblePosition):
        * rendering/RenderTextControl.h:

2010-11-11  Adam Barth  <abarth@webkit.org>

        Reviewed by David Levin.

        Add some RefPtrs to be on the safe side
        https://bugs.webkit.org/show_bug.cgi?id=49301

        Hopefully no behavior change.

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processIsindexStartTagForInBody):

2010-11-11  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Fix Accelerate.framework issues in VectorMath 32-bit ppc & i386 vs. other architectures (64-bit, ARM, etc.).
        On the Mac we use the highly optimized versions in Accelerate.framework
        In 32-bit mode (__ppc__ or __i386__) <Accelerate/Accelerate.h> includes <vecLib/vDSP_translate.h> which defines macros
        of the same name as our namespaced function names, so we must handle this case differently.
        Other architectures (64bit, ARM, etc.) do not include this header file.
        
        https://bugs.webkit.org/show_bug.cgi?id=49112

        No new tests since audio API is not yet implemented.

        * platform/audio/VectorMath.cpp:
        (WebCore::VectorMath::vsmul):
        (WebCore::VectorMath::vadd):

2010-11-11  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/8657116> fast/text/justification-padding-mid-word.html fails on Windows
        https://bugs.webkit.org/show_bug.cgi?id=49378

        * platform/graphics/win/UniscribeController.cpp:
        (WebCore::UniscribeController::shapeAndPlaceItem): For all characters that need to be treated
        as zero-width spaces, substitute the space glyph with zero advance. Apply justification padding
        and word spacing only at characters treated as (non-zero-width) spaces.

2010-11-11  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Harden some string functions against large lengths
        https://bugs.webkit.org/show_bug.cgi?id=49293

        * rendering/RenderText.cpp:
        (WebCore::makeCapitalized): Check before incrementing length.

2010-11-10  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        bufferData/bufferSubData should not crash with null data input
        https://bugs.webkit.org/show_bug.cgi?id=49350

        * html/canvas/WebGLRenderingContext.cpp: return early if input data is null.
        (WebCore::WebGLRenderingContext::bufferData):
        (WebCore::WebGLRenderingContext::bufferSubData):

2010-11-10  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        Implement UNPACK_COLORSPACE_CONVERSION_WEBGL
        https://bugs.webkit.org/show_bug.cgi?id=47196

        This is the first patch for this bug.  We add constants and methods, but haven't hooked it up with texture uploading yet.  Also, in order to check in constants.html, we need to remove out-dated constants, and update affected tests correspondingly.

        Test: fast/canvas/webgl/constants.html

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::WebGLRenderingContext): Move init code to initializeNewContext.
        (WebCore::WebGLRenderingContext::initializeNewContext): Ditto.
        (WebCore::WebGLRenderingContext::getParameter): Implement UNPACK_COLORSPACE_CONVERSION_WEBGL.
        (WebCore::WebGLRenderingContext::pixelStorei): Ditto.
        * html/canvas/WebGLRenderingContext.h: Add a member to track UNPACK_COLORSPACE_CONVERSION_WEBGL setting.
        * html/canvas/WebGLRenderingContext.idl: Update constants.
        * platform/graphics/GraphicsContext3D.h: Update constants.

2010-11-11  Chris Marrin  <cmarrin@apple.com>

        Reviewed by James Robinson.

        Add multisampling support to DrawingBuffer.
        https://bugs.webkit.org/show_bug.cgi?id=49206

        Added support for the GL_ANGLE_framebuffer_blit and GL_ANGLE_framebuffer_multisample
        extensions to Extensions3D. Then I use these to add multisample support to DrawingBuffer.

        This re-lands changes rolled out by http://trac.webkit.org/changeset/71839. It includes
        the change from http://trac.webkit.org/changeset/71831 and additional changes to 
        DrawingBufferChromium.cpp which cause the broken canvas tests to pass.

        * platform/graphics/Extensions3D.h:
        * platform/graphics/chromium/DrawingBufferChromium.cpp:
        (WebCore::DrawingBuffer::DrawingBuffer):
        (WebCore::DrawingBuffer::~DrawingBuffer):
        (WebCore::DrawingBuffer::publishToPlatformLayer):
        (WebCore::DrawingBuffer::didReset):
        (WebCore::DrawingBuffer::platformColorBuffer):
        * platform/graphics/chromium/Extensions3DChromium.h:
        (WebCore::Extensions3DChromium::blitFramebuffer):
        (WebCore::Extensions3DChromium::renderbufferStorageMultisample):
        * platform/graphics/gpu/DrawingBuffer.cpp:
        (WebCore::DrawingBuffer::create):
        (WebCore::DrawingBuffer::clear):
        (WebCore::DrawingBuffer::reset):
        (WebCore::DrawingBuffer::commit):
        (WebCore::DrawingBuffer::bind):
        * platform/graphics/gpu/DrawingBuffer.h:
        (WebCore::DrawingBuffer::multisample):
        * platform/graphics/gpu/mac/DrawingBufferMac.mm:
        (WebCore::DrawingBuffer::DrawingBuffer):
        (WebCore::DrawingBuffer::didReset):
        (WebCore::DrawingBuffer::platformColorBuffer):
        * platform/graphics/opengl/Extensions3DOpenGL.cpp:
        (WebCore::Extensions3DOpenGL::supports):
        (WebCore::Extensions3DOpenGL::blitFramebuffer):
        (WebCore::Extensions3DOpenGL::renderbufferStorageMultisample):
        * platform/graphics/opengl/Extensions3DOpenGL.h:
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageBuffer::draw):

2010-11-11  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=48664
        
        Make repaint invalidation work with flipped blocks ("rl" and "bt" writing modes).
        
        This patch disables the layout state for flipped blocks, since the paint offset isn't right.
        
        Bugs in the overflow sides for lines have been fixed.  before/AfterSideVisible/LayoutOverflowForLine
        now respect flipping (and don't incorrectly change sides).  This is a very confusing aspect of
        the overflow stuff (and at some point we should consider renaming top/left/right/bottom since they
        aren't physical).
        
        offsetFromContainer and mapLocalToContainer remain physical and refer to the top left offset.
        This means at every step up you convert to the correct physical coordinate.  It also means these
        functions will be unreliable during layout for flipped blocks.  At first glance, this seems to be
        more or less ok.
        
        computeRectForRepaint now delays flipping conversions until you cross a writing-mode boundary.  This
        allows for documents to be fully flipped and repaint during layout can still be reliable.  This is
        critical for incremental line layout repainting.
        
        Added new tests in fast/repaint and also rebaselined the tests in that directory because I'm tired
        of all the stale results and failures.

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::absoluteBoundsForLocalRect):
        (WebCore::SelectionController::paintCaret):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::selectionRect):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::layoutOnlyPositionedObjects):
        (WebCore::RenderBlock::paintSelection):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::beforeSideVisibleOverflowForLine):
        (WebCore::RenderBlock::afterSideVisibleOverflowForLine):
        (WebCore::RenderBlock::beforeSideLayoutOverflowForLine):
        (WebCore::RenderBlock::afterSideLayoutOverflowForLine):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::layout):
        (WebCore::RenderBox::mapLocalToContainer):
        (WebCore::RenderBox::offsetFromContainer):
        (WebCore::RenderBox::clippedOverflowRectForRepaint):
        (WebCore::RenderBox::computeRectForRepaint):
        (WebCore::RenderBox::flipForWritingMode):
        (WebCore::RenderBox::locationOffsetIncludingFlipping):
        * rendering/RenderBox.h:
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::clippedOverflowRectForRepaint):
        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::layout):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::layout):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::layout):
        (WebCore::RenderTableSection::layoutRows):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::computeRectForRepaint):
        * rendering/ShadowElement.cpp:
        (WebCore::ShadowBlockElement::layoutAsPart):

2010-11-11  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Share code between Mac (CA) and Windows (CACF) GraphicsLayer implementations
        https://bugs.webkit.org/show_bug.cgi?id=49388

        Renamed GraphicsLayerCA.* to GraphicsLayerMac.*

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/mac/GraphicsLayerCA.h: Removed.
        * platform/graphics/mac/GraphicsLayerCA.mm: Removed.
        * platform/graphics/mac/GraphicsLayerMac.h: Copied from WebCore/platform/graphics/mac/GraphicsLayerCA.h.
        * platform/graphics/mac/GraphicsLayerMac.mm: Copied from WebCore/platform/graphics/mac/GraphicsLayerCA.mm.

2010-11-11  Kenneth Russell  <kbr@google.com>

        Reviewed by James Robinson.

        [chromium] Missing adoptPtr in GraphicsContext3DSkia.cpp
        https://bugs.webkit.org/show_bug.cgi?id=49359

        * platform/graphics/skia/GraphicsContext3DSkia.cpp:
        (WebCore::GraphicsContext3D::getImageData):

2010-11-11  Dan Bernstein  <mitz@apple.com>

        Reviewed by Adam Roben.

        <rdar://problem/8113511> Enable auto-hyphenation

        * WebCore.vcproj/WebCore.vcproj: Included HyphenationCF.cpp instead of Hyphenation.cpp.
        * platform/text/cf/HyphenationCF.cpp: Added functions and definitions for Windows to look up CFStringGetHyphenationLocationBeforeIndex
        and CFStringIsHyphenationAvailableForLocale at runtime.
        (wkCFStringGetHyphenationLocationBeforeIndex):
        (wkCFStringIsHyphenationAvailableForLocale):
        (WebCore::lastHyphenLocation): Added a cast.

2010-11-11  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Eric Seidel.

        video-pause-immediately.html sometimes fails
        https://bugs.webkit.org/show_bug.cgi?id=49397

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::playInternal): Don't bother calling invalidateCachedTime, it
        will be called from updatePlayState.
        (WebCore::HTMLMediaElement::pauseInternal): Don't bother calling refreshCachedTime, it
        will be called from updatePlayState.
        (WebCore::HTMLMediaElement::updatePlayState): Call refreshCachedTime after telling the media
        engine to pause so we cache the post-paused time.

2010-11-11  Mihai Parparita  <mihaip@chromium.org>

        Unreviewed rollout. 
        
        Roll out r71827 and r71831, which caused many GPU canvas test failures.

        * platform/graphics/Extensions3D.h:
        * platform/graphics/chromium/DrawingBufferChromium.cpp:
        (WebCore::DrawingBuffer::reset):
        (WebCore::DrawingBuffer::getRenderingResultsAsTexture):
        * platform/graphics/chromium/Extensions3DChromium.h:
        * platform/graphics/gpu/DrawingBuffer.cpp:
        (WebCore::DrawingBuffer::create):
        (WebCore::DrawingBuffer::clear):
        (WebCore::DrawingBuffer::bind):
        * platform/graphics/gpu/DrawingBuffer.h:
        * platform/graphics/gpu/SharedGraphicsContext3D.cpp:
        (WebCore::SharedGraphicsContext3D::create):
        * platform/graphics/gpu/mac/DrawingBufferMac.mm:
        (WebCore::DrawingBuffer::DrawingBuffer):
        (WebCore::DrawingBuffer::reset):
        * platform/graphics/opengl/Extensions3DOpenGL.cpp:
        (WebCore::Extensions3DOpenGL::supports):
        * platform/graphics/opengl/Extensions3DOpenGL.h:
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageBuffer::draw):

2010-11-11  Eric Carlson  <eric.carlson@apple.com>

        Restore the portion of the ChangeLog removed in my last commit.

2010-11-11  Eric Carlson  <eric.carlson@apple.com>

        Unreviewed Leoaprd build fix.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::invalidateCachedTime): Make the const a double.

2010-11-11  Dirk Schulze  <krit@webkit.org>

        Unreviewed Qt build fix.

        SVGAnimation calcMode 'spline' should be useable for from-to and from-by animations
        https://bugs.webkit.org/show_bug.cgi?id=49284

        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::calculatePercentFromKeyPoints):
        (WebCore::SVGAnimationElement::startedActiveInterval):

2010-11-11  Hans Wennborg  <hans@chromium.org>

        Reviewed by Jeremy Orlow.

        IndexedDB: signal IDBFactoryBackendInterface destruction to embedder
        https://bugs.webkit.org/show_bug.cgi?id=49313

        Define IDBFactoryBackendInterface destructor out-of-line to allow
        for embedder-specific implementation. For Chromium, have the
        destructor call ChromiumBridge::idbShutdown().

        * platform/chromium/ChromiumBridge.h:
        * storage/IDBFactoryBackendInterface.cpp:
        (WebCore::IDBFactoryBackendInterface::~IDBFactoryBackendInterface):
        * storage/IDBFactoryBackendInterface.h:
        * storage/chromium/IDBFactoryBackendInterface.cpp:
        (WebCore::IDBFactoryBackendInterface::~IDBFactoryBackendInterface):

2010-11-11  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        SVGAnimation calcMode 'spline' should be useable for from-to and from-by animations
        https://bugs.webkit.org/show_bug.cgi?id=49284

        Add support for from-to and from-by animations in combination with calcMode 'spline' for SVGAnimations.

        Tests: svg/animations/animate-calcMode-spline-by.html
               svg/animations/animate-calcMode-spline-from-by.html
               svg/animations/animate-calcMode-spline-from-to.html
               svg/animations/animate-calcMode-spline-to.html
               svg/animations/animate-calcMode-spline-values.html

        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::calculateKeyTimesIndex): Added to share more code.
        (WebCore::SVGAnimationElement::calculatePercentFromKeyPoints):
        (WebCore::SVGAnimationElement::currentValuesForValuesAnimation):
        (WebCore::SVGAnimationElement::startedActiveInterval):
        (WebCore::SVGAnimationElement::updateAnimation):
        * svg/SVGAnimationElement.h:

2010-11-10  Chris Marrin  <cmarrin@apple.com>

        Reviewed by James Robinson.

        Add multisampling support to DrawingBuffer.
        https://bugs.webkit.org/show_bug.cgi?id=49206

        Added support for the GL_ANGLE_framebuffer_blit and GL_ANGLE_framebuffer_multisample
        extensions to Extensions3D. Then I use these to add multisample support to DrawingBuffer.

        * platform/graphics/Extensions3D.h:
        * platform/graphics/chromium/DrawingBufferChromium.cpp:
        (WebCore::DrawingBuffer::platformColorBuffer):
        * platform/graphics/chromium/Extensions3DChromium.h:
        (WebCore::Extensions3DChromium::blitFramebuffer):
        (WebCore::Extensions3DChromium::renderbufferStorageMultisample):
        * platform/graphics/gpu/DrawingBuffer.cpp:
        (WebCore::DrawingBuffer::create):
        (WebCore::DrawingBuffer::clear):
        (WebCore::DrawingBuffer::reset):
        (WebCore::DrawingBuffer::commit):
        (WebCore::DrawingBuffer::bind):
        * platform/graphics/gpu/DrawingBuffer.h:
        (WebCore::DrawingBuffer::multisample):
        * platform/graphics/gpu/mac/DrawingBufferMac.mm:
        (WebCore::DrawingBuffer::DrawingBuffer):
        (WebCore::DrawingBuffer::platformLayer):
        (WebCore::DrawingBuffer::platformColorBuffer):
        * platform/graphics/opengl/Extensions3DOpenGL.cpp:
        (WebCore::Extensions3DOpenGL::supports):
        (WebCore::Extensions3DOpenGL::blitFramebuffer):
        (WebCore::Extensions3DOpenGL::renderbufferStorageMultisample):
        * platform/graphics/opengl/Extensions3DOpenGL.h:
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageBuffer::draw):

2010-11-11  Eric Carlson  <eric.carlson@apple.com>

        Build fix after r71824.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::invalidateCachedTime): Use an explicit cast from double to float.
        (WebCore::HTMLMediaElement::currentTime): Ditto.

2010-11-11  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Antti Koivisto.

        Lots of time spent in MediaPlayerPrivate::currentTime() when playing multiple videos.
        https://bugs.webkit.org/show_bug.cgi?id=49009

        Make it possible for HTMLMediaElement to cache the movie time and report 'currentTime'
        as [cached time + elapsed wall time]. The media engine returns the maximum duration it 
        is safe to calculate time before resampling the actual movie time with the new
        maximumDurationToCacheMovieTime method. Because this may be different for different media
        engines the default return value is 0, making it an opt-in feature.

        No new tests were added because the existing tests already check currentTime, and because
        it is only possible to look for drift between the calculated and actual media time by 
        calculating the time AND getting the actual media time - which the defeats the purpose of
        the change. Building with LOG_CACHED_TIME_WARNINGS defined enables code that does both
        and logs warnings when the delta between calculated and observed is greater than 0.01.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Initialize new member variables.
        (WebCore::HTMLMediaElement::prepareForLoad): Force a time resync before setting m_paused.
        (WebCore::HTMLMediaElement::seek): Force a time resync before getting the current time before
        seeking so there is no drift.
        (WebCore::HTMLMediaElement::refreshCachedTime): New, update the cached movie time and the
        wall clock time it was recorded.
        (WebCore::HTMLMediaElement::invalidateCachedTime): New, flag the cached time as invalid.
        (WebCore::HTMLMediaElement::currentTime): Use a cached movie time for as long as the media
        engine says it is safe. Lots of optional logging can be enabled to help ports fine tune
        the maximum cache interval.
        (WebCore::HTMLMediaElement::ended): Force a time resync before setting m_paused.
        (WebCore::HTMLMediaElement::endScrubbing): Fix a typo in the logging.
        (WebCore::HTMLMediaElement::scheduleTimeupdateEvent): Call currentTime() instead of calling
        MediaPlayer so we use the cached time as much as it possible.
        (WebCore::HTMLMediaElement::mediaPlayerTimeChanged): Invalidate cached time because the engine
        seeked.
        (WebCore::HTMLMediaElement::mediaPlayerRateChanged): Ditto.
        (WebCore::HTMLMediaElement::updatePlayState): Invalidate cached time before changing m_paused.
        * html/HTMLMediaElement.h:

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::maximumDurationToCacheMovieTime): New.
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::maximumDurationToCacheMovieTime): New.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        (WebCore::MediaPlayerPrivate::maximumDurationToCacheMovieTime): New, say it is safe to cache
        time for five seconds (based on lots of experimenting with LOG_CACHED_TIME_WARNINGS enabled).

2010-11-11  Adam Roben  <aroben@apple.com>

        Windows build fix after r71816

        r71816 renamed
        WebCore/platform/graphics/cairo/FontPlatformDataCairoWin.h to
        WebCore/platform/graphics/win/FontPlatformData.h. This made Apple's
        Windows port pick up this header in preference to
        WebCore/platform/cg/FontPlatformData.h, thus breaking the build. I
        moved the file to
        WebCore/platform/graphics/win/cairo/FontPlatformData.h so it won't be
        picked up by Apple's Windows build.

        * WebCore.vcproj/WebCore.vcproj: Updated for file move and let VS
        re-sort the files.

        * WebCore.vcproj/WebCoreCairo.vsprops: Added
        platform/graphics/win/cairo to the include path.

        * WebCore.vcproj/copyForwardingHeaders.cmd: Copy files from
        platform/graphics/win/cairo to $WebKitOutputDir.

        * platform/graphics/cg/FontPlatformData.h: Touched to force this file
        to be recopied for Apple's build.

        * platform/graphics/win/cairo/FontPlatformData.h: Renamed from
        WebCore/platform/graphics/win/FontPlatformData.h.

2010-11-11  Balazs Kelemen  <kbalazs@webkit.org>

        Reviewed by Andreas Kling.

        [Qt][WK2] Implement BackingStore
        https://bugs.webkit.org/show_bug.cgi?id=49377
        No change in functionality so no tests.

        Add a way to hand off ownership of the QPainter and the underlying
        QPaintDevice to the GraphicsContext.
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContextPlatformPrivate::takeOwnershipOfPlatformContext):
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):
        (WebCore::GraphicsContextPlatformPrivate::~GraphicsContextPlatformPrivate):
        (WebCore::GraphicsContext::takeOwnershipOfPlatformContext):

2010-11-11  Ryuan Choi  <ryuan.choi@samsung.com>

        Reviewed by Adam Barth.

        [GTK] Move font related files.
        https://bugs.webkit.org/show_bug.cgi?id=48116

        Move pango and freetype related files to share non-GTK+ platforms.

        No new tests because this is pure refactoring.

        * CMakeListsEfl.txt:
        * GNUmakefile.am:
        * WebCore.vcproj/WebCore.vcproj:
        * platform/graphics/cairo/FontCacheFreeType.cpp: Removed.
        * platform/graphics/cairo/FontCustomPlatformData.cpp: Removed.
        * platform/graphics/cairo/FontPlatformData.h: Removed.
        * platform/graphics/cairo/FontPlatformDataFreeType.cpp: Removed.
        * platform/graphics/cairo/FontPlatformDataFreeType.h: Removed.
        * platform/graphics/cairo/GlyphPageTreeNodeCairo.cpp: Removed.
        * platform/graphics/cairo/SimpleFontDataCairo.cpp: Removed.
        * platform/graphics/freetype: Added.
        * platform/graphics/freetype/FontCacheFreeType.cpp: Copied from WebCore/platform/graphics/cairo/FontCacheFreeType.cpp.
        * platform/graphics/freetype/FontCustomPlatformDataFreeType.cpp: Copied from WebCore/platform/graphics/cairo/FontCustomPlatformData.cpp.
        * platform/graphics/freetype/FontPlatformData.h: Copied from WebCore/platform/graphics/cairo/FontPlatformDataFreeType.h.
        * platform/graphics/freetype/FontPlatformDataFreeType.cpp: Copied from WebCore/platform/graphics/cairo/FontPlatformDataFreeType.cpp.
        * platform/graphics/freetype/GlyphPageTreeNodeFreeType.cpp: Copied from WebCore/platform/graphics/cairo/GlyphPageTreeNodeCairo.cpp.
        * platform/graphics/freetype/SimpleFontDataFreeType.cpp: Copied from WebCore/platform/graphics/cairo/SimpleFontDataCairo.cpp.
        * platform/graphics/gtk/FontCachePango.cpp: Removed.
        * platform/graphics/gtk/FontCustomPlatformDataPango.cpp: Removed.
        * platform/graphics/gtk/FontPlatformDataPango.cpp: Removed.
        * platform/graphics/gtk/FontPlatformDataPango.h: Removed.
        * platform/graphics/gtk/GlyphPageTreeNodePango.cpp: Removed.
        * platform/graphics/gtk/SimpleFontDataPango.cpp: Removed.
        * platform/graphics/pango: Added.
        * platform/graphics/pango/FontCachePango.cpp: Copied from WebCore/platform/graphics/gtk/FontCachePango.cpp.
        * platform/graphics/pango/FontCustomPlatformDataPango.cpp: Copied from WebCore/platform/graphics/gtk/FontCustomPlatformDataPango.cpp.
        * platform/graphics/pango/FontPlatformData.h: Copied from WebCore/platform/graphics/gtk/FontPlatformDataPango.h.
        * platform/graphics/pango/FontPlatformDataPango.cpp: Copied from WebCore/platform/graphics/gtk/FontPlatformDataPango.cpp.
        * platform/graphics/pango/GlyphPageTreeNodePango.cpp: Copied from WebCore/platform/graphics/gtk/GlyphPageTreeNodePango.cpp.
        * platform/graphics/pango/SimpleFontDataPango.cpp: Copied from WebCore/platform/graphics/gtk/SimpleFontDataPango.cpp.
        * platform/graphics/win/FontPlatformData.h: Copied from WebCore/platform/graphics/win/FontPlatformDataCairoWin.h.
        * platform/graphics/win/FontPlatformDataCairoWin.h: Removed.

2010-11-11  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: size of resources in summary is 0
        when there are redirects.
        https://bugs.webkit.org/show_bug.cgi?id=49242

        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel.prototype._updateSummaryBar):

2010-11-11  Ben Murdoch  <benm@google.com>

        Reviewed by Darin Fisher.

        document.createTouch and document.createTouchList should specify EnabledAtRuntime
        https://bugs.webkit.org/show_bug.cgi?id=49324

        The createTouch and createTouchList APIs added to Document.idl in
        http://trac.webkit.org/changeset/70047 should have EnabledAtRuntime
        specified as touch related features are controlled by a
        RuntimeEnabledFeature flag in addition to a compile time guard.

        No new tests. This should have been part of r70047 and 
        that revision provided adequate tests of the new feature.

        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::createTouchEnabled):
        (WebCore::RuntimeEnabledFeatures::createTouchListEnabled):
        * dom/Document.idl: Add EnabledAtRuntime specifier to the
            idl methods.

2010-11-09  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Provide context menu item 'Reveal in Elements Panel'
        on elements in inspector UI.
        https://bugs.webkit.org/show_bug.cgi?id=49161

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline.prototype._contextMenuEventFired.focusElement):
        (WebInspector.ElementsTreeOutline.prototype._contextMenuEventFired):
        * inspector/front-end/ObjectPropertiesSection.js:
        (WebInspector.ObjectPropertyTreeElement.prototype.update):
        (WebInspector.ObjectPropertyTreeElement.prototype._contextMenuEventFired):
        (WebInspector.ObjectPropertyTreeElement.prototype._contextMenuEventFired.revealElement):

2010-11-11  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Audit panel toolbar icon shifts left when clicked.
        https://bugs.webkit.org/show_bug.cgi?id=48766

        * inspector/front-end/Images/auditsIcon.png:

2010-11-11  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        chrome.dll!WebCore::SVGLengthInternal::valueInSpecifiedUnitsAttrGetter ReadAV@NULL (4cf97a4f3ebe8006a2f5ffcc5bc10aeb)
        https://bugs.webkit.org/show_bug.cgi?id=49331

        Test: svg/dom/SVGPolygonElement-baseVal-list-removal-crash.html

        * svg/properties/SVGListProperty.h:
        (WebCore::SVGListProperty::replaceItemValuesAndWrappers): Avoid premature deletion of 'oldItem'.
        (WebCore::SVGListProperty::removeItemValuesAndWrappers): Ditto.

2010-11-11  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Andreas Kling.

        Make it possible to override the visibleContentRect in the case the
        client is handling the scrolling. This is similar to what the iPhone does.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::visibleContentRect):
        * platform/ScrollView.h:
        (WebCore::ScrollView::setActualVisibleContentRect):

2010-11-11  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        FrameView: Don't clip to visibleContentRect in paintEntireContents mode
        https://bugs.webkit.org/show_bug.cgi?id=49375

        In paintEntireContents mode (used in combination with tiling) we
        cannot clip to the actual visibleContentRect as the clipped regions
        will not be updated again on scroll. If paintsEntireContents is
        enabled, return the actual content rect.

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

2010-11-10  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Convert SVGMatrix/SVGTransform/SVGTransformList to the new SVGPropertyTearOff concept
        https://bugs.webkit.org/show_bug.cgi?id=49311

        Move the last list type, SVGTransformList, and the last POD types, SVGMatrix & SVGTransform, over to the new SVGPropertyTearOff concept.
        Removes the need for a custom JSSVGMatrix/V8SVGMatrix implementation, it's all integrated within the bindings now.

        Tests: svg/W3C-SVG-1.1-SE/coords-dom-01-f.svg
               svg/W3C-SVG-1.1-SE/coords-dom-02-f.svg
               svg/W3C-SVG-1.1-SE/coords-dom-03-f.svg
               svg/W3C-SVG-1.1-SE/coords-dom-04-f.svg
               svg/W3C-SVG-1.1-SE/types-dom-01-b.svg
               svg/W3C-SVG-1.1-SE/types-dom-02-f.svg
               svg/W3C-SVG-1.1-SE/types-dom-03-b.svg
               svg/W3C-SVG-1.1-SE/types-dom-04-b.svg
               svg/W3C-SVG-1.1-SE/types-dom-05-b.svg
               svg/dom/SVGMatrix.html
               svg/dom/SVGTransform.html
               svg/dom/SVGTransformList.html

        * Android.jscbindings.mk: Removed JSSVGMatrixCustom.cpp.
        * Android.v8bindings.mk: Removed V8SVGMatrixCustom.cpp.
        * CMakeLists.txt: Remove JSSVGMatrixCustom.cpp. 
        * GNUmakefile.am: Ditto. Add SVGAnimatedTransformListPropertyTearOff.h/SVGStaticPropertyWithParentTearOff.h/SVGTransformListPropertyTearOff.h/SVGAnimatedTransformList.h/SVGMatrix.h to build.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * bindings/js/JSBindingsAllInOne.cpp: Remove JSSVGMatrixCustom.cpp
        * bindings/js/JSSVGMatrixCustom.cpp: Removed.
        * bindings/scripts/CodeGenerator.pm: Convert SVGMatrix/SVGTransform/SVGTransformList to the new concept.
        * bindings/scripts/CodeGeneratorJS.pm: Ditto.
        * bindings/scripts/CodeGeneratorObjC.pm: Ditto.
        * bindings/scripts/CodeGeneratorV8.pm: Ditto.
        * bindings/v8/custom/V8SVGMatrixCustom.cpp: Removed.
        * svg/DeprecatedSVGAnimatedPropertyTraits.h: Remove SVGTransformList handling.
        * svg/DeprecatedSVGAnimatedTemplate.h: Ditto.
        * svg/SVGAnimateTransformElement.cpp: Adapt to SVGTransformList API changes.
        (WebCore::transformListFor):
        (WebCore::SVGAnimateTransformElement::resetToBaseValue):
        (WebCore::SVGAnimateTransformElement::calculateAnimatedValue):
        (WebCore::SVGAnimateTransformElement::applyResultsToTarget):
        * svg/SVGAnimatedTransformList.h: Added.
        * svg/SVGGradientElement.cpp: Ditto.
        (WebCore::SVGGradientElement::SVGGradientElement):
        (WebCore::SVGGradientElement::parseMappedAttribute):
        * svg/SVGGradientElement.h: Ditto.
        * svg/SVGLinearGradientElement.cpp: Ditto.
        (WebCore::SVGLinearGradientElement::collectGradientAttributes):
        * svg/SVGMatrix.h: Added. SVGMatrix inherits from AffineTransform, and is only used in the bindings. It implements SVGs special requirements.
        (WebCore::SVGMatrix::translate): Returns a copy of the matrix, not affecting the original matrix.
        (WebCore::SVGMatrix::scale): Ditto.
        (WebCore::SVGMatrix::scaleNonUniform): Ditto.
        (WebCore::SVGMatrix::rotate): Ditto.
        (WebCore::SVGMatrix::flipX): Ditto.
        (WebCore::SVGMatrix::flipY): Ditto.
        (WebCore::SVGMatrix::skewX): Ditto.
        (WebCore::SVGMatrix::skewY): Ditto.
        (WebCore::SVGMatrix::multiply): Ditto.
        (WebCore::SVGMatrix::inverse): Ditto.
        (WebCore::SVGMatrix::rotateFromVector): Dittto.
        * svg/SVGMatrix.idl: Enable StrictTypeChecking/RequiresAllArguments=Raise on all attributes/functions.
        * svg/SVGPatternElement.cpp: Adapt to SVGTransformList API changes.
        (WebCore::SVGPatternElement::SVGPatternElement):
        (WebCore::SVGPatternElement::parseMappedAttribute):
        (WebCore::SVGPatternElement::collectPatternAttributes):
        * svg/SVGPatternElement.h: Ditto.
        * svg/SVGPoint.idl: Enable StrictTypeChecking/RequiresAllArguments=Raise for 'matrixTransform', now that SVGMatrix has been converted to the new scheme.
        * svg/SVGRadialGradientElement.cpp: Adapt to SVGTransformList API changes.
        (WebCore::SVGRadialGradientElement::collectGradientAttributes):
        * svg/SVGSVGElement.cpp: Ditto.
        (WebCore::SVGSVGElement::createSVGTransformFromMatrix):
        (WebCore::SVGSVGElement::viewBoxToViewTransform):
        * svg/SVGSVGElement.h: Ditto.
        * svg/SVGStyledTransformableElement.cpp: Ditto.
        (WebCore::SVGStyledTransformableElement::SVGStyledTransformableElement):
        (WebCore::SVGStyledTransformableElement::animatedLocalTransform):
        (WebCore::SVGStyledTransformableElement::parseMappedAttribute):
        * svg/SVGStyledTransformableElement.h: Ditto.
        * svg/SVGTextElement.cpp: Ditto.
        (WebCore::SVGTextElement::SVGTextElement):
        (WebCore::SVGTextElement::parseMappedAttribute):
        (WebCore::SVGTextElement::animatedLocalTransform):
        * svg/SVGTextElement.h: Ditto.
        * svg/SVGTransform.cpp: Modernize code, inlined some getters.
        (WebCore::SVGTransform::SVGTransform):
        (WebCore::SVGTransform::setMatrix):
        * svg/SVGTransform.h: Reindent header.
        (WebCore::SVGTransform::type):
        (WebCore::SVGTransform::svgMatrix):
        (WebCore::SVGTransform::matrix):
        (WebCore::SVGTransform::angle):
        (WebCore::SVGTransform::rotationCenter):
        (WebCore::SVGTransform::isValid):
        (WebCore::operator==): Avoid function calls, make operator== a friend of SVGTransform, and compare members directly.
        (WebCore::operator!=):
        * svg/SVGTransform.idl:
        * svg/SVGTransformList.cpp: Rewritten as plain Vector<SVGTransform>.
        (WebCore::SVGTransformList::createSVGTransformFromMatrix):
        (WebCore::SVGTransformList::consolidate):
        (WebCore::SVGTransformList::concatenate):
        (WebCore::SVGTransformList::valueAsString):
        * svg/SVGTransformList.h:
        (WebCore::SVGTransformList::SVGTransformList):
        * svg/SVGTransformList.idl: Enable StrictTypeChecking/RequiresAllArguments=Raise on all attributes/functions.
        * svg/SVGTransformable.cpp: Adapt to SVGTransformList API changes.
        (WebCore::SVGTransformable::parseTransformAttribute):
        * svg/SVGTransformable.h: Ditto.
        * svg/SVGViewSpec.cpp: Ditto.
        (WebCore::SVGViewSpec::SVGViewSpec):
        (WebCore::SVGViewSpec::setTransform):
        (WebCore::SVGViewSpec::parseViewSpec):
        * svg/SVGViewSpec.h: Ditto.
        (WebCore::SVGViewSpec::transform):
        * svg/properties/SVGAnimatedListPropertyTearOff.h: Made constructor and members protected.
        * svg/properties/SVGAnimatedPropertyMacros.h: Add new helper macro DECLARE_ANIMATED_TRANSFORM_LIST_PROPERTY. This is needed until we expand all macros.
        * svg/properties/SVGAnimatedTransformListPropertyTearOff.h: Added. Extends SVGAnimatedListPropertyTearOff, returning SVGTransformListPropertyTearOff objects.
        (WebCore::SVGAnimatedTransformListPropertyTearOff::baseVal):
        (WebCore::SVGAnimatedTransformListPropertyTearOff::animVal):
        (WebCore::SVGAnimatedTransformListPropertyTearOff::create):
        (WebCore::SVGAnimatedTransformListPropertyTearOff::SVGAnimatedTransformListPropertyTearOff):
        * svg/properties/SVGListPropertyTearOff.h: Made construct and members protected.
        * svg/properties/SVGProperty.h: Declare commitChange() as pure virtual method.
        * svg/properties/SVGPropertyTraits.h: Handle SVGTransformList.
        * svg/properties/SVGStaticPropertyWithParentTearOff.h: Added. Same concept as JSSVGStaticPODTypeWrapperWithParent, used to expose SVGPropertyTearOffs for types
                                                               that are using this concept themselves. (SVGMatrix attribute of SVGTransform, both are POD types, using SVGPropertyTearOff).
        (WebCore::SVGStaticPropertyWithParentTearOff::create):
        (WebCore::SVGStaticPropertyWithParentTearOff::commitChange):
        (WebCore::SVGStaticPropertyWithParentTearOff::SVGStaticPropertyWithParentTearOff):
        * svg/properties/SVGTransformListPropertyTearOff.h: Added. Extends SVGListPropertyTearOff by two special SVGTransformList methods: consolidate and createSVGTransformFromMatrix.
        (WebCore::SVGTransformListPropertyTearOff::create):
        (WebCore::SVGTransformListPropertyTearOff::createSVGTransformFromMatrix):
        (WebCore::SVGTransformListPropertyTearOff::consolidate):
        (WebCore::SVGTransformListPropertyTearOff::SVGTransformListPropertyTearOff):

2010-11-11  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Nikolas Zimmermann.

        Fixed WebKitGTK gtk3 compilation.

        * platform/gtk/WidgetRenderingContextGtk3.cpp:
        (WebCore::WidgetRenderingContext::WidgetRenderingContext):

2010-11-11  Dan Bernstein  <mitz@apple.com>

        Reverted r71975:71976. That change was wrong, and the tests caught it.

        * platform/graphics/mac/ComplexTextController.h:
        (WebCore::ComplexTextController::ComplexTextRun::create):
        * platform/graphics/mac/ComplexTextControllerCoreText.cpp:
        (WebCore::ComplexTextController::ComplexTextRun::ComplexTextRun):
        (WebCore::ComplexTextController::collectComplexTextRunsForCharactersCoreText):

2010-11-11  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Dan Bernstein.

        Fix LayoutTests/canvas/philip/tests/2d.drawImage.null.html
        https://bugs.webkit.org/show_bug.cgi?id=48307

        There are no new tests because this is a fix for a pre-existing failing test.)

        * bindings/js/JSCanvasRenderingContext2DCustom.cpp: Corrected expection throwing cases to match up with spec.

2010-11-10  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Adam Barth.

        [HTML5] 10.2.8.4 Scripts that modify the page as it is being parsed
        https://bugs.webkit.org/show_bug.cgi?id=49364

        Fixed HTMLScriptRunner's executeScript to use the ScriptController of the frame to which script element belongs
        as supposed to that of the frame associated with the HTMLScriptRunner.

        See also: http://www.whatwg.org/specs/web-apps/current-work/#scripts-that-modify-the-page-as-it-is-being-parsed

        Test: fast/parser/script-modify-page-outer.html

        * html/parser/HTMLScriptRunner.cpp:
        (WebCore::HTMLScriptRunner::executePendingScriptAndDispatchEvent): Calls executeScript.
        (WebCore::HTMLScriptRunner::executeScript): Uses the correct ScriptController instance.
        (WebCore::HTMLScriptRunner::runScript): Call executeScript.
        * html/parser/HTMLScriptRunner.h:

2010-11-10  Dan Bernstein  <mitz@apple.com>

        Style fix I said I’d make then forgot to make.

        * platform/graphics/mac/ComplexTextControllerCoreText.cpp:
        (WebCore::ComplexTextController::ComplexTextRun::ComplexTextRun):

2010-11-10  Ned Holbrook  <nholbrook@apple.com>

        Reviewed by Dan Bernstein.

        Allow for the possibility of CoreText generating multiple runs for a single text run.
        https://bugs.webkit.org/show_bug.cgi?id=49353

        * platform/graphics/mac/ComplexTextController.h:
        (WebCore::ComplexTextController::ComplexTextRun::create):
        * platform/graphics/mac/ComplexTextControllerCoreText.cpp:
        (WebCore::ComplexTextController::ComplexTextRun::ComplexTextRun):
        (WebCore::ComplexTextController::collectComplexTextRunsForCharactersCoreText):

2010-10-15  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Widgets do not support CSS transformations
        https://bugs.webkit.org/show_bug.cgi?id=40139

        Instead of rendering directly onto the target drawable when rendering
        form controls on GTK+ 2.0, render onto an intermediate surface and use
        cairo to blit the result back to the target surface. This has two
        benefits. The first is that it always honors the current Cairo
        transformation. The second is that since the intermediate drawable is
        always a 32-bit GdkPixmap, we do not have to have a set of widgets
        per-colormap any longer.

        This change also begins the abstraction of widget rendering so that GTK+
        2 and GTK+ 3 can use the same code path. The WidgetRenderingContext will
        eventually hide all version differences from RenderThemeGtk, which can
        just focus on interpreting the GtkStyle properties. 

        * GNUmakefile.am: Add WidgetRenderinContext source files to the sources list.
        * platform/graphics/cairo/PlatformRefPtrCairo.cpp:
        (WTF::refPlatformPtr): Add a specialization for Cairo patterns.
        (WTF::derefPlatformPtr): Ditto.
        * platform/graphics/cairo/PlatformRefPtrCairo.h: Ditto.
        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::RenderThemeGtk): No longer keep a set of
        widgets per-colormap for GTK+, instead just determine if we can use RGBA
        colormaps and go from there.
        (WebCore::RenderThemeGtk::~RenderThemeGtk): Ditto.
        (WebCore::RenderThemeGtk::getIndicatorMetrics): Put the logic for
        getting toggle button indicator metrics into this helper.
        (WebCore::RenderThemeGtk::paintRenderObject): Now uses
        WidgetRenderingContext to do widget rendering.
        (WebCore::setToggleSize): Use the new getIndicatorMetrics helper.
        * platform/gtk/RenderThemeGtk.h: Added a member to track whether or not
          the widgets are using a RGBA colormap. Also remove a defunct Page*
          member.
        * platform/gtk/ScrollbarThemeGtk.cpp: Switch all widget drawing
        operations to use WidgetRenderingContext.
        (WebCore::ScrollbarThemeGtk::paintTrackBackground): Ditto.
        (WebCore::ScrollbarThemeGtk::paintScrollbarBackground): Ditto.
        (WebCore::ScrollbarThemeGtk::paintThumb): Ditto.
        (WebCore::ScrollbarThemeGtk::paint): Ditto.
        (WebCore::ScrollbarThemeGtk::paintButton): Ditto.
        * platform/gtk/WidgetRenderingContext.h: Added.
        * platform/gtk/WidgetRenderingContextGtk2.cpp: Added.
        (WebCore::purgeScratchBuffer): Added, this is similar to the scratch
        buffer implementation from ContextShadow.
        (WebCore::PurgeScratchBufferTimer::fired): Ditto.
        (WebCore::scheduleScratchBufferPurge): Ditto.
        (WebCore::getExtraSpaceForWidget):
        (WebCore::WidgetRenderingContext::WidgetRenderingContext): Added.
        (WebCore::WidgetRenderingContext::~WidgetRenderingContext): Added.
        (WebCore::WidgetRenderingContext::paintMozillaWidget): Added.
        * platform/gtk/WidgetRenderingContextGtk3.cpp: Added.
        (WebCore::WidgetRenderingContext::WidgetRenderingContext): Added.
        (WebCore::~WidgetRenderingContext::WidgetRenderingContext): Added.
        (WebCore::WidgetRenderingContext::paintMozillaWidget): Added.

2010-11-10  Beth Dakin  <bdakin@apple.com>

        Reviewed by Simon Fraser.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=49356 
        -[WebView _scaleWebView:] should take and origin and scroll the 
        document
        -and corresponding-
        <rdar://problem/8643921>

        Apply the scale to the origin, and set a new scroll position.
        * page/Frame.cpp:
        (WebCore::Frame::scalePage):
        * page/Frame.h:
        * WebCore.exp.in:

2010-11-10  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        REGRESSION (r71566): r71566 breaks bidi-control-chars-treated-as-ZWS.html
        https://bugs.webkit.org/show_bug.cgi?id=49295

        * platform/graphics/mac/ComplexTextControllerATSUI.cpp: Reverted to r71565. Eliding bidi
        control characters from ATSUI is no longer necessary since ComplexTextController removes
        any glyphs corresponding to them.
        (WebCore::ComplexTextController::ComplexTextRun::overrideLayoutOperation):
        (WebCore::ComplexTextController::ComplexTextRun::ComplexTextRun):

2010-11-10  Pascal Massimino  <pascal.massimino@gmail.com>

        Reviewed by Adam Barth.

        Simplify the alpha-detection code in png's decoding loop.
        https://bugs.webkit.org/show_bug.cgi?id=49333

        Added a special test for this case: png_per_row_alpha_decoding.html

        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageDecoder::rowAvailable): modified loop.

2010-11-10  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/8647848> REGRESSION (r68551): Spaces shown at soft hyphens with complex justification
        https://bugs.webkit.org/show_bug.cgi?id=49352

        Test: fast/text/justification-padding-mid-word.html

        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::ComplexTextController::adjustGlyphsAndAdvances): Changed to add justification padding
        and word spacing only at characters that are treated as space, instead of all characters that
        use the space glyph (which includes characters treated as zero-width space as well).

2010-11-10  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Darin Adler.

        Crash in documentWillBecomeInactive() when closing window with Reader showing content with SVG
        https://bugs.webkit.org/show_bug.cgi?id=49084

        Manual test added.

        * manual-tests/svg-deep-clone-to-new-doc.html: Added manual test for reproducing bug since an automated version proved to be a bit tough to craft up.
        * svg/SVGSVGElement.cpp: Added in necessary document ownership transfer calls.
        * svg/SVGSVGElement.h:

2010-11-10  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Red error bubbles don't fit content.
        https://bugs.webkit.org/show_bug.cgi?id=49305

        * inspector/front-end/textViewer.css:
        (.webkit-html-message-bubble):

2010-11-10  Alexey Proskuryakov  <ap@apple.com>

        Release build fix.

        * css/StyleSheet.cpp: isAcceptableStyleSheetParent() is a debug-only function.

2010-11-08  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=45205
        <rdar://problem/8391455> Detached elements shouldn't have style sheets.

        Tests: fast/dom/StyleSheet/detached-style-2.html
               fast/dom/StyleSheet/detached-style-pi.xhtml
               fast/dom/StyleSheet/detached-style.html
               fast/dom/StyleSheet/detached-style-pi-2.xhtml

        * bindings/js/JSStyleSheetCustom.cpp: (WebCore::JSStyleSheet::markChildren):
        There is no longer a need to mark owner nodes - StyleSheet->ownerNode() is only non-null when
        the node is in document.

        * css/StyleSheet.cpp: (WebCore::StyleSheet::StyleSheet): Added an assertion checking that
        all nodes that can be StyleSheet parents have been verified.

        * css/StyleSheet.h: (WebCore::StyleSheet::clearOwnerNode): Added.

        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::~ProcessingInstruction): Clear stylesheet's owner node. This
        shouldn't have observable effect, since a processing instruction that is in document can only
        be destroyed with document, and a reachable stylsheet keeps document alive.
        (WebCore::ProcessingInstruction::removedFromDocument): Clear the relationship between node and style sheet when removed.
        (WebCore::ProcessingInstruction::setCSSStyleSheet): If the element was removed during load, we still
        don't want to create a style sheet.

        * dom/StyleElement.cpp:
        (WebCore::StyleElement::sheet): There is no reason for lazy creation. It was a wrong fix for
        bug 14462, whose regression test still passes.
        (WebCore::StyleElement::removedFromDocument): Clear the relationship between node and style sheet when removed.
        (WebCore::StyleElement::finishParsingChildren): Don't call sheet(), it doens't have side effects any more.
        (WebCore::StyleElement::createSheet): Assert that the element is in document. We never want
        to create a style sheet for an element that isn't.

        * dom/StyleElement.h: (WebCore::StyleElement::sheet): Made implementation inline, now that
        it's a simple getter.

        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::~HTMLLinkElement): Clear stylesheet's owner node.
        (WebCore::HTMLLinkElement::process): Assert that there is no style sheet lingering for any reason.
        (WebCore::HTMLLinkElement::removedFromDocument): Clear the relationship between node and style sheet when removed.
        (WebCore::HTMLLinkElement::setCSSStyleSheet): If the element was removed during load, we still
        don't want to create a style sheet.

        * html/HTMLStyleElement.cpp: (WebCore::HTMLStyleElement::~HTMLStyleElement):
        * html/HTMLStyleElement.h:
        * svg/SVGStyleElement.cpp: (WebCore::SVGStyleElement::~SVGStyleElement):
        * svg/SVGStyleElement.h:
        Clear stylesheet's owner node. As above, this shouldn't have observable effect.

        * xml/XSLTProcessor.h:
        * xml/XSLTProcessor.cpp: (WebCore::XSLTProcessor::~XSLTProcessor):
        * dom/Document.cpp: (WebCore::Document::~Document):
        * css/CSSParser.cpp: (WebCore::CSSParser::parseSelector):
        Assert that stylesheet won't outlive its owner node. We don't really use refcounting here.

2010-11-10  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        REGRESSION (r71566): r71566 breaks bidi-control-chars-treated-as-ZWS.html
        https://bugs.webkit.org/show_bug.cgi?id=49295

        * platform/graphics/mac/ComplexTextController.h: Added m_indexOffset.
        * platform/graphics/mac/ComplexTextControllerATSUI.cpp:
        (WebCore::ComplexTextController::ComplexTextRun::overrideLayoutOperation): Use m_indexOffset
        instead of computing the offset based on m_directionalOverride.
        (WebCore::ComplexTextController::ComplexTextRun::ComplexTextRun): Set m_indexOffset to
        the offset between indices in m_characters and indices in the text passed to ATSUI.

2010-11-10  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Gear menu floats to right edge and expands
        to bottom of "Styles" section.
        https://bugs.webkit.org/show_bug.cgi?id=49303

        This fixes computed style's option wrapping to the next line.

        * inspector/front-end/inspector.css:
        (.sidebar-pane-subtitle):

2010-11-10  Stephen White  <senorblanco@chromium.org>

        Reviewed by James Robinson.

        Fix canvas.putImageData(canvas.getImageData(...)) to be lossless.
        https://bugs.webkit.org/show_bug.cgi?id=49330

        These cycles should be lossless for valid colours.  A similar fix went
        into the CG port at r32878.

        Covered by canvas/philip/tests/2d.imageData.put.unchanged.html.

        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::mulDiv255Ceil):
        A helper function to do (a + b + 254) / 255 without a divide.
        (WebCore::putImageData):
        Use the above helper to round up when premultiplying alpha.

2010-11-10  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by David Hyatt.

        HTML5 Ruby support should be mandatory feature
        https://bugs.webkit.org/show_bug.cgi?id=49272

        Remove Ruby as optional feature.

        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCorePrefix.h: Touch WebCorePrefix.h to avoid incremental build failure on Windows.
        * config.h: Touch config.h to avoid incremental build failure on Windows.
        * features.pri:
        * html/HTMLTagNames.in:
        * rendering/RenderBlock.cpp: Remove ENABLE_RUBY guard.
        (WebCore::canMergeContiguousAnonymousBlocks):
        * rendering/RenderObject.cpp: Remove ENABLE_RUBY guard.
        (WebCore::RenderObject::createObject):
        * rendering/RenderRuby.cpp: Remove ENABLE_RUBY guard.
        * rendering/RenderRuby.h: Remove ENABLE_RUBY guard.
        * rendering/RenderRubyBase.cpp: Remove ENABLE_RUBY guard.
        * rendering/RenderRubyBase.h: Remove ENABLE_RUBY guard.
        * rendering/RenderRubyRun.cpp: Remove ENABLE_RUBY guard.
        * rendering/RenderRubyRun.h: Remove ENABLE_RUBY guard.
        * rendering/RenderRubyText.cpp: Remove ENABLE_RUBY guard.
        * rendering/RenderRubyText.h: Remove ENABLE_RUBY guard.

2010-11-10  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Complex text does not have full CSS text-shadow support
        https://bugs.webkit.org/show_bug.cgi?id=45597

        Add ContextShadow support to FontGtk, which enables non-solid shadows
        for complex text rendering.

        Test: platform/gtk/fonts/complex-text-shadows.html

        * platform/graphics/gtk/FontGtk.cpp:
        (WebCore::destroyPangoRegion): Added this helper, which helps reduce
        the number of #ifdefs when dealing with GTK+ region type differences.
        (WebCore::getPangoRegionExtents): Ditto.
        (WebCore::drawGlyphsShadow): Added this helper which either renders
        a solid shadow manually or uses ContextShadow to render a blurry shadow.
        (WebCore::Font::drawComplexText): Use the new helpers.

2010-11-10  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        [gtk] The revision r71528 causes crashes in GObjectEventListener
        https://bugs.webkit.org/show_bug.cgi?id=49314

        Moved the addition of the event listener to the node after calling
        the constructor of the event listener. This is required beacuse
        the addEventListener API receives the EventListener inside a
        PassRefPtr.

        * bindings/gobject/GObjectEventListener.cpp:
        (WebCore::GObjectEventListener::GObjectEventListener):
        * bindings/gobject/GObjectEventListener.h:
        (WebCore::GObjectEventListener::addEventListener):

2010-11-02  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Enable InspectorCSSAgent (not used by frontend for CSS editing yet)
        https://bugs.webkit.org/show_bug.cgi?id=48834

        Drive-by fix: use a single API method to retrieve all node-related styles instead of a bunch of separate calls.

        Test: inspector/styles-new-API.html

        * inspector/CodeGeneratorInspector.pm:
        * inspector/Inspector.idl:
        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::InspectorCSSAgent):
        (WebCore::InspectorCSSAgent::setDOMAgent):
        (WebCore::InspectorCSSAgent::reset):
        (WebCore::InspectorCSSAgent::getStylesForNode2):
        (WebCore::InspectorCSSAgent::getComputedStyleForNode2):
        (WebCore::InspectorCSSAgent::addRule2):
        (WebCore::InspectorCSSAgent::querySelectorAll):
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::releaseFrontendLifetimeAgents):
        (WebCore::InspectorController::didCommitLoad):
        * inspector/InspectorController.h:
        (WebCore::InspectorController::cssAgent):
        * inspector/InspectorDOMAgent.cpp:
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyle::setPropertyText):
        (WebCore::InspectorStyle::styleText):
        (WebCore::InspectorStyle::disableProperty):
        (WebCore::InspectorStyle::populateAllProperties):
        (WebCore::InspectorStyle::populateObjectWithStyleProperties):
        (WebCore::InspectorStyleSheet::buildObjectForRule):
        (WebCore::InspectorStyleSheet::fixUnparsedPropertyRanges):
        (WebCore::InspectorStyleSheet::ensureSourceData):
        (WebCore::InspectorStyleSheetForInlineStyle::text):
        * inspector/InspectorStyleSheet.h:
        (WebCore::InspectorStyleProperty::setRawTextFromStyleDeclaration):
        (WebCore::InspectorStyleProperty::hasRawText):

2010-11-10  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Move CSSStyleDeclaration from DOMAgent.js into CSSStyleModel.js
        https://bugs.webkit.org/show_bug.cgi?id=49312

        No new tests, as it's just code motion.

        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleDeclaration):
        (WebInspector.CSSStyleDeclaration.parsePayload):
        (WebInspector.CSSStyleDeclaration.prototype.get allProperties):
        (WebInspector.CSSStyleDeclaration.prototype.getLiveProperty):
        (WebInspector.CSSStyleDeclaration.prototype.getPropertyValue):
        (WebInspector.CSSStyleDeclaration.prototype.getPropertyPriority):
        (WebInspector.CSSStyleDeclaration.prototype.getPropertyShorthand):
        (WebInspector.CSSStyleDeclaration.prototype.isPropertyImplicit):
        (WebInspector.CSSStyleDeclaration.prototype.styleTextWithShorthands):
        (WebInspector.CSSStyleDeclaration.prototype.getLonghandProperties):
        (WebInspector.CSSStyleDeclaration.prototype.getShorthandValue):
        (WebInspector.CSSStyleDeclaration.prototype.getShorthandPriority):
        (WebInspector.CSSStyleDeclaration.prototype.appendProperty):
        (WebInspector.CSSStyleDeclaration.prototype.propertyAt):
        (WebInspector.CSSRule):
        (WebInspector.CSSRule.parsePayload):
        (WebInspector.CSSRule.prototype.get isUserAgent):
        (WebInspector.CSSRule.prototype.get isUser):
        (WebInspector.CSSRule.prototype.get isViaInspector):
        (WebInspector.CSSRule.prototype.get isRegular):
        (WebInspector.CSSProperty):
        (WebInspector.CSSProperty.parsePayload):
        (WebInspector.CSSProperty.prototype.get propertyText):
        (WebInspector.CSSProperty.prototype.get isLive):
        (WebInspector.CSSProperty.prototype.get active):
        (WebInspector.CSSProperty.prototype.get styleBased):
        (WebInspector.CSSProperty.prototype.get inactive):
        (WebInspector.CSSProperty.prototype.get disabled):
        (WebInspector.CSSProperty.prototype.setText):
        (WebInspector.CSSProperty.prototype.setValue):
        (WebInspector.CSSProperty.prototype.setDisabled.callback):
        (WebInspector.CSSProperty.prototype.setDisabled):
        * inspector/front-end/DOMAgent.js:

2010-11-10  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r71733.
        http://trac.webkit.org/changeset/71733
        https://bugs.webkit.org/show_bug.cgi?id=49319

        made qt bot crashy and sad (Requested by kling on #webkit).

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

2010-11-10  Peter Rybin  <peter.rybin@gmail.com>

        Reviewed by Adam Barth.

        HTML parser should provide script column position within HTML document to JavaScript engine
        https://bugs.webkit.org/show_bug.cgi?id=45271

        Replaces line number with TextPosition struct so that script engine
        gets script starting line/column.

        * ForwardingHeaders/wtf/text/TextPosition.h: Added.
        * bindings/js/ScriptSourceCode.h:
        (WebCore::ScriptSourceCode::ScriptSourceCode):
        * bindings/v8/ScheduledAction.cpp:
        (WebCore::ScheduledAction::ScheduledAction):
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::eventHandlerPosition):
        * bindings/v8/ScriptController.h:
        * bindings/v8/ScriptEventListener.cpp:
        (WebCore::createAttributeEventListener):
        * bindings/v8/ScriptSourceCode.h:
        (WebCore::ScriptSourceCode::ScriptSourceCode):
        (WebCore::ScriptSourceCode::startLine):
        (WebCore::ScriptSourceCode::startPosition):
        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListener::V8LazyEventListener):
        (WebCore::V8LazyEventListener::prepareListenerObject):
        * bindings/v8/V8LazyEventListener.h:
        (WebCore::V8LazyEventListener::create):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::compileScript):
        (WebCore::V8Proxy::evaluate):
        (WebCore::V8Proxy::runScript):
        * bindings/v8/V8Proxy.h:
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::evaluate):
        (WebCore::WorkerContextExecutionProxy::runScript):
        * bindings/v8/WorkerContextExecutionProxy.h:
        * bindings/v8/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::evaluate):
        * dom/PendingScript.cpp:
        (WebCore::PendingScript::releaseElementAndClear):
        * dom/PendingScript.h:
        (WebCore::PendingScript::PendingScript):
        (WebCore::PendingScript::operator=):
        (WebCore::PendingScript::startingPosition):
        * dom/ScriptableDocumentParser.h:
        * dom/XMLDocumentParser.h:
        * dom/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::XMLDocumentParser):
        (WebCore::XMLDocumentParser::startElementNs):
        (WebCore::XMLDocumentParser::endElementNs):
        (WebCore::XMLDocumentParser::lineNumber):
        (WebCore::XMLDocumentParser::columnNumber):
        (WebCore::XMLDocumentParser::textPosition):
        (WebCore::XMLDocumentParser::textPositionOneBased):
        * dom/XMLDocumentParserQt.cpp:
        (WebCore::XMLDocumentParser::XMLDocumentParser):
        (WebCore::XMLDocumentParser::textPosition):
        (WebCore::XMLDocumentParser::parseStartElement):
        (WebCore::XMLDocumentParser::parseEndElement):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::runScriptsForPausedTreeBuilder):
        (WebCore::HTMLDocumentParser::textPosition):
        * html/parser/HTMLDocumentParser.h:
        * html/parser/HTMLScriptRunner.cpp:
        (WebCore::HTMLScriptRunner::sourceFromPendingScript):
        (WebCore::HTMLScriptRunner::execute):
        (WebCore::HTMLScriptRunner::runScript):
        * html/parser/HTMLScriptRunner.h:
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::uninitializedPositionValue1):
        (WebCore::HTMLTreeBuilder::HTMLTreeBuilder):
        (WebCore::HTMLTreeBuilder::takeScriptToProcess):
        (WebCore::HTMLTreeBuilder::processEndTag):
        (WebCore::HTMLTreeBuilder::processScriptStartTag):
        * html/parser/HTMLTreeBuilder.h:

2010-11-10  Ilya Sherman  <isherman@chromium.org>

        Reviewed by Shinichiro Hamaji.

        Fix autofill popup height computation -- take icon heights into account.
        https://bugs.webkit.org/show_bug.cgi?id=49306

        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupListBox::layout):

2010-11-10  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Andreas Kling.

        In paintEntireContents mode (used in combination with tiling) we
        cannot clip to the actual visibleContentRect as the clipped regions
        will not be updated again on scroll. If paintsEntireContents is
        enabled, return the actual content rect.

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

2010-11-10  Shinichiro Hamaji  <hamaji@chromium.org>

        Adding a manual test which I forgot to add in r71618.

        [Chromium] display:none has no effect on <option> element
        https://bugs.webkit.org/show_bug.cgi?id=49169

        * manual-tests/display-none-option.html: Added.

2010-11-10  Shane Stephens  <shanestephens@google.com>

        Reviewed by Dirk Schulze.

        SVGTextElement supplemental transforms pre-multiplied but should be 
        post-multiplied in animatedLocalTransform
        https://bugs.webkit.org/show_bug.cgi?id=48215

        Test: svg/animations/animate-text-nested-transforms.svg

        * svg/SVGTextElement.cpp:
        (WebCore::SVGTextElement::animatedLocalTransform):

        Switched order of multiplication.  Note that due to a bug in 
        AffineTransform's operator* implementation the order of arguments is
        reversed (see http://bugs.webkit.org/show_bug.cgi?id=48031).

2010-11-09  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Dan Bernstein.

        Fieldsets avoid floats. Legend elements are expected to have their parent
        as fieldset. When this not the case, floats get added incorrectly added to the
        legend blocks. This patch tries to prevent those floats addition.
        https://bugs.webkit.org/show_bug.cgi?id=49214

        Test: fast/blockflow/overhanging-float-legend-crash.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::avoidsFloats):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::isLegend):
        * rendering/RenderObject.h:

2010-11-10  Cris Neckar  <cdn@chromium.org>

        Reviewed by Nikolas Zimmermann.

        Added check to ensure that svg viewport containers are not treated in the same way as generic svg containers.
        https://bugs.webkit.org/show_bug.cgi?id=49188

        Test: svg/dom/viewport-container-crash.svg

        * rendering/SVGImageBufferTools.cpp:
        (WebCore::SVGImageBufferTools::renderSubtreeToImageBuffer):

2010-11-09  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Reviewed by Eric Seidel.

        [WML] Fix build breaks when WML is enabled.
        https://bugs.webkit.org/show_bug.cgi?id=49168

        The backForward() of Page class returns BackForwarddController class type. 
        So, WML classes need to include the BackForwardController.h file. And, select() 
        of RenderTextControl.h was removed. Thus, the select() should be replaced by 
        setSelectionRange().

        * wml/WMLDoElement.cpp: Includes BackForwardController.h.
        * wml/WMLDocument.cpp: ditto.
        * wml/WMLInputElement.cpp: 
        (WebCore::WMLInputElement::select): Replaced by setSelectionRange().
        * wml/WMLPageState.cpp: Includes BackForwardController.h.
        * wml/WMLPrevElement.cpp: ditto.

2010-11-09  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Add JavaScriptAudioNode files
        https://bugs.webkit.org/show_bug.cgi?id=48875

        No new tests since audio API is not yet implemented.

        * webaudio/JavaScriptAudioNode.cpp: Added.
        (WebCore::JavaScriptAudioNode::create):
        (WebCore::JavaScriptAudioNode::JavaScriptAudioNode):
        (WebCore::JavaScriptAudioNode::~JavaScriptAudioNode):
        (WebCore::JavaScriptAudioNode::initialize):
        (WebCore::JavaScriptAudioNode::uninitialize):
        (WebCore::JavaScriptAudioNode::toJavaScriptAudioNode):
        (WebCore::JavaScriptAudioNode::process):
        (WebCore::JavaScriptAudioNode::fireProcessEventDispatch):
        (WebCore::JavaScriptAudioNode::fireProcessEvent):
        (WebCore::JavaScriptAudioNode::reset):
        (WebCore::JavaScriptAudioNode::scriptExecutionContext):
        * webaudio/JavaScriptAudioNode.h: Added.
        (WebCore::JavaScriptAudioNode::eventTargetData):
        (WebCore::JavaScriptAudioNode::ensureEventTargetData):
        (WebCore::JavaScriptAudioNode::bufferSize):
        (WebCore::JavaScriptAudioNode::doubleBufferIndex):
        (WebCore::JavaScriptAudioNode::swapBuffers):
        (WebCore::JavaScriptAudioNode::refEventTarget):
        (WebCore::JavaScriptAudioNode::derefEventTarget):
        * webaudio/JavaScriptAudioNode.idl: Added.

2010-11-09  Nico Weber  <thakis@chromium.org>

        Reviewed by Kenneth Russell.

        [Chromium] Text jitter during 2D CSS transform
        https://bugs.webkit.org/show_bug.cgi?id=49224

        Text subpixel rendering only works in AlphaPremultipliedFirst |
        kCGBitmapByteOrder32Host contexts:
        http://www.cocoabuilder.com/archive/cocoa/228931-sub-pixel-font-smoothing-with-cgbitmapcontext.html

        Changing this has the added benefit that the data layout now matches
        skia.

        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::SharedValues::SharedValues):
        (WebCore::ContentLayerChromium::updateContents):
        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerChromium::updateContents):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::setRootLayerCanvasSize):

2010-11-09  Helder Correia  <helder@sencha.com>

        Reviewed by Darin Adler.

        Philip Canvas test 2d.path.rect.winding fails
        https://bugs.webkit.org/show_bug.cgi?id=49225

        Rect path direction is important for nonzero winding rule.

        The rect(x, y, w, h) method must create a new subpath containing just the four points
        (x, y), (x+w, y), (x+w, y+h), (x, y+h), with those four points connected by straight
        lines, and must then mark the subpath as closed.

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

2010-11-09  Fumitoshi Ukai  <ukai@chromium.org>

        Unreviewed build fix on Chromium/Win at r71711

        RefCound.h reported an error that it cannot access private member
        declared in class 'WebCore::FileWriterSync' at
        WebCore::FileWriterSync::~FileWriterSync.

        * fileapi/FileWriterSync.h: make destructor public

2010-11-09  Chris Rogers  <crogers@google.com>

        Reviewed by James Robinson.

        AudioFileReaderMac.cpp must include <CoreServices/CoreServices.h>
        https://bugs.webkit.org/show_bug.cgi?id=49270

        * platform/audio/mac/AudioFileReaderMac.cpp:

2010-11-09  Eric Uhrhane  <ericu@chromium.org>

        Reviewed by David Levin.

        Add idl and mock classes for FileWriterSync.
        https://bugs.webkit.org/show_bug.cgi?id=48693

        No new tests, as there's no functionality.

        Build file additions.
        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/scripts/CodeGeneratorV8.pm:

        * fileapi/FileWriterSync.cpp: Added.
        * fileapi/FileWriterSync.h: Added.
        * fileapi/FileWriterSync.idl: Added.

2010-11-09  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Chris Fleizach.

        [GTK] Improve accessibility of focusable lists
        https://bugs.webkit.org/show_bug.cgi?id=25679

        Emit the 'selected' and 'focused' events as needed.

        This is the last bit of a series of patches to fix bug 25679,
        which just ensures that the right signals are emmited whenever a
        selection inside a listbox object changes, that is, the signals
        'state-changed::selected', 'state-changed::focused' and
        'focus-event', along with the right detail for each of them to
        report if the focus/selection has been activated or not.

        * accessibility/gtk/AXObjectCacheAtk.cpp:
        (WebCore::notifyChildrenSelectionChange): New, takes care of
        emitting all the needed signals when children selection has
        changed, both from the point of view of the container and the
        selected/unselected items inside of it. It currently supports
        listboxes (html 'select' controls) only.
        (WebCore::AXObjectCache::postPlatformNotification): Replaced some
        old code with a simple call to notifyChildrenSelectionChange().

2010-11-09  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=49202
        
        Make lists work with vertical text.
        
        (1) Patch all the CSS rules in html.css so that the margins are directionally abstract.
        (2) Add a transposedRect and transposedSize method to IntRect and IntSize for swapping x/y and width/height.
        (3) Add adjustLineDirectionPosition as a helper for moving a line box only in the line direction.
        (4) Fix a bug in addIntrudingFLoats uncovered by list test cases where the top margin of an element was being
        incorrectly added to a float's physical left side instead of its top side.
        (5) Make positioning and painting and selection of list markers account for all writing modes.
        (6) Add helpers for setting the start and end margins directly in a RenderStyle, since lists do this to hack
        marker margins before they have been calculated and set on the box.
        
        Cloned a bunch of fast/lists tests into fast/lists/*-vertical.html versions.
        
        * css/html.css:
        * platform/graphics/IntRect.h:
        (WebCore::IntRect::transposedRect):
        * platform/graphics/IntSize.h:
        (WebCore::IntSize::transposedSize):
        * rendering/InlineBox.h:
        (WebCore::InlineBox::adjustLineDirectionPosition):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addIntrudingFloats):
        * rendering/RenderListItem.cpp:
        (WebCore::getParentOfFirstLineBox):
        (WebCore::RenderListItem::positionListMarker):
        (WebCore::RenderListItem::paint):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::localSelectionRect):
        (WebCore::RenderListMarker::paint):
        (WebCore::RenderListMarker::layout):
        (WebCore::RenderListMarker::computePreferredLogicalWidths):
        (WebCore::RenderListMarker::updateMargins):
        (WebCore::RenderListMarker::getRelativeMarkerRect):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::setMarginStart):
        (WebCore::RenderStyle::setMarginEnd):
        * rendering/style/RenderStyle.h:

2010-11-09  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Antti Koivisto.

        Call to SVGSMILElement::applyResultsToTarget can blow away the SVGSMILElement.
        Refptr the SVGSMILElement in the ResultElementMap to protect it.
        https://bugs.webkit.org/show_bug.cgi?id=49274

        Test: svg/animations/animate-update-crash.xhtml

        * svg/animation/SMILTimeContainer.cpp:
        (WebCore::SMILTimeContainer::updateAnimations):

2010-11-09  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=49281
        Remove broken code for embedded CSS xml-stylesheet

        * dom/Document.cpp: (WebCore::Document::recalcStyleSelector): This made no sense, was untested,
        and didn't match Firefox.

2010-11-09  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/8613727> and https://bugs.webkit.org/show_bug.cgi?id=48720
        Customizable context menu support in WebKit2.

        Various WebCore support to allow WebKit2 to create new ContextMenuItems with
        the information it has.

        * WebCore.exp.in:

        * platform/ContextMenu.h:
        * platform/ContextMenuItem.h:

        * platform/mac/ContextMenuItemMac.mm:
        (WebCore::ContextMenuItem::ContextMenuItem):
        (WebCore::ContextMenuItem::setSubMenu):
        * platform/mac/ContextMenuMac.mm:
        (WebCore::platformMenuDescription):

        * platform/qt/ContextMenuItemQt.cpp:
        (WebCore::ContextMenuItem::ContextMenuItem):
        (WebCore::ContextMenuItem::setSubMenu):
        * platform/qt/ContextMenuQt.cpp:
        (WebCore::platformMenuDescription):

        * platform/win/ContextMenuItemWin.cpp:
        (WebCore::ContextMenuItem::ContextMenuItem):
        (WebCore::ContextMenuItem::setSubMenu):
        * platform/win/ContextMenuWin.cpp:
        (WebCore::platformMenuDescription):

2010-11-09  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Need WebKit2 mechanism for getting the visible page text
        <rdar://problem/8646928>
        https://bugs.webkit.org/show_bug.cgi?id=49275

        * WebCore.exp.in: Add necessary exports.

2010-11-09  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by James Robinson.

        Make showLayerTree() more useful for debugging
        https://bugs.webkit.org/show_bug.cgi?id=49273

        Three things to make showLayerTree() more useful when called from gdb:
        1. Add showLayerTree(RenderObject*)
        2. Make it not update layout, so you can call it when debugging layout code.
        3. Add output of the 'needs layout' flags for each renderer.

        * rendering/RenderLayer.cpp:
        (showLayerTree):
        * rendering/RenderLayer.h:
        * rendering/RenderTreeAsText.cpp:
        (WebCore::RenderTreeAsText::writeRenderObject):
        (WebCore::externalRepresentation):
        * rendering/RenderTreeAsText.h:

2010-11-09  Chris Rogers  <crogers@google.com>

        Reviewed by James Robinson.

        AudioChannel.h is including AudioFloatArray.h instead of AudioArray.h
        https://bugs.webkit.org/show_bug.cgi?id=49269

        * platform/audio/AudioChannel.h:

2010-11-09  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        Made tables hit-test correctly in all writing modes.

        Part of: Make tables work with vertical text
        https://bugs.webkit.org/show_bug.cgi?id=46417

        Test: fast/blockflow/table-hit-test.html

        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::nodeAtPoint):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::nodeAtPoint):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::nodeAtPoint):

2010-11-09  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.

        Caret fails to render with some combination of iframes and compositing
        https://bugs.webkit.org/show_bug.cgi?id=49079
        
        Because it's possible for the caret to jump between different
        compositing layers and the view, caret repainting currently dirties
        both the view and all compositing layers that intersect the caret rect,
        via repaintRectangleInViewAndCompositedLayers().
        
        When an iframe contained compositing layers, we erroneously skipped
        invalidating the compositing layer inside the iframe, which caused
        the caret to fail to blink.

        * manual-tests/compositing/caret-in-compositing-frame.html: Added.
        * manual-tests/compositing/resources/editable-compositing-subframe.html: Added.
        * rendering/RenderView.cpp:
        (WebCore::RenderView::repaintRectangleInViewAndCompositedLayers):

2010-11-09  Peter Rybin  <peter.rybin@gmail.com>

        Reviewed by Adam Barth.

        XMLDocumentParser gets deleted and then used in LayoutTest/fast/frames/set-parent-src-synchronously.xhtml on QT/Linux
        https://bugs.webkit.org/show_bug.cgi?id=48643

        * dom/XMLDocumentParserQt.cpp:
        (WebCore::XMLDocumentParser::doWrite):

2010-11-09  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt.

        https://bugs.webkit.org/show_bug.cgi?id=49197
        <rdar://problem/8642746>
        
        When starting an accelerated transform animation on a renderer, check
        that it's a RenderBox before allow transform animations (and before
        calling borderBoxRect()), because transforms are currently disallowed
        on inline elements.

        Test: animations/animation-on-inline-crash.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::startAnimation):

2010-11-09  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt.

        https://bugs.webkit.org/show_bug.cgi?id=49204
        <rdar://problem/8643412>
        
        Add checks to the CSSStyleSelector code to ensure that the
        casts to the various CSSValue types are safe, and do more
        rigorous checking of the lengths of CSSValueLists, and
        non-null members of Pair in some cases.

        * css/CSSBorderImageValue.h:
        (WebCore::CSSBorderImageValue::isBorderImageValue):
        * css/CSSCursorImageValue.h:
        (WebCore::CSSCursorImageValue::isCursorImageValue):
        * css/CSSImageValue.h:
        (WebCore::CSSImageValue::isImageValue):
        * css/CSSReflectValue.h:
        (WebCore::CSSReflectValue::isReflectValue):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::resolveVariablesForDeclaration):
        (WebCore::CSSRuleSet::addRulesFromSheet):
        (WebCore::CSSRuleSet::addStyleRule):
        (WebCore::applyCounterList):
        (WebCore::CSSStyleSelector::applyProperty):
        (WebCore::CSSStyleSelector::mapFillSize):
        (WebCore::CSSStyleSelector::mapAnimationDelay):
        (WebCore::CSSStyleSelector::mapAnimationDirection):
        (WebCore::CSSStyleSelector::mapAnimationFillMode):
        (WebCore::CSSStyleSelector::mapAnimationName):
        (WebCore::CSSStyleSelector::mapAnimationPlayState):
        (WebCore::CSSStyleSelector::mapNinePieceImage):
        (WebCore::CSSStyleSelector::createTransformOperations):
        * css/CSSValue.h:
        (WebCore::CSSValue::isBorderImageValue):
        (WebCore::CSSValue::isCursorImageValue):
        (WebCore::CSSValue::isFontFamilyValue):
        (WebCore::CSSValue::isReflectValue):
        (WebCore::CSSValue::isShadowValue):
        * css/FontFamilyValue.h:
        (WebCore::FontFamilyValue::isFontFamilyValue):
        * css/SVGCSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applySVGProperty):
        * css/ShadowValue.h:
        (WebCore::ShadowValue::isShadowValue):
        * platform/graphics/transforms/TransformOperations.h:
        (WebCore::TransformOperations::clear):

2010-11-09  Ben Murdoch  <benm@google.com>

        Reviewed by Steve Block.

        Android is missing implementation of V8GCController::checkMemoryUsage
        https://bugs.webkit.org/show_bug.cgi?id=49255

        This patch adds the necessary code to WebCore to implement the
        functionality. The implementation of the PlatformBridge on Android
        does not live upstream yet, so not patching that here.

        No new test as this is a platform specific change on Android.

        * bindings/v8/V8GCController.cpp:
        (WebCore::V8GCController::checkMemoryUsage): Implement on Android.
        * platform/android/PlatformBridge.h: Add necessary methods to read
            device specific memory usage and constraints.

2010-11-09  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        ScrollView::updateScrollbars() shouldn't do anything when scrolling is delegated.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::updateScrollbars):

2010-11-09  Steve Block  <steveblock@google.com>

        Reviewed by Andreas Kling.

        Unused parameter warning causes JSC build failure with deviceorientation
        https://bugs.webkit.org/show_bug.cgi?id=49251

        No new tests, build fix only.

        * bindings/js/JSDeviceMotionEventCustom.cpp:
        (WebCore::JSDeviceMotionEvent::interval):
        * bindings/js/JSDeviceOrientationEventCustom.cpp:
        (WebCore::JSDeviceOrientationEvent::alpha):
        (WebCore::JSDeviceOrientationEvent::beta):
        (WebCore::JSDeviceOrientationEvent::gamma):

2010-11-09  Renata Hodovan  <reni@webkit.org>

        Reviewed by Nikolas Zimmermann.

        SVGFETileElement doesn't support dynamic invalidation, when attributes change.
        https://bugs.webkit.org/show_bug.cgi?id=49247

        The dynamic changes are captured by the svgAttributeChanged function. Invalidate the filter primitive if necessary.

        Tests: svg/dynamic-updates/SVGFETileElement-dom-in-attr.html
               svg/dynamic-updates/SVGFETileElement-svgdom-in-prop.html

        * svg/SVGFETileElement.cpp:
        (WebCore::SVGFETileElement::svgAttributeChanged):
        * svg/SVGFETileElement.h:

2010-11-09  Jenn Braithwaite  <jennb@chromium.org>

        Reviewed by Dmitry Titov.

        Update ProgressTracker when moving a frame between documents
        https://bugs.webkit.org/show_bug.cgi?id=48368

        No new tests. andersca informs me it's not possible to test
        ProgressTracker changes via layouttests. Review extra carefully...

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::transferLoadingResourcesFromPage):
        Changed to use FrameLoader to deliver the notification to the
        client via the notifier.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader:;transferLoadingResourcesFromPage):
        Update old and new progress tracker about frame progress.
        (WebCore::FrameLoader::dispatchTransferLoadingResourceFromPage):
        Added to route notification via the notifier.
        * loader/FrameLoader.h:
        * loader/ProgressTracker.cpp:
        (WebCore::ProgressTracker::completeProgress):
        Comment change only.
        * loader/ResourceLoadNotifier.cpp:
        (WebCore::ResourceLoadNotifier::dispatchTransferLoadingResourceFromPage):
        Added to provide one place to notify client and progress tracker -
        and probably inspector controller (separate patch).
        * loader/ResourceLoadNotifier.h:

2010-11-09  Dai Mikurube  <dmikurube@google.com>

        Reviewed by Kent Tamura.

        Too precise serialization from floating point number to string for "number" input elements
        https://bugs.webkit.org/show_bug.cgi?id=48308

        Modified to consider decimal places when handling step and base in applyStep().

        * html/HTMLInputElement.cpp: Considering decimal places of the given "step" attribtue.
        (WebCore::HTMLInputElement::getAllowedValueStep):
        (WebCore::HTMLInputElement::getAllowedValueStepWithDecimalPlaces):
        (WebCore::HTMLInputElement::applyStep):
        * html/HTMLInputElement.h:
        * html/InputType.cpp: Added virtual functions for decimal places and an acceptable error.
        (WebCore::InputType::stepBaseWithDecimalPlaces):
        (WebCore::InputType::acceptableError):
        (WebCore::InputType::parseToDoubleWithDecimalPlaces):
        * html/InputType.h:
        * html/NumberInputType.cpp:
        (WebCore::NumberInputType::stepMismatch): Using the virtual function acceptableError().
        (WebCore::NumberInputType::stepBaseWithDecimalPlaces): Considering decimal places of the given "base" attribute.
        (WebCore::NumberInputType::parseToDoubleWithDecimalPlaces):
        (WebCore::NumberInputType::acceptableError): Concrete acceptableError() for the number type.
        * html/NumberInputType.h:
        * html/parser/HTMLParserIdioms.cpp:
        (WebCore::parseToDoubleForNumberTypeWithDecimalPlaces): Parsing numbers with decimal places.
        * html/parser/HTMLParserIdioms.h:

2010-11-09  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Shinichiro Hamaji.

        Fix for Bug 48984 - [Chromium] @media print crash due to paged media support
        Page context has been inheriting from document element style that becomes null if display property is none.
        It should inherit from document style instead to properly handle direction property (and to avoid the null reference).
        https://bugs.webkit.org/show_bug.cgi?id=48984

        Test: printing/page-format-data-display-none.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::styleForPage): Page context inherits from
        document style.

2010-11-09  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Add custom bindings for AudioContext
        https://bugs.webkit.org/show_bug.cgi?id=49115

        No new tests since audio API is not yet implemented.

        * bindings/js/JSAudioContextCustom.cpp: Added.
        (WebCore::JSAudioContextConstructor::constructJSAudioContext):
        * bindings/v8/custom/V8AudioContextCustom.cpp: Added.
        (WebCore::V8AudioContext::constructorCallback):

2010-11-09  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Dimitri Glazkov.

        [Chromium] display:none has no effect on <option> element
        https://bugs.webkit.org/show_bug.cgi?id=49169

        Added a manual test because it's hard to test the content of
        <option> element.

        * manual-tests/display-none-option.html: Added.
        * platform/PopupMenuStyle.h:
        (WebCore::PopupMenuStyle::PopupMenuStyle):
        (WebCore::PopupMenuStyle::isDisplayNone):
        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupListBox::getRowHeight):
        (WebCore::PopupListBox::layout):
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::itemStyle):
        (WebCore::RenderMenuList::menuStyle):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::menuStyle):

2010-11-09  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        audio engine: add audio resources abstraction
        https://bugs.webkit.org/show_bug.cgi?id=34660

        No new tests since audio API is not yet implemented.

        * platform/audio/AudioBus.h:
        * platform/audio/HRTFElevation.cpp:
        (WebCore::HRTFElevation::calculateKernelsForAzimuthElevation):
        (WebCore::HRTFElevation::createByInterpolatingSlices):
        * platform/audio/mac/AudioBusMac.mm: Added.
        (WebCore::AudioBus::loadPlatformResource):

2010-11-09  James Simonsen  <simonjam@chromium.org>

        Reviewed by Dimitri Glazkov.

        [Web Timing] Remove requestEnd
        https://bugs.webkit.org/show_bug.cgi?id=48924

        * page/Timing.cpp:
        * page/Timing.h:
        * page/Timing.idl:

2010-11-09  Sam Magnuson  <smagnuson@netflix.com>

        Reviewed by Andreas Kling.

        [Qt] image borders do not render correctly
        https://bugs.webkit.org/show_bug.cgi?id=49191

        Test: fast/borders/border-image-01.html

        * platform/graphics/qt/ImageQt.cpp:
        (WebCore::Image::drawPattern):

2010-11-08  James Simonsen  <simonjam@chromium.org>

        Reviewed by Dimitri Glazkov.

        [Web Timing] Split domContentLoaded into start/end
        https://bugs.webkit.org/show_bug.cgi?id=48920

        * dom/Document.cpp:
        (WebCore::Document::finishedParsing):
        * dom/DocumentTiming.h:
        (WebCore::DocumentTiming::DocumentTiming):
        * page/Timing.cpp:
        (WebCore::Timing::domContentLoadedStart):
        (WebCore::Timing::domContentLoadedEnd):
        * page/Timing.h:
        * page/Timing.idl:

2010-11-08  Nate Chapin  <japhet@chromium.org>

        Reviewed by Adam Barth.

        Call ApplicationCacheHost::maybeLoadResource() in
        ResourceLoader::start() instead of ResourceLoader::load().
        maybeLoadResource() might mutate the ResourceRequest, and
        in its current location any modifications are lost.

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

        Fixes a couple of http/tests/appcache tests
        failing on chromium.

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::load):
        (WebCore::ResourceLoader::start):

2010-11-08  Chang Shu  <chang.shu@nokia.com>

        Reviewed by Antonio Gomes.

        [GTK] Use Space to toggle arrow key handling for selection change or
        spatial navigation. Put the logic in common code to pass both Qt and
        GTK. Mac won't work because arrow keys trigger the popup.
        https://bugs.webkit.org/show_bug.cgi?id=49150

        Existing test: fast/events/spatial-navigation/snav-single-select.html

        * dom/SelectElement.cpp:
        (WebCore::SelectElement::menuListDefaultEventHandler):

2010-11-08  Jenn Braithwaite  <jennb@chromium.org>

        Reviewed by Pavel Feldman.

        _bindResourceURL in ResourceManager.js may not add resource to map
        https://bugs.webkit.org/show_bug.cgi?id=49088

        No new tests. pfeldman working on better test harness and tests.

        * inspector/front-end/ResourceManager.js:
        (WebInspector.ResourceManager.prototype._bindResourceURL):

2010-11-08  John Knottenbelt  <jknotten@chromium.org>

        Reviewed by Steve Block.

        Convert to and from DOMTimeStamp with converter functions.
        This is a refactoring only, covered by existing layout tests.
        https://bugs.webkit.org/show_bug.cgi?id=49066 

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/DOMTimeStamp.h: Added.
        (WebCore::convertSecondsToDOMTimeStamp):
        (WebCore::convertDOMTimeStampToSeconds):
        * dom/Event.cpp:
        (WebCore::Event::Event):
        * dom/Event.h:
        * page/Geolocation.cpp:
        (WebCore::Geolocation::haveSuitableCachedPosition):
        * platform/android/GeolocationServiceAndroid.cpp:
        (WebCore::GeolocationServiceAndroid::isPositionMoreTimely):

2010-11-08  Ryosuke Niwa  <rniwa@webkit.org>

        Unreviewed build fix for Chromium Mac for r71590.

        * platform/graphics/mac/ComplexTextControllerCoreText.cpp:
        (WebCore::provideStringAndAttributes):

2010-11-08  Anton Muhin  <antonm@chromium.org>

        Reviewed by Nate Chapin.

        [v8] Get rid of automatically generated named property getter for classes with namedItem method
        https://bugs.webkit.org/show_bug.cgi?id=48770

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/custom/V8HTMLSelectElementCustom.cpp:

2010-11-08  Ned Holbrook  <nholbrook@apple.com>

        Reviewed by Adam Barth.

        Avoid CFAttributedString creation in ComplexTextController by adopting UniChar provider SPI.
        https://bugs.webkit.org/show_bug.cgi?id=48886

        * WebCore.exp.in:
        * platform/graphics/mac/ComplexTextControllerCoreText.cpp:
        (WebCore::provideStringAndAttributes):
        (WebCore::ComplexTextController::collectComplexTextRunsForCharactersCoreText):
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

2010-11-08  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=49228
        
        REGRESSION: caret too short when a positive line height is specified.  Now that lineTop no longer
        accidentally incorporates the top leading, we need to use selectionTop/Bottom for the caret rect.

        * rendering/RenderText.cpp:
        (WebCore::RenderText::localCaretRect):

2010-11-08  Pierre-Antoine LaFayette  <pierre.lafayette@gmail.com>

        Reviewed by Darin Fisher.

        [chromium] Adding hasUserGesture flag to the ResourceRequest
        https://bugs.webkit.org/show_bug.cgi?id=37057

        This flag is to be used on the browser side to indicate when a
        download has been user initiated.

        No new tests. This change will be tested through a browser UI test.

        * platform/network/chromium/ResourceRequest.h:
        (WebCore::ResourceRequest::ResourceRequest):
        (WebCore::ResourceRequest::hasUserGesture):
        (WebCore::ResourceRequest::setHasUserGesture):

2010-11-08  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Remove obsolete PASSTHROUGH and MATRIXMIX panner mode
        https://bugs.webkit.org/show_bug.cgi?id=49087

        No new tests since audio API is not yet implemented.

        * platform/audio/Panner.cpp:
        (WebCore::Panner::create):
        * platform/audio/Panner.h:
        * webaudio/AudioPannerNode.h:
        * webaudio/AudioPannerNode.idl:

2010-11-08  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Roben.

        Merge EditorWinCE.cpp into EditorWin.cpp
        https://bugs.webkit.org/show_bug.cgi?id=49095

        * platform/win/EditorWin.cpp:
        (WebCore::Editor::newGeneralClipboard):
        * platform/wince/EditorWinCE.cpp: Removed.

2010-11-08  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=49217
        
        Fix coordinate space mismatch in RenderReplaced and make sure RenderText retains its old behavior of
        preferring later lines when there is overlap.

        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::positionForPoint):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::positionForPoint):

2010-11-08  Steve Block  <steveblock@google.com>

        Reviewed by David Levin.

        Building for Android generates several compiler warnings
        https://bugs.webkit.org/show_bug.cgi?id=49175

        Fixes these warnings, most of which are trivial.
        - PREFIX_FOR_WEBCORE was previously required for STL's algorithm, but is no
          longer. See
          http://android.git.kernel.org/?p=platform/external/webkit.git;a=commit;h=a47ab5294213cca2741f453b450b02666e08cac8
        - The definition of EXPORT is required only for the JNI entry point in
          WebKit/android, so does not need to be in WebCorePrefix.h

        No new tests, fixes compile warnings only.

        * WebCorePrefix.h:
        * bridge/jni/jsc/JNIUtilityPrivate.cpp:
        (JSC::Bindings::convertValueToJValue):
        * platform/android/FileSystemAndroid.cpp:
        (WebCore::listDirectory):

2010-11-08  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/8119781> Crash zooming into Word document at office.live.com
        https://bugs.webkit.org/show_bug.cgi?id=49203

        Test: fast/css/zoom-change-triggering-layout.html

        RenderBox::styleDidChange() was calling scrollLeft() and scrollTop(), whose RenderTextControlSingleLine
        overrides can trigger layout.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleDidChange): Use the layer directly for updating the scroll offsets when
        the zoom factor changes.

2010-11-08  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=48587
        
        Make Ruby work with vertical text.  Ruby already nearly does work.  The only big issue I found was with
        flipped lines writing modes.  Make sure to mutate the writing-mode of the RenderRubyRun to ensure that
        the ruby text is on the correct side of the ruby base.

        Added fast/blockflow tests of the various writing modes.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::baselinePosition):
        (WebCore::RenderBlock::firstLineBoxBaseline):
        (WebCore::RenderBlock::lastLineBoxBaseline):
        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::staticCreateRubyRun):

2010-11-08  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed build correction after @70369/@70846.

        Please use PLATFORM(CG) to define CG-specific code, not
        PLATFORM(CF).

        * platform/image-decoders/ImageDecoder.cpp:
        * platform/image-decoders/ImageDecoder.h:

2010-11-08  James Robinson  <jamesr@chromium.org>

        Reviewed by Dimitri Glazkov.

        Input element with inner spin button set to display:none causes crash
        https://bugs.webkit.org/show_bug.cgi?id=49121

        Null check the inner spin button's renderer before dereferencing it.

        Test: fast/forms/input-number-spinbutton-crash.html

        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::forwardEvent):

2010-11-08  Xiaomei Ji  <xji@chromium.org>

        Reviewed by Dan Bernstein.

        Fix Unicode explicit bidi control characters are removed in editing operations,
        such as insert/copy/cut/paste.
        https://bugs.webkit.org/show_bug.cgi?id=25321

        Unicode explicit bidi control characters were excluded in BidiRun and
        consequently from InlineTextBoxes due to their effect on rendering complex
        text with ATSUI.
        The fix is including those characters in BidiRun and remove them from
        ComplexTextRun with ATSUI.

        Test: editing/inserting/insert-paste-bidi-control.html
               fast/text/atsui-bidi-control.html

        * platform/graphics/mac/ComplexTextControllerATSUI.cpp:
        (WebCore::ComplexTextController::ComplexTextRun::ComplexTextRun):
        * platform/text/BidiResolver.h:
        (WebCore::::checkDirectionInLowerRaiseEmbeddingLevel):
        (WebCore::::lowerExplicitEmbeddingLevel):
        (WebCore::::raiseExplicitEmbeddingLevel):
        (WebCore::::createBidiRunsForLine):

2010-11-08  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=49126
        
        RenderBlock::positionForPoint is not writing-mode aware.  Patch the function to examine lines in the correct
        writing-mode direction.  Patched and renamed a number of helpers used by positionForPoint.
        
        Fixed a bug with RenderReplaced's positionForPoint. There was a coordinate space mismatch between what the
        function expected (local coordinates) and what was passed in (containing block coords), which meant the function didn't even work.
        
        Fixed a bug with the propagation of selection state on RenderReplaced to its containing block.  The bit double propagated
        because both the base class function and the derived class function did the propagation, and the setter function did not
        do the right thing if this happened.
        
        Patched the localSelectionRect method on RenderReplaced so that selection draws in the right place in all writing modes.
        
        Added new tests of positionForPoint and replaced elements in fast/blockflow.

        * editing/visible_units.cpp:
        (WebCore::previousLinePosition):
        (WebCore::nextLinePosition):
        * platform/graphics/IntPoint.h:
        (WebCore::IntPoint::transpose):
        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::paint):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::nodeAtPoint):
        (WebCore::RenderBlock::hitTestFloats):
        (WebCore::positionForPointRespectingEditingBoundaries):
        (WebCore::RenderBlock::positionForPointWithInlineChildren):
        (WebCore::RenderBlock::positionForPoint):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::positionForPoint):
        (WebCore::RenderReplaced::localSelectionRect):
        (WebCore::RenderReplaced::setSelectionState):
        * rendering/RenderReplaced.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::positionForPoint):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::closestLeafChildForLogicalLeftPosition):
        * rendering/RootInlineBox.h:

2010-11-08  Nate Chapin  <japhet@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Move connection-per-host counting and request prioritization out
        of Loader and down to the ResourceLoader level.

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

        Refactor only, so no new tests.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::suspendPostAttachCallbacks):
        (WebCore::ContainerNode::resumePostAttachCallbacks):
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::loadRequest):
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::loadNow):
        * loader/NetscapePlugInStreamLoader.cpp:
        (WebCore::NetscapePlugInStreamLoader::create):
        * loader/NetscapePlugInStreamLoader.h:
        * loader/ResourceLoadScheduler.cpp: Added.
        (WebCore::ResourceLoadScheduler::hostForURL):
        (WebCore::resourceLoadScheduler): Returns the single ResourceLoadScheduler instance
        (WebCore::ResourceLoadScheduler::ResourceLoadScheduler):
        (WebCore::ResourceLoadScheduler::scheduleSubresourceLoad):
        (WebCore::ResourceLoadScheduler::schedulePluginStreamLoad):
        (WebCore::ResourceLoadScheduler::addMainResourceLoad):
        (WebCore::ResourceLoadScheduler::scheduleLoad):
        (WebCore::ResourceLoadScheduler::remove):
        (WebCore::ResourceLoadScheduler::crossOriginRedirectReceived):
        (WebCore::ResourceLoadScheduler::servePendingRequests):
        (WebCore::ResourceLoadScheduler::suspendPendingRequests):
        (WebCore::ResourceLoadScheduler::resumePendingRequests):
        (WebCore::ResourceLoadScheduler::scheduleServePendingRequests):
        (WebCore::ResourceLoadScheduler::requestTimerFired):
        (WebCore::ResourceLoadScheduler::assertLoaderBeingCounted):
        (WebCore::ResourceLoadScheduler::HostInformation::assertLoaderBeingCounted):
        (WebCore::ResourceLoadScheduler::HostInformation::HostInformation):
        (WebCore::ResourceLoadScheduler::HostInformation::~HostInformation):
        (WebCore::ResourceLoadScheduler::HostInformation::schedule):
        (WebCore::ResourceLoadScheduler::HostInformation::addLoadInProgress):
        (WebCore::ResourceLoadScheduler::HostInformation::remove):
        (WebCore::ResourceLoadScheduler::HostInformation::hasRequests):
        * loader/ResourceLoadScheduler.h: Added.
        (WebCore::ResourceLoadScheduler::HostInformation::name):
        (WebCore::ResourceLoadScheduler::HostInformation::limitRequests):
        (WebCore::ResourceLoadScheduler::HostInformation::requestsPending):
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::releaseResources): Remove this from ResourceLoadScheduler's counting.
        (WebCore::ResourceLoader::load):
        (WebCore::ResourceLoader::start): Create the ResourceHandle, called by ResourceLoadScheduler.
        (WebCore::ResourceLoader::willSendRequest): Ensure ResourceLoadScheduler counts redirects
            correctly.
        * loader/ResourceLoader.h:
        (WebCore::ResourceLoader::url):
        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::startLoading):
        * loader/loader.cpp: Move scheduling to ResourceLoadScheduler, remove Host subclass
            and make Loader the SubresourceLoaderClient instead.
        (WebCore::determinePriority):
        (WebCore::Loader::load): Schedule the creation of the ResourceHandle, rather than
            doing it immediately.
        (WebCore::Loader::cancelRequests):
        (WebCore::Loader::didFinishLoading):
        (WebCore::Loader::didFail):
        (WebCore::Loader::didReceiveResponse):
        (WebCore::Loader::didReceiveData):
        (WebCore::Loader::didReceiveCachedMetadata):
        * loader/loader.h:
        * page/EventSource.cpp:
        (WebCore::EventSource::connect):
        (WebCore::EventSource::endRequest):
        * plugins/PluginStream.cpp:
        (WebCore::PluginStream::start):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::XMLHttpRequest):
        (WebCore::XMLHttpRequest::~XMLHttpRequest):
        (WebCore::XMLHttpRequest::createRequest):
        (WebCore::XMLHttpRequest::didFail):
        (WebCore::XMLHttpRequest::didFinishLoading):
        * xml/XMLHttpRequest.h:

2010-11-08  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        Remove the remaining editing-style functions from ApplyStyleCommand
        https://bugs.webkit.org/show_bug.cgi?id=49155

        Replaced removeNonEditingProperties, editingStyleAtPosition, prepareEditingStyleToApplyAt,
        and removeStylesAddedByNode in ApplyStyleCommand.cpp by removeNonEditingProperties, EditingStyle::create,
        prepareToApplyAt, and removeStyleAddedByNode in EditingStyle.cpp.

        Also removed unnecessary header includes from various cpp files.

        No tests are added since this is a cleanup.

        * editing/ApplyStyleCommand.cpp: Removed removeNonEditingProperties, editingStyleAtPosition,
        prepareEditingStyleToApplyAt, and removeStylesAddedByNode.
        * editing/ApplyStyleCommand.h: Ditto.
        * editing/DeleteSelectionCommand.cpp: Removed removeEnclosingAnchorStyle.
        (WebCore::DeleteSelectionCommand::saveTypingStyleState): Calls removeStylesAddedByNode instead.
        * editing/EditingStyle.cpp:
        (WebCore::copyEditingProperties): Moved and renamed ApplyStyleCommand::removeNonEditingProperties.
        (WebCore::editingStyleFromComputedStyle): Calls copyEditingProperties. Changed the argument to PassRefPtr
        as supposed to a raw pointer for convenience.
        (WebCore::EditingStyle::init): Calls editingStyleFromComputedStyle.
        (WebCore::EditingStyle::removeStyleAddedByNode): Added.
        (WebCore::EditingStyle::removeStyleConflictingWithStyleOfNode): Added.
        (WebCore::EditingStyle::removeNonEditingProperties): Added.
        (WebCore::editingStyleIncludingTypingStyle): Calls copyEditingProperties.
        * editing/EditingStyle.h: Added prototypes.
        * editing/Editor.cpp:
        (WebCore::Editor::selectionComputedStyle): Uses EditingStyle.
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::calculateStyleBeforeInsertion): Ditto.
        (WebCore::InsertParagraphSeparatorCommand::applyStyleAfterInsertion): Ditto.
        * editing/InsertParagraphSeparatorCommand.h:
        * editing/RemoveFormatCommand.cpp:
        (WebCore::RemoveFormatCommand::doApply): Ditto.
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::handleStyleSpansBeforeInsertion): Ditto.
        (WebCore::ReplaceSelectionCommand::handleStyleSpans): Ditto.
        (WebCore::ReplaceSelectionCommand::doApply): Ditto.
        (WebCore::ReplaceSelectionCommand::completeHTMLReplacement): Ditto.
        * editing/ReplaceSelectionCommand.h:
        * editing/markup.cpp: Removed removeEnclosingMailBlockquoteStyle and removeDefaultStyles.
        (WebCore::createMarkup): Uses EditingStyle.

2010-11-08  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Media objects in nested iframes showing above everything else in TinyMCE
        https://bugs.webkit.org/show_bug.cgi?id=44877

        Tests: compositing/iframes/become-composited-nested-iframes.html
               compositing/iframes/overlapped-nested-iframes.html
        
        The overlap testing logic that connects compositing across iframe boundaries
        needed to be educated about nestd iframes, for platforms (i.e. Mac) where iframes
        are allowed to be independently composited.
        
        Also fix a bug that could cause iframes (and possibly other elements) that share
        style to fail to become composited.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::canShareStyleWithElement): Disable style sharing for elements
        that force synethetic style updates in order to gain RenderLayers, so they can become
        composited. This is tested by become-composited-nested-iframes.html, though it is very
        timing-dependent.
        
        * page/FrameView.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::hasCompositedContentIncludingDescendants): New method that
        is a "deep" version of hasCompositedContent() on platforms where that is necessary to ask.
        
        (WebCore::FrameView::hasCompositingAncestor): New method.
        (WebCore::FrameView::setIsOverlapped): If we can have independently composited iframes,
        we need to force all descendant iframes to update so that compositing gets hooked up across
        nested iframes.
        
        (WebCore::FrameView::isOverlappedIncludingAncestors): New method, only called on platforms
        where allowsIndependentlyCompositedIFrames() is true.

        * rendering/RenderLayerCompositor.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::allowsIndependentlyCompositedIFrames): Utility method that
        returns true if an iframe can be a compositing root.
        
        (WebCore::RenderLayerCompositor::shouldPropagateCompositingToEnclosingIFrame): Make use of
        allowsIndependentlyCompositedIFrames().
        
        (WebCore::RenderLayerCompositor::notifyIFramesOfCompositingChange): We need to notify all
        descendant frames, not just children.
        
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::setStyle): Add assert to ensure that we don't do style sharing
        for elements that play tricks with synthetic style changes.

        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::paint): Run overlap testing if a frame has any composited
        descendants.

2010-11-08  Darin Adler  <darin@apple.com>

        Reviewed by Alexey Proskuryakov.

        Incorrect image map used when multiple maps have the same name
        https://bugs.webkit.org/show_bug.cgi?id=49086

        Tests: fast/images/image-map-multiple.html
               fast/images/image-map-multiple-xhtml.xhtml

        Factored out the code used to look up elements by id and reused it
        to look up maps by name. It handles multiple elements efficiently.

        * dom/Document.cpp:
        (WebCore::Document::DocumentOrderedMap::clear): Added.
        (WebCore::Document::DocumentOrderedMap::add): Added. Has code that
        was formerly in addElementById.
        (WebCore::Document::DocumentOrderedMap::remove): Added. Has code that
        was formerly in removeElementById.
        (WebCore::Document::DocumentOrderedMap::get): Added. Has code that
        was formerly in getElementById.
        (WebCore::keyMatchesId): Added.
        (WebCore::Document::getElementById): Use DocumentOrderedMap::get.
        (WebCore::Document::addElementById): Use DocumentOrderedMap::add.
        (WebCore::Document::removeElementById): Use DocumentOrderedMap::remove.
        (WebCore::Document::addImageMap): Use DocumentOrderedMap::add.
        (WebCore::Document::removeImageMap): Use DocumentOrderedMap::remove.
        (WebCore::keyMatchesMapName): Added.
        (WebCore::keyMatchesLowercasedMapName): Added.
        (WebCore::Document::getImageMap): Use DocumentOrderedMap::get.

        * dom/Document.h: Added DocumentOrderedMap class, used inside the
        Document class. Changed m_imageMapsByName to be a DocumentOrderedMap.
        Changed m_elementsById to be a DocumentOrderedMap. Eliminated
        m_duplicateIds, since DocumentOrderedMap now has that internally.

2010-11-08  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=48685
        Notify UI process about focused frame

        * WebCore.xcodeproj/project.pbxproj: Adding developmentRegion back.

        * loader/EmptyClients.h: (WebCore::EmptyChromeClient::focusedFrameChanged):
        * page/Chrome.cpp: (WebCore::Chrome::focusedFrameChanged):
        * page/Chrome.h:
        * page/ChromeClient.h:
        Added a new Chrome client notification.

        * page/FocusController.cpp: (WebCore::FocusController::setFocusedFrame): Notify chrome.

2010-11-08  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Remove use of HIGetScaleFactor
        https://bugs.webkit.org/show_bug.cgi?id=49186
        <rdar://problem/8618410>

        Scale factors can vary on a display-by-display basis and it doesn't make sense
        to compute scale factor event coordinates like this.

        * plugins/mac/PluginViewMac.mm:
        (WebCore::PluginView::globalMousePosForPlugin):

2010-11-08  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Texmap] [Qt] Texture mapper initial implementation
        https://bugs.webkit.org/show_bug.cgi?id=47070

        Make the necessary changes in TextureMapperNode in preparation of making it possible to paint it
        from a different thread.
        The main problematic part was the cache, which made it so that textures can become invalid and have to
        be rerendered from content during paint. This is solved here by creating a pack/unpack function for
        textures, which lets a texture archive its data away from video memory, or do whatever the platform
        thinks is right for freeing memory without needing to re-render again from content (which cannot be
        made thread safe).

        After this change, TextureMapperNode moved to its own file, and has 2 entry points: paint and syncCompositingState.
        The idea is that syncCompositingState has to be called in the UI thread, paint can be called from a different
        thread, and they should block each other.

        The new test tests the cache code-path, to show that the pack/unpack technique works for cases where it
        kicks in.

        Test: compositing/layer-creation/many-layers.html

        * WebCore.pro:
        * platform/graphics/opengl/TextureMapperGL.cpp:
        (WebCore::BitmapTextureGL::~BitmapTextureGL):
        (WebCore::BitmapTextureGL::BitmapTextureGL):
        (WebCore::TextureMapperGL::TextureMapperGL):
        (WebCore::TextureMapperGL::drawTexture):
        * platform/graphics/opengl/TextureMapperGL.h:
        (WebCore::TextureMapperGL::create):
        * platform/graphics/qt/TextureMapperQt.cpp:
        (WebCore::BitmapTextureQt::pack):
        (WebCore::BitmapTextureQt::unpack):
        (WebCore::TextureMapper::create):
        (WebCore::BitmapTextureQt::BitmapTextureQt):
        * platform/graphics/qt/TextureMapperQt.h: Added.

2010-11-08  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Sam Weinig.

        Allow applets to participate in accelerated compositing
        https://bugs.webkit.org/show_bug.cgi?id=49117
        <rdar://problem/8625819>
        
        Add RenderApplet to the list of renderers that can optionally get RenderLayers,
        and be composited for some reason.

        Not currently testable.

        * rendering/RenderApplet.h: Outdented the class declaration.

        * rendering/RenderApplet.cpp:
        (WebCore::RenderApplet::requiresLayer): Return true if the underlying widget
        has a platform layer.
        (WebCore::RenderApplet::allowsAcceleratedCompositing): Check the widget to see
        if it has a platform layer.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::shouldBeNormalFlowOnly): Reformat, and add isApplet().
        (WebCore::RenderLayer::isSelfPaintingLayer): Reformat, and add isApplet().
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerConfiguration): Use 'renderer' local variable
        for efficiency. Now check for embedded objects and applets.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingForPlugin): Check for embedded objects and applets.

2010-11-08  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Martin Robinson.

        * GNUmakefile.am: add missing files to fix distcheck.

2010-11-08  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by David Hyatt.

        getPropertyValue("background") causes crash
        https://bugs.webkit.org/show_bug.cgi?id=49055

        Test: fast/css/background-norepeat-crash.html

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::getLayeredShorthandValue):

2010-11-08  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Wrapped DOM bindings GObjects do not disconnect event listeners when they die
        https://bugs.webkit.org/show_bug.cgi?id=49136

        When GObjects are finalized and freed, disconnect their event listeners, so that
        WebCore does not try to fire signals on dead GObjects. We do this by holding a weak
        reference to the GObject in the signal listener. When the weak reference notification
        callback is executed, we disconnect the event listener.

        No new tests; this fix is proved by prevention of crashes in soon to be
        landed editing delegate signals, which are covered by the layout tests.

        * bindings/gobject/GObjectEventListener.cpp:
        (WebCore::GObjectEventListener::GObjectEventListener): Updated the constructor.
        (WebCore::GObjectEventListener::~GObjectEventListener): Disconnect the weak reference
        if the GObject is still alive.
        (WebCore::GObjectEventListener::gobjectDestroyed): When the GObject is destroyed,
        disconnect the appropriate event listener.
        (WebCore::GObjectEventListener::handleEvent): Changes to reflect use of CString
        instead of WebCore string.
        * bindings/gobject/GObjectEventListener.h:
        (WebCore::GObjectEventListener::addEventListener): Changed create to addEventListener,
        so that the connection and disconnection is an internal contract to the class.
        (WebCore::GObjectEventListener::gobjectDestroyedCallback): Added.
        * bindings/scripts/CodeGeneratorGObject.pm: Modified the code generate to use
        GObjectEventListener::addEventListener and no longer call addEventListener on
        its own.

2010-11-08  Adam Roben  <aroben@apple.com>

        Windows Release build fix after r71514

        The build was failing due to an alignment error. Strangely, depending
        on the order of SVGStaticPropertyTearOff's members, the build will
        either fail in Release (as it does before this change), or Debug (as it
        did before r71514), but not both.

        * svg/properties/SVGStaticPropertyTearOff.h:
        (WebCore::SVGStaticPropertyTearOff::SVGStaticPropertyTearOff): Copied
        the #pragma pack trick from JSSVGPODTypeWrapper.h, which has similar
        issues.

2010-11-08  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: decouple ScriptArguments from ScriptCallStack
        https://bugs.webkit.org/show_bug.cgi?id=48058

        ScriptCallFrame and ScriptCallStack are now the same for both JSC and V8.
        The factory functions that allow to create ScriptCallStack from VM-specific
        objects are defined in ScriptCallStackFactory.cpp.

        ScriptArguments class is used for passing arguments from JS code to the native
        part.

        No new tests. This refactoring is covered with existing Console tests.

        * Android.jscbindings.mk:
        * Android.v8bindings.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSConsoleCustom.cpp:
        (WebCore::JSConsole::profile):
        (WebCore::JSConsole::profileEnd):
        * bindings/js/ScriptCallStackFactory.cpp: Renamed from WebCore/bindings/js/ScriptCallStack.cpp.
        (WebCore::createScriptCallStack):
        (WebCore::createScriptArguments):
        (WebCore::ScriptCallStack::stackTrace):
        * bindings/js/ScriptCallStackFactory.h: Copied from WebCore/bindings/js/ScriptCallFrame.cpp.
        * bindings/js/ScriptState.cpp:
        (WebCore::ScriptStateProtectedPtr::~ScriptStateProtectedPtr):
        (WebCore::ScriptStateProtectedPtr::ScriptStateProtectedPtr):
        (WebCore::ScriptStateProtectedPtr::get):
        * bindings/js/ScriptState.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionCustomArgsAndException):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjInternal::customArgsAndExceptionCallback):
        * bindings/v8/ScriptCallFrame.h: Removed.
        * bindings/v8/ScriptCallStack.h: Removed.
        * bindings/v8/ScriptCallStackFactory.cpp: Renamed from WebCore/bindings/v8/ScriptCallStack.cpp.
        (WebCore::toScriptCallFrame):
        (WebCore::toScriptCallFramesVector):
        (WebCore::createScriptCallStack):
        (WebCore::createScriptArguments):
        (WebCore::ScriptCallStack::stackTrace):
        * bindings/v8/ScriptCallStackFactory.h: Copied from WebCore/bindings/js/ScriptCallFrame.cpp.
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::setCaptureCallStackForUncaughtExceptions):
        * bindings/v8/ScriptState.h:
        (WebCore::ScriptStateProtectedPtr::get):
        * bindings/v8/V8ConsoleMessage.cpp:
        (WebCore::V8ConsoleMessage::handler):
        (WebCore::V8ConsoleMessage::dispatchNow):
        * bindings/v8/V8ConsoleMessage.h:
        * bindings/v8/custom/V8ConsoleCustom.cpp:
        (WebCore::V8Console::traceCallback):
        (WebCore::V8Console::assertCallback):
        (WebCore::V8Console::profileCallback):
        (WebCore::V8Console::profileEndCallback):
        * dom/NodeFilter.h:
        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::ConsoleMessage):
        (WebCore::ConsoleMessage::addToFrontend):
        (WebCore::ConsoleMessage::updateRepeatCountInConsole):
        (WebCore::ConsoleMessage::isEqual):
        * inspector/ConsoleMessage.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::addMessageToConsole):
        (WebCore::InspectorController::startGroup):
        * inspector/InspectorController.h:
        * inspector/ScriptArguments.cpp: Copied from WebCore/bindings/v8/ScriptCallFrame.cpp.
        (WebCore::ScriptArguments::ScriptArguments):
        (WebCore::ScriptArguments::~ScriptArguments):
        (WebCore::ScriptArguments::argumentAt):
        (WebCore::ScriptArguments::globalState):
        (WebCore::ScriptArguments::getFirstArgumentAsString):
        (WebCore::ScriptArguments::isEqual):
        * inspector/ScriptArguments.h: Copied from WebCore/bindings/js/ScriptCallFrame.h.
        (WebCore::ScriptArguments::argumentCount):
        * inspector/ScriptCallFrame.cpp: Renamed from WebCore/bindings/v8/ScriptCallFrame.cpp.
        (WebCore::ScriptCallFrame::ScriptCallFrame):
        (WebCore::ScriptCallFrame::~ScriptCallFrame):
        (WebCore::ScriptCallFrame::isEqual):
        (WebCore::ScriptCallFrame::buildInspectorObject):
        * inspector/ScriptCallFrame.h: Renamed from WebCore/bindings/js/ScriptCallFrame.h.
        (WebCore::ScriptCallFrame::functionName):
        (WebCore::ScriptCallFrame::sourceURL):
        (WebCore::ScriptCallFrame::lineNumber):
        * inspector/ScriptCallStack.cpp: Renamed from WebCore/bindings/js/ScriptCallFrame.cpp.
        (WebCore::ScriptCallStack::ScriptCallStack):
        (WebCore::ScriptCallStack::~ScriptCallStack):
        (WebCore::ScriptCallStack::at):
        (WebCore::ScriptCallStack::size):
        (WebCore::ScriptCallStack::isEqual):
        (WebCore::ScriptCallStack::buildInspectorObject):
        * inspector/ScriptCallStack.h: Renamed from WebCore/bindings/js/ScriptCallStack.h.
        * page/Console.cpp:
        (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::markTimeline):
        (WebCore::Console::profile):
        (WebCore::Console::profileEnd):
        (WebCore::Console::timeEnd):
        (WebCore::Console::group):
        (WebCore::Console::groupCollapsed):
        (WebCore::Console::shouldCaptureFullStackTrace):
        (WebCore::Console::warn):
        * page/Console.h:
        (WebCore::Console::profiles):
        * page/Console.idl:

2010-11-08  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed. Build fix.
        
        Attempt to fix windows builds after r71512. Swap order of members to avoid warning C4121.

        * svg/properties/SVGStaticPropertyTearOff.h:
        (WebCore::SVGStaticPropertyTearOff::SVGStaticPropertyTearOff):

2010-11-08  Mikhail Naganov  <mnaganov@chromium.org>

        Unreviewed. Fix Qt build after r71511.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::restoreInspectorStateFromCookie):

2010-11-08  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Convert SVGPoint/SVGPointList to the new SVGPropertyTearOff concept
        https://bugs.webkit.org/show_bug.cgi?id=49067

        Remove SVGAnimatedPoints interface, not reachable through bindings anyway, it was just another MI interface, that
        now has been integrated into SVGPolylineElement/SVGPolygonElement, simplfying the generation and avoiding virtual
        calls in SVGPolylineElement/SVGPolygonElement.

        Remove the need to use manual XML <-> SVG DOM synchronization. The points/animatedPoints methods now create
        SVGListPropertyTearOffs, thus using the same synchronization/expose-to-bindings concept like all other
        animated properties.

        Convert SVGPoint/SVGPointList to use the new SVGPropertyTearOff concept, adapted all code, as SVGPointList
        is now a plain Vector<FloatPoint>. Enable StrictTypeChecking for SVGPoint.

        Test: svg/dom/SVGPoint.html

        * Android.derived.v8bindings.mk: Remove SVGAnimatedPoints (and IDL generation).
        * Android.mk: Ditto.
        * CMakeLists.txt: Ditto.
        * DerivedSources.make: Ditto.
        * GNUmakefile.am: Ditto. Add SVGStaticPropertyTearOff.h to build.
        * WebCore.gypi: Ditto.
        * WebCore.order: Remove SVGAnimatedPoints symbols.
        * WebCore.pro: Remove SVGAnimatedPoints (and IDL generation). Add SVGStaticPropertyTearOff.h to build.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * bindings/objc/DOMSVG.h: Remove DOMSVGAnimatedPoints include.
        * bindings/scripts/CodeGenerator.pm: Adapt code converting SVGPoint/SVGPointList to use the new SVGPropertyTearOff concepts.
        * bindings/scripts/CodeGeneratorJS.pm: Ditto.
        * bindings/scripts/CodeGeneratorObjC.pm: Ditto.
        * bindings/scripts/CodeGeneratorV8.pm: Ditto.
        * rendering/SVGRenderTreeAsText.cpp: Adapt for SVGPolyElement API change, use pointList() instead of points() (which is only used for bindings now).
        (WebCore::operator<<):
        * svg/SVGAllInOne.cpp: Remove SVGAnimatedPoints.cpp.
        * svg/SVGAnimateElement.cpp: Adapt for SVGPointList API change, it's not refcounted anymore.
        (WebCore::SVGAnimateElement::calculateAnimatedValue):
        (WebCore::SVGAnimateElement::calculateFromAndToValues):
        (WebCore::SVGAnimateElement::applyResultsToTarget):
        * svg/SVGAnimateElement.h:  Ditto.
        * svg/SVGAnimatedPoints.cpp: Removed.
        * svg/SVGAnimatedPoints.h: Removed.
        * svg/SVGAnimatedPoints.idl: Removed.
        * svg/SVGParserUtilities.cpp: Adapt for SVGPointList API change, it's not refcounted anymore.
        (WebCore::pointsListFromSVGData):
        * svg/SVGParserUtilities.h: Ditto.
        * svg/SVGPoint.idl: Remove PODType marker, and add StrictTypeChecking for x/y attributes.
        * svg/SVGPointList.cpp: SVGPointList is now a plain Vector<FloatPoint>, rewrite.
        (WebCore::SVGPointList::valueAsString):
        (WebCore::SVGPointList::createAnimated):
        * svg/SVGPointList.h: Ditto.
        (WebCore::SVGPointList::SVGPointList):
        * svg/SVGPolyElement.cpp: Remove manual SVG <-> XML DOM synchronization. Now handles through the SVGAnimatedPropertyTearOff concept.
        (WebCore::SVGPolyElement::parseMappedAttribute):
        (WebCore::SVGPolyElement::svgAttributeChanged):
        (WebCore::SVGPolyElement::synchronizeProperty):
        (WebCore::SVGPolyElement::synchronizePoints):
        (WebCore::SVGPolyElement::points):
        (WebCore::SVGPolyElement::animatedPoints):
        * svg/SVGPolyElement.h: Reindented.
        (WebCore::SVGPolyElement::pointList):
        (WebCore::SVGPolyElement::isValid):
        (WebCore::SVGPolyElement::supportsMarkers):
        * svg/SVGPolygonElement.cpp: Adapt for SVGPointList API change.
        (WebCore::SVGPolygonElement::toPathData):
        * svg/SVGPolygonElement.idl: Remove SVGAnimatedPoints inheritance.
        * svg/SVGPolylineElement.cpp: Adapt for SVGPointList API change.
        (WebCore::SVGPolylineElement::toPathData):
        * svg/SVGPolylineElement.idl: Remove SVGAnimatedPoints inheritance.
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::setCurrentTranslate): Use updateCurrentTranslate().
        (WebCore::SVGSVGElement::updateCurrentTranslate): Added, only used by the bindings, after changing a value of SVGStaticPropertyTearOff object.
        * svg/SVGSVGElement.h:
        (WebCore::SVGSVGElement::currentTranslate): Return reference to m_translation.
        * svg/properties/SVGPropertyTearOff.h: Made constructors protected, as SVGStaticPropertyTearOff inherits from it.
        (WebCore::SVGPropertyTearOff::commitChange):
        * svg/properties/SVGPropertyTraits.h: Add SVGPointList handing.
        * svg/properties/SVGStaticPropertyTearOff.h: Added. Used for SVGProperty types returned by attributes, that are not associated with a SVGAnimatedProperty. (SVGSVGElement::currentTranslate).
        (WebCore::SVGStaticPropertyTearOff::create):
        (WebCore::SVGStaticPropertyTearOff::commitChange):
        (WebCore::SVGStaticPropertyTearOff::SVGStaticPropertyTearOff):

2010-11-08  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Adam Barth.

        Web Inspector [Chromium]: Make CPU profiling to survive navigation.

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

        * inspector/Inspector.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::restoreInspectorStateFromCookie):
        (WebCore::InspectorController::reuseFrontend):
        (WebCore::InspectorController::disconnectFrontend):
        (WebCore::InspectorController::populateScriptObjects):
        (WebCore::InspectorController::restoreProfiler):
        (WebCore::InspectorController::didCommitLoad):
        (WebCore::InspectorController::startUserInitiatedProfiling):
        (WebCore::InspectorController::stopUserInitiatedProfiling):
        * inspector/InspectorController.h:
        (WebCore::InspectorController::startProfiling):
        (WebCore::InspectorController::stopProfiling):
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::startUserInitiatedProfiling):
        (WebCore::InspectorProfilerAgent::stopUserInitiatedProfiling):
        * inspector/InspectorProfilerAgent.h:
        * inspector/InspectorState.cpp:
        (WebCore::InspectorState::InspectorState):
        * inspector/InspectorState.h:
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype.hasTemporaryProfile):
        (WebInspector.ProfilesPanel.prototype.hasProfile):
        * inspector/front-end/inspector.js:
        (WebInspector.setRecordingProfile):

2010-11-08  Renata Hodovan  <reni@webkit.org>

        Reviewed by Nikolas Zimmermann.

        SVGFEConvolveMatrixElement doesn't support dynamic invalidation
        https://bugs.webkit.org/show_bug.cgi?id=47660

        Wrap orderX and orderY into the common order property according to the w3 standard and remove them from svnattrs.in.
        The patch implements the orderXIdentifier and orderYIdentifier getter functions to reach
        properly the orderX and orderY components of order property from SVG DOM.

        Tests: svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-bias-prop.html
               svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-divisor-prop.html
               svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-edgeMode-prop.html
               svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-in-prop.html
               svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-kernelMatrix-prop.html
               svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-kernelUnitLength-prop.html
               svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-order-prop.html
               svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-preserveAlpha-prop.html
               svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-targetX-prop.html
               svg/dynamic-updates/SVGFEConvolveMatrixElement-svgdom-targetY-prop.html

        * svg/SVGFEConvolveMatrixElement.cpp:
        (WebCore::SVGFEConvolveMatrixElement::orderXIdentifier):
        (WebCore::SVGFEConvolveMatrixElement::orderYIdentifier):
        * svg/SVGFEConvolveMatrixElement.h:
        * svg/svgattrs.in:

2010-11-08  Adam Barth  <abarth@webkit.org>

        Reviewed by Antti Koivisto.

        Rename CachedResourceLoader::m_doc to CachedResourceLoader::m_document
        https://bugs.webkit.org/show_bug.cgi?id=49163

        The usual convention is to use "document", not "doc" to refer to the
        document.

        * css/CSSCursorImageValue.cpp:
        (WebCore::CSSCursorImageValue::cachedImage):
        * dom/XMLDocumentParserLibxml2.cpp:
        (WebCore::shouldAllowExternalLoad):
        * loader/cache/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::CachedResourceLoader):
        (WebCore::CachedResourceLoader::frame):
        (WebCore::CachedResourceLoader::requestImage):
        (WebCore::CachedResourceLoader::canRequest):
        (WebCore::CachedResourceLoader::requestResource):
        (WebCore::CachedResourceLoader::printAccessDeniedMessage):
        (WebCore::CachedResourceLoader::preload):
        (WebCore::CachedResourceLoader::checkForPendingPreloads):
        (WebCore::CachedResourceLoader::requestPreload):
        * loader/cache/CachedResourceLoader.h:
        (WebCore::CachedResourceLoader::document):
        * loader/cache/MemoryCache.cpp:
        (WebCore::MemoryCache::requestResource):
        * loader/loader.cpp:
        (WebCore::Loader::load):
        (WebCore::Loader::Host::servePendingRequests):
        (WebCore::Loader::Host::didFinishLoading):
        (WebCore::Loader::Host::didFail):
        * xml/XSLTProcessorLibxslt.cpp:
        (WebCore::docLoaderFunc):

2010-11-07  Adam Barth  <abarth@webkit.org>

        Unreviewed.  Remove some unneeded includes.

        * loader/FrameLoader.cpp:
        * loader/PlaceholderDocument.cpp:

2010-11-07  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Rename Cache to MemoryCache
        https://bugs.webkit.org/show_bug.cgi?id=49159

        So sayeth the diagram.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSImageValue.cpp:
        * dom/ContainerNode.cpp:
        * history/PageCache.cpp:
        * inspector/InspectorCSSStore.h:
        * inspector/InspectorResourceAgent.cpp:
        * loader/FrameLoader.cpp:
        * loader/archive/cf/LegacyWebArchive.cpp:
        * loader/cache/Cache.cpp: Removed.
        * loader/cache/Cache.h: Removed.
        * loader/cache/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::allClientsRemoved):
        * loader/cache/CachedFont.cpp:
        * loader/cache/CachedFont.h:
        * loader/cache/CachedImage.cpp:
        (WebCore::CachedImage::destroyDecodedData):
        * loader/cache/CachedImage.h:
        * loader/cache/CachedResource.cpp:
        * loader/cache/CachedResource.h:
        * loader/cache/CachedResourceLoader.cpp:
        * loader/cache/CachedResourceLoader.h:
        * loader/cache/CachedScript.cpp:
        (WebCore::CachedScript::destroyDecodedData):
        * loader/cache/MemoryCache.cpp: Copied from WebCore/loader/cache/Cache.cpp.
        (WebCore::cache):
        (WebCore::MemoryCache::MemoryCache):
        (WebCore::MemoryCache::requestResource):
        (WebCore::MemoryCache::requestUserCSSStyleSheet):
        (WebCore::MemoryCache::revalidateResource):
        (WebCore::MemoryCache::revalidationSucceeded):
        (WebCore::MemoryCache::revalidationFailed):
        (WebCore::MemoryCache::resourceForURL):
        (WebCore::MemoryCache::deadCapacity):
        (WebCore::MemoryCache::liveCapacity):
        (WebCore::MemoryCache::pruneLiveResources):
        (WebCore::MemoryCache::pruneDeadResources):
        (WebCore::MemoryCache::setCapacities):
        (WebCore::MemoryCache::makeResourcePurgeable):
        (WebCore::MemoryCache::evict):
        (WebCore::MemoryCache::addCachedResourceLoader):
        (WebCore::MemoryCache::removeCachedResourceLoader):
        (WebCore::MemoryCache::lruListFor):
        (WebCore::MemoryCache::removeFromLRUList):
        (WebCore::MemoryCache::insertInLRUList):
        (WebCore::MemoryCache::resourceAccessed):
        (WebCore::MemoryCache::removeFromLiveDecodedResourcesList):
        (WebCore::MemoryCache::insertInLiveDecodedResourcesList):
        (WebCore::MemoryCache::addToLiveResourcesSize):
        (WebCore::MemoryCache::removeFromLiveResourcesSize):
        (WebCore::MemoryCache::adjustSize):
        (WebCore::MemoryCache::TypeStatistic::addResource):
        (WebCore::MemoryCache::getStatistics):
        (WebCore::MemoryCache::setDisabled):
        (WebCore::MemoryCache::dumpStats):
        (WebCore::MemoryCache::dumpLRULists):
        * loader/cache/MemoryCache.h: Copied from WebCore/loader/cache/Cache.h.
        (WebCore::MemoryCache::shouldMakeResourcePurgeableOnEviction):
        * loader/loader.cpp:
        * page/EventSource.cpp:
        * page/Settings.h:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::createRequest):

2010-11-07  Eric Seidel  <eric@webkit.org>

        Unreviewed.  Attempt to fix the windows build.

        Move the rest of the cache-related files into loader/cache
        https://bugs.webkit.org/show_bug.cgi?id=49156

        * WebCore.vcproj/WebCoreCommon.vsprops:
        * WebCore.vcproj/copyForwardingHeaders.cmd:

2010-11-07  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Move the rest of the cache-related files into loader/cache
        https://bugs.webkit.org/show_bug.cgi?id=49156

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/CachePolicy.h: Removed.
        * loader/CachedCSSStyleSheet.cpp: Removed.
        * loader/CachedCSSStyleSheet.h: Removed.
        * loader/CachedFont.cpp: Removed.
        * loader/CachedFont.h: Removed.
        * loader/CachedImage.cpp: Removed.
        * loader/CachedImage.h: Removed.
        * loader/CachedResource.cpp: Removed.
        * loader/CachedResource.h: Removed.
        * loader/CachedResourceClient.h: Removed.
        * loader/CachedResourceClientWalker.cpp: Removed.
        * loader/CachedResourceClientWalker.h: Removed.
        * loader/CachedResourceHandle.cpp: Removed.
        * loader/CachedResourceHandle.h: Removed.
        * loader/CachedResourceLoader.cpp: Removed.
        * loader/CachedResourceLoader.h: Removed.
        * loader/CachedScript.cpp: Removed.
        * loader/CachedScript.h: Removed.
        * loader/CachedXSLStyleSheet.cpp: Removed.
        * loader/CachedXSLStyleSheet.h: Removed.
        * loader/cache/CachePolicy.h: Copied from WebCore/loader/CachePolicy.h.
        * loader/cache/CachedCSSStyleSheet.cpp: Copied from WebCore/loader/CachedCSSStyleSheet.cpp.
        * loader/cache/CachedCSSStyleSheet.h: Copied from WebCore/loader/CachedCSSStyleSheet.h.
        * loader/cache/CachedFont.cpp: Copied from WebCore/loader/CachedFont.cpp.
        * loader/cache/CachedFont.h: Copied from WebCore/loader/CachedFont.h.
        * loader/cache/CachedImage.cpp: Copied from WebCore/loader/CachedImage.cpp.
        * loader/cache/CachedImage.h: Copied from WebCore/loader/CachedImage.h.
        * loader/cache/CachedResource.cpp: Copied from WebCore/loader/CachedResource.cpp.
        * loader/cache/CachedResource.h: Copied from WebCore/loader/CachedResource.h.
        * loader/cache/CachedResourceClient.h: Copied from WebCore/loader/CachedResourceClient.h.
        * loader/cache/CachedResourceClientWalker.cpp: Copied from WebCore/loader/CachedResourceClientWalker.cpp.
        * loader/cache/CachedResourceClientWalker.h: Copied from WebCore/loader/CachedResourceClientWalker.h.
        * loader/cache/CachedResourceHandle.cpp: Copied from WebCore/loader/CachedResourceHandle.cpp.
        * loader/cache/CachedResourceHandle.h: Copied from WebCore/loader/CachedResourceHandle.h.
        * loader/cache/CachedResourceLoader.cpp: Copied from WebCore/loader/CachedResourceLoader.cpp.
        * loader/cache/CachedResourceLoader.h: Copied from WebCore/loader/CachedResourceLoader.h.
        * loader/cache/CachedScript.cpp: Copied from WebCore/loader/CachedScript.cpp.
        * loader/cache/CachedScript.h: Copied from WebCore/loader/CachedScript.h.
        * loader/cache/CachedXSLStyleSheet.cpp: Copied from WebCore/loader/CachedXSLStyleSheet.cpp.
        * loader/cache/CachedXSLStyleSheet.h: Copied from WebCore/loader/CachedXSLStyleSheet.h.

2010-11-07  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Rename X-Purpose to Purpose
        https://bugs.webkit.org/show_bug.cgi?id=47802

        As requested by IETF HTTP WG.  This patch is part of a larger movement
        in the HTTP community to move away from X- headers.  Various senior
        folks at the IETF believe they're a failed experiment:

        http://tools.ietf.org/html/draft-saintandre-xdash-considered-harmful

        * loader/loader.cpp:
        (WebCore::Loader::Host::servePendingRequests):

2010-11-07  Daniel Bates  <dbates@rim.com>

        Reviewed by Adam Barth.

        Assert that a non-null PassRefPtr<Document> has a non-null frame in Frame::setDocument()
        https://bugs.webkit.org/show_bug.cgi?id=49152

        Add an ASSERT to ensure that a non-null Document has a non-null Frame
        in Frame::setDocument().

        Currently, whenever Frame::setDocument() is called with a non-null
        Document the Document has a non-null Frame. We should assert this
        invariant.

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

2010-11-07  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Move Cache.* into loader/cache in as a start to cleaning up loader/
        https://bugs.webkit.org/show_bug.cgi?id=49153

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/cache/Cache.cpp: Renamed from WebCore/loader/Cache.cpp.
        (WebCore::cache):
        (WebCore::Cache::Cache):
        (WebCore::createResource):
        (WebCore::Cache::requestResource):
        (WebCore::Cache::requestUserCSSStyleSheet):
        (WebCore::Cache::revalidateResource):
        (WebCore::Cache::revalidationSucceeded):
        (WebCore::Cache::revalidationFailed):
        (WebCore::Cache::resourceForURL):
        (WebCore::Cache::deadCapacity):
        (WebCore::Cache::liveCapacity):
        (WebCore::Cache::pruneLiveResources):
        (WebCore::Cache::pruneDeadResources):
        (WebCore::Cache::setCapacities):
        (WebCore::Cache::makeResourcePurgeable):
        (WebCore::Cache::evict):
        (WebCore::Cache::addCachedResourceLoader):
        (WebCore::Cache::removeCachedResourceLoader):
        (WebCore::fastLog2):
        (WebCore::Cache::lruListFor):
        (WebCore::Cache::removeFromLRUList):
        (WebCore::Cache::insertInLRUList):
        (WebCore::Cache::resourceAccessed):
        (WebCore::Cache::removeFromLiveDecodedResourcesList):
        (WebCore::Cache::insertInLiveDecodedResourcesList):
        (WebCore::Cache::addToLiveResourcesSize):
        (WebCore::Cache::removeFromLiveResourcesSize):
        (WebCore::Cache::adjustSize):
        (WebCore::Cache::TypeStatistic::addResource):
        (WebCore::Cache::getStatistics):
        (WebCore::Cache::setDisabled):
        (WebCore::Cache::dumpStats):
        (WebCore::Cache::dumpLRULists):
        * loader/cache/Cache.h: Renamed from WebCore/loader/Cache.h.
        (WebCore::Cache::LRUList::LRUList):
        (WebCore::Cache::TypeStatistic::TypeStatistic):
        (WebCore::Cache::loader):
        (WebCore::Cache::disabled):
        (WebCore::Cache::setPruneEnabled):
        (WebCore::Cache::prune):
        (WebCore::Cache::setDeadDecodedDataDeletionInterval):
        (WebCore::Cache::deadDecodedDataDeletionInterval):
        (WebCore::Cache::remove):
        (WebCore::Cache::shouldMakeResourcePurgeableOnEviction):

2010-11-05  Helder Correia  <helder@sencha.com>

        Reviewed by Andreas Kling.

        [Qt] box-shadow does not blur (is solid) when using border-radius
        https://bugs.webkit.org/show_bug.cgi?id=46327

        Implement blurred box-shadow when styling with border-radius.
        This change is related to https://bugs.webkit.org/show_bug.cgi?id=44488

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

2010-11-07  John Reck  <jreck@google.com>

        Reviewed by Steve Block.

        Implements navigator.language for Android
        https://bugs.webkit.org/show_bug.cgi?id=49099
        
        Android was previously hardcoding the value for WebCore::platformDefaultLanguage().
        This patch removes the hardcoding and calls into the PlatformBridge to get the
        correct language based off of the user's settings.

        No new tests needed, this is already covered

        * Android.mk:
        * platform/android/LanguageAndroid.cpp: Added.
        (WebCore::platformDefaultLanguage):
        * platform/android/PlatformBridge.h:
        * platform/android/TemporaryLinkStubs.cpp:

2010-11-07  Robert Hogan  <robert@webkit.org>

        Reviewed by Andreas Kling.

        [qt] screenDepthPerComponent returns the wrong value

        Return best estimate of the number of bits per color
        rather than screen depth.

        Add a layout test to sanity check screenDepthPerComponent.

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

        Test: fast/css/media-rule-screenDepthPerComponent.html

        * platform/qt/PlatformScreenQt.cpp:
        (WebCore::screenDepthPerComponent):

2010-11-07  Chang Shu  <chang.shu@nokia.com>

        Reviewed by Antonio Gomes.

        Add a helper function to avoid duplicated code.
        https://bugs.webkit.org/show_bug.cgi?id=49085

        * dom/SelectElement.cpp:
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::modify):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::isKeyboardFocusable):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::defaultArrowEventHandler):
        * page/SpatialNavigation.cpp:
        (WebCore::isSpatialNavigationEnabled):
        * page/SpatialNavigation.h:

2010-11-06  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Simon Fraser.

        Web Inspector: Some image resources don't display the image when selected in the Resources panel.
        https://bugs.webkit.org/show_bug.cgi?id=48935

        Marked resources loaded from memory cache as finished.

        * inspector/front-end/ResourceManager.js:
        (WebInspector.ResourceManager.prototype.didLoadResourceFromMemoryCache):

2010-11-06  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: XHR logging is not checked in context menu after browser restart.
        https://bugs.webkit.org/show_bug.cgi?id=49133

        * inspector/InspectorState.cpp:
        (WebCore::InspectorState::InspectorState):

2010-11-06  Ryosuke Niwa  <rniwa@webkit.org>

        Unreviewed Windows build fix.

        * editing/EditingAllInOne.cpp: Added EditingStyle.cpp

2010-11-04  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        Bug 46335 - Add EditingStyle
        https://bugs.webkit.org/show_bug.cgi?id=46335

        Added EditingStyle to WebCore/editing.  This class is intended to encapsulate getPropertiesNotIn, removeNonEditingProperties,
        editingStyleAtPosition, and prepareEditingStyleToApplyAt in ApplyStyleCommand.cpp once deployed everywhere.
        Deployed it in typing styles.

        No new tests are added since this is a refactoring in progress.

        * CMakeLists.txt: Added EditingStyle.cpp
        * GNUmakefile.am: Added EditingStyle.cpp and EditingStyle.h
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraphs): Calls editingStyleIncludingTypingStyle.
        (WebCore::CompositeEditCommand::breakOutOfEmptyListItem): Uses EditingStyle.
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::saveTypingStyleState): Ditto.
        (WebCore::DeleteSelectionCommand::calculateTypingStyleAfterDelete): Ditto.
        * editing/DeleteSelectionCommand.h:
        * editing/EditingStyle.cpp: Added.
        (WebCore::editingStyleFromComputedStyle): Added.
        (WebCore::EditingStyle::EditingStyle): Added.
        (WebCore::EditingStyle::init): Added; a clone of ApplyStyleCommand::editingStyleAtPosition.
        (WebCore::EditingStyle::removeTextFillAndStrokeColorsIfNeeded): Extracted from init.
        (WebCore::EditingStyle::replaceFontSizeByKeywordIfPossible): Extracted from init.
        (WebCore::EditingStyle::isEmpty): Added.
        (WebCore::EditingStyle::setStyle): Added.
        (WebCore::EditingStyle::clear): Added.
        (WebCore::EditingStyle::removeBlockProperties): Added.
        (WebCore::EditingStyle::prepareToApplyAt): Added.
        (WebCore::editingStyleIncludingTypingStyle): Added.
        * editing/EditingStyle.h: Added.
        (WebCore::EditingStyle::create): Added.
        (WebCore::EditingStyle::style): Added.
        * editing/RemoveFormatCommand.cpp:
        (WebCore::RemoveFormatCommand::doApply): Uses EditingStyle.
        * editing/SelectionController.h:
        (WebCore::SelectionController::typingStyle): Uses EditingStyle.
        (WebCore::SelectionController::clearTypingStyle): Uses EditingStyle.
        (WebCore::SelectionController::setTypingStyle): Uses EditingStyle.
        * rendering/style/RenderStyle.h: Added EditingStyle as a friend.

2010-11-05  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein and Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=47237
        
        Make selection work with vertical text.  This patch fixes a bug in the computation of lineTop.  For lines
        with positive leading, lineTop was incorrectly including the top leading.  Since the flipping of lines
        for "lr" and "bt" writing modes involved flipping using lineTop and lineBottom, an incorrect lineTop meant
        that those modes were mis-rendering.  This is why the Japanese "lr" text examples have the first line smushed
        too far against the border.
        
        Fixing lineTop to no longer incorrectly include top leading has implications for editing.  I ended up
        rewriting positionForPoint to exactly match selection, since that seemed to be the most intuitive
        behavior.  I got rid of the verticalClickFudgeFactor and now just use selectionTop and selectionBottom
        instead of lineTop and lineBottom.  I am pretty sure the code used selectionTop in a previous incarnation
        anyway and that I moved away from it when I implemented lineTop and lineBottom.  The code then grew
        more complicated from people trying to work with lineTop and lineBottom, but going back to selectionTop
        and selectionBottom is the right behavior I think.  One editing test has been updated after this change
        (editing/selection/after-line-break.html), and one DOM test has been changed to not hit test past the
        bottom of a line (fast/dom/Document/CaretRangeFromPoint/basic.html).
        
        I patched selection painting of InlineTextBoxes so that the leading going up to the next line box is used
        for "lr" and "bt" modes instead of the previous box.  This makes sense for English text, but we may want
        a different policy for Japanese text eventually (possibly just splitting the difference instead).  Leaving it
        this way for now, and we can collect feedback on the design.
        
        I rewrote all of the selection gap painting code to be writing-mode aware.  During the course of rewriting this
        code I noticed a bug in the logicalLeftSelectionOffset and logicalRightSelectionOffset functions where there
        was a coordinate space mismatch on a comparison.  Fixing this improves the repaint/selection-clear.html test.

        Added new tests in fast/blockflow/.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesInBlockDirection):
        * rendering/InlineFlowBox.h:
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::selectionBottom):
        (WebCore::InlineTextBox::paintSelection):
        (WebCore::InlineTextBox::paintCompositionBackground):
        (WebCore::InlineTextBox::paintSpellingOrGrammarMarker):
        (WebCore::InlineTextBox::paintTextMatchMarker):
        * rendering/InlineTextBox.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::selectionGapRectsForRepaint):
        (WebCore::RenderBlock::paintSelection):
        (WebCore::clipOutPositionedObjects):
        (WebCore::blockDirectionOffset):
        (WebCore::inlineDirectionOffset):
        (WebCore::RenderBlock::logicalRectToPhysicalRect):
        (WebCore::RenderBlock::selectionGaps):
        (WebCore::RenderBlock::inlineSelectionGaps):
        (WebCore::RenderBlock::blockSelectionGaps):
        (WebCore::RenderBlock::blockSelectionGap):
        (WebCore::RenderBlock::logicalLeftSelectionGap):
        (WebCore::RenderBlock::logicalRightSelectionGap):
        (WebCore::RenderBlock::logicalLeftSelectionOffset):
        (WebCore::RenderBlock::logicalRightSelectionOffset):
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::flipForWritingMode):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::logicalBottom):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::alignBoxesInBlockDirection):
        (WebCore::RootInlineBox::lineSelectionGap):
        (WebCore::RootInlineBox::selectionTop):
        (WebCore::RootInlineBox::selectionBottom):
        * rendering/RootInlineBox.h:

2010-11-05  Simon Fraser  <simon.fraser@apple.com>

        Just put things back the way they were. Too many mysterious linker errors.

2010-11-05  Simon Fraser  <simon.fraser@apple.com>

        Undo most of the previous commit since the compiler seems to have trouble
        with an inlined operator++ in debug builds.

        * platform/DeprecatedPtrListImpl.cpp:
        (WebCore::DeprecatedPtrListImplIterator::operator++):
        * platform/DeprecatedPtrListImpl.h:

2010-11-05  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt.

        Inline some DeprecatedPtrListImplIterator methods for performance
        https://bugs.webkit.org/show_bug.cgi?id=49124

        This is a ~4% performance improvement on some Peacekeepr "Community" tests.

        * platform/DeprecatedPtrListImpl.cpp:
        * platform/DeprecatedPtrListImpl.h:
        (WebCore::DeprecatedListNode::DeprecatedListNode):
        (WebCore::DeprecatedPtrListImplIterator::current):
        (WebCore::DeprecatedPtrListImplIterator::operator++):

2010-11-05  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Gray-scale PNGs with color profiles don't decode properly on Chromium Mac
        https://bugs.webkit.org/show_bug.cgi?id=49110

        Applying the color profile from this PNG was causing the image to
        triple in width.  This seems to be because both the PNG decoder and
        CoreGraphics were trying to expand the gray-scale image to RGB.  To fix
        this issue, I've disabled color profile support for gray-scale PNGs.

        Test: fast/images/gray-scale-png-with-color-profile.html

        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageDecoder::headerAvailable):

2010-11-05  Jian Li  <jianli@chromium.org>

        Reviewed by Dmitry Titov.

        Need to check if page is detached in Frame::transferChildFrameToNewDocument to avoid occasional crash
        https://bugs.webkit.org/show_bug.cgi?id=49116

        The fix is to add the check.

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

2010-11-04  Enrica Casucci  <enrica@apple.com>

        Reviewed by Adele Peterson.

        Pasting large amounts of plain text in a text area is very slow
        https://bugs.webkit.org/show_bug.cgi?id=49040
        <rdar://problem/7640912>
        
        The optimization consists in skipping the ApplyStyle command when
        pasting into a text area or into an element that has -webkit-user-modify: read-write-plaintext-only.
        The biggest performance hit comes from iterating through
        a large number of paragraph when no style change is needed.
        A further step will be to improve the paragraph iteration when it
        can't be avoided.
        
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply): Check if the selection
        is in a text form control or in an element that has -webkit-user-modify: read-write-plaintext-only
        and force no style matching.

2010-11-05  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by David Levin.

        JSCallbackData::invokeCallback triggers layout from a worker thread
        https://bugs.webkit.org/show_bug.cgi?id=49096

        Fixed the bug by only calling updateStyleForAllDocuments when the context is document in
        JSCallbackData::invokeCallback.

        No new tests are added since many of existing workers tests hit the added assertion in debug builds.

        * bindings/js/JSCallbackData.cpp:
        (WebCore::JSCallbackData::invokeCallback): No longer calls updateStyleForAllDocuments unconditionally.
        * dom/Document.cpp:
        (WebCore::Document::updateStyleIfNeeded): Added ASSERT(isMainThread()).
        (WebCore::Document::updateStyleForAllDocuments): Ditto.
        (WebCore::Document::updateLayout): Ditto.

2010-11-05  Ilya Sherman  <isherman@chromium.org>

        Reviewed by Simon Fraser.

        Querying selection start and end should be const
        https://bugs.webkit.org/show_bug.cgi?id=48786

        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::selectionStart):
        (WebCore::RenderTextControl::selectionEnd):
        (WebCore::RenderTextControl::visiblePositionForIndex):
        (WebCore::RenderTextControl::indexForVisiblePosition):
        * rendering/RenderTextControl.h:

2010-11-05  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Move resumeAnimations/suspendAnimations from Frame to AnimationController.
        https://bugs.webkit.org/show_bug.cgi?id=49073

        Changed the name of suspendAnimations/resumeAnimations to
        suspendAnimationsInDocument/resumeAnimationsInDocument. These are no
        longer exported, but have the same functionality as before. I then
        added new suspendAnimations/resumeAnimations function which take
        no params and suspend/resume on the frame owning the animation
        controller and all its child frames. These are the functions that
        are now exported. I then changed all the platform specific WebKit
        code to use these functions.

        * WebCore.exp.in:
        * page/Frame.cpp:
        * page/Frame.h:
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::suspendAnimations):
        (WebCore::AnimationControllerPrivate::resumeAnimations):

2010-11-04  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        Need to simulate DEPTH_STENCIL in framebufferRenderbuffer / getFramebufferAttachmentParameter
        https://bugs.webkit.org/show_bug.cgi?id=49020

        * html/canvas/WebGLFramebuffer.cpp:
        (WebCore::WebGLFramebuffer::getAttachment): Return the attached renderbuffer/texture.
        (WebCore::WebGLFramebuffer::isIncomplete): Add an extra parameter deciding whether we should check internal format matching the attachment point or not.
        (WebCore::WebGLFramebuffer::onAccess): Pass extra parameter in isIncomplete.
        * html/canvas/WebGLFramebuffer.h:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::checkFramebufferStatus): Pass extra parameter in isIncomplete.
        (WebCore::WebGLRenderingContext::framebufferRenderbuffer): Emulate DEPTH_STENCIL_ATTACHMENT; re-attach previously conflicted buffers upon detachment.
        (WebCore::WebGLRenderingContext::getFramebufferAttachmentParameter): Throw an error when conflicted attachments exist.
        (WebCore::WebGLRenderingContext::renderbufferStorage): Map DEPTH_STENCIL to DEPTH24_STENCIL8.
        * platform/graphics/Extensions3D.h: Add DEPTH24_STENCIL8 enum and update the documentation.
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::framebufferRenderbuffer): Remove emulation code at this level.

2010-11-05  Chris Guillory  <chris.guillory@google.com>

        Reviewed by Chris Fleizach.

        Keep a reference to the scrollbar in accessibility scrollbar.
        https://bugs.webkit.org/show_bug.cgi?id=48896

        * accessibility/AccessibilityScrollbar.h:
        (WebCore::AccessibilityScrollbar::scrollbar):

2010-11-05  Chang Shu  <chang.shu@nokia.com>

        Reviewed by Antonio Gomes.

        Add support for <select> element in single selection mode. We use space to
        trigger arrow key handling for selection change or spatial navigation.
        https://bugs.webkit.org/show_bug.cgi?id=48937

        * dom/SelectElement.cpp:
        (WebCore::isSpatialNavigationEnabled):
        (WebCore::SelectElement::menuListDefaultEventHandler):
        (WebCore::SelectElement::listBoxDefaultEventHandler):

2010-11-05  Charlie Reis  <creis@chromium.org>

        Reviewed by Darin Fisher.

        Need to expose HistoryController::previousItem() for Chromium WebKit API.
        https://bugs.webkit.org/show_bug.cgi?id=48809

        * loader/HistoryController.h:

2010-11-05  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        Crash in ApplyStyleCommand::surroundNodeRangeWithElement
        https://bugs.webkit.org/show_bug.cgi?id=48581

        The crash was caused by a false assertion that we can always recover selection in
        ApplyStyleCommand::removeInlineStyle.  Fixed the crash by removing the assertion
        and adding an early exit to the call site.  Also converted raw pointers to RefPtr
        in surroundNodeRangeWithElement and addInlineStyleIfNeeded.

        Test (non-Mac platforms): editing/style/iframe-onload-crash.html

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyInlineStyle):
        (WebCore::ApplyStyleCommand::removeInlineStyle):
        (WebCore::ApplyStyleCommand::surroundNodeRangeWithElement):
        (WebCore::ApplyStyleCommand::addInlineStyleIfNeeded):
        * editing/ApplyStyleCommand.h:

2010-11-04  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=49008
        <rdar://problem/7906226> Frequent crashes on mail.yahoo.co.jp

        Instance::m_runtimeObject used to be zeroed out by RuntimeObject destructor. But the
        destructor may not be called immediately - GC first marks an object as dead, and only 
        destroys it when its cell is overwritten. So, m_runtimeObject would keep pointing to a dead
        object.

        Functions in JSPluginElementFunctions.cpp put the RuntimeObject on stack for later use,
        but if it's already dead, it can be overwritten before use.

        The solution is of course to use WeakGCPtr, which returns 0 for dead objects.

        * bridge/jsc/BridgeJSC.cpp:
        (JSC::Bindings::Instance::Instance):
        (JSC::Bindings::Instance::~Instance):
        (JSC::Bindings::Instance::createRuntimeObject):
        (JSC::Bindings::Instance::willDestroyRuntimeObject):
        (JSC::Bindings::Instance::willInvalidateRuntimeObject):
        * bridge/jsc/BridgeJSC.h:
        * bridge/runtime_object.cpp:
        (JSC::Bindings::RuntimeObject::~RuntimeObject):
        (JSC::Bindings::RuntimeObject::invalidate):

2010-11-05  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Make suspendAnimations/resumeAnimations and setCSSAnimations traverse through subframes and remember state
        https://bugs.webkit.org/show_bug.cgi?id=46945

        Add new funtions to suspend and resume animations. The go through all subframes and suspend or resume them
        recursively.

        Test: animations/stop-animation-on-suspend.html

        * WebCore.exp.in:
        * page/Frame.cpp:
        (WebCore::Frame::suspendAnimations):
        (WebCore::Frame::resumeAnimations):
        * page/Frame.h:

2010-11-05  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Crash in InspectorDOMAgent::innerParentNode.
        https://bugs.webkit.org/show_bug.cgi?id=49054

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::setOuterHTML):

2010-11-05  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: XHR logging in console should give complete view of resource.
        https://bugs.webkit.org/show_bug.cgi?id=48998

        Drive-by fixes: linkify line number to scripts panel, fall back to resources;
        enable multiline console entry on shift modifier as well.
        
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel):
        (WebInspector.NetworkPanel.prototype._reset):
        (WebInspector.NetworkPanel.prototype.refreshResource):
        (WebInspector.NetworkPanel.prototype.canShowSourceLine):
        (WebInspector.NetworkPanel.prototype.showSourceLine):
        * inspector/front-end/StoragePanel.js:
        (WebInspector.StoragePanel.prototype.show):
        (WebInspector.StoragePanel.prototype.showSourceLine):
        * inspector/front-end/inspector.js:
        (WebInspector.showPanel):
        (WebInspector.linkifyStringAsFragment):

2010-10-27  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Steve Block.

        Clean up IDBTransactionBackend/Coordinator
        https://bugs.webkit.org/show_bug.cgi?id=48425

        Get rid of obsolete id and thus we don't need the factory method
        on IDBTransactionCoordinator that creates IDBTransactionBackends.

        Add an assert to IDBTransactionBackend to make sure we're not in
        the coordinator and then remove the coordinators ref counting link
        to the transaction.

        Have the transaction backend zero out refs to the database when its
        done using it.

        Existing tests provide coverage for this refactoring.

        * storage/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::setVersion):
        (WebCore::IDBDatabaseBackendImpl::transaction):
        * storage/IDBTransactionBackendImpl.cpp:
        (WebCore::IDBTransactionBackendImpl::create):
        (WebCore::IDBTransactionBackendImpl::IDBTransactionBackendImpl):
        (WebCore::IDBTransactionBackendImpl::~IDBTransactionBackendImpl):
        (WebCore::IDBTransactionBackendImpl::abort):
        (WebCore::IDBTransactionBackendImpl::commit):
        * storage/IDBTransactionBackendImpl.h:
        * storage/IDBTransactionBackendInterface.h:
        * storage/IDBTransactionCoordinator.cpp:
        (WebCore::IDBTransactionCoordinator::didStartTransaction):
        (WebCore::IDBTransactionCoordinator::didFinishTransaction):
        (WebCore::IDBTransactionCoordinator::isActive):
        (WebCore::IDBTransactionCoordinator::processStartedTransactions):
        * storage/IDBTransactionCoordinator.h:

2010-10-27  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Steve Block.

        IDBFactoryBackend's reference to IDBDatabaseBackend should be weak
        https://bugs.webkit.org/show_bug.cgi?id=48416

        The factory's lifetime is that of the application, so without making
        this weak, IDBDatabaseBackend's will never be closed until the app
        terminates.

        * storage/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::IDBDatabaseBackendImpl):
        (WebCore::IDBDatabaseBackendImpl::~IDBDatabaseBackendImpl):
        * storage/IDBDatabaseBackendImpl.h:
        (WebCore::IDBDatabaseBackendImpl::create):
        * storage/IDBFactoryBackendImpl.cpp:
        (WebCore::IDBFactoryBackendImpl::removeIDBDatabaseBackend):
        (WebCore::IDBFactoryBackendImpl::removeSQLiteDatabase):
        (WebCore::IDBFactoryBackendImpl::open):
        * storage/IDBFactoryBackendImpl.h:

2010-10-27  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Steve Block.

        IDBObjectStoreBackend and IDBIndexBackend should not depend on IDBDatabaseBackend
        https://bugs.webkit.org/show_bug.cgi?id=48410

        Break dependency cyles between IDBDatabaseBackend and the other classes listed.
        This was causing memory leaks.

        * storage/IDBCursorBackendImpl.cpp:
        (WebCore::IDBCursorBackendImpl::IDBCursorBackendImpl):
        (WebCore::IDBCursorBackendImpl::updateInternal):
        (WebCore::IDBCursorBackendImpl::removeInternal):
        (WebCore::IDBCursorBackendImpl::database):
        * storage/IDBCursorBackendImpl.h:
        (WebCore::IDBCursorBackendImpl::create):
        * storage/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::createObjectStore):
        (WebCore::IDBDatabaseBackendImpl::loadObjectStores):
        * storage/IDBIndexBackendImpl.cpp:
        (WebCore::IDBIndexBackendImpl::IDBIndexBackendImpl):
        (WebCore::IDBIndexBackendImpl::openCursorInternal):
        (WebCore::IDBIndexBackendImpl::sqliteDatabase):
        * storage/IDBIndexBackendImpl.h:
        (WebCore::IDBIndexBackendImpl::create):
        (WebCore::IDBIndexBackendImpl::storeName):
        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::IDBObjectStoreBackendImpl):
        (WebCore::IDBObjectStoreBackendImpl::createIndex):
        (WebCore::IDBObjectStoreBackendImpl::openCursorInternal):
        (WebCore::IDBObjectStoreBackendImpl::loadIndexes):
        (WebCore::IDBObjectStoreBackendImpl::sqliteDatabase):
        * storage/IDBObjectStoreBackendImpl.h:
        (WebCore::IDBObjectStoreBackendImpl::create):

2010-11-05  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: inspector lags on large resources with numerous <script> tags.
        https://bugs.webkit.org/show_bug.cgi?id=49060

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._addScriptToFilesMenu):

2010-11-05  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by David Kilzer.

        Replace ARRAYSIZE with WTF_ARRAY_LENGTH
        https://bugs.webkit.org/show_bug.cgi?id=48903

        * platform/UUID.cpp:
        (WebCore::createCanonicalUUIDString):
        * platform/graphics/chromium/FontCacheChromiumWin.cpp:
        (WebCore::FontCache::getFontDataForCharacters):
        * platform/graphics/win/FontCacheWin.cpp:
        (WebCore::FontCache::getLastResortFallbackFont):
        * platform/graphics/win/IconWin.cpp:
        (WebCore::Icon::createIconForFiles):
        * platform/win/ClipboardUtilitiesWin.cpp:
        (WebCore::getWebLocData):
        * platform/win/ClipboardWin.cpp:
        (WebCore::createGlobalHDropContent):
        (WebCore::createGlobalImageFileDescriptor):
        (WebCore::ClipboardWin::files):
        (WebCore::ClipboardWin::writeURL):
        * platform/win/DragDataWin.cpp:
        (WebCore::DragData::asFilenames):
        * platform/win/FileSystemWin.cpp:
        (WebCore::safeCreateFile):

2010-11-05  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Dirk Schulze.

        Bug 48979 - [Chromium] SVGListPropertyTearOff.h: function commitChange ASSERTs on Win & Mac
        https://bugs.webkit.org/show_bug.cgi?id=48979

        Function removeItemValuesAndWrappers(): Move code out of 'if' statement so that
        'wrappers' and 'values' stay synced.

        test: svg/dom/baseVal-animVal-crash.html doesn't ASSERT

        * svg/properties/SVGListProperty.h:
        (WebCore::SVGListProperty::removeItemValuesAndWrappers):

2010-11-05  John Reck  <jreck@google.com>

        Reviewed by Nikolas Zimmermann.

        The change to SVGPropertyTearOff by CodeGeneratorV8.pm caused two build failures
        for Android. One was a missing SVGPropertyTearOff.h include, the other was a 
        missing forward declaration of FloatRect. Seems to be the result of:
        https://bugs.webkit.org/show_bug.cgi?id=48204

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

        No tests needed, fixes build issue.

        * bindings/scripts/CodeGeneratorV8.pm:

2010-11-05  Rob Buis  <rwlbuis@gmail.com>

        Reviewed by David Hyatt.

        CSSRule#parentRule always null
        https://bugs.webkit.org/show_bug.cgi?id=46228

        Ensure MediaList child rules have the MediaList set as parent
        in order to correct their parentRule correctness.

        Test: fast/dom/css-mediarule-parentRule.html

        * css/CSSMediaRule.cpp:
        (WebCore::CSSMediaRule::CSSMediaRule):

2010-11-04  Xan Lopez  <xlopez@igalia.com>

        Fix the GTK+ build.

        * GNUmakefile.am:

2010-10-20  Chang Shu  <chang.shu@nokia.com>, Antonio Gomes <tonikitoo@webkit.org>

        Reviewed by Simon Fraser.

        [Qt] Makes <input type=text> and <textarea> functional with
        Spatial Navigation enabled. Before this patch, the focus cannot
        move away from input box once it is in. This patch allows focus
        move to neighbor nodes when the caret reaches the edge of the texts.
        This patch does not support yet cases where the focused <input>
        has a JS handler for the arrow keys.
        https://bugs.webkit.org/show_bug.cgi?id=37153

        Tests: fast/events/spatial-navigation/snav-input.html
               fast/events/spatial-navigation/snav-textarea.html

        * editing/EditorCommand.cpp:
        (WebCore::executeMoveDown):
        (WebCore::executeMoveLeft):
        (WebCore::executeMoveRight):
        (WebCore::executeMoveUp):
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::modify):

2010-11-04  Dan Bernstein  <mitz@apple.com>

        Build fix.

        * editing/Editor.cpp:
        (WebCore::Editor::dismissCorrectionPanel):

2010-11-04  Jia Pu  <jpu@apple.com>

        Reviewed by Dan Bernstein.

        reversion bubble in WebViews
        https://bugs.webkit.org/show_bug.cgi?id=47630
        <rdar://problem/8530960>

        Added manual test:
        manual-tests/autocorrection/continue-typing-to-dismiss-reversion.html
        manual-tests/autocorrection/delete-to-dismiss-reversion.html
        manual-tests/autocorrection/delete-to-end-of-word-to-show-reversion.html
        manual-tests/autocorrection/move-to-end-of-word-to-show-reversion.html
        manual-tests/autocorrection/type-whitespace-to-dismiss-reversion.html

        We can only manully test this feature for two reasons:
        1. On Mac OS X, the result of spell checking is partly determined by past user usage. We can't
           realiably generating test cases until we can disable user custom data during spell checking.
        2. To exerciese this feature, we need a minimum of 0.3 second delay using WebCore timer.

        This patch is to add reversion to correction panel. It consists of following major code changes:
        1. Collected all autocorrection related member variables in Editor into a CorrectionPanelInfo
           class to improve readability.
        2. Changed signature of Editor::startCorrectionPanelTimer() to allow caller to specify the
           type of correction panel--regular correction or reversion.
        3. Made necessary changes to adopt reversion API in AppKit.
        4. Use SUPPORT_CORRECTION_PANEL macro to improve readability.

        * GNUmakefile.am: Added CorrectionPanelInfo.h.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj:
        * editing/CorrectionPanelInfo.h: Added.
        * editing/Editor.cpp:
        (WebCore::Editor::respondToChangedSelection): Start correction panel timer for reversion when
          the new selection is a caret selection at end of a previously corrected word.
        (WebCore::Editor::appliedEditing): Stop timer at the beginning of the method instead of at the end.
        (WebCore::Editor::~Editor): Adopted new method dismissCorrectionPanel().
        (WebCore::Editor::markMisspellingsAfterTypingToPosition): Adopted new method applyCorrectionPanelInfo().
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges): Code change for new m_correctionPanelInfo
          member variable.
        (WebCore::Editor::correctionPanelTimerFired): Change to handle reversion panel type.
        (WebCore::Editor::handleRejectedCorrection): Ditto.
        (WebCore::Editor::startCorrectionPanelTimer): Changed signature to allow passing in panel type.
        (WebCore::Editor::stopCorrectionPanelTimer): Adopted macro SUPPORT_CORRECTION_PANEL.
        (WebCore::Editor::handleCancelOperation): Ditto.
        (WebCore::Editor::isShowingCorrectionPanel): Ditto.
        (WebCore::Editor::dismissCorrectionPanel): Update m_correctionPanelInfo when correction panel
          is dismissed.
        (WebCore::Editor::applyCorrectionPanelInfo): Factored out code that applies autocorrection.
        (WebCore::Editor::changeSelectionAfterCommand): Adopt macro SUPPORT_CORRECTION_PANEL.
        * editing/Editor.h: Adopted CorrectionPanelInfo and add new member methods.
        * editing/EditorCommand.cpp: Adopted macro SUPPORT_CORRECTION_PANEL
        (WebCore::createCommandMap):
        * editing/TypingCommand.cpp: Adopted macro SUPPORT_CORRECTION_PANEL and new signature of
          startCorrectionPanelTimer().
        (WebCore::TypingCommand::markMisspellingsAfterTyping):
        * loader/EmptyClients.h:
        (WebCore::EmptyEditorClient::showCorrectionPanel): Adopted new signature of base class method.
        (WebCore::EmptyEditorClient::dismissCorrectionPanel):  Ditto.
        * manual-tests/autocorrection/continue-typing-to-dismiss-reversion.html: Added.
        * manual-tests/autocorrection/delete-to-dismiss-reversion.html: Added.
        * manual-tests/autocorrection/delete-to-end-of-word-to-show-reversion.html: Added.
        * manual-tests/autocorrection/move-to-end-of-word-to-show-reversion.html: Added.
        * manual-tests/autocorrection/type-whitespace-to-dismiss-reversion.html: Added.
        * page/EditorClient.h: Changed signature of showCorrectionPanel() and dismissCorrectionPanel().
        * platform/graphics/mac/GraphicsContextMac.mm: Added comment to improve readability.
        (WebCore::GraphicsContext::drawLineForTextChecking):

2010-11-04  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        Made table layout and painting work with all writing modes. Hit-testing, repainting, tables
        where some elements have their own layers, and cells whose writing mode differs from the
        table’s are not supported yet.

        Part of: Make tables work with vertical text
        https://bugs.webkit.org/show_bug.cgi?id=46417

        Tests: fast/table/027-vertical.html
               fast/table/028-vertical.html
               fast/table/035-vertical.html
               fast/table/038-vertical.html
               fast/table/040-vertical.html
               fast/table/auto-with-percent-height-vertical.html
               fast/table/border-collapsing/001-vertical.html
               fast/table/border-collapsing/002-vertical.html
               fast/table/border-collapsing/003-vertical.html
               fast/table/border-collapsing/004-vertical.html
               fast/table/border-collapsing/border-collapsing-head-foot-vertical.html
               fast/table/border-collapsing/equal-precedence-resolution-vertical.html
               fast/table/border-collapsing/rtl-border-collapsing-vertical.html
               fast/table/colspanMinWidth-vertical.html
               fast/table/fixed-with-auto-with-colspan-vertical.html
               fast/table/growCellForImageQuirk-vertical.html
               fast/table/height-percent-test-vertical.html
               fast/table/percent-widths-stretch-vertical.html
               fast/table/rowspan-paint-order-vertical.html
               fast/table/table-display-types-vertical.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::adjustRenderStyle): Changed to allow all writing modes for tables,
        make row groups, rows, column groups and columns inherit the table’s writing mode. For now,
        make cells do this too.
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::parseMappedAttribute): Map align=center using logical properties.
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::RenderTable): Initialize m_borderStart and m_borderEnd.
        (WebCore::RenderTable::styleDidChange): Changed the rule for when to use auto layout to look
        at the logical width instead of the width.
        (WebCore::RenderTable::computeLogicalWidth): Uses logical widths and works with perpendicular
        containing blocks.
        (WebCore::RenderTable::layout): Use logical lengths.
        (WebCore::RenderTable::setCellLogicalWidths): Renamed setCellWidths() to this and updated for
        the renaming of RenderTableSection::setCellWidths().
        (WebCore::RenderTable::paintObject): Account for flipped modes.
        (WebCore::RenderTable::subtractCaptionRect): Added this helper method the considers writing modes.
        (WebCore::RenderTable::paintBoxDecorations): Adopted subtractCaptionRect().
        (WebCore::RenderTable::paintMask): Ditto.
        (WebCore::RenderTable::computePreferredLogicalWidths): Updated for the renaming of
        recalcHorizontalBorders().
        (WebCore::RenderTable::calcBorderStart): Renamed calcBorderLeft() to this and changed it to use
        borderStart(). Splits odd number of pixels based on the physical side.
        (WebCore::RenderTable::calcBorderEnd): Similar.
        (WebCore::RenderTable::recalcBordersInRowDirection): Renamed recalcHorizontalBorders() to this
        and updated for other renames.
        (WebCore::RenderTable::borderBefore): Replaced borderTop() with this.
        (WebCore::RenderTable::borderAfter): Similar.
        (WebCore::RenderTable::outerBorderBefore): Similar.
        (WebCore::RenderTable::outerBorderAfter): Similar.
        (WebCore::RenderTable::outerBorderStart): Similar.
        (WebCore::RenderTable::outerBorderEnd): Similar.
        (WebCore::RenderTable::firstLineBoxBaseline): Changed to use logical heights.
        (WebCore::RenderTable::overflowClipRect): Account for writing modes.
        * rendering/RenderTable.h:
        (WebCore::RenderTable::borderStart):
        (WebCore::RenderTable::borderEnd):
        (WebCore::RenderTable::borderLeft):
        (WebCore::RenderTable::borderRight):
        (WebCore::RenderTable::borderTop):
        (WebCore::RenderTable::borderBottom):
        (WebCore::RenderTable::outerBorderLeft):
        (WebCore::RenderTable::outerBorderRight):
        (WebCore::RenderTable::outerBorderTop):
        (WebCore::RenderTable::outerBorderBottom):
        (WebCore::RenderTable::bordersPaddingAndSpacingInRowDirection): Changed to match its name.
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::styleWillChange): Changed to detect changes to logical height.
        * rendering/RenderTableSection.cpp:
        (WebCore::setRowLogicalHeightToRowStyleLogicalHeightIfNotRelative): Renamed and changed to use
        logical heights.
        (WebCore::RenderTableSection::RenderTableSection): Updated initializers for new member variables.
        (WebCore::RenderTableSection::addChild): Updated for rename.
        (WebCore::RenderTableSection::ensureRows): Ditto.
        (WebCore::RenderTableSection::addCell): Ditto. Also use logical heights.
        (WebCore::RenderTableSection::setCellLogicalWidths): Renamed setCellWidths() to this, changed
        to use logical widths.
        (WebCore::RenderTableSection::calcRowLogicalHeight): Added “logical” to the name. Updated with
        logical heights.
        (WebCore::RenderTableSection::layoutRows):
        (WebCore::RenderTableSection::calcOuterBorderBefore):
        (WebCore::RenderTableSection::calcOuterBorderAfter):
        (WebCore::RenderTableSection::calcOuterBorderStart):
        (WebCore::RenderTableSection::calcOuterBorderEnd):
        (WebCore::RenderTableSection::recalcOuterBorder):
        (WebCore::RenderTableSection::firstLineBoxBaseline):
        (WebCore::RenderTableSection::paintCell):
        (WebCore::RenderTableSection::recalcCells):
        * rendering/RenderTableSection.h:
        (WebCore::RenderTableSection::outerBorderBefore):
        (WebCore::RenderTableSection::outerBorderAfter):
        (WebCore::RenderTableSection::outerBorderStart):
        (WebCore::RenderTableSection::outerBorderEnd):

2010-11-04  Kent Tamura  <tkent@chromium.org>

        Unreviewed, trivial test fix.

        Fix GTK build for http://trac.webkit.org/changeset/71373 .

        * GNUmakefile.am: Add HTMLOutputElement.{cpp,h}

2010-11-04  MORITA Hajime  <morrita@google.com>

        Reviewed by Kent Tamura.

        Stale reference to RenderObject held as FrameView layoutRoot
        https://bugs.webkit.org/show_bug.cgi?id=48019
        
        <progress> and <meter> shouldn't have children of its RenderObject,
        which caused unexpected result.
        This change suppresses child creation to prevent it.

        Tests: fast/dom/HTMLMeterElement/meter-element-with-child-crash.html
               fast/dom/HTMLProgressElement/progress-element-with-child-crash.html

        * rendering/RenderIndicator.h:
        (WebCore::RenderIndicator::canHaveChildren):

2010-11-04  Kenichi Ishibashi  <bashi@google.com>

        Reviewed by Kent Tamura.

        [HTML5][Forms] Support for <output> element
        https://bugs.webkit.org/show_bug.cgi?id=29363

        Support for <output> element.

        Tests: fast/dom/HTMLOutputElement/dom-settable-token-list.html
               fast/dom/HTMLOutputElement/htmloutputelement-reset-event.html
               fast/dom/HTMLOutputElement/htmloutputelement-validity.html
               fast/dom/HTMLOutputElement/htmloutputelement-value.html
               fast/dom/HTMLOutputElement/htmloutputelement.html

        * Android.derived.jscbindings.mk: Added JSHTMLOutputElement.h.
        * Android.derived.v8bindings.mk: Added V8HTMLOutputElement.h.
        * Android.jscbindings.mk: Added JSHTMLOutputElementCustom.cpp.
        * Android.mk: Added HTMLOutputElement.cpp.
        * Android.v8bindings.mk: Added V8HTMLOutputElementCustom.cpp.
        * CMakeLists.txt: Added HTMLOutputElement.{idl,cpp} and JSHTMLOutputElementCustom.cpp.
        * DerivedSources.cpp: Added JSHTMLOutputElement.cpp.
        * DerivedSources.make: Added HTMLOutputElement entry.
        * GNUmakefile.am: Added JSHTMLOutputElement.{cpp,h}
        * WebCore.gypi: Added HTMLOutputElement.{idl,cpp,h}, JSHTMLOutputElementCustom.cpp and V8HTMLOutputElementCustom.cpp
        * WebCore.pri: Added HTMLOutputElement.idl.
        * WebCore.pro: Added V8HTMLOutputElementCustom.cpp, JSHTMLOutputElementCustom.cpp and HTMLOutputElement.cpp.
        * WebCore.vcproj/WebCore.vcproj: Added entries for JSHTMLOutputElement.{cpp,h} and JSHTMLOutputElementCustom.cpp.
        * WebCore.xcodeproj/project.pbxproj: Added entries for JSHTMLOutputElementCustom.cpp, HTMLOutputElement.{cpp,h,idl}, JSHTMLOutputElement.{cpp,h}
        * bindings/js/JSBindingsAllInOne.cpp: Added JSHTMLOutputElementCustom.cpp.
        * bindings/js/JSHTMLOutputElementCustom.cpp: Added.
        (WebCore::JSHTMLOutputElement::htmlFor):
        (WebCore::JSHTMLOutputElement::setHtmlFor):
        * bindings/v8/custom/V8DOMSettableTokenListCustom.cpp: Modified.
        (WebCore::V8DOMSettableTokenList::indexedPropertyGetter): Returns null if the index is out of range.
        * bindings/v8/custom/V8HTMLOutputElementCustom.cpp: Added.
        (WebCore::V8HTMLOutputElement::htmlForAccessorGetter):
        (WebCore::V8HTMLOutputElement::htmlForAccessorSetter):
        * css/html.css: Added a default style of output element.
        (output):
        * html/DOMSettableTokenList.cpp: Fix bugs.
        (WebCore::DOMSettableTokenList::item): Returns null string if the index is out of range.
        (WebCore::DOMSettableTokenList::addInternal): Added check m_tokens.isNull().
        (WebCore::DOMSettableTokenList::setValue): Set the value case sensitive.
        * html/HTMLOutputElement.cpp: Added.
        (WebCore::HTMLOutputElement::HTMLOutputElement):
        (WebCore::HTMLOutputElement::create):
        (WebCore::HTMLOutputElement::formControlType):
        (WebCore::HTMLOutputElement::parseMappedAttribute):
        (WebCore::HTMLOutputElement::htmlFor):
        (WebCore::HTMLOutputElement::setFor):
        (WebCore::HTMLOutputElement::setForm):
        (WebCore::HTMLOutputElement::childrenChanged):
        (WebCore::HTMLOutputElement::reset):
        (WebCore::HTMLOutputElement::value):
        (WebCore::HTMLOutputElement::setValue):
        (WebCore::HTMLOutputElement::defaultValue):
        (WebCore::HTMLOutputElement::setDefaultValue):
        (WebCore::HTMLOutputElement::setTextContentInternal):
        * html/HTMLOutputElement.h: Added.
        (WebCore::HTMLOutputElement::isEnumeratable):
        (WebCore::HTMLOutputElement::willValidate):
        * html/HTMLOutputElement.idl: Added.
        * html/HTMLTagNames.in: Added "output".
        * page/DOMWindow.idl: Added an attribute for HTMLOutputElement.

2010-11-04  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        Remove IMPLEMENTATION_COLOR_READ_FORMAT and TYPE
        https://bugs.webkit.org/show_bug.cgi?id=48938

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::initializeNewContext):
        (WebCore::WebGLRenderingContext::getParameter):
        (WebCore::WebGLRenderingContext::readPixels):
        * html/canvas/WebGLRenderingContext.h:
        * html/canvas/WebGLRenderingContext.idl:
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::getIntegerv):

2010-11-04  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        TypedArray should throw exception if length not a multiple of element size
        https://bugs.webkit.org/show_bug.cgi?id=45487

        * bindings/js/JSArrayBufferViewHelper.h:
        (WebCore::constructArrayBufferView):
        * bindings/v8/custom/V8ArrayBufferViewCustom.h:
        (WebCore::constructWebGLArray):

2010-11-04  Kenneth Russell  <kbr@google.com>

        Reviewed by Adam Barth.

        [chromium] Mac: WebGL: all textured content is blue
        https://bugs.webkit.org/show_bug.cgi?id=49021

        Added support for 8-bit, little-endian CGImages. The previous
        image decode path used the default byte order, which is apparently
        big-endian.

        Tested with various WebGL content and layout tests in Chromium.
        Ran layout tests in WebKit and tested various WebGL content in
        Safari. Was not able to run layout tests with Chromium port of
        DumpRenderTree due to build failures currently in the tree.

        * platform/graphics/GraphicsContext3D.cpp:
        (WebCore::doPacking):
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/cg/GraphicsContext3DCG.cpp:
        (WebCore::getSourceDataFormat):
        (WebCore::GraphicsContext3D::getImageData):

2010-11-03  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        renderbufferStorage(DEPTH_STENCIL) shouldn't generate an error
        https://bugs.webkit.org/show_bug.cgi?id=48891

        * html/canvas/WebGLFramebuffer.cpp:
        (WebCore::WebGLFramebuffer::isIncomplete): Considering the case where DEPTH_STENCIL is not supported.
        * html/canvas/WebGLRenderbuffer.cpp:
        (WebCore::WebGLRenderbuffer::WebGLRenderbuffer): Init added members.
        * html/canvas/WebGLRenderbuffer.h: Add members and accessor functions.
        (WebCore::WebGLRenderbuffer::setInternalFormat): 
        (WebCore::WebGLRenderbuffer::setSize):
        (WebCore::WebGLRenderbuffer::getWidth):
        (WebCore::WebGLRenderbuffer::getHeight):
        (WebCore::WebGLRenderbuffer::setIsValid):
        (WebCore::WebGLRenderbuffer::isValid):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::initializeNewContext): Check if packed_depth_stencil extension exists.
        (WebCore::WebGLRenderingContext::getRenderbufferParameter): Simulate the case for DEPTH_STENCIL where packed_depth_stencil is not supported.
        (WebCore::WebGLRenderingContext::renderbufferStorage): Bypass the call if packed_depth_stencil is not supported.
        * html/canvas/WebGLRenderingContext.h:

2010-11-04  Kavita Kanetkar  <kkanetkar@chromium.org>

        Reviewed by Adam Barth.

        Web Inspector: Enable files ystem UI for chromium
        https://bugs.webkit.org/show_bug.cgi?id=48963

        * inspector/Inspector.idl:
        * inspector/InspectorFileSystemAgent.cpp:
        (WebCore::InspectorFileSystemAgent::getFileSystemPathAsync):
        * inspector/InspectorFileSystemAgent.h:
        * inspector/front-end/FileSystemView.js:
        (WebInspector.FileSystemView):
        (WebInspector.FileSystemView.prototype.setFileSystemDisabled):
        (WebInspector.FileSystemView.prototype._createTextAndButton):
        (WebInspector.FileSystemView.prototype.refreshFileSystem):
        * inspector/front-end/StoragePanel.js:
        (WebInspector.StoragePanel.prototype.setFileSystemDisabled):
        * inspector/front-end/inspector.js:
        (WebInspector.didGetFileSystemDisabled):
        (WebInspector.reset):

2010-11-04  Robert Hogan  <robert@webkit.org>

        Reviewed by Darin Adler.

        Stale reference to JSDOMWindow in ScriptController::m_cacheableBindingObject

        After bug 37725 we need to update the globalObject() (i.e. JSDOMWindow)
        associated with the m_cacheablebindingRootObject every time we clear the
        frame and load a new page. This allows the runtime objects
        (e.g. LayoutTestController etc.) to persist between navigations as
        before but also ensures that when qt_runtime, or any other bridge,
        looks at the root->globalObject() of a cacheable binding object
        it gets the DOMWindow of the current page rather than the DOMWindow
        that was in place when m_cacheableBindingRootObject was created.

        Fixes fast/dom/nodesFromRect-basic.html on Qt.

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

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::clearWindowShell):
        * bridge/runtime_root.cpp:
        (JSC::Bindings::RootObject::updateGlobalObject):
        * bridge/runtime_root.h:

2010-11-04  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by David Hyatt.

        Delegate scrolling via a separate method
        https://bugs.webkit.org/show_bug.cgi?id=48988

        Add a delegatedScrollRequested method to HostWindow for delegating
        scrolling to the view. This is only used in conjunction with tiling,
        and is ifdef'ed.

        * page/Chrome.cpp:
        (WebCore::Chrome::delegatedScrollRequested):
        * page/Chrome.h:
        * page/ChromeClient.h:
        * platform/HostWindow.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::setScrollPosition):

2010-11-04  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Need better way of switching back to the Timeline view of the Network tab.
        https://bugs.webkit.org/show_bug.cgi?id=48995

        - Moved close button to the left, preceding tab headers;
        - Auto-adjusting summary bar width when switching to the preview mode
        - Auto-scrolling network log if it was scrolled to bottom.

        * inspector/front-end/DataGrid.js:
        (WebInspector.DataGrid):
        (WebInspector.DataGrid.prototype.isScrolledToLastRow):
        (WebInspector.DataGrid.prototype.scrollToLastRow):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel):
        (WebInspector.NetworkPanel.prototype.updateSidebarWidth):
        (WebInspector.NetworkPanel.prototype._positionSummaryBar):
        (WebInspector.NetworkPanel.prototype.refresh):
        (WebInspector.NetworkPanel.prototype._reset):
        (WebInspector.NetworkPanel.prototype._toggleGridMode):
        * inspector/front-end/inspector.css:
        (.tabbed-pane-header li):
        * inspector/front-end/networkPanel.css:
        (.network-summary-bar):
        (#network-close-button):
        (#network-views.small #network-close-button):
        (#network-views .resource-view .tabbed-pane-header):
        (#network-views.small .resource-view .tabbed-pane-header):

2010-11-04  Erik Arvidsson  <arv@chromium.org>

        Reviewed by Dimitri Glazkov.

        Support box-sizing without the vendor prefix
        https://bugs.webkit.org/show_bug.cgi?id=36713

        Based on patch by Peter Beverloo <peter@lvp-media.com>

        Test: fast/css/box-sizing-backwards-compat-prefix.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::cssPropertyID): This handles -webkit-box-sizing and maps it to box-sizing.
        * css/CSSPropertyNames.in:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * css/quirks.css: Change -webkit-box-sizing to box-sizing.
        (input:not([type=image]), textarea):
        * css/view-source.css: Ditto.
        (.webkit-line-gutter-backdrop, .webkit-line-number):
        * css/wml.css: Ditto.
        (do):
        (select):

2010-11-04  John Reck  <jreck@google.com>

        Reviewed by Steve Block.

        Fix a linker failure when building for Android
        https://bugs.webkit.org/show_bug.cgi?id=48964
        
        The Android stub for setCookieStoragePrivateBrowsingEnabled(bool) wasn't in the WebCore namespace, which caused
        a linker failure when building for Android. Moved the stub to the WebCore namespace. This was caused by 
        http://trac.webkit.org/changeset/70400
        
        No new tests, build fix only

        * platform/android/TemporaryLinkStubs.cpp:

2010-11-04  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Andreas Kling.

        Request.h getters can be made const
        https://bugs.webkit.org/show_bug.cgi?id=49003

        Added the const qualifier to some getters that don't mutate the object.

        * loader/Request.h:
        (WebCore::Request::cachedResource):
        (WebCore::Request::cachedResourceLoader):
        (WebCore::Request::isIncremental):
        (WebCore::Request::isMultipart):

2010-11-03  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Brady Eidson.

        User scripts shouldn't be injected in a frame's empty initial document.
        https://bugs.webkit.org/show_bug.cgi?id=48970
        <rdar://problem/8618164>
        <rdar://problem/8082122>
        
        When a frame loads, it first creates an empty initial document, then navigates to the correct URL. Our
        current policy with user scripts is to inject them into both the initial empty document, and then inject
        them again.
        
        This causes developers to think their scripts have been injected twice into all iframes, and there is a timing
        issue between WebKit1 and WebKit2 that causes start scripts to be injected into the initial empty document
        of the main frame when a new tab or window is created.
        
        The fix for this is to not inject user scripts when the frame is creating its initial empty document before loading
        the correct source.

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

2010-11-04  Andreas Kling  <kling@webkit.org>

        Reviewed by Nikolas Zimmermann.

        GraphicsContext: Don't do full save/restore when painting with low quality scaling
        https://bugs.webkit.org/show_bug.cgi?id=48738

        Stash the imageInterpolationQuality() in a local and reset it after painting.

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawImage):
        (WebCore::GraphicsContext::drawTiledImage):
        (WebCore::GraphicsContext::drawImageBuffer):
        * platform/graphics/haiku/GraphicsContextHaiku.cpp:
        (WebCore::GraphicsContext::imageInterpolationQuality):
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::imageInterpolationQuality):
        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        (WebCore::GraphicsContext::imageInterpolationQuality):

2010-11-04  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Andreas Kling.

        Refactor SVGStringListPropertyTearOff/SVGListPropertyTearOff to use a common base class
        https://bugs.webkit.org/show_bug.cgi?id=48990

        Introduce SVGListProperty as common base class between static lists (SVGStringListPropertyTearOff) and dynamic lists (SVGListPropertyTearOff).
        This is a preparation for the addition of the next static list type: SVGPointList.

        * GNUmakefile.am: Add new files to build.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * bindings/scripts/CodeGenerator.pm: s/SVGStringListPropertyTearOff/SVGStaticListPropertyTearOff/.
        * bindings/scripts/CodeGeneratorJS.pm: Ditto.
        * bindings/scripts/CodeGeneratorObjC.pm: Ditto.
        * bindings/scripts/CodeGeneratorV8.pm: Ditto.
        * svg/properties/SVGAnimatedListPropertyTearOff.h: Include SVGStaticListPropertyTearOff.h here, to avoid special dependencies in CodeGenerator*.pm
        * svg/properties/SVGListProperty.h: Added.
        * svg/properties/SVGListPropertyTearOff.h: Use SVGList API implementation from SVGListProperty base class.
        * svg/properties/SVGStaticListPropertyTearOff.h: Added. Use SVGList API implementation from SVGListProperty base class.
        * svg/properties/SVGStringListPropertyTearOff.h: Removed.

2010-11-04  Ryosuke Niwa  <rniwa@webkit.org>

        Unreviewed. Fixed WebCore.xcodeproject

        * WebCore.xcodeproj/project.pbxproj:

2010-11-04  Pratik Solanki  <psolanki@apple.com>

        Reviewed by Darin Adler.

        Should make use of purge priorities for different resource types
        https://bugs.webkit.org/show_bug.cgi?id=48684

        Assign purge priorities to CachedResource objects. JavaScript and CSS stylesheets are more
        important than images so hint to the kernel to purge them last. We do this by repurposing
        the previously unused function, PurgeableBuffer::setPurgePriority(). It now just sets the
        priority field and does not have side-effects like calling makePurgeable(true).

        Also, remove unusued PurgeableBuffer::create(const Vector<char>&) function and move the
        purgeable memory size threshold from CachedResource to PurgeableBuffer.

        * WebCore.xcodeproj/project.pbxproj: Add new PurgePriority.h header and mark it as private
        header.
        * loader/CachedCSSStyleSheet.h:
        (WebCore::CachedCSSStyleSheet::purgePriority):
        * loader/CachedImage.h:
        (WebCore::CachedImage::purgePriority):
        * loader/CachedResource.cpp:
        (WebCore::CachedResource::makePurgeable): Set the purge priority on the PurgeableBffer.
        Also, move the check for purgeable size threshold to PurgeableBuffer.
        * loader/CachedResource.h:
        (WebCore::CachedResource::purgePriority): Added. New virtual method that lets the class
        specify its purge priority.
        * loader/CachedScript.h:
        (WebCore::CachedScript::purgePriority):
        * platform/PurgePriority.h: Added. Move the PurgePriority enum from PurgeableBuffer class to
        its own header file.
        (WebCore::):
        * platform/PurgeableBuffer.h:
        (WebCore::PurgeableBuffer::setPurgePriority): Update this previously unused function to just
        set the priority and not call makePurgeable(true).
        * platform/mac/PurgeableBufferMac.cpp: Update size threshold to 16KB which is what
        CachedResource was using.

2010-11-04  Chris Guillory  <chris.guillory@google.com>

        Reviewed by Chris Fleizach.

        Ignore static text children of text field controls in the accessibility tree.
        https://bugs.webkit.org/show_bug.cgi?id=48944

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnored):

2010-11-04  Erik Arvidsson  <arv@chromium.org>

        Reviewed by Tony Chang.

        Computed style is not correct for negative values in the presence of zooming
        https://bugs.webkit.org/show_bug.cgi?id=48855

        * rendering/style/RenderStyle.h:
        (WebCore::adjustForAbsoluteZoom): When the value is less than zero we need to decrement instead of increment.

2010-11-04  Shane Stephens  <shanestephens@google.com>

        Reviewed by Tony Chang.

        SVGStyledTransformableElement supplemental transforms pre-multiplied
        but should be post-multiplied.
        https://bugs.webkit.org/show_bug.cgi?id=48026

        Test: svg/animations/animate-path-nested-transforms.svg

        * svg/SVGStyledTransformableElement.cpp:
        (WebCore::SVGStyledTransformableElement::animatedLocalTransform):
        
        Switched order of multiplication.  Note that due to a bug in
        AffineTransform's operator* implementation the order of arguments is
        reversed (see http://bugs.webkit.org/show_bug.cgi?id=48031).

2010-11-04  James Simonsen  <simonjam@chromium.org>

        Reviewed by Darin Fisher.

        [Web Timing] Implement dom* timing marks
        https://bugs.webkit.org/show_bug.cgi?id=46301

        Test: fast/dom/webtiming-document-open.html

        * GNUmakefile.am: Added DocumentTiming.h
        * WebCore.gypi: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * dom/Document.cpp:
        (WebCore::Document::setReadyState): Set DOM WebTiming marks.
        (WebCore::Document::finishedParsing): Set DOM WebTiming marks.
        * dom/Document.h:
        (WebCore::Document::timing): Added.
        * dom/DocumentTiming.h: Added.
        (WebCore::DocumentTiming::DocumentTiming):
        * page/Timing.cpp: Added DOM timing.
        (WebCore::Timing::domLoading): Ditto.
        (WebCore::Timing::domInteractive): Ditto.
        (WebCore::Timing::domContentLoaded): Ditto.
        (WebCore::Timing::domComplete): Ditto.
        (WebCore::Timing::documentTiming): Ditto.
        * page/Timing.h: Ditto.
        * page/Timing.idl: Ditto.

2010-11-04  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Implement unencodable characters handling in TextCodecGtk::encode()
        https://bugs.webkit.org/show_bug.cgi?id=48902

        Fixes a crash in test fast/encoding/char-encoding.html.

        * platform/text/gtk/TextCodecGtk.cpp:
        (WebCore::TextCodecGtk::encode):

2010-11-04  Adam Barth  <abarth@webkit.org>

        Enabled ICCJPEG on Chromium Mac
        https://bugs.webkit.org/show_bug.cgi?id=48977

        Add iccjpeg as a dependency.

        * WebCore.gyp/WebCore.gyp:

2010-11-03  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        Framework to show form validation message for invalid controls
        https://bugs.webkit.org/show_bug.cgi?id=31718

        HTMLFormElement::validateInteractively() shows a validation message for
        an invalid control by HTMLFormControlElement::updateVisibleValidationMessage(),
        and the message is hidden when the invalid control looses focus, becomes
        valid, detached, or the form is submitted again.

        Introduce ValidationMessage class to manage visible form validation
        message. It has no implementation to show/hide a message yet.

        No new tests. New behavior is disabled by default, and is timing-dependent.

        * Android.mk: Add ValidationMessage.
        * CMakeLists.txt: ditto.
        * GNUmakefile.am: ditto.
        * WebCore.gypi: ditto.
        * WebCore.pro: ditto.
        * WebCore.vcproj/WebCore.vcproj: ditto.
        * WebCore.xcodeproj/project.pbxproj: ditto.
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::detach): Hides a validation message.
        (WebCore::HTMLFormControlElement::setNeedsWillValidateCheck):
           Hides a validation message if validation is not needed.
        (WebCore::HTMLFormControlElement::updateVisibleValidationMessage):
        (WebCore::HTMLFormControlElement::hideVisibleValidationMessage):
        (WebCore::HTMLFormControlElement::setNeedsValidityCheck):
          Hides a validation message or updates the validation message.
        (WebCore::HTMLFormControlElement::dispatchBlurEvent):
          Hides a validation message.
        (WebCore::HTMLFormControlElement::visibleValidationMessage):
        * html/HTMLFormControlElement.h:
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::validateInteractively):
         - Hide existing validation messages before showing new message.
         - Show new validation message.
        * html/ValidationMessage.cpp: Added.
        (WebCore::ValidationMessage::ValidationMessage):
        (WebCore::ValidationMessage::~ValidationMessage):
        (WebCore::ValidationMessage::create):
        (WebCore::ValidationMessage::setMessage):
        (WebCore::ValidationMessage::hideMessage):
        * html/ValidationMessage.h: Added.
        (WebCore::ValidationMessage::message):

2010-11-03  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Roben.

        Port WCDataObject.cpp to WinCE
        https://bugs.webkit.org/show_bug.cgi?id=48921

        OleDuplicateData is not supported on WinCE.

        * platform/win/WCDataObject.cpp:
        (WebCore::WCDataObject::CopyMedium):

2010-11-03  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Roben.

        Port ClipboardWin.cpp to WinCE
        https://bugs.webkit.org/show_bug.cgi?id=48412

        * platform/win/ClipboardWin.cpp:
        (WebCore::writeFileToDataObject):

2010-11-03  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Roben.

        Port ClipboardWin.cpp to WinCE
        https://bugs.webkit.org/show_bug.cgi?id=48412

        * platform/win/ClipboardWin.cpp:
        (WebCore::filesystemPathFromUrlOrTitle):
        (WebCore::createGlobalHDropContent):
        (WebCore::ClipboardWin::files):

2010-11-03  Vincent Scheib  <scheib@chromium.org>

        Reviewed by James Robinson.

        [chromium] GraphicsContext3D creation attributes include canRecoverFromContextLoss option
        https://bugs.webkit.org/show_bug.cgi?id=48850

        Implementations of GraphicsContext3D may respect the creation attribute
        canRecoverFromContextLoss being false, and then only succeeding initialization if
        the context can satisfy that request of never being lost. DX9 on XP can not satisfy
        such a request.

        Test by use of accelerated canvas 2d in Chromium with ANGLE on XP machines.

        * platform/graphics/GraphicsContext3D.h:
        (WebCore::GraphicsContext3D::Attributes::Attributes):
        * platform/graphics/gpu/SharedGraphicsContext3D.cpp:
        (WebCore::SharedGraphicsContext3D::create):

2010-11-03  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Use sentence boundaries instead of start/end sentence
        https://bugs.webkit.org/show_bug.cgi?id=48422

        Using sentence boundaries all intersentence
        whitespace/control/format characters are assigned to a
        sentence. This is what ICU does, so we have to do the same in
        order to get the same results with glib unicode backend. It fixes
        the sentence tests cases in test fast/dom/Range/range-expand.html.

        * platform/text/gtk/TextBreakIteratorGtk.cpp:
        (WebCore::textBreakNext):
        (WebCore::textBreakPrevious):

2010-11-03  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        depthRange should generate INVALID_OPERATION if zNear is greater than zFar
        https://bugs.webkit.org/show_bug.cgi?id=48676

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::depthRange):

2010-11-03  Adrienne Walker  <enne@google.com>

        Reviewed by Kenneth Russell.

        Properly return empty strings instead of null when using invalid
        objects for some WebGL calls.  This fixes issues caused by r71274.
        https://bugs.webkit.org/show_bug.cgi?id=48962

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getProgramInfoLog):
        (WebCore::WebGLRenderingContext::getShaderInfoLog):
        (WebCore::WebGLRenderingContext::getShaderSource):

2010-11-01  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        Crash in ApplyStyleCommand::removeStyleFromRunBeforeApplyingStyle
        https://bugs.webkit.org/show_bug.cgi?id=48581

        The crash was caused by RemoveNodePreservingChildrenCommand's calling removeNode
        on m_node without checking that m_node has a parent and it's still in the document.
        Fixed the crash by adding an early exit in CompositeEditCommand::removeNode and
        deploying RefPtr in several places of ApplyStyleCommand.cpp.

        Test: editing/style/iframe-onload-crash.html

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyInlineStyleToNodeRange):
        (WebCore::ApplyStyleCommand::removeStyleFromRunBeforeApplyingStyle):
        (WebCore::ApplyStyleCommand::removeInlineStyleFromElement):
        * editing/ApplyStyleCommand.h:
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::removeNode):

2010-11-03  Jia Pu  <jpu@apple.com>

        Reviewed by Darin Adler.

        Crashes in WebCore::DocumentMarkerController::removeMarkersFromMarkerMapVectorPair() when deleting multiple lines of text.
        https://bugs.webkit.org/show_bug.cgi?id=48918
        <rdar://problem/8620602>

        I haven't been able to found a reliable way to reproduce the bug. However, whenever it happens,
        the crash is caused by a null node pointer returned by TextIterator. So it seems to be a 
        safe fix to guard against that. 

        * editing/Editor.cpp: (WebCore::Editor::removeSpellAndCorrectionMarkersFromWordsToBeEdited):

2010-11-02  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        A different mask or reference value in stencil operations should generate INVALID_OPERATION
        https://bugs.webkit.org/show_bug.cgi?id=48669

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::WebGLRenderingContext): Init stencil func ref/mask and stencil mask to default.
        (WebCore::WebGLRenderingContext::stencilFunc): Cache ref/mask value.
        (WebCore::WebGLRenderingContext::stencilFuncSeparate): Generate error if front/back values differ.
        (WebCore::WebGLRenderingContext::stencilMask): Cache mask value.
        (WebCore::WebGLRenderingContext::stencilMaskSeparate): Generate error if front/back values differ.
        (WebCore::WebGLRenderingContext::validateFace): Validate face parameter.
        (WebCore::WebGLRenderingContext::validateStencilFunc): Validate stencil func parameter.
        * html/canvas/WebGLRenderingContext.h: Add members to track stencil func ref/mask and stencil mask.

2010-11-03  Dimitri Glazkov  <dglazkov@chromium.org>

        Reverting r71244, r71248 and r71250. Broke default event handling inside text fields.
        https://bugs.webkit.org/show_bug.cgi?id=46015

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/ContainerNode.cpp:
        (WebCore::notifyChildInserted):
        * dom/DOMAllInOne.cpp:
        * dom/EventContext.cpp: Removed.
        * dom/EventContext.h: Removed.
        * dom/Node.cpp:
        (WebCore::Node::markAncestorsWithChildNeedsStyleRecalc):
        (WebCore::Node::createRendererIfNeeded):
        (WebCore::Node::eventParentNode):
        (WebCore::Node::enclosingLinkEventParentOrSelf):
        (WebCore::eventTargetAsSVGElementInstance):
        (WebCore::eventTargetRespectingSVGTargetRules):
        (WebCore::Node::eventAncestors):
        (WebCore::Node::dispatchGenericEvent):
        * dom/Node.h:
        * dom/Text.cpp:
        (WebCore::Text::createRenderer):
        * dom/WindowEventContext.cpp: Removed.
        * dom/WindowEventContext.h: Removed.
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::getEventListenersForNode):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::eventHasListeners):
        (WebCore::InspectorInstrumentation::willDispatchEventImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::willDispatchEvent):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::updateMouseEventTargetNode):
        * rendering/ShadowElement.h:
        (WebCore::ShadowElement::shadowParent):
        (WebCore::ShadowElement::shadowParentNode):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::eventParentNode):
        * svg/SVGElement.h:

2010-11-03  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        CG use of WebKit image decoders crashes on some animated GIFs
        https://bugs.webkit.org/show_bug.cgi?id=48955

        It turns out CFDataGetMutableBytePtr isn't safe call on a null pointer.

        Test: fast/images/dont-crash-with-null-gif-frames.html

        * platform/image-decoders/cg/ImageDecoderCG.cpp:
        (WebCore::RGBA32Buffer::copyReferenceToBitmapData):
        (WebCore::RGBA32Buffer::copyBitmapData):

2010-11-03  Adrienne Walker  <enne@google.com>

        Reviewed by Kenneth Russell.

        Implement lost, restored, and creation failure context events for
        WebGLRenderingContext.  The lost and restored functions are not hooked
        up yet, but the context now acts according to the spec as it should
        during a lost context.  Tested manually, as there's no programmatic
        way to lose a context yet.
        https://bugs.webkit.org/show_bug.cgi?id=35626

        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::JSWebGLRenderingContext::getAttachedShaders):
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        (WebCore::V8WebGLRenderingContext::getAttachedShadersCallback):
        * dom/EventNames.h:
        * html/canvas/WebGLContextEvent.cpp: Added.
        (WebCore::WebGLContextEvent::WebGLContextEvent):
        (WebCore::WebGLContextEvent::~WebGLContextEvent):
        (WebCore::WebGLContextEvent::initEvent):
        * html/canvas/WebGLContextEvent.h: Added.
        (WebCore::WebGLContextEvent::create):
        (WebCore::WebGLContextEvent::statusMessage):
        * html/canvas/WebGLContextEvent.idl: Added.
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::create):
        (WebCore::WebGLRenderingContext::WebGLRenderingContext):
        (WebCore::WebGLRenderingContext::initializeNewContext):
        (WebCore::WebGLRenderingContext::activeTexture):
        (WebCore::WebGLRenderingContext::attachShader):
        (WebCore::WebGLRenderingContext::bindAttribLocation):
        (WebCore::WebGLRenderingContext::bindBuffer):
        (WebCore::WebGLRenderingContext::bindFramebuffer):
        (WebCore::WebGLRenderingContext::bindRenderbuffer):
        (WebCore::WebGLRenderingContext::bindTexture):
        (WebCore::WebGLRenderingContext::blendColor):
        (WebCore::WebGLRenderingContext::blendEquation):
        (WebCore::WebGLRenderingContext::blendEquationSeparate):
        (WebCore::WebGLRenderingContext::blendFunc):
        (WebCore::WebGLRenderingContext::blendFuncSeparate):
        (WebCore::WebGLRenderingContext::bufferData):
        (WebCore::WebGLRenderingContext::bufferSubData):
        (WebCore::WebGLRenderingContext::checkFramebufferStatus):
        (WebCore::WebGLRenderingContext::clear):
        (WebCore::WebGLRenderingContext::clearColor):
        (WebCore::WebGLRenderingContext::clearDepth):
        (WebCore::WebGLRenderingContext::clearStencil):
        (WebCore::WebGLRenderingContext::colorMask):
        (WebCore::WebGLRenderingContext::compileShader):
        (WebCore::WebGLRenderingContext::copyTexImage2D):
        (WebCore::WebGLRenderingContext::copyTexSubImage2D):
        (WebCore::WebGLRenderingContext::createBuffer):
        (WebCore::WebGLRenderingContext::createFramebuffer):
        (WebCore::WebGLRenderingContext::createTexture):
        (WebCore::WebGLRenderingContext::createProgram):
        (WebCore::WebGLRenderingContext::createRenderbuffer):
        (WebCore::WebGLRenderingContext::createShader):
        (WebCore::WebGLRenderingContext::cullFace):
        (WebCore::WebGLRenderingContext::deleteBuffer):
        (WebCore::WebGLRenderingContext::deleteFramebuffer):
        (WebCore::WebGLRenderingContext::deleteProgram):
        (WebCore::WebGLRenderingContext::deleteRenderbuffer):
        (WebCore::WebGLRenderingContext::deleteShader):
        (WebCore::WebGLRenderingContext::deleteTexture):
        (WebCore::WebGLRenderingContext::depthFunc):
        (WebCore::WebGLRenderingContext::depthMask):
        (WebCore::WebGLRenderingContext::depthRange):
        (WebCore::WebGLRenderingContext::detachShader):
        (WebCore::WebGLRenderingContext::disable):
        (WebCore::WebGLRenderingContext::disableVertexAttribArray):
        (WebCore::WebGLRenderingContext::drawArrays):
        (WebCore::WebGLRenderingContext::drawElements):
        (WebCore::WebGLRenderingContext::enable):
        (WebCore::WebGLRenderingContext::enableVertexAttribArray):
        (WebCore::WebGLRenderingContext::finish):
        (WebCore::WebGLRenderingContext::flush):
        (WebCore::WebGLRenderingContext::framebufferRenderbuffer):
        (WebCore::WebGLRenderingContext::framebufferTexture2D):
        (WebCore::WebGLRenderingContext::frontFace):
        (WebCore::WebGLRenderingContext::generateMipmap):
        (WebCore::WebGLRenderingContext::getActiveAttrib):
        (WebCore::WebGLRenderingContext::getActiveUniform):
        (WebCore::WebGLRenderingContext::getAttachedShaders):
        (WebCore::WebGLRenderingContext::getAttribLocation):
        (WebCore::WebGLRenderingContext::getBufferParameter):
        (WebCore::WebGLRenderingContext::getContextAttributes):
        (WebCore::WebGLRenderingContext::getFramebufferAttachmentParameter):
        (WebCore::WebGLRenderingContext::getParameter):
        (WebCore::WebGLRenderingContext::getProgramParameter):
        (WebCore::WebGLRenderingContext::getProgramInfoLog):
        (WebCore::WebGLRenderingContext::getRenderbufferParameter):
        (WebCore::WebGLRenderingContext::getShaderParameter):
        (WebCore::WebGLRenderingContext::getShaderInfoLog):
        (WebCore::WebGLRenderingContext::getShaderSource):
        (WebCore::WebGLRenderingContext::getTexParameter):
        (WebCore::WebGLRenderingContext::getUniform):
        (WebCore::WebGLRenderingContext::getUniformLocation):
        (WebCore::WebGLRenderingContext::getVertexAttrib):
        (WebCore::WebGLRenderingContext::getVertexAttribOffset):
        (WebCore::WebGLRenderingContext::hint):
        (WebCore::WebGLRenderingContext::isBuffer):
        (WebCore::WebGLRenderingContext::isContextLost):
        (WebCore::WebGLRenderingContext::isEnabled):
        (WebCore::WebGLRenderingContext::isFramebuffer):
        (WebCore::WebGLRenderingContext::isProgram):
        (WebCore::WebGLRenderingContext::isRenderbuffer):
        (WebCore::WebGLRenderingContext::isShader):
        (WebCore::WebGLRenderingContext::isTexture):
        (WebCore::WebGLRenderingContext::lineWidth):
        (WebCore::WebGLRenderingContext::linkProgram):
        (WebCore::WebGLRenderingContext::pixelStorei):
        (WebCore::WebGLRenderingContext::polygonOffset):
        (WebCore::WebGLRenderingContext::readPixels):
        (WebCore::WebGLRenderingContext::releaseShaderCompiler):
        (WebCore::WebGLRenderingContext::renderbufferStorage):
        (WebCore::WebGLRenderingContext::sampleCoverage):
        (WebCore::WebGLRenderingContext::scissor):
        (WebCore::WebGLRenderingContext::shaderSource):
        (WebCore::WebGLRenderingContext::stencilFunc):
        (WebCore::WebGLRenderingContext::stencilFuncSeparate):
        (WebCore::WebGLRenderingContext::stencilMask):
        (WebCore::WebGLRenderingContext::stencilMaskSeparate):
        (WebCore::WebGLRenderingContext::stencilOp):
        (WebCore::WebGLRenderingContext::stencilOpSeparate):
        (WebCore::WebGLRenderingContext::texImage2D):
        (WebCore::WebGLRenderingContext::texParameter):
        (WebCore::WebGLRenderingContext::texSubImage2DBase):
        (WebCore::WebGLRenderingContext::texSubImage2DImpl):
        (WebCore::WebGLRenderingContext::texSubImage2D):
        (WebCore::WebGLRenderingContext::uniform1f):
        (WebCore::WebGLRenderingContext::uniform1fv):
        (WebCore::WebGLRenderingContext::uniform1i):
        (WebCore::WebGLRenderingContext::uniform1iv):
        (WebCore::WebGLRenderingContext::uniform2f):
        (WebCore::WebGLRenderingContext::uniform2fv):
        (WebCore::WebGLRenderingContext::uniform2i):
        (WebCore::WebGLRenderingContext::uniform2iv):
        (WebCore::WebGLRenderingContext::uniform3f):
        (WebCore::WebGLRenderingContext::uniform3fv):
        (WebCore::WebGLRenderingContext::uniform3i):
        (WebCore::WebGLRenderingContext::uniform3iv):
        (WebCore::WebGLRenderingContext::uniform4f):
        (WebCore::WebGLRenderingContext::uniform4fv):
        (WebCore::WebGLRenderingContext::uniform4i):
        (WebCore::WebGLRenderingContext::uniform4iv):
        (WebCore::WebGLRenderingContext::uniformMatrix2fv):
        (WebCore::WebGLRenderingContext::uniformMatrix3fv):
        (WebCore::WebGLRenderingContext::uniformMatrix4fv):
        (WebCore::WebGLRenderingContext::useProgram):
        (WebCore::WebGLRenderingContext::validateProgram):
        (WebCore::WebGLRenderingContext::vertexAttribPointer):
        (WebCore::WebGLRenderingContext::viewport):
        (WebCore::WebGLRenderingContext::loseContext):
        (WebCore::WebGLRenderingContext::restoreContext):
        (WebCore::WebGLRenderingContext::addObject):
        (WebCore::WebGLRenderingContext::vertexAttribfImpl):
        (WebCore::WebGLRenderingContext::vertexAttribfvImpl):
        * html/canvas/WebGLRenderingContext.h:
        * html/canvas/WebGLRenderingContext.idl:
        * platform/graphics/GraphicsContext3D.h:

2010-11-03  Kenneth Russell  <kbr@google.com>

        Reviewed by Chris Marrin.

        Redesign extension mechanism in GraphicsContext3D
        https://bugs.webkit.org/show_bug.cgi?id=46894

        Upon request, factored out extension support from GraphicsContext3D
        into a new Extensions3D class. (The plural was chosen because the
        class and subclasses hold multiple extensions.)

        Unlike GraphicsContext3D, Extensions3D contains only pure virtual
        methods. This was done because Extensions3D's inheritance diagram
        and usage pattern is very different from that of GraphicsContext3D,
        and the concrete subclasses need to decide how to implement the
        various entry points. Requiring them to be placed at the
        Extensions3D level will cause implementation details to leak into
        the base class, which is highly undesirable. Any virtual call
        overhead to these entry points will be negligible.

        Changed call sites utilizing these extensions to call through the
        Extensions3D object or its subclasses.

        Tested:
         - Chromium on Linux with accelerated 2D canvas and HTML5 video
         - Chromium on Mac OS X with WebGL and CSS 3D content
         - Safari on Mac OS X with WebGL and CSS 3D content

        No new tests. Covered by existing tests.

        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/Extensions3D.h: Added.
        (WebCore::Extensions3D::~Extensions3D):
        * platform/graphics/GraphicsContext3D.cpp:
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/chromium/DrawingBufferChromium.cpp:
        (WebCore::DrawingBuffer::DrawingBuffer):
        (WebCore::DrawingBuffer::publishToPlatformLayer):
        * platform/graphics/chromium/Extensions3DChromium.h: Added.
        * platform/graphics/chromium/VideoLayerChromium.cpp:
        (WebCore::VideoLayerChromium::updateTexture):
        * platform/graphics/gpu/SharedGraphicsContext3D.cpp:
        (WebCore::SharedGraphicsContext3D::supportsBGRA):
        * platform/graphics/gpu/SharedGraphicsContext3D.h:
        * platform/graphics/gpu/Texture.cpp:
        (WebCore::convertFormat):
        * platform/graphics/mac/GraphicsContext3DMac.mm:
        * platform/graphics/opengl/Extensions3DOpenGL.cpp: Added.
        (WebCore::Extensions3DOpenGL::Extensions3DOpenGL):
        (WebCore::Extensions3DOpenGL::~Extensions3DOpenGL):
        (WebCore::Extensions3DOpenGL::supports):
        (WebCore::Extensions3DOpenGL::getGraphicsResetStatusARB):
        * platform/graphics/opengl/Extensions3DOpenGL.h: Added.
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::getExtensions):
        * platform/graphics/qt/Extensions3DQt.cpp: Added.
        (WebCore::Extensions3DQt::Extensions3DQt):
        (WebCore::Extensions3DQt::~Extensions3DQt):
        (WebCore::Extensions3DQt::supports):
        (WebCore::Extensions3DQt::getGraphicsResetStatusARB):
        * platform/graphics/qt/Extensions3DQt.h: Added.
        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3D::getExtensions):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::readbackHardwareToSoftware):

2010-11-03  Mike Thole  <mthole@apple.com>

        Reviewed by Darin Adler.
        
        Tweak coding style (follow-up to r71264).
        
        * platform/mac/Language.mm:
        (WebCore::createHTTPStyleLanguageCode): Style tweaks.

2010-11-03  Darin Adler  <darin@apple.com>

        Updated Xcode projects by opening them with Xcode 3.2.4.
        Updated svn:ignore for Xcode projects.

        * manual-tests/NPN_Invoke/NPN_Invoke.xcodeproj: Added property svn:ignore.
        * manual-tests/NPN_Invoke/NPN_Invoke.xcodeproj/project.pbxproj: Updated with Xcode 3.2.4.

2010-11-03  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Darin Adler.

        Fix canvas/philip/tests/2d.pattern.image.undefined.html
        https://bugs.webkit.org/show_bug.cgi?id=48894

        * bindings/js/JSCanvasRenderingContext2DCustom.cpp: Changed error thrown to match the spec.

2010-11-03  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by John Sullivan.

        Crash when setting context font to bad value
        https://bugs.webkit.org/show_bug.cgi?id=48948
        
        Null-check the CSSValue passed to CSSStyleSelector::applyPropertyToStyle(),
        since it may be null if the style declaration does not contain a value
        for the 'font' property.

        Test: fast/canvas/invalid-set-font-crash.html

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

2010-11-03  Mike Thole  <mthole@apple.com>

        Reviewed by Alexey Proskuryakov.

        Crash under WebCore::platformDefaultLanguage() when using Arabic language
        https://bugs.webkit.org/show_bug.cgi?id=48946

        * platform/mac/Language.mm:
        (WebCore::createHTTPStyleLanguageCode):
        Retain the lowercaseLanguageCode string before returning it.  This was the code path that
        would lead to a crash.  Also removed early return to prevent a leak of preferredLanguageCode.

2010-11-03  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        Made table column width allocation algorithms use logical widths.

        Part of: Make tables work with vertical text
        https://bugs.webkit.org/show_bug.cgi?id=46417

        No new tests since tables don’t support different block flows yet.

        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::AutoTableLayout):
        (WebCore::AutoTableLayout::recalcColumn):
        (WebCore::AutoTableLayout::fullRecalc):
        (WebCore::AutoTableLayout::computePreferredLogicalWidths):
        (WebCore::AutoTableLayout::calcEffectiveLogicalWidth):
        (WebCore::AutoTableLayout::insertSpanCell):
        (WebCore::AutoTableLayout::layout):
        * rendering/AutoTableLayout.h:
        (WebCore::AutoTableLayout::Layout::Layout):
        * rendering/FixedTableLayout.cpp:
        (WebCore::FixedTableLayout::calcWidthArray):
        (WebCore::FixedTableLayout::computePreferredLogicalWidths):
        (WebCore::FixedTableLayout::layout):
        * rendering/FixedTableLayout.h:
        * rendering/RenderTable.h:
        (WebCore::RenderTable::bordersPaddingAndSpacingInRowDirection): Renamed, but not changed yet.

2010-11-03  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Unreviewed build fix for r71253

        #endif for TILED_BACKING_STORE was at the wrong place.

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::GraphicsLayerQtImpl::tiledBackingStoreBackgroundColor):

2010-11-03  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=48945
        
        Patch logicalLeftSelectionOffset and logicalRightSelectionOffset to be directionally abstract.
        
        Also make sure writing mode roots are also selection painting roots.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::isSelectionRoot):
        (WebCore::RenderBlock::logicalLeftSelectionOffset):
        (WebCore::RenderBlock::logicalRightSelectionOffset):
        * rendering/RenderBlock.h:

2010-11-03  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: main resource is being re-assigned upon iframe's commit load.
        https://bugs.webkit.org/show_bug.cgi?id=48940

        * inspector/front-end/ResourceManager.js:
        (WebInspector.ResourceManager.prototype.identifierForInitialRequest):
        (WebInspector.ResourceManager.prototype.didCommitLoadForFrame):

2010-11-03  Nate Chapin  <japhet@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Wait to stop all loads for a frame being detached until after its
        chidlren have been detached. This ensures that any loads started
        by a child's unload event handler will be properly cancelled.
        https://bugs.webkit.org/show_bug.cgi?id=46579

        Tests: fast/loader/ping-error.html
               http/tests/navigation/image-load-in-subframe-unload-handler.html

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

2010-11-03  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Simon Fraser.

        Web Inspector: show proper image size for cached resources.
        https://bugs.webkit.org/show_bug.cgi?id=48915

        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._onGetResourceContent):
        * inspector/front-end/ImageView.js:
        (WebInspector.ImageView.prototype.contentTabSelected.onImageLoad):
        (WebInspector.ImageView.prototype.contentTabSelected):
        (WebInspector.ImageView.prototype._base64ToSize):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkDataGridNode.prototype._refreshNameCell):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype.set finished):
        (WebInspector.Resource.prototype.get content):
        (WebInspector.Resource.prototype.requestContent):
        (WebInspector.Resource.prototype._innerRequestContent):
        * inspector/front-end/ResourceManager.js:
        (WebInspector.ResourceManager.requestContent):
        * inspector/front-end/SourceView.js:
        (WebInspector.SourceView.prototype.setupSourceFrameIfNeeded):

2010-11-03  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] GraphicsLayer: support tiling
        https://bugs.webkit.org/show_bug.cgi?id=39691

        Add support for TiledBackingStore in GraphicsLayerQt, when a layer is too large.

        No new tests. Tests in LayoutTests/compositing/tiling now work with OpenGL enabled.

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::GraphicsLayerQtImpl::GraphicsLayerQtImpl):
        (WebCore::GraphicsLayerQtImpl::~GraphicsLayerQtImpl):
        (WebCore::GraphicsLayerQtImpl::recache):
        (WebCore::GraphicsLayerQtImpl::paint):
        (WebCore::GraphicsLayerQtImpl::tiledBackingStorePaintBegin):
        (WebCore::GraphicsLayerQtImpl::tiledBackingStorePaint):
        (WebCore::GraphicsLayerQtImpl::tiledBackingStorePaintEnd):
        (WebCore::GraphicsLayerQtImpl::tiledBackingStoreContentsRect):
        (WebCore::GraphicsLayerQtImpl::tiledBackingStoreBackgroundColor):
        (WebCore::GraphicsLayerQtImpl::tiledBackingStoreVisibleRect):

2010-11-03  Tony Chang  <tony@chromium.org>

        Reviewed by Ojan Vafai.

        Undo r54932 which inappropriately adjusts font sizes on zoomed pages
        https://bugs.webkit.org/show_bug.cgi?id=48890

        Test: editing/inserting/page-zoom-font-size.html

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::negateStyleRulesThatAffectAppearance):

2010-11-03  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        Make collapsed borders in tables work with different block flows
        https://bugs.webkit.org/show_bug.cgi?id=46191

        No new tests since tables don’t support different block flows yet.

        This change still doesn’t support cells whose block flow differs from the table’s.

        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::recalcColumn): Updated for the renaming of styleOrColWidth().
        (WebCore::AutoTableLayout::calcEffectiveWidth): Ditto.
        * rendering/FixedTableLayout.cpp:
        (WebCore::FixedTableLayout::calcWidthArray): Ditto.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::computePreferredLogicalWidths): Ditto.
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::styleOrColLogicalWidth): Renamed styleOrColWidth() to this and
        changed to use logical widths.
        (WebCore::RenderTableCell::computePreferredLogicalWidths): Updated for the above rename.
        (WebCore::RenderTableCell::updateLogicalWidth): Renamed updateWidth() to this and changed
        to set the logical width.
        (WebCore::RenderTableCell::collapsedStartBorder): Changed collapsedLeftBorder() into this.
        Note that “start” here will refer to the table’s block flow, not the cell’s, once we allow
        the two to differ.
        (WebCore::RenderTableCell::collapsedEndBorder): Similar.
        (WebCore::RenderTableCell::collapsedBeforeBorder): Similar.
        (WebCore::RenderTableCell::collapsedAfterBorder): Similar.
        (WebCore::RenderTableCell::collapsedLeftBorder): Resolves “left” to a logical side using
        the table’s block flow.
        (WebCore::RenderTableCell::collapsedRightBorder): Similar.
        (WebCore::RenderTableCell::collapsedTopBorder): Similar.
        (WebCore::RenderTableCell::collapsedBottomBorder): Similar.
        (WebCore::RenderTableCell::borderStart): Use borderHalfStart().
        (WebCore::RenderTableCell::borderEnd): Similar.
        (WebCore::RenderTableCell::borderBefore): Similar.
        (WebCore::RenderTableCell::borderAfter): Similar.
        (WebCore::RenderTableCell::borderHalfLeft): Resolves “left” to a logical side using the
        table’s block flow.
        (WebCore::RenderTableCell::borderHalfRight): Similar.
        (WebCore::RenderTableCell::borderHalfTop): Similar.
        (WebCore::RenderTableCell::borderHalfBottom): Similar.
        (WebCore::RenderTableCell::borderHalfStart): Added. Uses collapsedStartBorder(). Splits odd
        widths based on physical side.
        (WebCore::RenderTableCell::borderHalfEnd): Similar.
        (WebCore::RenderTableCell::borderHalfBefore): Similar.
        (WebCore::RenderTableCell::borderHalfAfter): Similar.
        (WebCore::RenderTableCell::collectBorderStyles): Use logical methods.
        (WebCore::RenderTableCell::paintCollapsedBorder): Updated.
        * rendering/RenderTableCell.h:
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::setCellWidths): Updated for the renaming of updateWidth().
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::borderBefore): Added.
        (WebCore::RenderStyle::borderAfter): Added.
        (WebCore::RenderStyle::borderStart): Added.
        (WebCore::RenderStyle::borderEnd): Adeed.
        * rendering/style/RenderStyle.h:

2010-11-03  Dimitri Glazkov  <dglazkov@chromium.org>

        Fix Win build correctly after r71244 and r71248

        * WebCore.vcproj/WebCore.vcproj: Added XML gobbledygook back.
        * dom/DOMAllInOne.cpp: Added files to build into a combined file.

2010-11-03  Dimitri Glazkov  <dglazkov@chromium.org>

        Fix Qt, Win builds after r71244.

        * WebCore.vcproj/WebCore.vcproj: Removed XML gobbledygook that prevents files from building.
        * dom/Text.cpp:
        (WebCore::Text::createRenderer): Moved parentOrHost inside ENABLE(SVG) guard.

2010-11-03  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=48928
        
        Rename all the selection gap functions to not be directionally specific.  Left and Right turn into LogicalLeft and
        LogicalRight.  Horizontal becomes Line.  Vertical becomes Block.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::selectionGapRectsForRepaint):
        (WebCore::RenderBlock::paintSelection):
        (WebCore::RenderBlock::fillSelectionGaps):
        (WebCore::RenderBlock::fillInlineSelectionGaps):
        (WebCore::RenderBlock::fillBlockSelectionGaps):
        (WebCore::RenderBlock::fillLineSelectionGap):
        (WebCore::RenderBlock::fillBlockSelectionGap):
        (WebCore::RenderBlock::fillLogicalLeftSelectionGap):
        (WebCore::RenderBlock::fillLogicalRightSelectionGap):
        (WebCore::RenderBlock::getSelectionGapInfo):
        (WebCore::RenderBlock::logicalLeftSelectionOffset):
        (WebCore::RenderBlock::logicalRightSelectionOffset):
        * rendering/RenderBlock.h:
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::fillLineSelectionGap):

2010-11-03  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Implement shadow DOM-aware event targeting and introduce EventContext to track the context of each event dispatch.
        https://bugs.webkit.org/show_bug.cgi?id=46015

        This patch adds the notion of EventContext (and a very similar-acting WindowEventContext, specifically
        for DOMWindow), an abstraction that carries information around dispatching an event for any given Node.

        This abstraction is necessary to ensure that events, fired from shadow DOM nodes are properly retargeted to
        appear as if they are coming from their host, thus never exposing the shadow DOM nodes to the world outside.

        * Android.mk: Added EventContext, WindowEventContext files.
        * CMakeLists.txt: Ditto.
        * GNUmakefile.am: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * dom/ContainerNode.cpp:
        (WebCore::notifyChildInserted): Changed to be shadow DOM-aware.
        * dom/EventContext.cpp: Added.
        * dom/EventContext.h: Added.
        * dom/Node.cpp:
        (WebCore::Node::markAncestorsWithChildNeedsStyleRecalc): Changed to be shadow DOM-aware.
        (WebCore::Node::createRendererIfNeeded): Ditto.
        (WebCore::Node::parentOrHostNode): Added new helper method.
        (WebCore::Node::enclosingLinkEventParentOrSelf): Changed to be shadow DOM-aware.
        (WebCore::eventTargetRespectingSVGTargetRules): Collapsed two helper methods into one.
        (WebCore::Node::eventAncestors): Refactored to collect a vector of EventContexts.
        (WebCore::Node::topEventContext): Added.
        (WebCore::eventHasListeners): Changed to use EventContexts.
        (WebCore::Node::dispatchGenericEvent): Ditto.
        * dom/Node.h: Removed eventParentNode that's no longer needed, added parentOrHostNode decl,
            and changed signature of eventAncestors to use EventContexts.
        * dom/Text.cpp:
        (WebCore::Text::createRenderer): Changed to be shadow DOM-aware.
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::getEventListenersForNode): Changed to use EventContexts.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::updateMouseEventTargetNode): Removed code that's no longer necessary.
        * rendering/ShadowElement.h: Made m_shadowParent a RefPtr to avoid stale references when parent
        is deleted.
        * svg/SVGElement.cpp: Removed eventParentNode that's no longer needed.
        * svg/SVGElement.h: Ditto.
        * dom/WindowEventContext.cpp: Added.
        * dom/WindowEventContext.h: Added.

2010-11-02  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Fix console messages about starting and finishing profiling.

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

        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::addStartProfilingMessageToConsole):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype.displayTitleForProfileLink):

2010-11-03  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Andreas Kling.

        chrome.dll!WebCore::SVGLength::SVGLength ...
        https://bugs.webkit.org/show_bug.cgi?id=48831

        Test: svg/dom/baseVal-animVal-crash.html

        * svg/properties/SVGListPropertyTearOff.h:
        (WebCore::SVGListPropertyTearOff::initialize): Renamed removeItemFromListIfNeeded to processIncomingListItem, to reflect its new job.
        (WebCore::SVGListPropertyTearOff::insertItemBefore): Ditto.
        (WebCore::SVGListPropertyTearOff::replaceItem): Ditto.
        (WebCore::SVGListPropertyTearOff::appendItem): Ditto.
        (WebCore::SVGListPropertyTearOff::processIncomingListItem): Copy incoming item, if necessary, see inline comments.
        * svg/properties/SVGPropertyTearOff.h:
        (WebCore::SVGPropertyTearOff::detachWrapper): Remove association with SVGAnimatedProperty, when wrapper is detached.

2010-11-03  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Andreas Kling.

        Make it possible to delegate scrolling to the UI
        https://bugs.webkit.org/show_bug.cgi?id=48907

        Add a WebCore setting for delegating scrolling to the actual
        WebKit view, which means that setScrollPosition will call
        scrollContents directly without going though the scrollbar
        code.

        * page/FrameView.cpp:
        (WebCore::FrameView::delegatesScrolling):
        * page/FrameView.h:
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setShouldDelegateScrolling):
        * page/Settings.h:
        (WebCore::Settings::shouldDelegateScrolling):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::setScrollPosition):
        * platform/ScrollView.h:
        (WebCore::ScrollView::delegatesScrolling):

2010-11-03  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Roben.

        [WINCE] Add SharedBitmap
        https://bugs.webkit.org/show_bug.cgi?id=28272

        SharedBitmap is a helper class used as NativeImagePtr for WinCE.
        It's wide used by WinCE graphics files as a replacement of HBITMAP.

        Originally written by Yong Li <yong.li@torchmobile.com>.

        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        (WebCore::TransparentLayerDC::TransparentLayerDC):
        (WebCore::TransparentLayerDC::~TransparentLayerDC):
        (WebCore::ScopeDCProvider::ScopeDCProvider):
        (WebCore::ScopeDCProvider::~ScopeDCProvider):
        (WebCore::GraphicsContext::drawText):
        * platform/graphics/wince/SharedBitmap.cpp: Added.
        (WebCore::SharedBitmap::create):
        (WebCore::SharedBitmap::SharedBitmap):
        (WebCore::SharedBitmap::~SharedBitmap):
        (WebCore::SharedBitmap::resetPixels):
        (WebCore::convert32To16):
        (WebCore::SharedBitmap::to16bit):
        (WebCore::SharedBitmap::freeMemory):
        (WebCore::SharedBitmap::createHandle):
        (WebCore::SharedBitmap::ensureHandle):
        (WebCore::SharedBitmap::draw):
        (WebCore::SharedBitmap::clipBitmap):
        (WebCore::drawPatternSimple):
        (WebCore::normalizePhase):
        (WebCore::SharedBitmap::drawPattern):
        (WebCore::SharedBitmap::DCProvider::getDC):
        (WebCore::SharedBitmap::DCProvider::releaseDC):
        (WebCore::SharedBitmap::clearPixels):
        * platform/graphics/wince/SharedBitmap.h: Added.
        (WebCore::DCProvider::getDC):
        (WebCore::DCProvider::releaseDC):
        (WebCore::DCProvider::DCHolder::DCHolder):
        (WebCore::DCProvider::DCHolder::~DCHolder):
        (WebCore::DCProvider::DCHolder::set):
        (WebCore::DCProvider::DCHolder::get):
        (WebCore::DCProvider::DCHolder::clearInternal):
        (WebCore::DCProvider::DCHolder::setInternal):

2010-11-03  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        chrome.dll!WebCore::SVGListPropertyTearOff<...>::getItem ReadAV@NULL (578c0f7f21ca517ba29a4eafb7099c1b)
        https://bugs.webkit.org/show_bug.cgi?id=48829

        Share SVGPropertyTearOff wrapper cache between SVGAnimatedListPropertyTearOff::baseVal/animVal.
        When modifying the list through baseVal, and then grabbing the animVal list an assertion was fired,
        as the wrapper cache was out of sync with the underlying SVG*List vector.

        Test: svg/dom/baseVal-animVal-list-crash.html

        * svg/properties/SVGAnimatedListPropertyTearOff.h:
        (WebCore::SVGAnimatedListPropertyTearOff::baseVal):
        (WebCore::SVGAnimatedListPropertyTearOff::animVal):
        (WebCore::SVGAnimatedListPropertyTearOff::removeItemFromList):
        (WebCore::SVGAnimatedListPropertyTearOff::detachListWrappers):
        (WebCore::SVGAnimatedListPropertyTearOff::values):
        (WebCore::SVGAnimatedListPropertyTearOff::wrappers):
        (WebCore::SVGAnimatedListPropertyTearOff::create):
        (WebCore::SVGAnimatedListPropertyTearOff::SVGAnimatedListPropertyTearOff):
        * svg/properties/SVGListPropertyTearOff.h:
        (WebCore::SVGListPropertyTearOff::create):
        (WebCore::SVGListPropertyTearOff::removeItemFromList):
        (WebCore::SVGListPropertyTearOff::clear):
        (WebCore::SVGListPropertyTearOff::numberOfItems):
        (WebCore::SVGListPropertyTearOff::initialize):
        (WebCore::SVGListPropertyTearOff::getItem):
        (WebCore::SVGListPropertyTearOff::insertItemBefore):
        (WebCore::SVGListPropertyTearOff::replaceItem):
        (WebCore::SVGListPropertyTearOff::removeItem):
        (WebCore::SVGListPropertyTearOff::appendItem):
        (WebCore::SVGListPropertyTearOff::SVGListPropertyTearOff):
        (WebCore::SVGListPropertyTearOff::commitChange):

2010-11-02  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Remove obsolete code.
        It is not required to push onload and DOMContentLoaded events times to the fresh instance of Inspector.
        Network Panel is showing the markers only after reloading the inspected page.
        https://bugs.webkit.org/show_bug.cgi?id=48854

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::populateScriptObjects):
        (WebCore::InspectorController::mainResourceFiredDOMContentEvent):
        (WebCore::InspectorController::mainResourceFiredLoadEvent):
        * inspector/InspectorController.h:

2010-11-03  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Jeremy Orlow.

        Web Inspector: brush up breakpoints UI and UX.
        https://bugs.webkit.org/show_bug.cgi?id=48901

        * inspector/front-end/BreakpointManager.js:
        (WebInspector.DOMBreakpoint.prototype.populateLabelElement):
        (WebInspector.XHRBreakpoint.prototype.populateLabelElement):
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.BreakpointsSidebarPane.prototype.addBreakpointItem):
        (WebInspector.XHRBreakpointsSidebarPane.prototype.addBreakpointItem):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._hideEditBreakpointDialog):
        (WebInspector.BreakpointItem):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype._populateTagContextMenu.handlerFunction):
        (WebInspector.ElementsTreeElement.prototype._populateTagContextMenu):
        * inspector/front-end/PropertiesSection.js:
        (WebInspector.PropertiesSection):
        * inspector/front-end/inspector.css:
        (.monospace):
        (body.platform-mac.platform-mac-snowleopard .source-code):
        (body.platform-windows .monospace, body.platform-windows .source-code):
        (body.platform-linux .monospace, body.platform-linux .source-code):
        (.source-code):
        (.section .header):
        (.section .header::before):
        (.section .header .title, .event-bar .header .title):
        (.section .header .subtitle, .event-bar .header .subtitle):
        (.section.expanded .properties, .event-bar.expanded .event-properties):
        (.event-listener-breakpoints .event-category):
        (.event-listener-breakpoints.properties-tree .children li):
        (.event-listener-breakpoints .checkbox-elem):
        (.event-bar):
        (.event-bars .event-bar .header .title):
        (.event-bars .event-bar .header::before):
        (.pane > .body .info):
        (.pane > .body .placard + .info):
        (ol.breakpoint-list):
        (.breakpoint-list li):
        (.pane .breakpoint-hit):
        (.cursor-pointer):
        (.cursor-auto):

2010-11-03  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed.

        Convert SVGAnimatedString/SVGStringList to the new SVG*PropertyTearOff concept
        https://bugs.webkit.org/show_bug.cgi?id=48898

        Fix Chromium/V8 build for real, verified using a local ToT Chromium build.

        * bindings/scripts/CodeGeneratorV8.pm:

2010-11-03  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed.

        Convert SVGAnimatedString/SVGStringList to the new SVG*PropertyTearOff concept
        https://bugs.webkit.org/show_bug.cgi?id=48898

        Next attempt to fix the Chromium/V8 builds - a class forward in the headers was still missing.

        * bindings/scripts/CodeGeneratorV8.pm: Add SVGStringListPropertyTearOff in the V8SVGStringList header.

2010-11-03  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed.

        Convert SVGAnimatedString/SVGStringList to the new SVG*PropertyTearOff concept
        https://bugs.webkit.org/show_bug.cgi?id=48898

        Attempt to fix the Chromium/V8 builds.

        * bindings/scripts/CodeGeneratorV8.pm: Add missing "SVGStringListPropertyTearOff.h" include, also replaces some commas by semicolons (no idea why it worked before, Perl is not strict...)

2010-11-03  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Convert SVGAnimatedString/SVGStringList to the new SVG*PropertyTearOff concept
        https://bugs.webkit.org/show_bug.cgi?id=48898

        Convert SVGAnimatedString/SVGStringList to the new svg animated type concept.
        SVGStringList is special compared to all other SVG*Lists, as it returns non-live elements.
        That means myStringList.getItem(0) = 'foobar' doesn't take effect.

        When appending an item to a SVGStringList, that has been taken from another list, it's not removed from the list origin.
        That demanded a new SVGStringListPropertyTearOff which does just that.

        Tests: svg/W3C-SVG-1.1-SE/types-dom-06-f.svg
               svg/dom/SVGStringList.html

        * GNUmakefile.am: Add SVGAnimatedString.h / SVGStringListPropertyTearOff.h to build.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * bindings/scripts/CodeGenerator.pm: Recognize SVGAnimatedString as new style svg animated type. Map SVGStringList to SVGStringListPropertyTearOff.
        * bindings/scripts/CodeGeneratorJS.pm: Handle SVGStringListPropertyTearOff in GetSVGPropertyTypes.
        * bindings/scripts/CodeGeneratorObjC.pm: Ditto.
        * bindings/scripts/CodeGeneratorV8.pm: Ditto.
        * svg/DeprecatedSVGAnimatedPropertyTraits.h: Remove SVGAnimatedString handling.
        * svg/DeprecatedSVGAnimatedTemplate.h: Ditto.
        * svg/SVGAElement.cpp: Renamed target to svgTarget() to avoid clashes with Element::target(), adjust the bindings to call svgTarget() instead of target(), when processing SVGAElement.
        (WebCore::SVGAElement::parseMappedAttribute):
        (WebCore::SVGAElement::synchronizeProperty):
        * svg/SVGAElement.h:
        * svg/SVGAltGlyphElement.h: s/DECLARE_ANIMATED_PROPERTY/DECLARED_ANIMATED_STATIC_PROPERTY_NEW/
        * svg/SVGAnimatedString.h: Added.
        * svg/SVGCursorElement.h: Ditto.
        * svg/SVGFEBlendElement.h: Ditto.
        * svg/SVGFEColorMatrixElement.h: Ditto.
        * svg/SVGFEComponentTransferElement.h: Ditto.
        * svg/SVGFECompositeElement.h: Ditto.
        * svg/SVGFEConvolveMatrixElement.h: Ditto.
        * svg/SVGFEDiffuseLightingElement.h: Ditto.
        * svg/SVGFEDisplacementMapElement.h: Ditto.
        * svg/SVGFEGaussianBlurElement.h: Ditto.
        * svg/SVGFEImageElement.h: Ditto.
        * svg/SVGFEMergeNodeElement.h: Ditto.
        * svg/SVGFEMorphologyElement.h: Ditto.
        * svg/SVGFEOffsetElement.h: Ditto.
        * svg/SVGFESpecularLightingElement.h: Ditto.
        * svg/SVGFETileElement.h: Ditto.
        * svg/SVGFilterElement.h: Ditto.
        * svg/SVGFilterPrimitiveStandardAttributes.h: Ditto.
        * svg/SVGForeignObjectElement.h: Ditto.
        * svg/SVGGradientElement.h: Ditto.
        * svg/SVGImageElement.h: Ditto. 
        * svg/SVGLengthList.idl: Remove leftover SVGListProperty marker.
        * svg/SVGMPathElement.h: s/DECLARE_ANIMATED_PROPERTY/DECLARED_ANIMATED_STATIC_PROPERTY_NEW/
        * svg/SVGPatternElement.h: Ditto.
        * svg/SVGScriptElement.h: Ditto.
        * svg/SVGStringList.cpp: Make SVGStringList a plain Vector<String>.
        (WebCore::SVGStringList::commitChange): React to SVGStringList changes.
        (WebCore::SVGStringList::reset):
        (WebCore::SVGStringList::parse):
        * svg/SVGStringList.h:
        (WebCore::SVGStringList::SVGStringList):
        * svg/SVGStyledElement.h: s/DECLARE_ANIMATED_PROPERTY/DECLARED_ANIMATED_STATIC_PROPERTY_NEW/
        * svg/SVGTRefElement.h: Ditto.
        * svg/SVGTests.cpp: Adapt to SVGStringList API changes.
        (WebCore::SVGTests::SVGTests):
        (WebCore::SVGTests::hasExtension):
        (WebCore::SVGTests::isValid):
        (WebCore::SVGTests::parseMappedAttribute):
        (WebCore::SVGTests::isKnownAttribute):
        * svg/SVGTests.h: Ditto.
        (WebCore::SVGTests::requiredFeatures):
        (WebCore::SVGTests::requiredExtensions):
        (WebCore::SVGTests::systemLanguage):
        * svg/SVGTextPathElement.h: s/DECLARE_ANIMATED_PROPERTY/DECLARED_ANIMATED_STATIC_PROPERTY_NEW/
        * svg/SVGURIReference.h: Adapt to SVGStringList API changes.
        (WebCore::SVGURIReference::~SVGURIReference):
        * svg/SVGUseElement.h: s/DECLARE_ANIMATED_PROPERTY/DECLARED_ANIMATED_STATIC_PROPERTY_NEW/
        * svg/SVGViewElement.cpp: Adapt to SVGStringList API changes.
        (WebCore::SVGViewElement::SVGViewElement):
        (WebCore::SVGViewElement::parseMappedAttribute):
        * svg/SVGViewElement.h: Ditto.
        (WebCore::SVGViewElement::viewTarget):
        * svg/properties/SVGAnimatedPropertyMacros.h: Moved GetOwnerElementForType heleprs from SVGAnimatedPropertySynchronizer into this file.
        * svg/properties/SVGAnimatedPropertySynchronizer.h: 
        * svg/properties/SVGPropertyTraits.h: Handle SVGStringList.
        * svg/properties/SVGStringListPropertyTearOff.h: Added. This is a simplified version of SVGListPropertyTearOff, tied to SVGStringList and its special demands.
        (WebCore::SVGStringListPropertyTearOff::create):
        (WebCore::SVGStringListPropertyTearOff::clear):
        (WebCore::SVGStringListPropertyTearOff::numberOfItems):
        (WebCore::SVGStringListPropertyTearOff::initialize):
        (WebCore::SVGStringListPropertyTearOff::getItem):
        (WebCore::SVGStringListPropertyTearOff::insertItemBefore):
        (WebCore::SVGStringListPropertyTearOff::replaceItem):
        (WebCore::SVGStringListPropertyTearOff::removeItem):
        (WebCore::SVGStringListPropertyTearOff::appendItem):
        (WebCore::SVGStringListPropertyTearOff::SVGStringListPropertyTearOff):

2010-11-03  Zoltan Herczeg  <zherczeg@webkit.org>

        Reviewed by Dirk Schulze.

        SVG FELighting performance issues
        https://bugs.webkit.org/show_bug.cgi?id=48212

        This patch speeds-up FELighting filter painting by 40%
        It reduces the number of floating point operations and
        empolys faster pixel manipulation (both for read and
        write). Furthermore the length() member of FloatPoint3D
        is made inline to speed up vector length calculations.

        The lighting filter pixels tests are cover this patch.

        * platform/graphics/FloatPoint3D.cpp:
        * platform/graphics/FloatPoint3D.h:
        (WebCore::FloatPoint3D::length):
        * platform/graphics/filters/FELighting.cpp:
        (WebCore::FELighting::LightingData::topLeft):
        (WebCore::FELighting::LightingData::topRow):
        (WebCore::FELighting::LightingData::topRight):
        (WebCore::FELighting::LightingData::leftColumn):
        (WebCore::FELighting::LightingData::interior):
        (WebCore::FELighting::LightingData::rightColumn):
        (WebCore::FELighting::LightingData::bottomLeft):
        (WebCore::FELighting::LightingData::bottomRow):
        (WebCore::FELighting::LightingData::bottomRight):
        (WebCore::FELighting::inlineSetPixel):
        (WebCore::FELighting::setPixel):
        (WebCore::FELighting::drawLighting):
        (WebCore::FELighting::apply):
        * platform/graphics/filters/FELighting.h:
        * platform/graphics/filters/LightSource.cpp:
        (WebCore::PointLightSource::updatePaintingData):
        (WebCore::SpotLightSource::updatePaintingData):
        (WebCore::DistantLightSource::initPaintingData):
        * platform/graphics/filters/LightSource.h:

2010-11-03  Daniel Bates  <dbates@rim.com>

        Reviewed by Adam Barth.

        For unnamed frames, window.name returns a generated name
        https://bugs.webkit.org/show_bug.cgi?id=6751

        Part 2 of 2.

        Fixes an issue where the window.name of an unnamed frame returns
        a unique generated name that is used internally to identify the
        frame. Instead, we should return an empty string as implied by
        section 5.1.6 of the HTML5 spec. (http://www.w3.org/TR/html5/browsers.html#browsing-context-names).
        This section describes that a browsing context can have no name or be
        the empty string.

        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::openURL): Removed ASSERT for empty
        frame name since this is valid as per the HTML5 spec.
        (WebCore::HTMLFrameElementBase::setName): Removed the call to FrameTree::uniqueChildName()
        since the loader code no longer depends on the frame name being unique.
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::name): Modified to call FrameTree::name().
        * page/FrameTree.cpp:
        (WebCore::FrameTree::setName):
        (WebCore::FrameTree::clearName):
        * page/FrameTree.h:
        (WebCore::FrameTree::name): Re-added; returns the DOM-specified name of the
        frame. Previously, this method returned the internal frame name.

2010-11-03  takano takumi  <takano1@asia.apple.com>

        Reviewed by Dan Bernstein.

        Add text-combine property to our property list. Reflect the setting to a RenderStyle object.
        https://bugs.webkit.org/show_bug.cgi?id=48608

        Test: fast/text/international/text-combine-parser-test.html

        * css/CSSComputedStyleDeclaration.cpp: Added text-combine property support.
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp: Added text-combine property support.
        (WebCore::CSSParser::parseValue):
        * css/CSSPrimitiveValueMappings.h: Added a primitive value mapper for text-combine
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator TextCombine):
        * css/CSSPropertyNames.in: Added "text-combine".
        * css/CSSStyleSelector.cpp: Added text-combine property support.
        (WebCore::CSSStyleSelector::applyProperty):
        * css/CSSValueKeywords.in: Added values for text-combine.
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::diff): Added check of text-combine value.
        * rendering/style/RenderStyle.h: Added accessors for text-combine.
        (WebCore::InheritedFlags::textCombine):
        (WebCore::InheritedFlags::setTextCombine):
        (WebCore::InheritedFlags::initialTextCombine):
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleRareNonInheritedData.cpp: Added text-combine property support.
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        * rendering/style/StyleRareNonInheritedData.h: Added text-combine entry for RenderStyle object here.

2010-11-02  Daniel Bates  <dbates@rim.com>

        Reviewed by Adam Barth.

        For unnamed frames, window.name returns a generated name
        https://bugs.webkit.org/show_bug.cgi?id=6751

        Part 1 of 2.

        Towards fixing bug #6751, rename FrameTree::name() to FrameTree::uniqueName(),
        which is more descriptive of its purpose. A follow up patch will re-add
        FrameTree::name() which will return the DOM-specified name of the frame.

        We will also take this opportunity to verify that we have found all the
        call sites of FrameTree::name().

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::mainResource): Use FrameTree::uniqueName().
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadURLIntoChildFrame): Ditto.
        (WebCore::FrameLoader::commitProvisionalLoad): Ditto.
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::saveDocumentState): Ditto.
        (WebCore::HistoryController::restoreDocumentState): Ditto.
        (WebCore::HistoryController::createItem): Ditto.
        (WebCore::HistoryController::currentFramesMatchItem): Ditto.
        * loader/ProgressTracker.cpp:
        (WebCore::ProgressTracker::progressStarted): Ditto.
        (WebCore::ProgressTracker::progressCompleted): Ditto.
        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::create): Ditto.
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::name): Ditto.
        * page/FrameTree.cpp:
        (WebCore::FrameTree::setName): Ditto.
        (WebCore::FrameTree::clearName): Ditto.
        (WebCore::FrameTree::uniqueChildName): Ditto.
        (WebCore::FrameTree::child): Ditto.
        (WebCore::FrameTree::find): Ditto.
        * page/FrameTree.h:
        (WebCore::FrameTree::uniqueName): Renamed (formerly FrameTree::name()).

2010-11-02  Chris Rogers  <crogers@google.com>

        Reviewed by James Robinson.

        Add AudioProcessingEvent files
        https://bugs.webkit.org/show_bug.cgi?id=48884

        No new tests since audio API is not yet implemented.

        * webaudio/AudioProcessingEvent.cpp: Added.
        (WebCore::AudioProcessingEvent::create):
        (WebCore::AudioProcessingEvent::AudioProcessingEvent):
        (WebCore::AudioProcessingEvent::~AudioProcessingEvent):
        (WebCore::AudioProcessingEvent::isAudioProcessingEvent):
        * webaudio/AudioProcessingEvent.h: Added.
        (WebCore::AudioProcessingEvent::inputBuffer):
        (WebCore::AudioProcessingEvent::outputBuffer):
        * webaudio/AudioProcessingEvent.idl: Added.

2010-11-02  Al Patrick  <apatrick@chromium.org>

        Reviewed by Kenneth Russell.

        Added PluginLayerChromium, which composites plugin instances that have an associated OpenGL backing texture.

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

        * WebCore.gypi:
        * loader/SubframeLoader.cpp
        (WebCore::SubframeLoader::loadPlugin):
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::setNeedsDisplay):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::initializeSharedObjects):
        (WebCore::LayerRendererChromium::cleanupSharedObjects):
        * platform/graphics/chromium/LayerRendererChromium.h:
        (WebCore::LayerRendererChromium::pluginLayerSharedValues):
        * platform/graphics/chromium/PluginLayerChromium.cpp: Added.
        (WebCore::PluginLayerChromium::SharedValues::SharedValues):
        (WebCore::PluginLayerChromium::SharedValues::~SharedValues):
        (WebCore::PluginLayerChromium::create):
        (WebCore::PluginLayerChromium::PluginLayerChromium):
        (WebCore::PluginLayerChromium::updateContents):
        (WebCore::PluginLayerChromium::draw):
        * platform/graphics/chromium/PluginLayerChromium.h: Added.
        (WebCore::PluginLayerChromium::drawsContent):
        (WebCore::PluginLayerChromium::setTextureId):
        (WebCore::PluginLayerChromium::SharedValues::shaderProgram):
        (WebCore::PluginLayerChromium::SharedValues::shaderSamplerLocation):
        (WebCore::PluginLayerChromium::SharedValues::shaderMatrixLocation):
        (WebCore::PluginLayerChromium::SharedValues::shaderAlphaLocation):
        (WebCore::PluginLayerChromium::SharedValues::initialized):

2010-11-02  James Simonsen  <simonjam@chromium.org>

        Reviewed by Adam Barth.

        mathml in html sometimes incorrectly parsed
        https://bugs.webkit.org/show_bug.cgi?id=48105

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processEndTag): Fixed to match HTML5 spec.

2010-11-02  Chris Guillory  <chris.guillory@google.com>

        Reviewed by Dmitry Titov.

        Null check obj in AXObjectCache::postPlatformNotification.
        https://bugs.webkit.org/show_bug.cgi?id=48896

        * accessibility/chromium/AXObjectCacheChromium.cpp:
        (WebCore::AXObjectCache::postPlatformNotification):

2010-11-02  Kavita Kanetkar  <kkanetkar@chromium.org>

        Reviewed by Dumitru Daniliuc.

        [FileSystem] Support not creating directories when queried by inspector.
        https://bugs.webkit.org/show_bug.cgi?id=48169

        * fileapi/LocalFileSystem.cpp:
        (WebCore::openFileSystem):
        (WebCore::LocalFileSystem::readFileSystem):
        (WebCore::LocalFileSystem::requestFileSystem):
        * fileapi/LocalFileSystem.h:
        * platform/AsyncFileSystem.cpp:
        (WebCore::AsyncFileSystem::openFileSystem):
        * platform/AsyncFileSystem.h:

2010-11-02  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Add AudioBufferSourceNode files
        https://bugs.webkit.org/show_bug.cgi?id=48012

        No new tests since audio API is not yet implemented.

        * webaudio/AudioBufferSourceNode.cpp: Added.
        (WebCore::AudioBufferSourceNode::create):
        (WebCore::AudioBufferSourceNode::AudioBufferSourceNode):
        (WebCore::AudioBufferSourceNode::~AudioBufferSourceNode):
        (WebCore::AudioBufferSourceNode::process):
        (WebCore::AudioBufferSourceNode::provideInput):
        (WebCore::AudioBufferSourceNode::readFromBuffer):
        (WebCore::AudioBufferSourceNode::readFromBufferWithGrainEnvelope):
        (WebCore::AudioBufferSourceNode::reset):
        (WebCore::AudioBufferSourceNode::setBuffer):
        (WebCore::AudioBufferSourceNode::numberOfChannels):
        (WebCore::AudioBufferSourceNode::noteOn):
        (WebCore::AudioBufferSourceNode::noteGrainOn):
        (WebCore::AudioBufferSourceNode::noteOff):
        (WebCore::AudioBufferSourceNode::totalPitchRate):
        * webaudio/AudioBufferSourceNode.h: Added.
        (WebCore::AudioBufferSourceNode::buffer):
        (WebCore::AudioBufferSourceNode::looping):
        (WebCore::AudioBufferSourceNode::setLooping):
        (WebCore::AudioBufferSourceNode::gain):
        (WebCore::AudioBufferSourceNode::playbackRate):
        (WebCore::AudioBufferSourceNode::setPannerNode):
        * webaudio/AudioBufferSourceNode.idl: Added.

2010-11-02  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Adam Barth.

        [Cairo] Remove PlatformRefPtrCairo
        https://bugs.webkit.org/show_bug.cgi?id=48192

        Replace PlatformRefPtrCairo with a RefPtr specialization for Cairo and
        Fontconfig types. This is the first step toward removing PlatformRefPtr,
        whose job is better handled by RefPtr.

        * CMakeListsEfl.txt: Update the sources list to include RefPtrCairo
        instead of PlatformRefPtrCairo.
        * GNUmakefile.am: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * platform/graphics/GraphicsContext.h: Replace PlatformRefPtrCairo with
        RefPtrCairo.
        * platform/graphics/cairo/CairoUtilities.cpp: Ditto.
        (WebCore::drawPatternToCairoContext): Ditto.
        * platform/graphics/cairo/FontCacheFreeType.cpp: Ditto.
        (WebCore::FontCache::getFontDataForCharacters): Ditto.
        (WebCore::FontCache::createFontPlatformData): Ditto.
        * platform/graphics/cairo/FontPlatformDataFreeType.cpp: Ditto.
        (WebCore::FontPlatformData::FontPlatformData): Ditto.
        (WebCore::FontPlatformData::initializeWithFontFace): Ditto.
        * platform/graphics/cairo/FontPlatformDataFreeType.h: Ditto.
        * platform/graphics/cairo/GraphicsContextCairo.cpp: Ditto.
        * platform/graphics/cairo/ImageCairo.cpp: Ditto.
        * platform/graphics/cairo/RefPtrCairo.cpp: Renamed from WebCore/platform/graphics/cairo/PlatformRefPtrCairo.cpp.
        (WTF::refIfNotNull): Added.
        (WTF::derefIfNotNull): Added.
        * platform/graphics/cairo/RefPtrCairo.h: Renamed from WebCore/platform/graphics/cairo/PlatformRefPtrCairo.h.
        * platform/gtk/CursorGtk.cpp: Replace PlatformRefPtrCairo with
        RefPtrCairo.
        (WebCore::createNamedCursor): Ditto.
        * platform/gtk/DragImageGtk.cpp: Ditto.
        (WebCore::scaleDragImage): Ditto.
        (WebCore::dissolveDragImageToFraction): Ditto.
        * plugins/gtk/PluginViewGtk.cpp: Ditto.
        (WebCore::PluginView::paint): Ditto.

2010-11-02  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Simple followup changes to files affected by AudioNodeInput thread safety
        https://bugs.webkit.org/show_bug.cgi?id=48661

        No new tests since audio API is not yet implemented.

        * webaudio/AudioBasicProcessorNode.cpp:
        (WebCore::AudioBasicProcessorNode::checkNumberOfChannelsForInput):
        * webaudio/AudioChannelSplitter.cpp:
        (WebCore::AudioChannelSplitter::process):
        * webaudio/AudioDestinationNode.cpp:
        (WebCore::AudioDestinationNode::initialize):
        (WebCore::AudioDestinationNode::uninitialize):
        (WebCore::AudioDestinationNode::provideInput):
        * webaudio/AudioGainNode.cpp:
        (WebCore::AudioGainNode::checkNumberOfChannelsForInput):
        * webaudio/AudioPannerNode.cpp:
        (WebCore::AudioPannerNode::notifyAudioSourcesConnectedToNode):

2010-11-02  Chris Guillory  <chris.guillory@google.com>

        Reviewed by Chris Fleizach.

        Chromium: Propagate a document value changed notification on scroll.
        https://bugs.webkit.org/show_bug.cgi?id=48817

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isAccessibilityScrollbar):
        * accessibility/AccessibilityScrollbar.h:
        (WebCore::AccessibilityScrollbar::scrollbar):
        (WebCore::AccessibilityScrollbar::isAccessibilityScrollbar):
        * accessibility/chromium/AXObjectCacheChromium.cpp:
        (WebCore::AXObjectCache::postPlatformNotification):

2010-11-02  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Add ConvolverNode files
        https://bugs.webkit.org/show_bug.cgi?id=47941

        No new tests since audio API is not yet implemented.

        * webaudio/ConvolverNode.cpp: Added.
        (WebCore::ConvolverNode::ConvolverNode):
        (WebCore::ConvolverNode::~ConvolverNode):
        (WebCore::ConvolverNode::process):
        (WebCore::ConvolverNode::reset):
        (WebCore::ConvolverNode::initialize):
        (WebCore::ConvolverNode::uninitialize):
        (WebCore::ConvolverNode::setBuffer):
        (WebCore::ConvolverNode::buffer):
        * webaudio/ConvolverNode.h: Added.
        (WebCore::ConvolverNode::create):
        * webaudio/ConvolverNode.idl: Added.

2010-11-02  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Add RealtimeAnalyser files
        https://bugs.webkit.org/show_bug.cgi?id=48810

        No new tests since audio API is not yet implemented.

        * webaudio/RealtimeAnalyser.cpp: Added.
        (WebCore::RealtimeAnalyser::RealtimeAnalyser):
        (WebCore::RealtimeAnalyser::~RealtimeAnalyser):
        (WebCore::RealtimeAnalyser::reset):
        (WebCore::RealtimeAnalyser::setFftSize):
        (WebCore::RealtimeAnalyser::writeInput):
        (WebCore::RealtimeAnalyser::doFFTAnalysis):
        (WebCore::RealtimeAnalyser::getFloatFrequencyData):
        (WebCore::RealtimeAnalyser::getByteFrequencyData):
        (WebCore::RealtimeAnalyser::getByteTimeDomainData):
        * webaudio/RealtimeAnalyser.h: Added.
        (WebCore::RealtimeAnalyser::fftSize):
        (WebCore::RealtimeAnalyser::frequencyBinCount):
        (WebCore::RealtimeAnalyser::setMinDecibels):
        (WebCore::RealtimeAnalyser::minDecibels):
        (WebCore::RealtimeAnalyser::setMaxDecibels):
        (WebCore::RealtimeAnalyser::maxDecibels):
        (WebCore::RealtimeAnalyser::setSmoothingTimeConstant):
        (WebCore::RealtimeAnalyser::smoothingTimeConstant):
        (WebCore::RealtimeAnalyser::magnitudeBuffer):

2010-11-02  Ilya Sherman  <isherman@chromium.org>

        Reviewed by Kent Tamura.

        Avoid overlapping label text in autofill popup with icon.
        Updates the menu width computation to take the icon width into account.
        https://bugs.webkit.org/show_bug.cgi?id=48497

        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupListBox::paintRow):
        (WebCore::PopupListBox::layout):

2010-10-28  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        Perform framebuffer attachment checking upon draw call rather than attachment
        https://bugs.webkit.org/show_bug.cgi?id=46318

        * html/canvas/WebGLFramebuffer.cpp:
        (WebCore::getInternalFormat): Helper function to get an attachment's internal format.
        (WebCore::isUninitialized): Helper function to decide if an attachment is initialized or not.
        (WebCore::setInitialized): Helper funtion to set an attachment as being initialized.
        (WebCore::WebGLFramebuffer::setAttachment): No longer perform buffer initialization at this point.
        (WebCore::WebGLFramebuffer::removeAttachment): Ditto.
        (WebCore::WebGLFramebuffer::getColorBufferFormat): Make it const.
        (WebCore::WebGLFramebuffer::isIncomplete): Attachments conflict check.
        (WebCore::WebGLFramebuffer::onAccess): Check atatchment conflicts and buffer initialization if necessary.
        (WebCore::WebGLFramebuffer::initializeRenderbuffers): Return a boolean whether the framebuffer is complete or not.
        * html/canvas/WebGLFramebuffer.h: Add new function declaration and remove some outdated functions.
        (WebCore::WebGLFramebuffer::isColorAttached):
        (WebCore::WebGLFramebuffer::isDepthAttached): Make this private.
        (WebCore::WebGLFramebuffer::isStencilAttached): Ditto.
        (WebCore::WebGLFramebuffer::isDepthStencilAttached): Ditto.
        * html/canvas/WebGLRenderbuffer.h:
        (WebCore::WebGLRenderbuffer::setInternalFormat): Also set the renderbuffer as uninitialized.
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::bindFramebuffer): No longer perform framebuffer initialization at this point.
        (WebCore::WebGLRenderingContext::checkFramebufferStatus): Check WebGL specific attachment conflicts.
        (WebCore::WebGLRenderingContext::clear): Call WebGLFramebuffer::onAccess.
        (WebCore::WebGLRenderingContext::copyTexImage2D): Ditto.
        (WebCore::WebGLRenderingContext::copyTexSubImage2D): Ditto.
        (WebCore::WebGLRenderingContext::drawArrays): Ditto.
        (WebCore::WebGLRenderingContext::drawElements): Ditto.
        (WebCore::WebGLRenderingContext::framebufferRenderbuffer): No longer perform framebuffer initialization at this point.
        (WebCore::WebGLRenderingContext::readPixels): Call WebGLFramebuffer::onAccess.
        (WebCore::WebGLRenderingContext::renderbufferStorage): No longer perform framebuffer initialization at this point.
        (WebCore::WebGLRenderingContext::texImage2DBase): Ditto.

2010-11-01  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        blendFunc should generate INVALID_OPERATION if constant color and constant alpha are together as source and destination factors
        https://bugs.webkit.org/show_bug.cgi?id=48674

        Test: fast/canvas/webgl/webgl-specific.html

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::blendFunc):
        (WebCore::WebGLRenderingContext::blendFuncSeparate):
        * html/canvas/WebGLRenderingContext.h:
        (WebCore::WebGLRenderingContext::validateBlendFuncFactors): Helper function to do the checking.

2010-11-02  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Overlapped nested iframes show smearing when scrolled
        https://bugs.webkit.org/show_bug.cgi?id=48873

        A FrameView goes into slow scrolling mode (not blitting) when told that it is
        overlapped. However, a nested iframe could still try to use fast scrolling
        when its parent is overlapped, which could result in bad rendering.
        
        Fixed by making useSlowRepaints() and useSlowRepaintsIfNotOverlapped()
        walk up their parent chain, asking if their parents also use slow
        repaints.
        
        All the places that call setCanBlitOnScroll() now call
        updateCanBlitOnScrollRecursively() to ensure that the canBlitOnScroll
        flag is updated correctly on subframes.
        
        Repaint tests do not work on nested iframes, so added manual test.

        * manual-tests/frames/nested-iframe-blit-on-scroll.html: Added.
        * manual-tests/frames/resources/blit-on-scroll-subframe.html: Added.
        * manual-tests/frames/resources/blit-on-scroll-subsubframe.html: Added.
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        (WebCore::FrameView::useSlowRepaints):
        (WebCore::FrameView::useSlowRepaintsIfNotOverlapped):
        (WebCore::FrameView::updateCanBlitOnScrollRecursively):
        (WebCore::FrameView::setUseSlowRepaints):
        (WebCore::FrameView::addSlowRepaintObject):
        (WebCore::FrameView::removeSlowRepaintObject):
        (WebCore::FrameView::addFixedObject):
        (WebCore::FrameView::removeFixedObject):
        (WebCore::FrameView::setIsOverlapped):
        (WebCore::FrameView::setContentIsOpaque):
        * page/FrameView.h:

2010-11-02  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Iframes nested inside a compositing layer don't repaint correctly
        https://bugs.webkit.org/show_bug.cgi?id=48880
        <rdar://problem/8194698>
        
        The isEnclosedInCompositingLayer() is used to modify the behavior of
        -[WebClipView visibleRect:] in WebKit, so that scrolling-related repaints
        are correct in composited iframes. Previously it only asked whether the
        frame's renderer was in a compositing layer, but we actually need to
        consult all ancestors.
        
        Test: compositing/iframes/nested-iframe-scrolling.html

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

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

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=48672
        
        Make vertical glyph offset hit testing work with inline boxes.  This allows selection to paint
        properly for vertical text (although gap-filling is still broken).
        
        Refactored and cleaned up the writing mode flipping functions, and also did some cleanup to
        better share code between hit testing and painting.

        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::locationIncludingFlipping):
        (WebCore::InlineBox::flipForWritingMode):
        * rendering/InlineBox.h:
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::nodeAtPoint):
        (WebCore::InlineFlowBox::paint):
        (WebCore::InlineFlowBox::paintBoxDecorations):
        (WebCore::InlineFlowBox::paintMask):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::selectionRect):
        (WebCore::InlineTextBox::nodeAtPoint):
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::textPos):
        (WebCore::InlineTextBox::offsetForPosition):
        (WebCore::InlineTextBox::positionForOffset):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintChildren):
        (WebCore::RenderBlock::paintFloats):
        (WebCore::RenderBlock::hitTestFloats):
        (WebCore::RenderBlock::hitTestContents):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeRectForRepaint):
        (WebCore::RenderBox::flipForWritingMode):
        (WebCore::RenderBox::locationOffsetIncludingFlipping):
        * rendering/RenderBox.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::clippedOverflowRectForRepaint):
        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::rangeIntersectsRect):
        (WebCore::RenderLineBoxList::anyLineIntersectsRect):
        (WebCore::RenderLineBoxList::lineIntersectsDirtyRect):
        (WebCore::RenderLineBoxList::paint):
        (WebCore::RenderLineBoxList::hitTest):
        * rendering/RenderLineBoxList.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::positionForPoint):

2010-11-02  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        JPEG decoders should understand color profiles
        https://bugs.webkit.org/show_bug.cgi?id=48819

        This patch is currently a no-op because no one defines USE(ICCJPEG).
        We'll enable this for Chromium Mac once we have ICCJPEG landed in
        Chromium's third_party directory.

        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::readColorProfile):
        (WebCore::JPEGImageReader::JPEGImageReader):
        (WebCore::JPEGImageReader::decode):
        (WebCore::JPEGImageDecoder::outputScanlines):
        * platform/image-decoders/jpeg/JPEGImageDecoder.h:
        (WebCore::JPEGImageDecoder::setColorProfile):

2010-11-02  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Adam Barth.

        [Chromium] Crash when encountering history.back() call during Page::goToItem execution
        https://bugs.webkit.org/show_bug.cgi?id=48477
        
        For the Chromium port, BackForwardList::itemAtIndex synthesizes a 
        HistoryItem and saves a pointer to it in m_pendingItem. During 
        Page::goToItem we call FrameLoader::stopAllLoaders, which can trigger
        onload handlers (if a subframe was not considered committed by the frame
        loader). If one of those handlers calls calls history.back() or another
        operation that ends up in NavigationScheduler::scheduleHistoryNavigation,
        we would call BackForwardList::itemAtIndex, which means that we would 
        lose the m_pendingItem RefPtr that pointed to the item being navigated 
        to, causing its ref count to go to 0*, and thus for the HistoryItem to
        be deleted before we were done navigating to it.
        
        This is fixed in two ways:
        - Add a protector RefPtr in Page::goToItem to make sure that the item is
          still around for when we pass it to HistoryController:goToItem.
        - Change NavigationScheduler::scheduleHistoryNavigation to not use
          BackForwardList::itemAtIndex and instead look at the
          forward/backListCount() (since it doesn't actually care about the
          returned HistoryItem).
        
        * Full annotated stack trace of this is at http://crbug.com/59554#c9.        

        Test: http/tests/history/back-during-onload-triggered-by-back.html

        * loader/NavigationScheduler.cpp:
        (WebCore::NavigationScheduler::scheduleHistoryNavigation):
        * page/Page.cpp:
        (WebCore::Page::goToItem):

2010-10-28  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        Update getUniform for bvec[234] to return boolean[] rather than Uint8Array
        https://bugs.webkit.org/show_bug.cgi?id=47568

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getUniform):

2010-11-02  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Add RealtimeAnalyserNode files
        https://bugs.webkit.org/show_bug.cgi?id=48798

        No new tests since audio API is not yet implemented.

        * webaudio/RealtimeAnalyserNode.cpp: Added.
        (WebCore::RealtimeAnalyserNode::RealtimeAnalyserNode):
        (WebCore::RealtimeAnalyserNode::~RealtimeAnalyserNode):
        (WebCore::RealtimeAnalyserNode::process):
        (WebCore::RealtimeAnalyserNode::pullInputs):
        (WebCore::RealtimeAnalyserNode::reset):
        * webaudio/RealtimeAnalyserNode.h: Added.
        (WebCore::RealtimeAnalyserNode::create):
        (WebCore::RealtimeAnalyserNode::fftSize):
        (WebCore::RealtimeAnalyserNode::setFftSize):
        (WebCore::RealtimeAnalyserNode::frequencyBinCount):
        (WebCore::RealtimeAnalyserNode::setMinDecibels):
        (WebCore::RealtimeAnalyserNode::minDecibels):
        (WebCore::RealtimeAnalyserNode::setMaxDecibels):
        (WebCore::RealtimeAnalyserNode::maxDecibels):
        (WebCore::RealtimeAnalyserNode::setSmoothingTimeConstant):
        (WebCore::RealtimeAnalyserNode::smoothingTimeConstant):
        (WebCore::RealtimeAnalyserNode::getFloatFrequencyData):
        (WebCore::RealtimeAnalyserNode::getByteFrequencyData):
        (WebCore::RealtimeAnalyserNode::getByteTimeDomainData):
        * webaudio/RealtimeAnalyserNode.idl: Added.

2010-11-02  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r71152.
        http://trac.webkit.org/changeset/71152
        https://bugs.webkit.org/show_bug.cgi?id=48866

        Causes lots and lots of crashes (Requested by jamesr_ on
        #webkit).

        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::JPEGImageReader::JPEGImageReader):
        (WebCore::JPEGImageReader::decode):
        (WebCore::JPEGImageDecoder::outputScanlines):
        * platform/image-decoders/jpeg/JPEGImageDecoder.h:

2010-11-02  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Timothy Hatcher.

        https://bugs.webkit.org/show_bug.cgi?id=48813
        <rdar://problem/8602552> REGRESSION (r63622): DNS prefetching for <link> tags doesn't work
        in non-HTTP documents

        Cannot test DNS prefetching.

        * html/HTMLLinkElement.cpp: (WebCore::HTMLLinkElement::process): We should be looking at
        preferences, not at whether this document has prefetching enabled.

2010-11-02  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: Web Inspector: follow up to r71139. Fixed Mac monospace
        height style.

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

2010-11-02  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        JPEG decoders should understand color profiles
        https://bugs.webkit.org/show_bug.cgi?id=48819

        This patch is currently a no-op because no one defines USE(ICCJPEG).
        We'll enable this for Chromium Mac once we have ICCJPEG landed in
        Chromium's third_party directory.

        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::readColorProfile):
        (WebCore::JPEGImageReader::JPEGImageReader):
        (WebCore::JPEGImageReader::decode):
        (WebCore::JPEGImageDecoder::outputScanlines):
        * platform/image-decoders/jpeg/JPEGImageDecoder.h:
        (WebCore::JPEGImageDecoder::setColorProfile):

2010-11-02  Ilya Sherman  <isherman@chromium.org>

        Reviewed by Simon Fraser.

        Marks selectionStart() and selectionEnd() as const.
        https://bugs.webkit.org/show_bug.cgi?id=48786

        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::selectionStart):
        (WebCore::HTMLTextFormControlElement::selectionEnd):
        * html/HTMLFormControlElement.h:

2010-11-02  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Fix license for audio files
        https://bugs.webkit.org/show_bug.cgi?id=48859

        * webaudio/AudioChannelSplitter.cpp:
        * webaudio/AudioChannelSplitter.h:
        * webaudio/AudioDestinationNode.cpp:
        * webaudio/AudioDestinationNode.h:
        * webaudio/AudioGainNode.cpp:
        * webaudio/AudioGainNode.h:
        * webaudio/AudioPannerNode.cpp:
        * webaudio/AudioPannerNode.h:
        * webaudio/AudioPannerNode.idl:

2010-11-02  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        Remove special handling of HashTableDeletedValue in PlatformRefPtr and manually manage memory that cannot be controlled by HashTraits
        https://bugs.webkit.org/show_bug.cgi?id=48841

        Switch to manually managing the memory in FontPlatformDataFreeType. This
        is necessary because smart pointers do not know how to deal with a pointer
        value of -1 (HashTableDeletedValue) and HashTraits can only manage the type
        contained in the HashMap. 

        No new tests as this should not change functionality.

        * platform/graphics/cairo/FontPlatformDataFreeType.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::operator=):
        (WebCore::FontPlatformData::~FontPlatformData):
        (WebCore::FontPlatformData::operator==):
        (WebCore::FontPlatformData::initializeWithFontFace):
        * platform/graphics/cairo/FontPlatformDataFreeType.h:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::scaledFont):
        (WebCore::FontPlatformData::hash):
        (WebCore::FontPlatformData::isHashTableDeletedValue):
        (WebCore::FontPlatformData::hashTableDeletedFontValue):
        * platform/graphics/cairo/GlyphPageTreeNodeCairo.cpp:
        (WebCore::GlyphPage::fill):
        * platform/graphics/cairo/SimpleFontDataCairo.cpp:
        (WebCore::SimpleFontData::platformInit):
        (WebCore::SimpleFontData::containsCharacters):
        (WebCore::SimpleFontData::platformWidthForGlyph):

2010-11-02  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        querySelectorAll('body>:last-child') does not work unless HTML file ends with 'new-line'.
        https://bugs.webkit.org/show_bug.cgi?id=47166

        We need to pop all the open elements when we end the document in the
        AfterAfterBody state.

        Test: fast/parser/pop-all-after-after-body.html

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processEndOfFile):

2010-11-02  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Roben.

        Cleanup createGlobalImageFileDescriptor in ClipboardWin
        https://bugs.webkit.org/show_bug.cgi?id=48189

        * platform/win/ClipboardWin.cpp:
        (WebCore::ClipboardWin::writeURL):

2010-11-02  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: display frame names in the resources panel.
        https://bugs.webkit.org/show_bug.cgi?id=48839

        * inspector/Inspector.idl:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::frameId):
        (WebCore::buildObjectForDocumentLoader):
        (WebCore::buildObjectForFrame):
        (WebCore::buildObjectForFrameTree):
        (WebCore::InspectorResourceAgent::didCommitLoad):
        (WebCore::InspectorResourceAgent::frameDetachedFromParent):
        (WebCore::InspectorResourceAgent::frameForId):
        (WebCore::InspectorResourceAgent::resourceContent):
        * inspector/InspectorResourceAgent.h:
        * inspector/front-end/ResourceManager.js:
        (WebInspector.ResourceManager.prototype.didCommitLoadForFrame):
        (WebInspector.ResourceManager.prototype._processCachedResources):
        (WebInspector.ResourceManager.prototype._addFramesRecursively):
        (WebInspector.ResourceTreeModel.prototype.addOrUpdateFrame):
        (WebInspector.ResourceTreeModel.prototype.didCommitLoadForFrame):
        * inspector/front-end/StoragePanel.js:
        (WebInspector.StoragePanel.prototype.addOrUpdateFrame):
        (WebInspector.BaseStorageTreeElement.prototype.get titleText):
        (WebInspector.FrameTreeElement):
        (WebInspector.FrameTreeElement.prototype.onattach):
        (WebInspector.FrameTreeElement.prototype.get nameForSorting):
        (WebInspector.FrameTreeElement.prototype.setTitles):
        (WebInspector.FrameTreeElement.prototype.set hovered):
        * inspector/front-end/inspector.css:
        (li.selected .base-storage-tree-element-subtitle):
        (.base-storage-tree-element-subtitle):

2010-11-02  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed. Follow up to r71139: removing unused images.
        https://bugs.webkit.org/show_bug.cgi?id=48827

        * WebCore.gypi:
        * inspector/front-end/Images/grayConnectorPoint.png: Removed.
        * inspector/front-end/Images/whiteConnectorPoint.png: Removed.
        * inspector/front-end/WebKit.qrc:

2010-11-02  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: make properties and event listeners look consistent with the styles section.
        https://bugs.webkit.org/show_bug.cgi?id=48827

        * inspector/front-end/EventListenersSidebarPane.js:
        * inspector/front-end/PropertiesSection.js:
        (WebInspector.PropertiesSection):
        * inspector/front-end/PropertiesSidebarPane.js:
        (WebInspector.PropertiesSidebarPane.prototype.update.callback):
        (WebInspector.PropertiesSidebarPane.prototype.update):
        * inspector/front-end/inspector.css:
        (.events-pane .section:not(:nth-of-type(1))):
        (.event-bar:first-child):
        (.section .header):
        (.section .header::before):
        (.section.expanded .header::before):
        (.section .header .title, .event-bar .header .title):
        (.section .header .subtitle, .event-bar .header .subtitle):
        (.section.expanded .properties, .event-bar.expanded .event-properties):
        (.properties-tree):
        (.event-bar):
        (.event-bars .event-bar .header):
        (.event-bars .event-bar .header .title):
        (.event-bars .event-bar .header::before):

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

        Reviewed by Anders Carlsson.

        Remove unused methods and member variables from AutoTableLayout.

        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::AutoTableLayout): Removed initialization of m_percentagesDirty
        and m_totalPercent.
        (WebCore::AutoTableLayout::fullRecalc): Removed setting of m_percentagesDirty.
        (WebCore::AutoTableLayout::calcPercentages): Removed.
        * rendering/AutoTableLayout.h: Removed totalPercent(), m_percentagesDirty, and m_totalPercent.

2010-11-02  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: clear / hide timing information for cached resources.
        https://bugs.webkit.org/show_bug.cgi?id=48848

        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype.set cached):
        (WebInspector.Resource.prototype.get timing):
        (WebInspector.Resource.prototype.set timing):
        * inspector/front-end/ResourceManager.js:
        (WebInspector.ResourceManager.prototype.markResourceAsCached):

2010-11-02  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: improve network's 'preview close' usability.
        https://bugs.webkit.org/show_bug.cgi?id=48846

        * inspector/front-end/networkPanel.css:
        (#network-close-button:hover):
        (#network-close-button:active):

2010-11-02  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Image heights are displayed as 0.
        https://bugs.webkit.org/show_bug.cgi?id=40817

        * inspector/front-end/ImageView.js:
        (WebInspector.ImageView.prototype.contentTabSelected):
        (WebInspector.ImageView.prototype.contentTabSelected.onImageLoad):

 2010-10-31  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Texmap] [Qt] Texture mapper initial implementation
        https://bugs.webkit.org/show_bug.cgi?id=47070

        Some refactor for texmap to enable WebKit2: remove globals, and allow TextureMapper to exist without a GraphicsContext.
        This will allow rendering the TextureMapperNode tree without an active QPainter, into the current GL context.
        Most of the changes simply move the globas in TextureMapperGL into members of that class.

        No new tests. Old tests in LayoutTests/compositing cover this.

        * platform/graphics/opengl/TextureMapperGL.cpp:
        (WebCore::TextureMapperGLData::ShaderInfo::getUniformLocation):
        (WebCore::TextureMapperGLData::ShaderInfo::createShaderProgram):
        (WebCore::TextureMapperGLData::DirectlyCompositedImageRepository::findOrCreate):
        (WebCore::TextureMapperGLData::DirectlyCompositedImageRepository::deref):
        (WebCore::TextureMapperGLData::DirectlyCompositedImageRepository::DirectlyCompositedImageRepository):
        (WebCore::TextureMapperGLData::DirectlyCompositedImageRepository::~DirectlyCompositedImageRepository):
        (WebCore::TextureMapperGLData::TextureMapperGLData):
        (WebCore::TextureMapperGL::TextureMapperGL):
        (WebCore::TextureMapperGL::drawTexture):
        (WebCore::BitmapTextureGL::setContentsToImage):
        (WebCore::BitmapTextureGL::destroy):
        (WebCore::TextureMapperGL::~TextureMapperGL):
        (WebCore::TextureMapperGL::makeContextCurrent):
        (WebCore::TextureMapperGL::obtainCurrentContext):
        (WebCore::TextureMapperGL::bindSurface):
        (WebCore::TextureMapperGL::paintToTarget):
        (WebCore::TextureMapperGL::createTexture):
        * platform/graphics/opengl/TextureMapperGL.h:
        (WebCore::TextureMapperGL::data):
        * platform/graphics/qt/TextureMapperQt.cpp:
        (WebCore::TextureMapperQt::TextureMapperQt):
        (WebCore::TextureMapperQt::setGraphicsContext):
        (WebCore::TextureMapper::create):
        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::TextureMapperNode::paint):
        (WebCore::TextureMapperNode::uploadTextureFromContent):
        * platform/graphics/texmap/TextureMapper.h:
        (WebCore::TextureMapper::setGraphicsContext):
        (WebCore::TextureMapper::setImageInterpolationQuality):
        (WebCore::TextureMapper::setTextDrawingMode):
        (WebCore::TextureMapper::imageInterpolationQuality):
        (WebCore::TextureMapper::textDrawingMode):
        (WebCore::TextureMapper::TextureMapper):
        * platform/graphics/texmap/TextureMapperPlatformLayer.h:
        (WebCore::TextureMapperContentLayer::paint):

 2010-11-02  Adele Peterson  <adele@apple.com>

        Reviewed by Kent Tamura.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=48814
        <rdar://problem/8546143> Attempting to redo typing in apple.com/startpage search field causes infinite recursion in TextControlInnerTextElement::defaultEventHandler

        Test: editing/undo/redo-after-detach.html

        * rendering/TextControlInnerElements.cpp: (WebCore::TextControlInnerTextElement::defaultEventHandler):
        A TextControlInnerTextElement will almost always have a shadowAncestorNode, the HTMLInputElement.  In this case, 
        after the renderer was destroyed, this shadow node was kept alive by the EditCommand, even though its not hooked up 
        anymore to the shadow DOM.  EditCommands can sometimes operate on stale selections and are expected to fail silently.  
        So here we prevent the infinite loop during event dispatch, and the rest of the redo operation will fail silently.

2010-11-02  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        When animations are paused, play-state can cause them to be unpaused.
        https://bugs.webkit.org/show_bug.cgi?id=46525

        I Changed updatePlayState() to only unpause when both play-state is 
        "running" and not suspended. Likewise I pause animation when either
        play-state is "paused" or suspended.

        Test: animations/play-state-suspend.html

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::updatePlayState):

2010-11-02  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Adam Roben.

        Make RenderStyle::playState() return typed value and cleanup naming in Animation code
        https://bugs.webkit.org/show_bug.cgi?id=48844

        playState() function was returning unsigned value, but there is a EAnimPlayState
        enum type which has the legal playState values. This type is now used everywhere.
        I also changed the naming of the m_isSuspended to m_suspended to match the style
        elsewhere in the code.

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::updatePlayState):
        * page/animation/AnimationBase.h:
        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::clear):
        (WebCore::AnimationControllerPrivate::updateAnimationTimer):
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::updateKeyframeAnimations):
        (WebCore::CompositeAnimation::suspendAnimations):
        (WebCore::CompositeAnimation::resumeAnimations):
        * page/animation/CompositeAnimation.h:
        (WebCore::CompositeAnimation::suspended):
        (WebCore::CompositeAnimation::CompositeAnimation):
        * platform/animation/Animation.h:
        (WebCore::Animation::playState):
        (WebCore::Animation::setPlayState):
        (WebCore::Animation::initialAnimationPlayState):

2010-11-01  Zhenyao Mo  <zmo@google.com>

        Reviewed by Andreas Kling.

        vertexAttribPointer should generate INVALID_VALUE if the stride exceeds 255
        https://bugs.webkit.org/show_bug.cgi?id=48677

        Test: fast/canvas/webgl/gl-vertexattribpointer.html

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::vertexAttribPointer): Generate INVALID_VALUE if stride > 255.

2010-11-01  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [Soup] Random crashes in http/tests/websocket/tests/workers/worker-handshake-challenge-randomness.html
        https://bugs.webkit.org/show_bug.cgi?id=48805

        Track active WebSocket handles via a sequential id. This ensures
        that when a handle is reallocated into a recently used segment of
        memory, it doesn't trigger a false positive in the code which ensures
        the original handle is active.

        No new tests. This test should stop crashing on the bots, proving the fix.

        * platform/network/soup/SocketStreamHandle.h:
        (WebCore::SocketStreamHandle::id): Added an m_id member and accessor
        to SocketStreamHandle.
        * platform/network/soup/SocketStreamHandleSoup.cpp:
        (WebCore::getHandleFromId): Updated to work with HashMap of handle ids to
        SocketStreamHandle*.
        (WebCore::deactivateHandle): Ditto.
        (WebCore::activateHandle): Ditto.
        (WebCore::SocketStreamHandle::SocketStreamHandle): Ditto.
        (WebCore::SocketStreamHandle::connected): Ditto.
        (WebCore::SocketStreamHandle::readBytes): Ditto.
        (WebCore::SocketStreamHandle::beginWaitingForSocketWritability): Ditto.
        (WebCore::connectedCallback): Ditto.
        (WebCore::readReadyCallback): Ditto.
        (WebCore::writeReadyCallback): Ditto.

2010-11-02  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed trivial fix.

        * WebCore.pro: Remove inspector/InspectorResource.h after r71035.

2010-11-02  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: make xhr breakpoints editable
        https://bugs.webkit.org/show_bug.cgi?id=48830

        * inspector/front-end/BreakpointManager.js:
        (WebInspector.Breakpoint.prototype.set sourceText):
        (WebInspector.Breakpoint.prototype.click):
        (WebInspector.Breakpoint.prototype.populateLabelElement):
        (WebInspector.XHRBreakpoint.prototype.populateEditElement):
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.BreakpointsSidebarPane.prototype.addBreakpointItem):
        (WebInspector.BreakpointsSidebarPane.prototype._breakpointItemClicked):
        (WebInspector.BreakpointsSidebarPane.prototype._contextMenuEventFired):
        (WebInspector.BreakpointsSidebarPane.prototype._addListElement):
        (WebInspector.BreakpointsSidebarPane.prototype._removeListElement):
        (WebInspector.XHRBreakpointsSidebarPane.addButtonClicked):
        (WebInspector.XHRBreakpointsSidebarPane):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._startEditingBreakpoint):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._hideEditBreakpointDialog):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._breakpointItemClicked):
        (WebInspector.BreakpointItem):
        (WebInspector.BreakpointItem.prototype.get element):
        (WebInspector.BreakpointItem.prototype.click):
        (WebInspector.BreakpointItem.prototype.populateEditElement):
        (WebInspector.BreakpointItem.prototype.remove):
        (WebInspector.BreakpointItem.prototype._hitStateChanged):
        (WebInspector.BreakpointItem.prototype._labelChanged):
        (WebInspector.BreakpointItem.prototype._createLabelElement):
        * inspector/front-end/inspector.js:
        (WebInspector.createJSBreakpointsSidebarPane.breakpointAdded):
        (WebInspector.createJSBreakpointsSidebarPane):
        (WebInspector.createDOMBreakpointsSidebarPane.breakpointAdded):
        (WebInspector.createDOMBreakpointsSidebarPane):
        (WebInspector.createXHRBreakpointsSidebarPane.breakpointAdded):
        (WebInspector.createXHRBreakpointsSidebarPane):

2010-11-02  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: fix for breakpoints not restored on live edit bug
        https://bugs.webkit.org/show_bug.cgi?id=48833

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.debuggerPaused):
        * inspector/front-end/inspector.js:
        (WebInspector.pausedScript):

2010-11-02  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [REGRESSION] Rule addition/selector editing result in unusable rules
        https://bugs.webkit.org/show_bug.cgi?id=48826

        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleModel.prototype.setRuleSelector):
        (WebInspector.CSSStyleModel.prototype.addRule):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.BlankStylePropertiesSection.prototype.editingSelectorCommitted.successCallback):
        (WebInspector.BlankStylePropertiesSection.prototype.editingSelectorCommitted):

2010-11-02  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Don't include Objective-C sources in SOURCES

        * WebCore.pro:

2010-11-02  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: persist native breakpoints in localStorage
        https://bugs.webkit.org/show_bug.cgi?id=48711

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::disconnectFrontend):
        (WebCore::InspectorController::didCommitLoad):
        (WebCore::InspectorController::clearNativeBreakpoints):
        * inspector/InspectorController.h:
        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager):
        (WebInspector.DOMBreakpoint):
        (WebInspector.EventListenerBreakpoint):
        (WebInspector.EventListenerBreakpoint.eventNameForUI):
        (WebInspector.EventListenerBreakpoint.prototype._uiEventName):
        (WebInspector.XHRBreakpoint):
        (WebInspector.XHRBreakpoint.prototype.populateStatusMessageElement):
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.BreakpointsSidebarPane.prototype.addBreakpoint):
        (WebInspector.BreakpointsSidebarPane.prototype._breakpointHit):
        (WebInspector.BreakpointItem.prototype._hitStateChanged):
        (WebInspector.EventListenerBreakpointsSidebarPane):
        * inspector/front-end/ConsoleView.js:
        * inspector/front-end/EventListenersSidebarPane.js:
        * inspector/front-end/NetworkPanel.js:
        * inspector/front-end/Panel.js:
        * inspector/front-end/ResourceView.js:
        * inspector/front-end/ScriptsPanel.js:
        * inspector/front-end/Settings.js:
        (WebInspector.Settings):
        (WebInspector.Settings.prototype.inspectedURLChanged):
        (WebInspector.Settings.prototype._formatProjectKey):
        * inspector/front-end/StoragePanel.js:
        * inspector/front-end/StylesSidebarPane.js:
        * inspector/front-end/WatchExpressionsSidebarPane.js:
        * inspector/front-end/inspector.css:
        (.pane .breakpoint-hit):
        * inspector/front-end/inspector.js:
        (WebInspector.set currentPanel):
        (WebInspector.doLoadedDone.onPopulateScriptObjects):
        (WebInspector.doLoadedDone):
        (WebInspector.reset):
        (WebInspector.inspectedURLChanged):

2010-11-01  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Joseph Pecoraro.

        Web Inspector: use mimeType from cached resource
        in case response data contains none.
        https://bugs.webkit.org/show_bug.cgi?id=48773

        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::didReceiveResponse):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel.prototype._createTable):

2010-11-01  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [Extensions API] expose API to create properties watch sidebar panes
        https://bugs.webkit.org/show_bug.cgi?id=48761

        * inspector/front-end/ExtensionAPI.js:
        (WebInspector.injectedExtensionAPI.PanelImpl.prototype.createSidebarPane):
        (WebInspector.injectedExtensionAPI.PanelImpl.prototype.createWatchExpressionSidebarPane.callbackWrapper):
        (WebInspector.injectedExtensionAPI.PanelImpl.prototype.createWatchExpressionSidebarPane):
        (WebInspector.injectedExtensionAPI):
        (WebInspector.injectedExtensionAPI.WatchExpressionSidebarPaneImpl):
        (WebInspector.injectedExtensionAPI.WatchExpressionSidebarPaneImpl.prototype.setExpression):
        (WebInspector.injectedExtensionAPI.WatchExpressionSidebarPaneImpl.prototype.setObject):
        * inspector/front-end/ExtensionPanel.js: Added ExtensionWatchSidebarPane
        (WebInspector.ExtensionWatchSidebarPane):
        (WebInspector.ExtensionWatchSidebarPane.prototype.setObject):
        (WebInspector.ExtensionWatchSidebarPane.prototype.setExpression):
        (WebInspector.ExtensionWatchSidebarPane.prototype._onEvaluate):
        (WebInspector.ExtensionWatchSidebarPane.prototype._setObject):
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer):
        (WebInspector.ExtensionServer.prototype.notifyExtensionWatchSidebarUpdated):
        (WebInspector.ExtensionServer.prototype._onCreateSidebar):
        (WebInspector.ExtensionServer.prototype._onCreateWatchExpressionSidebarPane):
        (WebInspector.ExtensionServer.prototype._createSidebar):
        (WebInspector.ExtensionServer.prototype._onSetWatchSidebarContent):
        * inspector/front-end/InjectedScript.js:
        (injectedScriptConstructor.):
        * inspector/front-end/RemoteObject.js: Added a wrapper for local JSON object to simulate RemoteObject interface.
        (WebInspector.RemoteObject.fromLocalObject):
        (WebInspector.LocalJSONObject):
        (WebInspector.LocalJSONObject.prototype.get description):
        (WebInspector.LocalJSONObject.prototype.get type):
        (WebInspector.LocalJSONObject.prototype.get hasChildren):
        (WebInspector.LocalJSONObject.prototype.getOwnProperties):
        (WebInspector.LocalJSONObject.prototype.getProperties):
        (WebInspector.LocalJSONObject.prototype.isError):

2010-11-02  Ryuan Choi  <ryuan.choi@samsung.com>

        Unreviewed build fix for EFL build with libcurl

        [EFL] remove multiple definition with libcurl
        https://bugs.webkit.org/show_bug.cgi?id=48499

        Add macro to isolate setCookieStoragePrivateBrowsingEnabled from EFL
        build because it was duplicated.

        * platform/network/curl/CookieJarCurl.cpp:

2010-11-02  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Joseph Pecoraro.

        Web Inspector: highlight frame on hover in resources panel.
        https://bugs.webkit.org/show_bug.cgi?id=48760

        * inspector/Inspector.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::highlightFrame):
        * inspector/InspectorController.h:
        (WebCore::InspectorController::hideFrameHighlight):
        * inspector/front-end/StoragePanel.js:
        (WebInspector.StoragePanel):
        (WebInspector.StoragePanel.prototype.showView):
        (WebInspector.StoragePanel.prototype._onmousemove):
        (WebInspector.StoragePanel.prototype._onmouseout):
        (WebInspector.FrameTreeElement.prototype.onselect):
        (WebInspector.FrameTreeElement.prototype.ondeselect):
        (WebInspector.FrameTreeElement.prototype.set displayName):
        (WebInspector.FrameTreeElement.prototype.set hovered):
        * inspector/front-end/inspector.css:
        (.storage.panel .sidebar li.selected .selection):
        (.storage.panel .sidebar :focus li.selected .selection):
        (body.inactive .storage.panel .sidebar li.selected .selection):

2010-11-02  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Rob Buis.

        Convert SVGPreserveAspectRatio to the new SVGPropertyTearOff concept
        https://bugs.webkit.org/show_bug.cgi?id=48822

        Convert the next type to use the SVGPropertyTearOffConcept. Just SVGAnimatedTransformList/SVGTransform/SVGStringList are missing.

        Tests: svg/dom/SVGAnimatedPreserveAspectRatio.html
               svg/dom/SVGPreserveAspectRatio.html

        * GNUmakefile.am: Add SVGAnimatedPreserveAspectRatio.h to build.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * bindings/scripts/CodeGenerator.pm: Recognize SVGAnimatedPreserveAspectRatio as new style animated type.
        * bindings/scripts/CodeGeneratorJS.pm: Remove special SVGPreserveAspectRatio handling.
        * bindings/scripts/CodeGeneratorObjC.pm: Always include the type wrapped by SVGPropertyTearOff<> - this was missing before, and now become visible as missing include.
        * bindings/scripts/CodeGeneratorV8.pm: Remove special SVGPreserveAspectRatio handling.
        * svg/DeprecatedSVGAnimatedPropertyTraits.h: Remove SVGPreserveAspectRatio handling.
        * svg/DeprecatedSVGAnimatedTemplate.h: Ditto.
        * svg/SVGAnimatedPreserveAspectRatio.h: Added.
        * svg/SVGFEImageElement.h: s/DECLARE_ANIMATED_PROPERTY/DECLARE_ANIMATED_PROPERTY_NEW/ where SVGPreserveAspectRatio is used.
        * svg/SVGFitToViewBox.cpp:
        (WebCore::SVGFitToViewBox::viewBoxToViewTransform): SVGPreserveAspectRatio::getCTM doesn't need x/y parameters, they were not used anywhere, remove them.
        * svg/SVGFitToViewBox.h: Replace includes by class forwards.
        * svg/SVGImageElement.h: s/DECLARE_ANIMATED_PROPERTY/DECLARE_ANIMATED_PROPERTY_NEW/ where SVGPreserveAspectRatio is used.
        * svg/SVGLocatable.cpp: Add SVGNames.h include, to allow Qt to build (thanks ews!).
        * svg/SVGMarkerElement.h: Ditto.
        * svg/SVGPatternElement.h: Ditto.
        * svg/SVGPreserveAspectRatio.cpp: Modernize code, add error handling for align/meetOrSlice covered by the new tests.
        (WebCore::SVGPreserveAspectRatio::SVGPreserveAspectRatio):
        (WebCore::SVGPreserveAspectRatio::setAlign):
        (WebCore::SVGPreserveAspectRatio::setMeetOrSlice):
        (WebCore::SVGPreserveAspectRatio::parsePreserveAspectRatio):
        (WebCore::SVGPreserveAspectRatio::transformRect):
        (WebCore::SVGPreserveAspectRatio::getCTM):
        (WebCore::SVGPreserveAspectRatio::valueAsString):
        * svg/SVGPreserveAspectRatio.h: Reindented header.
        (WebCore::SVGPreserveAspectRatio::align): Inlined.
        (WebCore::SVGPreserveAspectRatio::meetOrSlice): Inlined.
        * svg/SVGPreserveAspectRatio.idl: Enable StrictTypeChecking for the align/meetOrSlice properties.
        * svg/SVGSVGElement.h: s/DECLARE_ANIMATED_PROPERTY/DECLARE_ANIMATED_PROPERTY_NEW/ where SVGPreserveAspectRatio is used.
        * svg/SVGStyledTransformableElement.h: Add SVGAnimatedPropertyMacros.h include, needed by efl to build (thanks ews!).
        * svg/SVGSymbolElement.h: Ditto.
        * svg/SVGViewElement.h: Ditto.
        * svg/SVGViewSpec.h: Ditto.

2010-11-01  MORITA Hajime  <morrita@google.com>

        Reviewed by Kent Tamura.

        @spellcheck attribute at the child of contentEditable node is ignored.
        https://bugs.webkit.org/show_bug.cgi?id=48418

        Changed to check spellcheck availability against a node under the
        selection (caret) instead of the focus. For shadow elements, the
        check now refers its host node.  Note that the original code didn't
        care shadows because focus is never set on them.
        
        Test: editing/spelling/spelling-attribute-at-child.html

        * dom/Element.h:
        * editing/Editor.cpp:
        (WebCore::Editor::markMisspellingsOrBadGrammar):
        (WebCore::Editor::isSpellCheckingEnabledFor): 
        (WebCore::Editor::isSpellCheckingEnabledInFocusedNode): Now just calling isSpellCheckingEnabledFor()
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges):
        * editing/Editor.h:
        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::populate):
        * rendering/TextControlInnerElements.cpp:
        (WebCore::TextControlInnerElement::isSpellCheckingEnabled): Added.
        * rendering/TextControlInnerElements.h:

2010-11-01  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Daniel Bates.

        [GTK] PopupMenuGtk has a very confusing if-else block
        https://bugs.webkit.org/show_bug.cgi?id=48816

        Small code cleanup for PopupMenuGtk.

        * platform/gtk/PopupMenuGtk.cpp:
        (WebCore::PopupMenuGtk::show):

2010-11-01  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        [Chromium] Add ICC support for PNG on Mac
        https://bugs.webkit.org/show_bug.cgi?id=48170

        This just pipes the ICC profile from libpng to CoreGraphics.  This
        patch would have been a lot prettier on Snow Leopard, but we have to
        use a somewhat ugly API to get this to work on Leopard.

        This is covered by about infinite tests.

        * platform/image-decoders/ImageDecoder.cpp:
        (WebCore::RGBA32Buffer::setColorProfile):
        * platform/image-decoders/ImageDecoder.h:
        * platform/image-decoders/cg/ImageDecoderCG.cpp:
        (WebCore::RGBA32Buffer::asNewNativeImage):
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageDecoder::headerAvailable):
        (WebCore::PNGImageDecoder::rowAvailable):
        * platform/image-decoders/qt/RGBA32BufferQt.cpp:
        (WebCore::RGBA32Buffer::setColorProfile):
        * platform/image-decoders/skia/ImageDecoderSkia.cpp:
        (WebCore::RGBA32Buffer::setColorProfile):

2010-11-01  Chang Shu  <chang.shu@nokia.com>

        Reviewed by Antonio Gomes.

        Leave SelectElement key handling without setting event default
        handled when the selection reaches the boundary so focus can 
        move to neighbor nodes in spatial navigation.
        https://bugs.webkit.org/show_bug.cgi?id=48145

        * dom/SelectElement.cpp:
        (WebCore::SelectElement::listBoxDefaultEventHandler):

2010-11-01  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r71080.
        http://trac.webkit.org/changeset/71080
        https://bugs.webkit.org/show_bug.cgi?id=48815

        This change caused many crashes on the debug bot. (Requested
        by mrobinson on #webkit).

        * platform/network/soup/SocketStreamHandle.h:
        * platform/network/soup/SocketStreamHandleSoup.cpp:
        (WebCore::isActiveHandle):
        (WebCore::deactivateHandle):
        (WebCore::SocketStreamHandle::SocketStreamHandle):
        (WebCore::SocketStreamHandle::connected):
        (WebCore::SocketStreamHandle::readBytes):
        (WebCore::SocketStreamHandle::beginWaitingForSocketWritability):
        (WebCore::connectedCallback):
        (WebCore::readReadyCallback):
        (WebCore::writeReadyCallback):

2010-11-01  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [Soup] Random crashes in http/tests/websocket/tests/workers/worker-handshake-challenge-randomness.html
        https://bugs.webkit.org/show_bug.cgi?id=48805

        Track active WebSocket handles via a sequential id. This ensures
        that when a handle is reallocated into a recently used segment of
        memory, it doesn't trigger a false positive in the code which ensures
        the original handle is active.

        No new tests. This test should stop crashing on the bots, proving the fix.

        * platform/network/soup/SocketStreamHandle.h:
        (WebCore::SocketStreamHandle::id): Added an m_id member and accessor
        to SocketStreamHandle.
        * platform/network/soup/SocketStreamHandleSoup.cpp:
        (WebCore::getHandleFromId): Updated to work with HashMap of handle ids to
        SocketStreamHandle*.
        (WebCore::deactivateHandle): Ditto.
        (WebCore::activateHandle): Ditto.
        (WebCore::SocketStreamHandle::SocketStreamHandle): Ditto.
        (WebCore::SocketStreamHandle::connected): Ditto.
        (WebCore::SocketStreamHandle::readBytes): Ditto.
        (WebCore::SocketStreamHandle::beginWaitingForSocketWritability): Ditto.
        (WebCore::connectedCallback): Ditto.
        (WebCore::readReadyCallback): Ditto.
        (WebCore::writeReadyCallback): Ditto.

2010-11-01  Kent Tamura  <tkent@chromium.org>

        Unreviewed. Run sort-Xcode-project-file.

        * WebCore.xcodeproj/project.pbxproj:

2010-11-01  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Assertion failure in FrameView::layout when clicking on a YouTube video on youtube.com front page
        https://bugs.webkit.org/show_bug.cgi?id=44287
        
        When removing subframes, it's possible for layout() to get called on a FrameView
        for a Frame that has been removed from the frame tree. This can happen if the parent
        document happens to do a layout() while RenderView still has a reference to the widget
        for the removed frame; updateWidgetPosition() will try to force a layout() on the 
        subframe.
        
        Fix by checking that the FrameView's Frame still has a reference to the page before
        calling layout() on the subframe.

        Test: fast/frames/layout-after-destruction.html

        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::updateWidgetPosition):

2010-11-01  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r71065.
        http://trac.webkit.org/changeset/71065
        https://bugs.webkit.org/show_bug.cgi?id=48801

        Seem to breake a lot of tests on Chromium bots (Requested by
        dimich on #webkit).

        * platform/image-decoders/ImageDecoder.cpp:
        * platform/image-decoders/ImageDecoder.h:
        * platform/image-decoders/cg/ImageDecoderCG.cpp:
        (WebCore::RGBA32Buffer::asNewNativeImage):
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageDecoder::headerAvailable):
        (WebCore::PNGImageDecoder::rowAvailable):
        * platform/image-decoders/qt/RGBA32BufferQt.cpp:
        * platform/image-decoders/skia/ImageDecoderSkia.cpp:

2010-11-01  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Simon Fraser.

        Setting attr repeatDur=0 on SVG element causes hang
        https://bugs.webkit.org/show_bug.cgi?id=48785

        Test: svg/animations/repeatDur-zero.xhtml

        * svg/animation/SVGSMILElement.cpp: Fixing bound checking for legal repeatDur values.

2010-10-31  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        [Chromium] Add ICC support for PNG on Mac
        https://bugs.webkit.org/show_bug.cgi?id=48170

        This just pipes the ICC profile from libpng to CoreGraphics.  This
        patch would have been a lot prettier on Snow Leopard, but we have to
        use a somewhat ugly API to get this to work on Leopard.

        This is covered by about infinite tests.

        * platform/image-decoders/ImageDecoder.cpp:
        (WebCore::RGBA32Buffer::setColorProfile):
        * platform/image-decoders/ImageDecoder.h:
        * platform/image-decoders/cg/ImageDecoderCG.cpp:
        (WebCore::RGBA32Buffer::asNewNativeImage):
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageDecoder::headerAvailable):
        (WebCore::PNGImageDecoder::rowAvailable):
        * platform/image-decoders/qt/RGBA32BufferQt.cpp:
        (WebCore::RGBA32Buffer::setColorProfile):
        * platform/image-decoders/skia/ImageDecoderSkia.cpp:
        (WebCore::RGBA32Buffer::setColorProfile):

2010-11-01  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=48776
        
        Change isVertical() on InlineBox to isHorizontal() instead.  This makes the horizontal code path come
        first if you branch on isHorizontal() and makes the code read better (since that's the more common code
        path).

        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::logicalHeight):
        * rendering/InlineBox.h:
        (WebCore::InlineBox::InlineBox):
        (WebCore::InlineBox::isHorizontal):
        (WebCore::InlineBox::setIsHorizontal):
        (WebCore::InlineBox::width):
        (WebCore::InlineBox::height):
        (WebCore::InlineBox::logicalLeft):
        (WebCore::InlineBox::setLogicalLeft):
        (WebCore::InlineBox::logicalTop):
        (WebCore::InlineBox::setLogicalTop):
        (WebCore::InlineBox::baselinePosition):
        (WebCore::InlineBox::lineHeight):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::addToLine):
        (WebCore::InlineFlowBox::placeBoxesInInlineDirection):
        (WebCore::InlineFlowBox::computeBlockDirectionOverflow):
        (WebCore::InlineFlowBox::paintFillLayer):
        (WebCore::InlineFlowBox::paintBoxDecorations):
        (WebCore::InlineFlowBox::paintMask):
        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::marginLogicalLeft):
        (WebCore::InlineFlowBox::marginLogicalRight):
        (WebCore::InlineFlowBox::borderLogicalLeft):
        (WebCore::InlineFlowBox::borderLogicalRight):
        (WebCore::InlineFlowBox::paddingLogicalLeft):
        (WebCore::InlineFlowBox::paddingLogicalRight):
        (WebCore::InlineFlowBox::setInlineDirectionOverflowPositions):
        (WebCore::InlineFlowBox::setBlockDirectionOverflowPositions):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::selectionRect):
        (WebCore::InlineTextBox::applyShadowToGraphicsContext):
        (WebCore::paintTextWithShadows):
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::paintDecoration):
        * rendering/InlineTextBox.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::createLineBoxes):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::blockDirectionOverflow):
        * rendering/RenderBox.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::hitTest):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::RootInlineBox):
        (WebCore::RootInlineBox::placeEllipsis):
        * rendering/RootInlineBox.h:
        (WebCore::RootInlineBox::baselinePosition):
        (WebCore::RootInlineBox::lineHeight):

2010-11-01  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt.

        Multiple background properties are not retrievable via DOM method getComputedStyle
        https://bugs.webkit.org/show_bug.cgi?id=23203
        
        Return lists of values from getComputedStyle() for multiple backgrounds,
        and multiple masks.

        Test: fast/backgrounds/multiple-backgrounds-computed-style.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::fillSizeToCSSValue):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):

2010-11-01  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

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

        Make repaint invalidation work with vertical lines.  Rewrite linesBoundingBox for RenderText and
        RenderInline to give the correct rectangle back for vertical lines.  Also patch linesVisibleOverflowBoundingBox
        to give back the correct rectangle for vertical lines.

        Fix bugs in the overflow accessors of InlineFlowBox when m_overflow was 0.
        
        Patch hit testing to also account for "rt" and "bt" blocks.

        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::adjustForFlippedBlocksWritingMode):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::nodeAtPoint):
        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::logicalLeftVisibleOverflow):
        (WebCore::InlineFlowBox::logicalRightVisibleOverflow):
        (WebCore::InlineFlowBox::bottomLayoutOverflow):
        (WebCore::InlineFlowBox::rightLayoutOverflow):
        (WebCore::InlineFlowBox::bottomVisualOverflow):
        (WebCore::InlineFlowBox::rightVisualOverflow):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::nodeAtPoint):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::hitTestFloats):
        (WebCore::RenderBlock::hitTestContents):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeRectForRepaint):
        (WebCore::RenderBox::adjustForFlippedBlocksWritingMode):
        * rendering/RenderBox.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::linesBoundingBox):
        (WebCore::RenderInline::linesVisibleOverflowBoundingBox):
        (WebCore::RenderInline::clippedOverflowRectForRepaint):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::linesBoundingBox):

2010-11-01  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders Carlsson.

        <rdar://problem/7660547> and https://bugs.webkit.org/show_bug.cgi?id=48699
        Context menu support for WebKit 2.

        Add a "showContextMenu" call to Chrome/ChromeClient:
        * loader/EmptyClients.h:
        (WebCore::EmptyChromeClient::showContextMenu):
        * page/Chrome.cpp:
        (WebCore::Chrome::showContextMenu):
        * page/Chrome.h:
        * page/ChromeClient.h:

        Add a "platform description to ContextMenuItem" creator, will be needed by WebKit2
        * platform/ContextMenu.h:
        * platform/mac/ContextMenuMac.mm:
        (WebCore::contextMenuItemVector):

        * platform/mac/ContextMenuItemMac.mm:
        (WebCore::ContextMenuItem::checked): WebKit2 ports now need this implemented.

        Stub these out to keep their WK2 ports building:
        * platform/qt/ContextMenuItemQt.cpp:
        (WebCore::ContextMenuItem::checked):
        * platform/qt/ContextMenuQt.cpp:
        (WebCore::contextMenuItemVector):
        * platform/win/ContextMenuItemWin.cpp:
        (WebCore::ContextMenuItem::checked):
        * platform/win/ContextMenuWin.cpp:
        (WebCore::contextMenuItemVector):

2010-11-01  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Adam Roben.

        Seeking by very small increment doesn't generate 'seeked' event
        https://bugs.webkit.org/show_bug.cgi?id=48530

        Test: media/video-seek-by-small-increment.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::seek): Ask the media engine for its closest time value so we can
        avoid asking it to seek to the current time.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::mediaTimeForTimeValue): New.
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::mediaTimeForTimeValue): Ditto.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::mediaTimeForTimeValue): Return the closest value in the movie's time scale.

        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::mediaTimeForTimeValue): Ditto
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.h:

        * platform/graphics/win/QTMovie.cpp:
        (QTMovie::timeScale): Return the movie's time scale.
        * platform/graphics/win/QTMovie.h:

2010-11-01  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: Chromium build fix. Adding missing transitive dependency.

        * inspector/InspectorResourceAgent.cpp:

2010-11-01  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed. Removing references to removed file from project files.

        * WebCore.gypi:
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.css:

2010-11-01  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: remove old resources panel.
        https://bugs.webkit.org/show_bug.cgi?id=45657

        * CMakeLists.txt:
        * English.lproj/localizedStrings.js:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSInjectedScriptHostCustom.cpp:
        * inspector/InjectedScriptHost.cpp:
        * inspector/Inspector.idl:
        * inspector/InspectorCSSStore.cpp:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::~InspectorController):
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::releaseFrontendLifetimeAgents):
        (WebCore::InspectorController::populateScriptObjects):
        (WebCore::InspectorController::unbindAllResources):
        (WebCore::InspectorController::didCommitLoad):
        (WebCore::InspectorController::frameDetachedFromParent):
        (WebCore::InspectorController::didLoadResourceFromMemoryCache):
        (WebCore::InspectorController::identifierForInitialRequest):
        (WebCore::InspectorController::willSendRequest):
        (WebCore::InspectorController::markResourceAsCached):
        (WebCore::InspectorController::didReceiveResponse):
        (WebCore::InspectorController::didReceiveContentLength):
        (WebCore::InspectorController::didFinishLoading):
        (WebCore::InspectorController::didFailLoading):
        (WebCore::InspectorController::resourceRetrievedByXMLHttpRequest):
        (WebCore::InspectorController::scriptImported):
        (WebCore::InspectorController::didCreateWebSocket):
        (WebCore::InspectorController::willSendWebSocketHandshakeRequest):
        (WebCore::InspectorController::didReceiveWebSocketHandshakeResponse):
        (WebCore::InspectorController::didCloseWebSocket):
        * inspector/InspectorController.h:
        * inspector/InspectorFrontendHost.cpp:
        * inspector/InspectorResource.cpp: Removed.
        * inspector/InspectorResource.h: Removed.
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::setOverrideContent):
        * inspector/InspectorResourceAgent.h:
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.addMessage):
        (WebInspector.ConsoleView.prototype.clearMessages):
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._onRevealAndSelectResource):
        * inspector/front-end/Images/resourcesSilhouette.png: Removed.
        * inspector/front-end/Resource.js:
        * inspector/front-end/ResourceManager.js:
        (WebInspector.ResourceManager.getContent):
        * inspector/front-end/ResourcesPanel.js: Removed.
        * inspector/front-end/Settings.js:
        * inspector/front-end/StoragePanel.js:
        (WebInspector.StoragePanel):
        (WebInspector.StoragePanel.prototype.get toolbarItemLabel):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        (WebInspector._createPanels):
        (WebInspector.get networkResources):
        (WebInspector.forAllResources):
        (WebInspector.resourceForURL):
        (WebInspector.doLoadedDone.populateInspectorState):
        (WebInspector.openResource):
        (WebInspector.domContentEventFired):
        (WebInspector.loadEventFired):
        (WebInspector.reset):
        (WebInspector._choosePanelToShowSourceLine):

2010-10-28  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        Fix enum naming style violation in GraphicsContext3D
        https://bugs.webkit.org/show_bug.cgi?id=48441

        * platform/graphics/GraphicsContext3D.cpp:
        (WebCore::GraphicsContext3D::extractImageData):
        (WebCore::GraphicsContext3D::extractTextureData):
        (WebCore::doPacking):
        (WebCore::GraphicsContext3D::packPixels):
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/cg/GraphicsContext3DCG.cpp:
        (WebCore::getSourceDataFormat):
        (WebCore::GraphicsContext3D::getImageData):
        * platform/graphics/skia/GraphicsContext3DSkia.cpp:
        (WebCore::GraphicsContext3D::getImageData):

2010-11-01  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Pasting markup into Thunderbird compose window produces no text
        https://bugs.webkit.org/show_bug.cgi?id=43737

        Include a content-type meta tag prefix on all clipboard markup. Programs like
        Thunderbird expect this meta tag and will not paste anything unless it is there.

        This is covered by changes to WebKit/gtk/tests/testcopyandpaste.c. This patch was
        written in such a way as to not affect layout test results, otherwise there
        would be many new GTK+-specific results that say "FAIL").

        * platform/gtk/PasteboardHelper.cpp:
        (WebCore::removeMarkupPrefix): Added this helper which removes the prefix
        when found on incoming clipboard and drag-and-drop text.
        (WebCore::PasteboardHelper::getClipboardContents): Remove the meta tag prefix.
        (WebCore::PasteboardHelper::fillSelectionData): Add the meta tag prefix.
        (WebCore::PasteboardHelper::fillDataObjectFromDropData): Remove the meta tag prefix

2010-11-01  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Dirk Schulze.

        Check for NULL node in SVGUseElement::associateInstancesWithShadowTreeElements loop
        https://bugs.webkit.org/show_bug.cgi?id=48741

        Test: svg/custom/use-on-use-with-child-and-empty-target.svg

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

2010-11-01  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Martin Robinson.

        [Gtk] AtkHyperlink needs to be implemented
        https://bugs.webkit.org/show_bug.cgi?id=33785

        Implemented the AtkHyperlink/AtkHypertext stuff in the GTK port.

        Even thought these kind of tasks are usually about implementing an
        interface, in this case it was needed to implement some more
        things due to the fact that AtkHyperlink is neither an interface
        nor an AtkObject, but just an abstract class child of GObject that
        needs to be redefined in a specific subclass of that one. On top
        of that, it was needed to implement the AtkAction interface as
        well for that new class, so exposed hyperlinks can work as
        expected with Assistive Technologies based on ATK.

        Furthermore, as there's no mechanism to get an instance of that
        AtkHyperlink other than doing it through an AtkObject implementing
        the AtkHypertext interface, it was needed to also add the code to
        implement that one, so it makes possible to ask for the
        'hyperlinks' under an 'hypertext' accessible object.

        Finally, to complete the implementation of all this stuff and make
        it all consistent, it was needed as well to implement the
        AtkHyperlinkImpl interface (providing just one method only) so
        that allows retrieving the AtkHyperlink object associated to an
        AtkObject implementing such an interface.

        * GNUmakefile.am: Add the new WebKitAccessibleHyperlink.[h|cpp]
        files to the sources list for the GTK port.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (core): New function to return the core accessibility object
        related to an AtkObject implementing the AtkHypertext interface.
        (webkitAccessibleHypertextGetLink): New, part of the
        implementation of the AtkHypertext interface.
        (webkitAccessibleHypertextGetNLinks): New, likewise.
        (webkitAccessibleHypertextGetLinkIndex): New, likewise.
        (atkHypertextInterfaceInit): New, initialize the AtkHypertext
        interface.
        (webkitAccessibleHyperlinkImplGetHyperlink): New, part of the
        implementation of the AtkHyperlinkImpl interface.
        (atkHyperlinkImplInterfaceInit): New, initialize the
        AtkHyperlinkImpl interface.
        (GetAtkInterfaceTypeFromWAIType): Add ATK_TYPE_HYPERTEXT and
        ATK_TYPE_HYPERLINK_IMPL to the list of recognized types.
        (getInterfaceMaskFromObject): Decide when it's needed to add
        WAI_HYPERTEXT and WAI_HYPERLINK to the interface mask.

        * accessibility/gtk/WebKitAccessibleHyperlink.h: Added.
        * accessibility/gtk/WebKitAccessibleHyperlink.cpp: Added.
        (returnString): Return (const char*) from String variables.
        (core): Return the associated AccessibilityObject.
        (webkitAccessibleHyperlinkActionDoAction): Part of the
        implementation of the AtkAction interface.
        (webkitAccessibleHyperlinkActionGetNActions): Likewise.
        (webkitAccessibleHyperlinkActionGetDescription): Likewise.
        (webkitAccessibleHyperlinkActionGetKeybinding): Likewise.
        (webkitAccessibleHyperlinkActionGetName): Likewise.
        (atkActionInterfaceInit): Initialize the AtkAction interface.
        (getRangeLengthForObject): Returns the length for a given Range,
        considering special cases (e.g. List item markers).
        (webkitAccessibleHyperlinkGetURI): Implementation of one of the
        methods in the AtkHyperlink abstract class.
        (webkitAccessibleHyperlinkGetObject): Likewise.
        (webkitAccessibleHyperlinkGetStartIndex): Likewise.
        (webkitAccessibleHyperlinkGetEndIndex): Likewise.
        (webkitAccessibleHyperlinkIsValid): Likewise.
        (webkitAccessibleHyperlinkGetNAnchors): Likewise.
        (webkitAccessibleHyperlinkIsSelectedLink): Likewise.
        (webkitAccessibleHyperlinkGetProperty): Getter method.
        (webkitAccessibleHyperlinkSetProperty): Setter method.
        (webkitAccessibleHyperlinkFinalize): Finalize method.
        (webkitAccessibleHyperlinkClassInit): Initialize the
        WebKitAccessibleHyperlink class.
        (webkitAccessibleHyperlinkInit): Initialize the
        WebKitAccessibleHyperlink instance.
        (webkitAccessibleHyperlinkGetType): Implementation of the
        get_type() function for the WebKitAccessibleHyperlink class.
        (webkitAccessibleHyperlinkNew): Returns an instance of the class
        associated to a given AtkHyperlinkImpl object.
        (webkitAccessibleHyperlinkGetAccessibilityObject): Public function
        returning the AccessibilityObject associated to the instance of
        the WebKitAccessibleHyperlink class.

2010-11-01  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: simplify inspector styles test to make all bots happy.
        (drive-by fix for overriden inspector styles in network panel).

        * inspector/InspectorController.h:
        * inspector/front-end/networkPanel.css:

2010-11-01  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Rob Buis.

        Enable StrictTypeChecking for all types using SVG(Animated)PropertyTearOff
        https://bugs.webkit.org/show_bug.cgi?id=48715

        Enable StrictTypeChecking for all readwrite attributes and function calls of all types using the new SVG(Animated)PropertyTearOff concept.
        Also enable RequiresAllArguments=Raise for all function calls of these new types. Cover this functionality by tests for each of them.

        When testing SVGLength it became obvious that quite a lot of functionality was missing.
        Conversion from relative arguments (percentage, ems, exs) to user specified units was missing, added that functionality and tested it.
        User units to pt conversion was wrong, fixed that.

        Tests: svg/dom/SVGAnimatedAngle.html
               svg/dom/SVGAnimatedBoolean.html
               svg/dom/SVGAnimatedEnumeration.html
               svg/dom/SVGAnimatedInteger.html
               svg/dom/SVGAnimatedLength.html
               svg/dom/SVGAnimatedLengthList.html
               svg/dom/SVGAnimatedRect.html
               svg/dom/SVGLength-px-with-context.html
               svg/dom/SVGLength-px.html
               svg/dom/SVGLength.html

        * bindings/js/JSSVGLengthCustom.cpp: These SVGLength methods now take an ExceptionCode parameter, adapt to that. 
        (WebCore::JSSVGLength::value):
        (WebCore::JSSVGLength::setValue):
        (WebCore::JSSVGLength::convertToSpecifiedUnits):
        * bindings/scripts/CodeGeneratorObjC.pm: Remove FIXMEs, pass real context instead off null pointer. DOMSVGLength::value is functional now.
        * bindings/v8/custom/V8SVGLengthCustom.cpp: These SVGLength methods now take an ExceptionCode parameter, adapt to that.
        (WebCore::V8SVGLength::valueAccessorGetter):
        (WebCore::V8SVGLength::valueAccessorSetter):
        (WebCore::V8SVGLength::convertToSpecifiedUnitsCallback):
        * rendering/style/SVGRenderStyle.h: Adapt to SVGLength API changes.
        (WebCore::SVGRenderStyle::initialBaselineShiftValue):
        (WebCore::SVGRenderStyle::initialKerning):
        (WebCore::SVGRenderStyle::initialStrokeDashOffset):
        (WebCore::SVGRenderStyle::initialStrokeWidth):
        * svg/SVGAngle.idl: Add StrictTypeChecking, RequiresAllArguments=Raise to all methods.
        * svg/SVGAnimatedBoolean.idl: Remove StrictTypeChecking from animVal, it's readonly so this is useless.
        * svg/SVGAnimatedEnumeration.idl: Add StrictTypeChecking to all attributes.
        * svg/SVGAnimatedInteger.idl: Ditto.
        * svg/SVGLength.cpp: Implement all missing features of SVGLength. Conform to our style guide (s/.0f// etc)
        (WebCore::lengthTypeToString):
        (WebCore::SVGLength::SVGLength):
        (WebCore::SVGLength::value): Throw NOT_SUPPORTED_ERR when trying to obtain to relative units, when no context is given (SVGLength created by createSVGLength()).
        (WebCore::SVGLength::setValue): Ditto, for the setter.
        (WebCore::SVGLength::valueAsPercentage): Use m_valueInSpecifiedUnits instead of valueInSpecifiedUnits().
        (WebCore::SVGLength::setValueAsString): Throw SYNTAX_ERR if parsing failed.
        (WebCore::SVGLength::valueAsString): Use makeString() instead of String and operator+.
        (WebCore::SVGLength::newValueSpecifiedUnits): Add ExceptionCode parameter, throw NOT_SUPPORTED_ERR, if the given unit type is invalid.
        (WebCore::SVGLength::convertToSpecifiedUnits): Ditto.
        (WebCore::SVGLength::determineViewport): Added helper function used by convertValue*Percentage*.
        (WebCore::SVGLength::convertValueFromUserUnitsToPercentage): Add new helper functions, used by value/setValue.
        (WebCore::SVGLength::convertValueFromPercentageToUserUnits): Ditto.
        (WebCore::SVGLength::convertValueFromUserUnitsToEMS): Ditto.
        (WebCore::SVGLength::convertValueFromEMSToUserUnits): Ditto.
        (WebCore::SVGLength::convertValueFromUserUnitsToEXS): Ditto.
        (WebCore::SVGLength::convertValueFromEXSToUserUnits): Ditto.
        (WebCore::SVGLength::fromCSSPrimitiveValue): Adapt to newValueSpecifiedUnits API change.
        (WebCore::SVGLength::toCSSPrimitiveValue): Remove default switch case.
        * svg/SVGLength.h:
        (WebCore::SVGLength::valueInSpecifiedUnits): Inlined.
        (WebCore::SVGLength::setValueInSpecifiedUnits): Ditto.
        (WebCore::SVGLength::isRelative):
        * svg/SVGLength.idl: Add StrictTypeChecking for all attributes/functions and RequiresAllArguments=Raise for all functions.
        * svg/SVGLengthList.cpp: Adapt to SVGLength API changes.
        (WebCore::SVGLengthList::parse):

2010-10-31  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: unhide new network and resources panels.
        https://bugs.webkit.org/show_bug.cgi?id=48725

        * English.lproj/localizedStrings.js:
        * inspector/InspectorController.h:
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel):
        * inspector/front-end/Settings.js:
        * inspector/front-end/StoragePanel.js:
        (WebInspector.StoragePanel):
        (WebInspector.StoragePanel.prototype.reset):
        (WebInspector.StoragePanel.prototype.addResourceToFrame):
        (WebInspector.StoragePanel.prototype.addDocumentURL):
        (WebInspector.StoragePanel.prototype.showFileSystem):
        (WebInspector.FileSystemTreeElement):
        (WebInspector.FileSystemTreeElement.prototype.get itemURL):
        (WebInspector.FileSystemTreeElement.prototype.onselect):
        * inspector/front-end/inspector.js:
        (WebInspector.updateResource):
        * inspector/front-end/networkPanel.css:
        (#network-close-button):
        (.network.panel.viewing-resource #network-close-button):

2010-10-26  MORITA Hajime  <morrita@google.com>

        Reviewed by Kent Tamura.

        Refactoring: Spellchecking related static functions could form a class
        https://bugs.webkit.org/show_bug.cgi?id=48287

        Extracted spellcheck related static functions to TextCheckingHelper class,
        which has EditorClient and Range as its member.
        
        No new tests. Just a refactoring.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * editing/EditingAllInOne.cpp
        * editing/Editor.cpp:
        (WebCore::Editor::advanceToNextMisspelling):
        (WebCore::Editor::isSelectionUngrammatical):
        (WebCore::Editor::guessesForUngrammaticalSelection):
        (WebCore::Editor::guessesForMisspelledOrUngrammaticalSelection):
        (WebCore::Editor::markMisspellingsAfterTypingToPosition):
        (WebCore::Editor::markMisspellingsOrBadGrammar):
        (WebCore::Editor::markMisspellings):
        (WebCore::Editor::markBadGrammar):
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges):
        (WebCore::Editor::changeBackToReplacedString):
        * editing/Editor.h:
        * editing/TextCheckingHelper.cpp: Added.
        (WebCore::TextCheckingHelper::TextCheckingHelper):
        (WebCore::TextCheckingHelper::~TextCheckingHelper):
        (WebCore::TextCheckingHelper::paragraphAlignedRange):
        (WebCore::TextCheckingHelper::findFirstMisspelling):
        (WebCore::TextCheckingHelper::findFirstMisspellingOrBadGrammar):
        (WebCore::TextCheckingHelper::findFirstGrammarDetail):
        (WebCore::TextCheckingHelper::findFirstBadGrammar):
        (WebCore::TextCheckingHelper::isUngrammatical):
        (WebCore::TextCheckingHelper::guessesForMisspelledOrUngrammaticalRange):
        (WebCore::TextCheckingHelper::markAllMisspellings):
        (WebCore::TextCheckingHelper::markAllBadGrammar):
        * editing/TextCheckingHelper.h: Added.

2010-10-31  Xan Lopez  <xlopez@igalia.com>

        Try to fix the GTK+ build.

        Do not use broken/deprecated functions that won't be available
        with G_DISABLE_DEPRECATED (used in debug builds).

        * plugins/gtk/PluginPackageGtk.cpp:
        (WebCore::PluginPackage::fetchInfo):

2010-10-31  Kenichi Ishibashi  <bashi@google.com>

        Reviewed by Adam Barth.

        V8 binding for DOMSettableTokenList
        https://bugs.webkit.org/show_bug.cgi?id=47812

        Tests for this change will be included in the change for supporting
        the <output> element.
        See https://bugs.webkit.org/show_bug.cgi?id=29363.

        * bindings/v8/custom/V8DOMSettableTokenListCustom.cpp: Implemented.
        (WebCore::V8DOMSettableTokenList::indexedPropertyGetter): Just calls DOMSettableTokenList::item(index).

2010-10-31  Robert Hogan  <robert@webkit.org>

        Reviewed by Antonio Gomes.

        [Qt] [Gtk] Plug-ins having upper case in mime type are failing to load

        Qt and Gtk are case-sensitive when storing the declared mime-type
        of plugins. Since plugin mime-types are lowercased prior to searching
        for them in the plugin database, ensure they are loaded with the
        mime-type in lower case too.

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

        * plugins/gtk/PluginPackageGtk.cpp:
        (WebCore::PluginPackage::fetchInfo):
        * plugins/qt/PluginPackageQt.cpp:
        (WebCore::PluginPackage::setMIMEDescription):

2010-10-31  Robert Hogan  <robert@webkit.org>

        Reviewed by Antonio Gomes.

        [Qt] Support nodesFromRect in DRT

        Pass a Document object as a QWebElement. 

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

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

2010-10-31  Peter Kasting  <pkasting@google.com>

        Reviewed by Adam Barth.

        Treat GIFs with no loop count as "loop once".
        https://bugs.webkit.org/show_bug.cgi?id=47302

        Test: fast/images/gif-loop-count.html

        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::repetitionCount):
        (WebCore::GIFImageDecoder::gifComplete):

2010-10-31  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Andreas Kling.

        [Texmap] [Qt] Texture mapper initial implementation
        https://bugs.webkit.org/show_bug.cgi?id=47070

        Build fix for X11.

        No new tests; build fix.

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

2010-10-31  Andreas Kling  <kling@webkit.org>

        Reviewed by Dirk Schulze.

        Remove the unused GraphicsContext::clipOutEllipseInRect(IntRect)
        https://bugs.webkit.org/show_bug.cgi?id=48727

        This function was added in <http://trac.webkit.org/changeset/18654> for CSS3 box-shadows.
        All use of the function was removed in <http://trac.webkit.org/changeset/21601>

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        * platform/graphics/haiku/GraphicsContextHaiku.cpp:
        (WebCore::GraphicsContext::clipOut):
        * platform/graphics/openvg/GraphicsContextOpenVG.cpp:
        * platform/graphics/qt/GraphicsContextQt.cpp:
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::clipOut):
        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        * platform/graphics/wx/GraphicsContextWx.cpp:

2010-10-31  Andreas Kling  <kling@webkit.org>

        Reviewed by Dirk Schulze.

        [Qt] Respect the "antialiased" argument in clipConvexPolygon()
        https://bugs.webkit.org/show_bug.cgi?id=48734

        Set (or unset) the QPainter::Antialiased render hint for antialiased
        clipping based on the "antialiased" argument.

        No test since Qt doesn't have pixel tests yet.

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

2010-10-31  Andreas Kling  <kling@webkit.org>

        Reviewed by Dirk Schulze.

        Remove the unused GraphicsContext::strokeRect(FloatRect)
        https://bugs.webkit.org/show_bug.cgi?id=48726

        This function was only implemented by GraphicsContextOpenVG and not
        called from anywhere.

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/openvg/GraphicsContextOpenVG.cpp:

2010-10-31  Andreas Kling  <kling@webkit.org>

        Reviewed by Dirk Schulze.

        Remove the unused GraphicsContext::origin()
        https://bugs.webkit.org/show_bug.cgi?id=48732

        This method was not called from anywhere.

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        * platform/graphics/haiku/GraphicsContextHaiku.cpp:
        * platform/graphics/openvg/GraphicsContextOpenVG.cpp:
        * platform/graphics/qt/GraphicsContextQt.cpp:
        * platform/graphics/wince/GraphicsContextWinCE.cpp:

2010-10-31  Andreas Kling  <kling@webkit.org>

        Reviewed by Dirk Schulze.

        [Qt] Remove GraphicsContext::pen()
        https://bugs.webkit.org/show_bug.cgi?id=48733

        Have PathQt obtain the pen() through the platformContext() instead.

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/qt/GraphicsContextQt.cpp:
        * platform/graphics/qt/PathQt.cpp:
        (WebCore::Path::strokeContains):
        (WebCore::Path::strokeBoundingRect):

2010-10-31  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r70959.
        http://trac.webkit.org/changeset/70959
        https://bugs.webkit.org/show_bug.cgi?id=48731

        It broke fast/events/spatial-navigation tests (Requested by
        Ossy on #webkit).

        * WebCore.xcodeproj/project.pbxproj:
        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::adjustForFlippedBlocksWritingMode):
        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::bottomLayoutOverflow):
        (WebCore::InlineFlowBox::rightLayoutOverflow):
        (WebCore::InlineFlowBox::bottomVisualOverflow):
        (WebCore::InlineFlowBox::rightVisualOverflow):
        * rendering/RenderBox.cpp:
        * rendering/RenderBox.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::linesBoundingBox):
        (WebCore::RenderInline::linesVisibleOverflowBoundingBox):
        (WebCore::RenderInline::clippedOverflowRectForRepaint):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::linesBoundingBox):

2010-10-30  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: new resources and network panel usability improvements.
        https://bugs.webkit.org/show_bug.cgi?id=48680

        By default, navigation clears network log, added 'preserve log' button,
        that prevents log from being cleared.

        Storing expanded state of all group items, restoring last selected item,
        fall back to main frame's main resource by default.
        Do not list XHRs and redirects in resources.

        * English.lproj/localizedStrings.js:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::didLoadResourceFromMemoryCache):
        (WebCore::InspectorController::identifierForInitialRequest):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel.prototype.get statusBarItems):
        (WebInspector.NetworkPanel.prototype._positionSummaryBar):
        (WebInspector.NetworkPanel.prototype._updateFilter):
        (WebInspector.NetworkPanel.prototype._createStatusbarButtons):
        (WebInspector.NetworkPanel.prototype._onPreserveLogClicked):
        (WebInspector.NetworkPanel.prototype.reset):
        (WebInspector.NetworkPanel.prototype.refreshResource):
        * inspector/front-end/ResourceManager.js:
        (WebInspector.ResourceManager.prototype.identifierForInitialRequest):
        (WebInspector.ResourceManager.prototype.willSendRequest):
        (WebInspector.ResourceManager.prototype.didLoadResourceFromMemoryCache):
        (WebInspector.ResourceManager.prototype.setOverrideContent):
        (WebInspector.ResourceManager.prototype.didCreateWebSocket):
        * inspector/front-end/StoragePanel.js:
        (WebInspector.StoragePanel):
        (WebInspector.StoragePanel.prototype.show):
        (WebInspector.StoragePanel.prototype._initDefaultSelection):
        (WebInspector.StoragePanel.prototype.reset):
        (WebInspector.StoragePanel.prototype.addResourceToFrame):
        (WebInspector.StoragePanel.prototype.refreshResource):
        (WebInspector.StoragePanel.prototype.showDatabase):
        (WebInspector.BaseStorageTreeElement.prototype.onselect):
        (WebInspector.StorageCategoryTreeElement):
        (WebInspector.StorageCategoryTreeElement.prototype.get itemURL):
        (WebInspector.StorageCategoryTreeElement.prototype.onselect):
        (WebInspector.StorageCategoryTreeElement.prototype.onattach):
        (WebInspector.StorageCategoryTreeElement.prototype.onexpand):
        (WebInspector.StorageCategoryTreeElement.prototype.oncollapse):
        (WebInspector.FrameTreeElement.prototype.get itemURL):
        (WebInspector.FrameTreeElement.prototype.onselect):
        (WebInspector.FrameResourceTreeElement.prototype.get itemURL):
        (WebInspector.FrameResourceTreeElement.prototype.onselect):
        (WebInspector.DatabaseTreeElement.prototype.get itemURL):
        (WebInspector.DatabaseTreeElement.prototype.onselect):
        (WebInspector.DatabaseTableTreeElement.prototype.get itemURL):
        (WebInspector.DatabaseTableTreeElement.prototype.onselect):
        (WebInspector.DOMStorageTreeElement.prototype.get itemURL):
        (WebInspector.DOMStorageTreeElement.prototype.onselect):
        (WebInspector.CookieTreeElement.prototype.get itemURL):
        (WebInspector.CookieTreeElement.prototype.onselect):
        (WebInspector.ApplicationCacheTreeElement.prototype.get itemURL):
        (WebInspector.ApplicationCacheTreeElement.prototype.onselect):

2010-10-30  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed, build fix after r70846.

        * platform/graphics/wince/ImageWinCE.cpp:
        (WebCore::RGBA32Buffer::asNewNativeImage):

2010-10-30  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, rolling out r70984.
        http://trac.webkit.org/changeset/70984
        https://bugs.webkit.org/show_bug.cgi?id=46015

        Made media/audio-delete-while-slider-thumb-clicked.html crash.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/ContainerNode.cpp:
        (WebCore::notifyChildInserted):
        * dom/EventContext.cpp: Removed.
        * dom/EventContext.h: Removed.
        * dom/Node.cpp:
        (WebCore::Node::markAncestorsWithChildNeedsStyleRecalc):
        (WebCore::Node::createRendererIfNeeded):
        (WebCore::Node::eventParentNode):
        (WebCore::Node::enclosingLinkEventParentOrSelf):
        (WebCore::eventTargetAsSVGElementInstance):
        (WebCore::eventTargetRespectingSVGTargetRules):
        (WebCore::Node::eventAncestors):
        (WebCore::Node::dispatchGenericEvent):
        * dom/Node.h:
        * dom/Text.cpp:
        (WebCore::Text::createRenderer):
        * dom/WindowEventContext.cpp: Removed.
        * dom/WindowEventContext.h: Removed.
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::getEventListenersForNode):
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::eventHasListeners):
        (WebCore::InspectorInstrumentation::willDispatchEventImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::willDispatchEvent):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::updateMouseEventTargetNode):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::eventParentNode):
        * svg/SVGElement.h:

2010-10-30  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Implement shadow DOM-aware event targeting and introduce EventContext to track the context of each event dispatch.
        https://bugs.webkit.org/show_bug.cgi?id=46015

        This patch adds the notion of EventContext (and a very similar-acting WindowEventContext, specifically
        for DOMWindow), an abstraction that carries information around dispatching an event for any given Node.

        This abstraction is necessary to ensure that events, fired from shadow DOM nodes are properly retargeted to
        appear as if they are coming from their host, thus never exposing the shadow DOM nodes to the world outside.

        * Android.mk: Added EventContext, WindowEventContext files.
        * CMakeLists.txt: Ditto.
        * GNUmakefile.am: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * dom/ContainerNode.cpp:
        (WebCore::notifyChildInserted): Changed to be shadow DOM-aware.
        * dom/EventContext.cpp: Added.
        * dom/EventContext.h: Added.
        * dom/Node.cpp:
        (WebCore::Node::markAncestorsWithChildNeedsStyleRecalc): Changed to be shadow DOM-aware.
        (WebCore::Node::createRendererIfNeeded): Ditto.
        (WebCore::Node::parentOrHostNode): Added new helper method.
        (WebCore::Node::enclosingLinkEventParentOrSelf): Changed to be shadow DOM-aware.
        (WebCore::eventTargetRespectingSVGTargetRules): Collapsed two helper methods into one.
        (WebCore::Node::eventAncestors): Refactored to collect a vector of EventContexts.
        (WebCore::Node::topEventContext): Added.
        (WebCore::eventHasListeners): Changed to use EventContexts.
        (WebCore::Node::dispatchGenericEvent): Ditto.
        * dom/Node.h: Removed eventParentNode that's no longer needed, added parentOrHostNode decl,
            and changed signature of eventAncestors to use EventContexts.
        * dom/Text.cpp:
        (WebCore::Text::createRenderer): Changed to be shadow DOM-aware.
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::getEventListenersForNode): Changed to use EventContexts.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::updateMouseEventTargetNode): Removed code that's no longer necessary.
        * svg/SVGElement.cpp: Removed eventParentNode that's no longer needed.
        * svg/SVGElement.h: Ditto.
        * dom/WindowEventContext.cpp: Added.
        * dom/WindowEventContext.h: Added.

2010-10-30  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Rob Buis.

        Convert SVGAnimatedNumber/SVGAnimatedNumberList to the new SVGAnimatedPropertyTearOff concept
        https://bugs.webkit.org/show_bug.cgi?id=48686

        Convert the next set of primitives to use the new SVG(Animated)PropertyTearOff concept.

        Tests: svg/dom/SVGAnimatedNumber.html
               svg/dom/SVGAnimatedNumberList.html
               svg/dom/SVGNumber.html

        * GNUmakefile.am: Add SVGAnimatedNumber.h / SVGAnimatedNumberList.h to build.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * bindings/scripts/CodeGenerator.pm: Recognize SVGAnimatedNumber/SVGAnimatedNumberList as new style SVG animated properties. Remove SVGNumber from PODType hash.
        * bindings/scripts/CodeGeneratorJS.pm: Remove special SVGNumber handing, it's obsolete now.
        * bindings/scripts/CodeGeneratorObjC.pm: Add special SVGNumber handling, as it's the first of the converted dynamic SVGAnimatedProperty types that's not in WebCore namespace.
        * bindings/scripts/CodeGeneratorV8.pm: Use AvoidInclusionOfType method from CodeGenerator.pm, remove special SVGNumber handling, that's obsolete now.
        * rendering/svg/SVGTextLayoutAttributesBuilder.cpp:
        (WebCore::extractFloatValuesFromSVGNumberList): Adapt to SVGNumberList change, which is a plain Vector<float> now.
        * svg/DeprecatedSVGAnimatedPropertyTraits.h: Remove SVGAnimatedNumber/SVGAnimatedNumberList handling.
        * svg/DeprecatedSVGAnimatedTemplate.h: Ditto.
        * svg/SVGAnimatedNumber.h: Added.
        * svg/SVGAnimatedNumber.idl: Enable StrictTypeChecking.
        * svg/SVGAnimatedNumberList.h: Added.
        * svg/SVGAnimatedNumberList.idl: Ditto.
        * svg/SVGComponentTransferFunctionElement.cpp: Switch animated float properties to the new SVGAnimatedNumber(List).
        (WebCore::SVGComponentTransferFunctionElement::SVGComponentTransferFunctionElement):
        (WebCore::SVGComponentTransferFunctionElement::parseMappedAttribute):
        (WebCore::SVGComponentTransferFunctionElement::transferFunction):
        * svg/SVGComponentTransferFunctionElement.h:
        * svg/SVGFEColorMatrixElement.cpp: Ditto.
        (WebCore::SVGFEColorMatrixElement::SVGFEColorMatrixElement):
        (WebCore::SVGFEColorMatrixElement::parseMappedAttribute):
        (WebCore::SVGFEColorMatrixElement::build):
        * svg/SVGFEColorMatrixElement.h:
        * svg/SVGFECompositeElement.h: Ditto.
        * svg/SVGFEConvolveMatrixElement.cpp: Ditto.
        (WebCore::SVGFEConvolveMatrixElement::SVGFEConvolveMatrixElement):
        (WebCore::SVGFEConvolveMatrixElement::kernelUnitLengthXIdentifier): Added, replacing char[] hack by a static atomic string.
        (WebCore::SVGFEConvolveMatrixElement::kernelUnitLengthYIdentifier): Ditto.
        (WebCore::SVGFEConvolveMatrixElement::parseMappedAttribute):
        (WebCore::SVGFEConvolveMatrixElement::build):
        * svg/SVGFEConvolveMatrixElement.h: Switch animated float properties to the new SVGAnimatedNumber(List).
        * svg/SVGFEDiffuseLightingElement.cpp: Ditto.
        (WebCore::SVGFEDiffuseLightingElement::kernelUnitLengthXIdentifier): Remove trailing whitespace.
        (WebCore::SVGFEDiffuseLightingElement::kernelUnitLengthYIdentifier): Ditto.
        * svg/SVGFEDiffuseLightingElement.h: Switch animated float properties to the new SVGAnimatedNumber(List).
        * svg/SVGFEDisplacementMapElement.h: Ditto.
        * svg/SVGFEGaussianBlurElement.cpp: Ditto.
        (WebCore::SVGFEGaussianBlurElement::stdDeviationXIdentifier): Remove trailing whitespace.
        (WebCore::SVGFEGaussianBlurElement::stdDeviationYIdentifier): Ditto.
        * svg/SVGFEGaussianBlurElement.h: Switch animated float properties to the new SVGAnimatedNumber(List).
        * svg/SVGFELightElement.h: Ditto.
        * svg/SVGFEMorphologyElement.cpp:
        (WebCore::SVGFEMorphologyElement::radiusXIdentifier): Added, replacing char[] hack by a static atomic string.
        (WebCore::SVGFEMorphologyElement::radiusYIdentifier): Ditto.
        * svg/SVGFEMorphologyElement.h: Switch animated float properties to the new SVGAnimatedNumber(List).
        * svg/SVGFEOffsetElement.h: Ditto.
        * svg/SVGFESpecularLightingElement.cpp:
        (WebCore::SVGFESpecularLightingElement::kernelUnitLengthXIdentifier): Remove trailing whitespace.
        (WebCore::SVGFESpecularLightingElement::kernelUnitLengthYIdentifier): Ditto.
        * svg/SVGFESpecularLightingElement.h: Switch animated float properties to the new SVGAnimatedNumber(List).
        * svg/SVGFETurbulenceElement.cpp:
        (WebCore::SVGFETurbulenceElement::baseFrequencyXIdentifier): Remove trailing whitespace.
        (WebCore::SVGFETurbulenceElement::baseFrequencyYIdentifier): Ditto.
        * svg/SVGFETurbulenceElement.h: Switch animated float properties to the new SVGAnimatedNumber(List).
        * svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::filterResXIdentifier): Remove trailing whitespace.
        (WebCore::SVGFilterElement::filterResYIdentifier): Ditto.
        * svg/SVGLengthList.idl: Remove leftover [SVGListProperty] marker.
        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::orientTypeIdentifier): Remove trailing whitespace.
        (WebCore::SVGMarkerElement::orientAngleIdentifier): Ditto.
        * svg/SVGNumber.idl: Remove [PODType] marker, add StrictTypeChecking.
        * svg/SVGNumberList.cpp: Convert from SVGPODList<RefPtr<SVGPODListItem<float> > > to plain Vector<float>, just like it has been done for SVGLengthList before.
        (WebCore::SVGNumberList::parse):
        (WebCore::SVGNumberList::valueAsString):
        * svg/SVGNumberList.h:
        (WebCore::SVGNumberList::SVGNumberList):
        * svg/SVGPathElement.h: Switch animated float properties to the new SVGAnimatedNumber(List).
        * svg/SVGStopElement.h: Ditto.
        * svg/SVGTextPositioningElement.cpp: Switch animated float properties to the new SVGAnimatedNumber(List).
        (WebCore::SVGTextPositioningElement::SVGTextPositioningElement):
        (WebCore::SVGTextPositioningElement::parseMappedAttribute):
        * svg/SVGTextPositioningElement.h: Ditto.
        * svg/properties/SVGPropertyTraits.h: Add SVGNumberList handling.

2010-10-29  Daniel Bates  <dbates@rim.com>

        No review, rolling out 70971.
        http://trac.webkit.org/changeset/70971
        https://bugs.webkit.org/show_bug.cgi?id=6751

        Rolling out changeset 70971 <http://trac.webkit.org/changeset/70971> since
        it caused layout test failures on all bots. In particular, the
        child count in a generated frame name differs after this patch. We need
        to look into this further.

        Test: fast/frames/iframe-set-inner-html.html

        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::openURL):
        (WebCore::HTMLFrameElementBase::setName):
        * html/HTMLFrameElementBase.h:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::mainResource):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadURLIntoChildFrame):
        (WebCore::FrameLoader::commitProvisionalLoad):
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::saveDocumentState):
        (WebCore::HistoryController::restoreDocumentState):
        (WebCore::HistoryController::createItem):
        (WebCore::HistoryController::currentFramesMatchItem):
        * loader/ProgressTracker.cpp:
        (WebCore::ProgressTracker::progressStarted):
        (WebCore::ProgressTracker::progressCompleted):
        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::create):
        * page/FrameTree.cpp:
        (WebCore::FrameTree::setName):
        (WebCore::FrameTree::clearName):
        (WebCore::FrameTree::uniqueChildName):
        (WebCore::FrameTree::child):
        (WebCore::FrameTree::find):
        * page/FrameTree.h:
        (WebCore::FrameTree::name):

2010-10-28  Antonio Gomes  <agomes@rim.com>

        Reviewed by Ojan Vafai.

        Needs a "LinuxEditingBehavior", perhaps with a better name
        https://bugs.webkit.org/show_bug.cgi?id=36627

        Added EditingUnixBehavior editing type aim to cover the cases when
        neither Mac or Windows behaviors are appropriated.

        It was decided to name it Unix not Linux.

        No new tests. The current editing tests that involve platform specific
        bahaviors are coded so that they go through all editing behavior
        types possible. There will be a follow up bug where all of them will
        be updated to include the new editing behavior ("unix").

        * editing/EditingBehaviorTypes.h:
        * page/Settings.cpp:
        (WebCore::editingBehaviorTypeForPlatform):
        (WebCore::Settings::Settings):

2010-10-29  Daniel Bates  <dbates@rim.com>

        Reviewed by Adam Barth.

        For unnamed frames, window.name returns a generated name
        https://bugs.webkit.org/show_bug.cgi?id=6751

        Fixes an issue where the window.name of an unnamed frame returns
        a unique generated name that is used internally to identify the
        frame. Instead, we should return an empty string as implied by
        section 5.1.6 of the HTML5 spec. (http://www.w3.org/TR/html5/browsers.html#browsing-context-names).
        This section describes that a browsing context can have no name or be
        the empty string.

        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::openURL): Removed ASSERT for empty
        frame name since this is valid as per the HTML5 spec.
        (WebCore::HTMLFrameElementBase::setName): Removed the call to FrameTree::uniqueChildName()
        since the loader code no longer depends on the frame name being unique.
        * html/HTMLFrameElementBase.h:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::mainResource): Use FrameTree::uniqueName().
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadURLIntoChildFrame): Ditto.
        (WebCore::FrameLoader::commitProvisionalLoad): Ditto.
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::saveDocumentState): Ditto.
        (WebCore::HistoryController::restoreDocumentState): Ditto.
        (WebCore::HistoryController::createItem):
        (WebCore::HistoryController::currentFramesMatchItem): Ditto.
        * loader/ProgressTracker.cpp:
        (WebCore::ProgressTracker::progressStarted): Ditto.
        (WebCore::ProgressTracker::progressCompleted): Ditto.
        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::create): Ditto.
        * page/FrameTree.cpp:
        (WebCore::FrameTree::setName): Modified to store the DOM-specified
        name of the frame.
        (WebCore::FrameTree::clearName):
        (WebCore::FrameTree::uniqueChildName): Use FrameTree::uniqueName().
        (WebCore::FrameTree::child): Ditto.
        (WebCore::FrameTree::find): Ditto.
        * page/FrameTree.h:
        (WebCore::FrameTree::uniqueName): Added.

2010-10-29  Darin Adler  <darin@apple.com>

        Try to fix build.

        * page/ContextMenuController.cpp: Added include of BackForwardController.h.
        * page/DOMWindow.cpp: Ditto.
        * page/History.cpp: Ditto.
        * platform/ContextMenu.cpp: Ditto.

2010-10-29  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        More back/forward refactoring

        * WebCore.exp.in: Updated.

        * GNUmakefile.am: Removed BackForwardControllerClient.h.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * history/BackForwardControllerClient.h: Removed.

        * history/BackForwardController.cpp:
        (WebCore::BackForwardController::BackForwardController):
        Set up just m_client.
        (WebCore::BackForwardController::~BackForwardController):
        Removed call to backForwardControllerDestroyed.
        (WebCore::BackForwardController::canGoBackOrForward): Added.
        (WebCore::BackForwardController::goBackOrForward): Added.
        (WebCore::BackForwardController::goBack): Added.
        (WebCore::BackForwardController::goForward): Added.
        (WebCore::BackForwardController::addItem): Added.
        (WebCore::BackForwardController::setCurrentItem): Added.
        (WebCore::BackForwardController::count): Added.
        (WebCore::BackForwardController::backCount): Added.
        (WebCore::BackForwardController::forwardCount): Added.
        (WebCore::BackForwardController::itemAtIndex): Added.
        (WebCore::BackForwardController::isActive): Added.
        (WebCore::BackForwardController::close): Added.

        * history/BackForwardController.h: Added functions from Page
        and BackForwardList that should be called here instead.
        Note that BackForwardList is to be renamed BackForwardClient soon.

        * history/BackForwardList.h: Removed many now-unneeded
        virtual functions.

        * history/BackForwardListImpl.h: Moved BackForwardListClient
        in here.

        * history/PageCache.cpp:
        (WebCore::logCanCachePageDecision): Use backForward().
        (WebCore::PageCache::canCache): Ditto.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::transitionToCommitted): Removed unneeded
        null check of backFowardList, which is never null.
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame): Use backForward.
        (WebCore::FrameLoader::didFirstLayout): Ditto.
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy): Ditto.
        (WebCore::FrameLoader::checkDidPerformFirstNavigation): Ditto.
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::goToItem): Ditto.
        (WebCore::HistoryController::updateForStandardLoad): Ditto.
        (WebCore::HistoryController::updateForRedirectWithLockedBackForwardList): Ditto.
        (WebCore::HistoryController::updateBackForwardListClippedAtTarget): Ditto.
        (WebCore::HistoryController::pushState): Ditto.
        * loader/NavigationScheduler.cpp:
        (WebCore::ScheduledHistoryNavigation::fire): Ditto.
        (WebCore::NavigationScheduler::scheduleHistoryNavigation): Ditto.
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected): Ditto.
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::close): Ditto.
        * page/History.cpp:
        (WebCore::History::length): Ditto.

        * page/Page.cpp:
        (WebCore::Page::Page): Use more adoptPtr. Use backForwardClient instead of
        backForwardControllerClient.
        (WebCore::Page::~Page): Use backForward.
        (WebCore::Page::backForwardList): Ditto.
        (WebCore::Page::goBack): Ditto.
        (WebCore::Page::goForward): Ditto.
        (WebCore::Page::canGoBackOrForward): Ditto.
        (WebCore::Page::goBackOrForward): Ditto.
        (WebCore::Page::getHistoryLength): Ditto.
        (WebCore::Page::PageClients::PageClients): Made non-inline.
        (WebCore::Page::PageClients::~PageClients): Ditto.

        * page/Page.h: Made PageClients constructor and destructor non-inline.
        Added backForward function. Marked old functions as deprecated.

        * page/Settings.cpp:
        (WebCore::Settings::setUsesPageCache): Use backForward.
        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::populate): Ditto.
        (WebCore::ContextMenu::checkOrEnableIfNeeded): Ditto.
        * wml/WMLDoElement.cpp:
        (WebCore::WMLDoElement::defaultEventHandler): Ditto.
        * wml/WMLDocument.cpp:
        (WebCore::WMLDocument::finishedParsing): Ditto.
        * wml/WMLPageState.cpp:
        (WebCore::WMLPageState::reset): Ditto.
        (WebCore::tryAccessHistoryURLs): Ditto.
        * wml/WMLPrevElement.cpp:
        (WebCore::WMLPrevElement::executeTask): Ditto.

2010-10-29  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

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

        Make repaint invalidation work with vertical lines.  Rewrite linesBoundingBox for RenderText and
        RenderInline to give the correct rectangle back for vertical lines.  Also patch linesVisibleOverflowBoundingBox
        to give back the correct rectangle for vertical lines.
        
        Fix bugs in the overflow accessors of InlineFlowBox when m_overflow was 0.

        Added fast/repaint/inline-vertical-lr-overflow.html

        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::adjustForFlippedBlocksWritingMode):
        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::logicalLeftVisibleOverflow):
        (WebCore::InlineFlowBox::logicalRightVisibleOverflow):
        (WebCore::InlineFlowBox::bottomLayoutOverflow):
        (WebCore::InlineFlowBox::rightLayoutOverflow):
        (WebCore::InlineFlowBox::bottomVisualOverflow):
        (WebCore::InlineFlowBox::rightVisualOverflow):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::adjustForFlippedBlocksWritingMode):
        * rendering/RenderBox.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::linesBoundingBox):
        (WebCore::RenderInline::linesVisibleOverflowBoundingBox):
        (WebCore::RenderInline::clippedOverflowRectForRepaint):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::linesBoundingBox):

2010-10-29  Mike Lawther  <mikelawther@chromium.org>

        Reviewed by James Robinson.

        Fix canvas/philip/tests/2d.imageData.get.source.negative
        https://bugs.webkit.org/show_bug.cgi?id=48277

        Handle negative width/height.
        See http://www.whatwg.org/specs/web-apps/current-work/multipage/the-canvas-element.html#pixel-manipulation

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

2010-10-29  Kavita Kanetkar  <kkanetkar@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: FileSystem integration
        https://bugs.webkit.org/show_bug.cgi?id=45982

        Adding filesystem support for Inspector under storage tab. This fetches root paths for
        temporary and persistent filesystems and allows "reveal folder in OS" option that
        launches native file browser. Currently this feature is disabled for non-chromium platforms.

        * CMakeLists.txt:
        * English.lproj/localizedStrings.js:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/CodeGeneratorInspector.pm:
        * inspector/Inspector.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::releaseFrontendLifetimeAgents):
        * inspector/InspectorController.h:
        (WebCore::InspectorController::fileSystemAgent):
        * inspector/InspectorFileSystemAgent.cpp: Added.
        * inspector/InspectorFileSystemAgent.h: Added.
        * inspector/front-end/FileSystemView.js: Added.
        * inspector/front-end/Settings.js:
        * inspector/front-end/StoragePanel.js:
        (WebInspector.StoragePanel):
        (WebInspector.StoragePanel.prototype.reset):
        (WebInspector.StoragePanel.prototype.addFileSystem):
        (WebInspector.StoragePanel.prototype.showFileSystem):
        (WebInspector.StoragePanel.prototype.updateFileSystemPath):
        (WebInspector.StoragePanel.prototype.updateFileSystemError):
        (WebInspector.FileSystemTreeElement):
        (WebInspector.FileSystemTreeElement.prototype.onselect):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.css:
        (.file-system-storage-tree-item .icon):
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        (WebInspector.updateResource):
        (WebInspector._addFileSystemOrigin):
        (WebInspector.didGetFileSystemPath):
        (WebInspector.didGetFileSystemError):
        (WebInspector.reset):
        * platform/AsyncFileSystem.h:
        (WebCore::AsyncFileSystem::root):
        * platform/FileSystem.h:
        * platform/chromium/ChromiumBridge.h:
        * platform/chromium/FileSystemChromium.cpp:
        (WebCore::revealFolderInOS):

2010-10-29  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        Remove RenderTextControl::setSelectionRange
        https://bugs.webkit.org/show_bug.cgi?id=47870

        Made RenderTextControl::setSelectionRange a global function.
        Removed setSelectionStart, setSelectionEnd, and select from RenderTextControl.

        No new tests are added since there is no behavioral change.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::setSelectedTextRange): Calls setSelectedTextRange.
        * dom/InputElement.cpp:
        (WebCore::InputElement::updateSelectionRange): Ditto.
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::setSelectionStart): Ditto.
        (WebCore::HTMLTextFormControlElement::setSelectionEnd): Ditto.
        (WebCore::HTMLTextFormControlElement::select): Ditto.
        (WebCore::HTMLTextFormControlElement::setSelectionRange): Ditto.
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::hasVisibleTextArea): Added.
        (WebCore::setSelectionRange): See above.
        * rendering/RenderTextControl.h:

2010-10-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Andreas Kling.

        [GTK] Crash in TextEncoding.cpp when using glib unicode
        https://bugs.webkit.org/show_bug.cgi?id=48521

        When the conversion to UTF-8 fails, try to encode the original string
        without normalizing. Fixes tests cases:
         fast/url/anchor.html
         fast/url/query.html
         fast/url/standard-url.html

        * platform/text/TextEncoding.cpp:
        (WebCore::TextEncoding::encode):

2010-10-29  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Antonio Gomes.

        TextureMapperGL get the driver info log but do not use it
        https://bugs.webkit.org/show_bug.cgi?id=48247

        Remove the call to glGetProgramInfoLog().

        * platform/graphics/opengl/TextureMapperGL.cpp:
        (WebCore::TexmapShaderInfo::createShaderProgram):

2010-10-29  Benjamin Kalman  <kalman@google.com>

        Reviewed by Tony Chang.

        Deleting contenteditable text to the left of a non-contenteditable span inserts unnecessary placeholder <br/>
        https://bugs.webkit.org/show_bug.cgi?id=48658

        * WebCore.exp.in: Update is{Start,End}OfParagraph symbols.
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::doApply): Cross editability boundaries when determining whether to insert placeholder.
        * editing/visible_units.cpp: Allow editability boundary to be crossed in {start,end,isStart,isEnd}OfParagraph.
        (WebCore::startOfParagraph): Also, avoid returning a position where renderer can't accept caret, like in endOfParagraph.
        (WebCore::endOfParagraph):
        (WebCore::isStartOfParagraph):
        (WebCore::isEndOfParagraph):
        * editing/visible_units.h: Ditto.

2010-10-29  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: last active panel is not restored upon opening inspector.
        https://bugs.webkit.org/show_bug.cgi?id=48668

        * inspector/Inspector.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::inspect):
        (WebCore::InspectorController::showPanel):
        (WebCore::InspectorController::disconnectFrontend):
        (WebCore::InspectorController::populateScriptObjects):
        * inspector/InspectorController.h:
        * inspector/InspectorState.cpp:
        (WebCore::InspectorState::InspectorState):
        * inspector/front-end/Settings.js:
        (WebInspector.Settings):
        * inspector/front-end/inspector.js:
        (WebInspector.set currentPanel):
        (WebInspector.doLoadedDone.onPopulateScriptObjects):
        (WebInspector.doLoadedDone):
        (WebInspector.documentClick.followLink):
        (WebInspector.documentClick):

2010-10-28  Michael Nordman  <michaeln@google.com>

        Reviewed by ap.

        [Chrome] Fix an appcache regression introduced in r69226
        https://bugs.webkit.org/show_bug.cgi?id=48592
        Define a new ApplicationCacheHost method for the specific case of main resource redirect handling.

        Tests: the existing layout test applies

        * loader/MainResourceLoader.cpp: use the newly introduced method
        (WebCore::MainResourceLoader::willSendRequest):
        * loader/appcache/ApplicationCacheHost.cpp:
        (WebCore::ApplicationCacheHost::maybeLoadMainResourceForRedirect):
        * loader/appcache/ApplicationCacheHost.h:

2010-10-29  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Adam Roben.

        Navigating to a .wav file creates a plugin document but should create a media document
        https://bugs.webkit.org/show_bug.cgi?id=48546
        <rdar://problem/8606105>

        Test: media/media-can-play-wav-audio.html

        * platform/MIMETypeRegistry.cpp: Add mapping from ".wav" to "audio/x-wav".

2010-10-29  Aaron Colwell  <acolwell@chromium.org>

        Reviewed by James Robinson.

        Created helper method WebCore::PlatformContextSkia::getNormalizedAlpha()
        to centralize alpha rounding & clipping logic. 
        https://bugs.webkit.org/show_bug.cgi?id=48094

        Test: media/video-canvas-alpha.html

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

2010-10-29  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        ASSERT when SVGAnimatedProperty instance is assigned to multiple elements.
        https://bugs.webkit.org/show_bug.cgi?id=48555

        Test: svg/custom/insertItemBefore-from-non-list-origin.svg

        * bindings/scripts/CodeGeneratorJS.pm: Include SVGAnimatedPropertyTearOff.h instead of SVGPropertyTearOff.h
        * bindings/scripts/CodeGeneratorObjC.pm: Ditto.
        * bindings/scripts/CodeGeneratorV8.pm: Ditto.
        * svg/properties/SVGAnimatedListPropertyTearOff.h:
        (WebCore::SVGAnimatedListPropertyTearOff::isAnimatedListTearOff): Return true.
        (WebCore::SVGAnimatedListPropertyTearOff::removeItemFromList): Devirtualize function.
        * svg/properties/SVGAnimatedProperty.h:
        (WebCore::SVGAnimatedProperty::isAnimatedListTearOff): Return false.
        * svg/properties/SVGListPropertyTearOff.h:
        (WebCore::SVGListPropertyTearOff::removeItemFromListIfNeeded): Only try to remove the passed item from its list, if its actually a list and not just a SVGAnimatedProperty.

2010-10-29  David Hyatt  <hyatt@apple.com>

        Reviewed by Adam Roben.

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

        Fix the dirty rect checks in RenderBoxLineList, InlineFlowBox, InlineTextBox.  They were still assuming horizontal-tb writing-mode.
        This patch makes the checks directionally abstract and also refactors the checks in RenderLineBoxList to share code. 

        No tests yet, since the invalidation code for inlines still assumes horizontal-tb.  That will be fixed in a follow-up bug,
        and then repaint tests will be easy to write.

        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::adjustForFlippedBlocksWritingMode):
        * rendering/InlineBox.h:
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paint):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::convertFromFlippedWritingMode):
        * rendering/RenderBox.h:
        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::rangeIntersectsDirtyRect):
        (WebCore::RenderLineBoxList::anyLineIntersectsDirtyRect):
        (WebCore::RenderLineBoxList::lineIntersectsDirtyRect):
        (WebCore::RenderLineBoxList::paint):
        (WebCore::RenderLineBoxList::hitTest):
        * rendering/RenderLineBoxList.h:

2010-10-29  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Roben.

        Cleanup createGlobalImageFileDescriptor in ClipboardWin
        https://bugs.webkit.org/show_bug.cgi?id=48189

        * platform/win/ClipboardWin.cpp:
        (WebCore::createGlobalURLContent):
        (WebCore::createGlobalUrlFileDescriptor):
        (WebCore::ClipboardWin::writeURL):

2010-10-29  Dmitry Titov  <dimich@chromium.org>

        [Chromium clang] Unreviewed fix removing compiler warning.
        If GIFImageReader is a struct, don't call it a class.

        * platform/image-decoders/gif/GIFImageDecoder.h:

2010-10-29  Alexey Proskuryakov  <ap@apple.com>

        Fix the world (d'oh!)

        https://bugs.webkit.org/show_bug.cgi?id=48576
        Let WebKit2 client know when a frame is a frameset

        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::insertedIntoDocument):
        (WebCore::HTMLFrameSetElement::removedFromDocument):
        Call base class version.

2010-10-29  Jian Li  <jianli@chromium.org>

        Unreviewed. Fix chromium build break.

        * bindings/v8/custom/V8FileReaderCustom.cpp:
        (WebCore::V8FileReader::resultAccessorGetter):

2010-10-29  Jian Li  <jianli@chromium.org>

        Reviewed by David Levin.

        Support readAsArrayBuffer in FileReader and FileReaderSync
        https://bugs.webkit.org/show_bug.cgi?id=47691

        Merge the similar code in FileReader and FileReaderSync into
        FileReaderLoader.

        Test cases have been added to read-file-test-cases.js.

        * Android.jscbindings.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/v8/custom/V8FileReaderCustom.cpp: Added.
        * fileapi/FileReader.cpp:
        (WebCore::FileReader::FileReader):
        (WebCore::FileReader::readAsArrayBuffer):
        (WebCore::FileReader::readAsBinaryString):
        (WebCore::FileReader::readAsText):
        (WebCore::FileReader::readAsDataURL):
        (WebCore::FileReader::readInternal):
        (WebCore::FileReader::doAbort):
        (WebCore::FileReader::terminate):
        (WebCore::FileReader::start):
        (WebCore::FileReader::didStartLoading):
        (WebCore::FileReader::didReceiveData):
        (WebCore::FileReader::didFinishLoading):
        (WebCore::FileReader::didFail):
        (WebCore::FileReader::fireEvent):
        (WebCore::FileReader::arrayBufferResult):
        (WebCore::FileReader::stringResult):
        * fileapi/FileReader.h:
        (WebCore::FileReader::readType):
        * fileapi/FileReader.idl:
        * fileapi/FileReaderLoader.cpp: Added.
        * fileapi/FileReaderLoader.h: Added.
        * fileapi/FileReaderLoaderClient.h: Added.
        * fileapi/FileReaderSync.cpp:
        (WebCore::FileReaderSync::FileReaderSync):
        (WebCore::FileReaderSync::readAsArrayBuffer):
        (WebCore::FileReaderSync::readAsBinaryString):
        (WebCore::FileReaderSync::readAsText):
        (WebCore::FileReaderSync::readAsDataURL):
        (WebCore::FileReaderSync::startLoading):
        * fileapi/FileReaderSync.h:
        * fileapi/FileReaderSync.idl:
        * html/canvas/ArrayBuffer.cpp:
        (WebCore::ArrayBuffer::create):
        * html/canvas/ArrayBuffer.h:
        * loader/ThreadableLoaderClient.h:

2010-10-29  Tony Chang  <tony@chromium.org>

        Unreviewed, rolling out r70850.
        http://trac.webkit.org/changeset/70850
        https://bugs.webkit.org/show_bug.cgi?id=45640

        chromium and qt pixel test regressions

        * dom/Document.cpp:
        * dom/Document.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::invalidateRect):
        (WebCore::FrameView::repaintContentRectangle):
        (WebCore::FrameView::doDeferredRepaints):
        * page/FrameView.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintContents):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayer):

2010-10-29  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=48576
        Let WebKit2 client know when a frame is a frameset

        This can change in two cases, when document changes, and when frame is navigated to another
        document.

        * dom/Document.cpp: (WebCore::Document::documentDidBecomeActive): Update the client when
        a document is restored from page cache.

        * loader/FrameLoaderClient.h: Added a new client call to notify client.

        * html/HTMLFrameSetElement.h:
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::insertedIntoDocument):
        (WebCore::HTMLFrameSetElement::removedFromDocument):
        Update the client when document changes, potentially becoming a frameset. Per WebCore
        definition, a document is a frameset when it has a FRAMESET element as direct child of
        document element (it may also have body elements).

        * loader/EmptyClients.h: (WebCore::EmptyFrameLoaderClient::dispatchDidBecomeFrameset):
        Added an empty implementation.

2010-10-29  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed fix. Touch WebCorePrefix.h to fix incremental build failure after r70878.

        * WebCorePrefix.h:

2010-10-29  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Handle surrogate pairs in TextBreakIteratorGtk
        https://bugs.webkit.org/show_bug.cgi?id=48227

        TextBreakIteratorGtk uses UTF-8 because it's what pango expects, but we
        need to return indices for the given input string that are in UTF-16.
        The number of characters is the same for both UTF-16 and UTF-8 except when
        the input string contains surrogate pairs. We need to keep both, the
        index for the UTF-8 string to be used internally, and the index for the
        UTF-16 string to be used as return value of the iterator interface. It
        fixes test fast/forms/textarea-maxlength.html

        * platform/text/gtk/TextBreakIteratorGtk.cpp:
        (WebCore::CharacterIterator::getText):
        (WebCore::CharacterIterator::getLength):
        (WebCore::CharacterIterator::getSize):
        (WebCore::CharacterIterator::getIndex):
        (WebCore::CharacterIterator::getUTF16Index):
        (WebCore::CharacterIterator::getUTF16Length):
        (WebCore::CharacterIterator::characterSize):
        (WebCore::CharacterIterator::setText):
        (WebCore::CharacterIterator::setIndex):
        (WebCore::CharacterIterator::setUTF16Index):
        (WebCore::CharacterIterator::first):
        (WebCore::CharacterIterator::last):
        (WebCore::CharacterIterator::next):
        (WebCore::CharacterIterator::previous):
        (WebCore::setUpIterator):
        (WebCore::textBreakFirst):
        (WebCore::textBreakLast):
        (WebCore::textBreakNext):
        (WebCore::textBreakPrevious):
        (WebCore::textBreakPreceding):
        (WebCore::textBreakFollowing):
        (WebCore::textBreakCurrent):
        (WebCore::isTextBreak):

2010-10-29  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [REGRESSION] Addition of a new (blank) style property does not work
        https://bugs.webkit.org/show_bug.cgi?id=48631

        Test: inspector/styles-add-blank-property.html

        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertiesSection.prototype.addNewBlankProperty):
        (WebInspector.ComputedStylePropertiesSection.prototype.onpopulate):

2010-10-29  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: add close button to network view, make tests pass for
        resource manager on all ports.
        https://bugs.webkit.org/show_bug.cgi?id=48628

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::didCommitLoad):
        (WebCore::InspectorController::frameDetachedFromParent):
        (WebCore::InspectorController::didLoadResourceFromMemoryCache):
        (WebCore::InspectorController::identifierForInitialRequest):
        (WebCore::InspectorController::willSendRequest):
        (WebCore::InspectorController::markResourceAsCached):
        (WebCore::InspectorController::didReceiveResponse):
        (WebCore::InspectorController::didReceiveContentLength):
        (WebCore::InspectorController::didFinishLoading):
        (WebCore::InspectorController::didFailLoading):
        (WebCore::InspectorController::resourceRetrievedByXMLHttpRequest):
        (WebCore::InspectorController::scriptImported):
        (WebCore::InspectorController::didCreateWebSocket):
        (WebCore::InspectorController::willSendWebSocketHandshakeRequest):
        (WebCore::InspectorController::didReceiveWebSocketHandshakeResponse):
        (WebCore::InspectorController::didCloseWebSocket):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel):
        * inspector/front-end/ResourceManager.js:
        (WebInspector.ResourceTreeModel.prototype.didCommitLoadForFrame):
        * inspector/front-end/StoragePanel.js:
        (WebInspector.StoragePanel.prototype.addResourceToFrame):
        * inspector/front-end/inspector.js:
        (WebInspector._createPanels):
        * inspector/front-end/networkPanel.css:
        (.network-close-button):

2010-10-29  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Convert SVGAnimatedEnumeration/Integer to the new SVGAnimatedPropertyTearOff concept
        https://bugs.webkit.org/show_bug.cgi?id=48623

        Besides converting SVGAnimatedEnumeration/Integer to the new animated property tear off concept, fix support
        for multiple wrappers within the new concept, which was broken - covered by existing svg/dynamic-updates/ tests.

        Replace all 'extern char[]' usage when using the multiple wrappers macro, by static AtomicStrings.

        * GNUmakefile.am: Add SVGAnimatedEnumeration.h / SVGAnimatedInteger.h to build.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * bindings/scripts/CodeGenerator.pm: Recognize SVGAnimatedEnumeration / SVGAnimatedInteger as animated types using the new concept.
        * bindings/scripts/CodeGeneratorObjC.pm: Touched, to force regenerating ObjC bindings, dependency tracking is obviously broken.
        * svg/DeprecatedSVGAnimatedPropertyTraits.h: Remove SVGAnimatedBoolean/Enumeration/Integer handling.
        * svg/DeprecatedSVGAnimatedTemplate.h: Ditto.
        * svg/SVGAnimatedEnumeration.h: Added.
        * svg/SVGAnimatedEnumeration.idl:
        * svg/SVGAnimatedInteger.h: Added.
        * svg/SVGClipPathElement.h: Adapted all code to create new style animated property tear offs for long & int types.
        * svg/SVGComponentTransferFunctionElement.h:
        * svg/SVGFEBlendElement.h:
        * svg/SVGFEColorMatrixElement.h:
        * svg/SVGFECompositeElement.h:
        * svg/SVGFEConvolveMatrixElement.h:
        * svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::kernelUnitLengthXIdentifier): Replaced extern[] char hack using a static AtomicString.
        (WebCore::SVGFEDiffuseLightingElement::kernelUnitLengthYIdentifier): Ditto.
        * svg/SVGFEDiffuseLightingElement.h:
        * svg/SVGFEDisplacementMapElement.h:
        * svg/SVGFEGaussianBlurElement.cpp:
        (WebCore::SVGFEGaussianBlurElement::stdDeviationXIdentifier): Ditto.
        (WebCore::SVGFEGaussianBlurElement::stdDeviationYIdentifier): Ditto.
        * svg/SVGFEGaussianBlurElement.h:
        * svg/SVGFEMorphologyElement.h:
        * svg/SVGFESpecularLightingElement.cpp:
        (WebCore::SVGFESpecularLightingElement::kernelUnitLengthXIdentifier): Ditto.
        (WebCore::SVGFESpecularLightingElement::kernelUnitLengthYIdentifier): Ditto.
        * svg/SVGFESpecularLightingElement.h:
        * svg/SVGFETurbulenceElement.cpp:
        (WebCore::SVGFETurbulenceElement::baseFrequencyXIdentifier): Ditto.
        (WebCore::SVGFETurbulenceElement::baseFrequencyYIdentifier): Ditto.
        * svg/SVGFETurbulenceElement.h:
        * svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::filterResXIdentifier): Ditto.
        (WebCore::SVGFilterElement::filterResYIdentifier): Ditto.
        * svg/SVGFilterElement.h:
        * svg/SVGGradientElement.h:
        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::orientTypeIdentifier): Ditto.
        (WebCore::SVGMarkerElement::orientAngleIdentifier): Ditto.
        * svg/SVGMarkerElement.h:
        * svg/SVGMaskElement.h:
        * svg/SVGPatternElement.h:
        * svg/SVGTextContentElement.h:
        * svg/SVGTextPathElement.h:
        * svg/properties/SVGAnimatedPropertyMacros.h: Add new macro for multiple wrappers using static properties.

2010-10-29  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Make GraphicsContext cheaper to construct
        https://bugs.webkit.org/show_bug.cgi?id=48626

        Do less unnecessary things when creating the Qt GraphicsContext:
        - Don't create a black QBrush that's immediately discarded.
        - Don't call setPlatform*(), set the painter brush and pen directly.
        - Call setRenderHints() once instead of multiple setRenderHint().

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

2010-10-29  Andreas Kling  <kling@webkit.org>

        Reviewed by Simon Hausmann.

        [Qt] GraphicsLayer: Don't notifySyncRequired() more than necessary
        https://bugs.webkit.org/show_bug.cgi?id=48624

        Don't queue multiple meta method invocations for notifySyncRequired()

        4% speedup on <http://ariya.github.com/clock.htm>

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::GraphicsLayerQtImpl::GraphicsLayerQtImpl):
        (WebCore::GraphicsLayerQtImpl::notifySyncRequired):
        (WebCore::GraphicsLayerQtImpl::notifyChange):

2010-10-29  Zhenyao Mo  <zmo@google.com>

        Reviewed by Chris Marrin.

        drawArrays/drawElements with first/offset out of range but size==0 should generate no error
        https://bugs.webkit.org/show_bug.cgi?id=48601

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::drawArrays):
        (WebCore::WebGLRenderingContext::drawElements):

2010-10-29  Leandro Gracia Gil  <leandrogracia@google.com>

        Reviewed by Jeremy Orlow.

        Patch the current speech input implementation to use the nearest
        language tag. The language is now passed to the startRecognition
        methods so that language-specific recognition could be used. Also added
        a second parameter to setMockSpeechInputResult for the language used in
        speech recognition.
        https://bugs.webkit.org/show_bug.cgi?id=47089

        This is the 2nd of a 4-sided patch in Chromium and WebKit. For more
        details see http://codereview.chromium.org/3615005/show,
        http://codereview.chromium.org/3595018/show and
        https://bugs.webkit.org/show_bug.cgi?id=47420.

        Test: fast/speech/input-text-language-tag.html

        * page/SpeechInput.cpp:
        (WebCore::SpeechInput::startRecognition):
        * page/SpeechInput.h:
        * page/SpeechInputClient.h:
        * platform/mock/SpeechInputClientMock.cpp:
        (WebCore::SpeechInputClientMock::startRecognition):
        (WebCore::SpeechInputClientMock::setRecognitionResult):
        (WebCore::SpeechInputClientMock::timerFired):
        * platform/mock/SpeechInputClientMock.h:
        * rendering/TextControlInnerElements.cpp:
        (WebCore::TextControlInnerElement::attachInnerElement):
        (WebCore::SearchFieldCancelButtonElement::detach):
        (WebCore::SpinButtonElement::defaultEventHandler):
        (WebCore::InputFieldSpeechButtonElement::defaultEventHandler):
        (WebCore::InputFieldSpeechButtonElement::detach):

2010-10-29  Mads Ager  <ager@chromium.org>

        Reviewed by Pavel Feldman.

        [V8] The DateExtension cannot handle overwritten Date
        https://bugs.webkit.org/show_bug.cgi?id=48621

        Check that the Date property is an object before attempting to get
        hidden properties from it.

        Test: fast/dom/Window/slow-unload-handler-overwritten-date.html

        * bindings/v8/DateExtension.cpp:
        (WebCore::DateExtension::setAllowSleep):

2010-10-27  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Convert SVGAnimatedBoolean to the new SVGAnimatedPropertyTearOff concept
        https://bugs.webkit.org/show_bug.cgi?id=48469

        Convert the next SVG animated primitive type to use the SVGAnimatedPropertyTearOff concept: SVGAnimatedBoolean.
        Added new test verifying that StrictTypeChecking is enabled for SVGAnimatedBooleans. It also tests that this type is "static", see LayoutTests/ChangeLog for details.

        Add support for StrictTypeChecking for boolean types.

        Test: svg/dom/SVGExternalResourcesRequired.html

        * GNUmakefile.am: Add SVGAnimatedBoolean.h and SVGAnimatedStaticPropertyTearOff.h to build.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * bindings/scripts/CodeGenerator.pm: Add SVGAnimatedBoolean to the new style svg animated bindings list.
        * bindings/scripts/CodeGeneratorJS.pm: Add StrictTypeChecking support for boolean types.
        * bindings/scripts/CodeGeneratorObjC.pm: Ditto. Only generate kit() usage for new style animated types, if the wrapped type needs a tear off.
        * bindings/scripts/CodeGeneratorV8.pm: Ditto.
        * svg/DeprecatedSVGAnimatedTemplate.h: Remove SVGAnimatedBoolean handling.
        * svg/SVGAElement.h: s/DECLARE_ANIMATED_PROPERTY/DECLARE_ANIMATED_STATIC_PROPERTY_NEW/ for boolean types everywhere. Include SVGAnimatedPropertyMacros.h where needed.
        * svg/SVGAnimatedBoolean.h: Added.
        * svg/SVGAnimatedBoolean.idl:
        * svg/SVGAnimationElement.h:
        * svg/SVGCircleElement.h:
        * svg/SVGClipPathElement.h:
        * svg/SVGCursorElement.h:
        * svg/SVGDefsElement.h:
        * svg/SVGEllipseElement.h:
        * svg/SVGExternalResourcesRequired.cpp:
        * svg/SVGExternalResourcesRequired.h:
        (WebCore::SVGExternalResourcesRequired::~SVGExternalResourcesRequired):
        * svg/SVGFEConvolveMatrixElement.h:
        * svg/SVGFEImageElement.h:
        * svg/SVGFilterElement.h:
        * svg/SVGFontElement.h:
        * svg/SVGForeignObjectElement.h:
        * svg/SVGGElement.h:
        * svg/SVGGradientElement.h:
        * svg/SVGImageElement.h:
        * svg/SVGLineElement.h:
        * svg/SVGMPathElement.h:
        * svg/SVGMarkerElement.h:
        * svg/SVGMaskElement.h:
        * svg/SVGPathElement.h:
        * svg/SVGPatternElement.h:
        * svg/SVGPolyElement.h:
        * svg/SVGRectElement.h:
        * svg/SVGSVGElement.h:
        * svg/SVGScriptElement.h:
        * svg/SVGSwitchElement.h:
        * svg/SVGSymbolElement.h:
        * svg/SVGTextContentElement.h:
        * svg/SVGUseElement.h:
        * svg/SVGViewElement.h:
        * svg/properties/SVGAnimatedListPropertyTearOff.h: Moved RefPtr<SVGProperty> m_baseVal/m_animVal from SVGAnimatedProperty, as SVGAnimatedStaticPropertyTearOff doesn't need them.
        * svg/properties/SVGAnimatedProperty.h: Remove m_baseVal/m_animVal.
        (WebCore::SVGAnimatedProperty::commitChange): New method to share code between the SVGAnimated*PropertyTearOff classes.
        * svg/properties/SVGAnimatedPropertyMacros.h: Add new DECLARE_ANIMATED_STATIC_PROPERTY_NEW macro which creates SVGAnimatedStaticPropertyTearOff types.
        * svg/properties/SVGAnimatedPropertyTearOff.h: Moved RefPtr<SVGProperty> m_baseVal/m_animVal from SVGAnimatedProperty, as SVGAnimatedStaticPropertyTearOff doesn't need them.
        * svg/properties/SVGAnimatedStaticPropertyTearOff.h: Added.
        (WebCore::SVGAnimatedStaticPropertyTearOff::baseVal): Directly returns the stored m_property as reference, no tear off is created.
        (WebCore::SVGAnimatedStaticPropertyTearOff::animVal): Ditto.
        (WebCore::SVGAnimatedStaticPropertyTearOff::setBaseVal): Directly updates the stored m_property reference, and invalidates the SVG attributes.
        (WebCore::SVGAnimatedStaticPropertyTearOff::setAnimVal): Not implemented.
        (WebCore::SVGAnimatedStaticPropertyTearOff::create):
        (WebCore::SVGAnimatedStaticPropertyTearOff::SVGAnimatedStaticPropertyTearOff):
        * svg/properties/SVGListPropertyTearOff.h:
        (WebCore::SVGListPropertyTearOff::commitChange): Share code, use SVGAnimatedProperty::commitChange.
        * svg/properties/SVGPropertyTearOff.h:
        (WebCore::SVGPropertyTearOff::commitChange): Ditto.

2010-10-28  MORITA Hajime  <morrita@google.com>

        Reviewed by Kent Tamura.

        <meter min=0 max=100 value=100> should be optimum.
        https://bugs.webkit.org/show_bug.cgi?id=48613

        Changed to make the condition inclusive for better case consistently.
        - Values on the border between optimum and subsequntial go optimum.
        - Values on the border between suboptimal and even-less-than-good go suboptimal.

        Test: fast/dom/HTMLMeterElement/meter-boundary-values.html

        * html/HTMLMeterElement.cpp:
        (WebCore::HTMLMeterElement::gaugeRegion):

2010-10-29  Kenichi Ishibashi  <bashi@google.com>

        Reviewed by Kent Tamura.

        [HTML5] Add DOMSettableTokenList
        https://bugs.webkit.org/show_bug.cgi?id=47810

        Adds DOMSettableTokenList interface to support <output> element.
        The DOMTokenList interface was refactored since its was tightly coupled
        with HTMLElement.classList property.

        * Android.derived.jscbindings.mk: Added JSDOMSettableTokenList.h file.
        * Android.derived.v8bindings.mk: Added V8DOMSettableTokenList.h file.
        * Android.jscbindings.mk: Added JSDOMSettableTokenList.cpp file.
        * Android.mk: Added ClassList.cpp file.
        * CMakeLists.txt: Added DOMSettableTokenList.{cpp,idl} and ClassList.cpp files.
        * DerivedSources.cpp: Added JSDOMSettableTokenList.cpp file.
        * DerivedSources.make: Added DOMSettableTokenList entry.
        * GNUmakefile.am: Added JSDOMSettableTokenList.{h,cpp} and ClassList.{h,cpp} files.
        * WebCore.gypi: Added DOMSettableTokenList.{h,cpp,idl}, V8DOMSettableTokenListCustom.cpp and ClassList.{h,cpp} files.
        * WebCore.pri: Added DOMSettableTokenList.idl file.
        * WebCore.pro: Added V8DOMSettableTokenListCustom.cpp, ClassList.{h,cpp} and DOMSettableTokenList.{h,cpp} files.
        * WebCore.vcproj/WebCore.vcproj: Added JSDOMSettableTokenList.{h,cpp}, ClassList.{h,cpp} and DOMSettableTokenList.{h,cpp} files.
        * WebCore.xcodeproj/project.pbxproj: Added ClassList.{h,cpp}, DOMSettabletokenList.{h,cpp} and JSDOMSettableTokenList.{h,cpp}
        * bindings/gobject/GNUmakefile.am: Added WebKitDOMDOMSettableTokenList.{h,cpp} and WebKitDOMDOMSettableTokenListPrivate.cpp files.
        * bindings/scripts/CodeGeneratorJS.pm: Modified IndexGetterReturnsStrings() returns 1 for DOMSettableTokenList.
        * bindings/v8/custom/V8DOMSettableTokenListCustom.cpp: Added.
        (WebCore::V8DOMSettableTokenList::indexedPropertyGetter):
        * dom/Element.cpp: Replaced DOMTokenList to ClassList.
        (WebCore::Element::classList):
        * dom/ElementRareData.h: ditto.
        * dom/SpaceSplitString.cpp: Added add() and remove() functions.
        (WebCore::SpaceSplitStringData::add):
        (WebCore::SpaceSplitStringData::remove):
        (WebCore::SpaceSplitString::add):
        (WebCore::SpaceSplitString::remove):
        * dom/SpaceSplitString.h: Added add() and remove() functions.
        * dom/StyledElement.cpp: Replaced DOMTokenList to ClassList.
        (WebCore::StyledElement::classAttributeChanged):
        * dom/StyledElement.h: ditto.
        * html/ClassList.cpp: Added, mostly from original DOMTokenList.cpp.
        (WebCore::ClassList::ClassList):
        (WebCore::ClassList::ref):
        (WebCore::ClassList::deref):
        (WebCore::ClassList::length):
        (WebCore::ClassList::item):
        (WebCore::ClassList::contains):
        (WebCore::ClassList::containsInternal):
        (WebCore::ClassList::add):
        (WebCore::ClassList::addInternal):
        (WebCore::ClassList::remove):
        (WebCore::ClassList::removeInternal):
        (WebCore::ClassList::toggle):
        (WebCore::ClassList::toString):
        (WebCore::ClassList::reset):
        (WebCore::ClassList::classNames):
        * html/ClassList.h: Added, mostly from original DOMTokenList.h.
        (WebCore::ClassList::create):
        (WebCore::ClassList::element):
        * html/DOMSettableTokenList.cpp: Added.
        (WebCore::DOMSettableTokenList::DOMSettableTokenList):
        (WebCore::DOMSettableTokenList::~DOMSettableTokenList):
        (WebCore::DOMSettableTokenList::item):
        (WebCore::DOMSettableTokenList::contains):
        (WebCore::DOMSettableTokenList::add):
        (WebCore::DOMSettableTokenList::addInternal):
        (WebCore::DOMSettableTokenList::remove):
        (WebCore::DOMSettableTokenList::removeInternal):
        (WebCore::DOMSettableTokenList::toggle):
        (WebCore::DOMSettableTokenList::setValue):
        * html/DOMSettableTokenList.h: Added.
        (WebCore::DOMSettableTokenList::create):
        (WebCore::DOMSettableTokenList::ref):
        (WebCore::DOMSettableTokenList::deref):
        (WebCore::DOMSettableTokenList::length):
        (WebCore::DOMSettableTokenList::toString):
        (WebCore::DOMSettableTokenList::value):
        * html/DOMSettableTokenList.idl: Added.
        * html/DOMTokenList.cpp: Refactored to be an abstract interface for both of ClassList and DOMSettableTokenList.
        (WebCore::DOMTokenList::validateToken): Changed to be a static member function of DOMTokenList.
        (WebCore::DOMTokenList::addToken): Added, mostly from original DOMTokenList::addInternal().
        (WebCore::DOMTokenList::removeToken): Added, mostly from original DOMTokenList::removeInternal().
        * html/DOMTokenList.h: Refactored to be an abstract interface for both of ClassList and DOMSettableTokenList.
        (WebCore::DOMTokenList::~DOMTokenList):
        (WebCore::DOMTokenList::element):
        * page/DOMWindow.cpp: Added an entry for DOMSettableTokenList.
        * page/DOMWindow.idl: ditto.

2010-10-29  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: make legacy resource tracking optional in the native code,
        make cookeis work against new resource manager.
        https://bugs.webkit.org/show_bug.cgi?id=48532

        * inspector/InspectorCSSStore.cpp:
        (WebCore::InspectorCSSStore::resourceStyleSheetText):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::~InspectorController):
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::releaseFrontendLifetimeAgents):
        (WebCore::InspectorController::populateScriptObjects):
        (WebCore::InspectorController::unbindAllResources):
        (WebCore::InspectorController::didCommitLoad):
        (WebCore::InspectorController::frameDetachedFromParent):
        (WebCore::InspectorController::didLoadResourceFromMemoryCache):
        (WebCore::InspectorController::identifierForInitialRequest):
        (WebCore::InspectorController::willSendRequest):
        (WebCore::InspectorController::markResourceAsCached):
        (WebCore::InspectorController::didReceiveResponse):
        (WebCore::InspectorController::didReceiveContentLength):
        (WebCore::InspectorController::didFinishLoading):
        (WebCore::InspectorController::didFailLoading):
        (WebCore::InspectorController::resourceRetrievedByXMLHttpRequest):
        (WebCore::InspectorController::scriptImported):
        (WebCore::InspectorController::setResourceTrackingEnabled):
        (WebCore::InspectorController::getCookies):
        (WebCore::InspectorController::deleteCookie):
        (WebCore::InspectorController::didCreateWebSocket):
        (WebCore::InspectorController::willSendWebSocketHandshakeRequest):
        (WebCore::InspectorController::didReceiveWebSocketHandshakeResponse):
        (WebCore::InspectorController::didCloseWebSocket):
        (WebCore::InspectorController::breakpointsSettingKey):
        (WebCore::InspectorController::getResourceContent):
        * inspector/InspectorController.h:
        * inspector/InspectorResource.cpp:
        (WebCore::InspectorResource::updateScriptObject):
        (WebCore::InspectorResource::markFailed):
        * inspector/InspectorResource.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::populateObjectWithFrameResources):
        * inspector/front-end/CookieItemsView.js:
        (WebInspector.CookieItemsView.prototype._updateWithCookies):
        (WebInspector.CookieItemsView.prototype._filterCookiesForDomain):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype._mimeTypeIsConsistentWithType):
        (WebInspector.Resource.prototype._checkWarning):
        * inspector/front-end/ResourceManager.js:
        (WebInspector.ResourceManager.prototype._updateResourceWithResponse):
        (WebInspector.ResourceManager.prototype.didFailLoading):
        * inspector/front-end/inspector.js:
        (WebInspector.forAllResources):
        (WebInspector.updateResource):

2010-10-29  MORITA Hajime <morrita@google.com>

        Unreviewed attempt for fixing build break for http://trac.webkit.org/changeset/70847

        * editing/EditingAllInOne.cpp:

2010-10-29  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Adam Barth.

        Support RegExp in V8 implementation of SerializedScriptValue
        https://bugs.webkit.org/show_bug.cgi?id=44809
        
        Add RegExp serialization/deserialization now that V8 provides API access
        to the RegExp type.

        * bindings/v8/SerializedScriptValue.cpp:
        (WebCore::ZigZag::Writer::writeRegExp):
        (WebCore::ZigZag::Serializer::writeRegExp):
        (WebCore::ZigZag::Serializer::doSerialize):
        (WebCore::ZigZag::Reader::read):
        (WebCore::ZigZag::Reader::readRegExp):

2010-10-13  MORITA Hajime  <morrita@google.com>

        Reviewed by David Hyatt.

        Navigating dark background websites results in blinding white flashes between pages. 
        https://bugs.webkit.org/show_bug.cgi?id=45640

        This FOUC is caused by an early layout request before the <body> is ready, 
        and the page's background style given for <body>, instead of <html>.
        So many sites have such stylesheets that we should care them.
        
        - Some DOM operation such as 'element.offsetLeft' causes page layout.
        - The page layout results page repaint
        - The page page repaint makes a white screen. because there is nothing to paint
          before <body> is available.
        
        This change:
        - extracted existing FOUC check on RenderBlock and RenderLayer to 
          Document::mayCauseFlashOfUnstyledContent(),
        - checked <body> availability on mayCauseFlashOfUnstyledContent(), and
        - added FOUC guards before requesting reapint on FrameView.
        
        No new tests. The data loading speed matters and it cannot be
        captured by DRT.

        * dom/Document.cpp:
        (WebCore::Document::mayCauseFlashOfUnstyledContent): Added.
        * dom/Document.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::invalidateRect): Added a guard.
        (WebCore::FrameView::repaintContentRectangle): Added a guard.
        (WebCore::FrameView::doDeferredRepaints): Added a guard.
        (WebCore::FrameView::shouldUpdate): Added.
        * page/FrameView.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintContents): Replaced FOUC check to use mayCauseFlashOfUnstyledContent
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintLayer): Replaced FOUC check to use mayCauseFlashOfUnstyledContent

2010-10-29  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

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

        Backgrounds should clip to the border radius properly for vertical lines.  The code that does this still assumes horizontal lines.
        The testcase to cover this used nested spans, which also exposed a bug in the propagation of the vertical bit through the line
        box tree.
        
        Added fast/blockflow/border-radius-clipping-vertical-lr.html.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::createLineBoxes):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):

2010-10-26  MORITA Hajime  <morrita@google.com>

        Reviewed by Kent Tamura.

        Refactoring: Spellchecking related static functions could form a class
        https://bugs.webkit.org/show_bug.cgi?id=48287

        Extracted spellcheck related static functions to TextCheckingHelper class,
        which has EditorClient and Range as its member.
        
        No new tests. Just a refactoring.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * editing/Editor.cpp:
        (WebCore::Editor::advanceToNextMisspelling):
        (WebCore::Editor::isSelectionUngrammatical):
        (WebCore::Editor::guessesForUngrammaticalSelection):
        (WebCore::Editor::guessesForMisspelledOrUngrammaticalSelection):
        (WebCore::Editor::markMisspellingsAfterTypingToPosition):
        (WebCore::Editor::markMisspellingsOrBadGrammar):
        (WebCore::Editor::markMisspellings):
        (WebCore::Editor::markBadGrammar):
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges):
        (WebCore::Editor::changeBackToReplacedString):
        * editing/Editor.h:
        * editing/TextCheckingHelper.cpp: Added.
        (WebCore::TextCheckingHelper::TextCheckingHelper):
        (WebCore::TextCheckingHelper::~TextCheckingHelper):
        (WebCore::TextCheckingHelper::paragraphAlignedRange):
        (WebCore::TextCheckingHelper::findFirstMisspelling):
        (WebCore::TextCheckingHelper::findFirstMisspellingOrBadGrammar):
        (WebCore::TextCheckingHelper::findFirstGrammarDetail):
        (WebCore::TextCheckingHelper::findFirstBadGrammar):
        (WebCore::TextCheckingHelper::isUngrammatical):
        (WebCore::TextCheckingHelper::guessesForMisspelledOrUngrammaticalRange):
        (WebCore::TextCheckingHelper::markAllMisspellings):
        (WebCore::TextCheckingHelper::markAllBadGrammar):
        * editing/TextCheckingHelper.h: Added.

2010-10-28  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel, Peter Kasting, and Darin Fisher.
        (Eric reviewed the CoreGraphics interactions, Peter reviewed the image
        decoder interaction, and Darin Fisher SGTMed the policy decision.)

        [chromium] Chromium Mac should use WebKit's image decoders
        https://bugs.webkit.org/show_bug.cgi?id=47974

        This patch teaches WebKit's image decoders how to talk to CoreGraphics.
        This patch doesn't handle color profiles, but that will come in a
        subsequent patch.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * loader/CachedImage.cpp:
        (WebCore::CachedImage::createImage):
        * platform/graphics/ImageSource.h:
        * platform/image-decoders/ImageDecoder.cpp:
        (WebCore::RGBA32Buffer::clear):
        (WebCore::RGBA32Buffer::zeroFill):
        (WebCore::RGBA32Buffer::copyBitmapData):
        (WebCore::RGBA32Buffer::setSize):
        * platform/image-decoders/ImageDecoder.h:
        (WebCore::RGBA32Buffer::getAddr):
        * platform/image-decoders/cg: Added.
        * platform/image-decoders/cg/ImageDecoderCG.cpp: Added.
        (WebCore::RGBA32Buffer::copyBitmapData):
        (WebCore::RGBA32Buffer::setSize):
        (WebCore::RGBA32Buffer::asNewNativeImage):

2010-10-28  Sergio Villar Senin  <svillar@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] GObject bindings generator issues
        https://bugs.webkit.org/show_bug.cgi?id=48135

        GObject code generator must not generate conditional API's. This
        patch also adds an alternative return value for non-void
        conditional methods. With this change the conditionalMethods hack
        is no longer needed.

        * bindings/scripts/CodeGeneratorGObject.pm:

2010-10-28  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

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

        Box shadows on vertical inlines don't paint properly.  Fix the paintBoxShadow method to treat the edges to include as
        logical (so that top/bottom are used instead of left/right for vertical lines).  In order to make my box-shadow tests
        work I had to fix a bug in the transform code of InlineTextBox that was causing the baselines of vertical lines to
        be wrong.
        
        Added fast/blockflow/box-shadow-* tests

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintBoxShadow):
        * rendering/RenderBoxModelObject.h:

2010-10-28  James Robinson  <jamesr@chromium.org>

        Reviewed by Simon Fraser.

        iframes forced into slow scrolling mode by containing RenderLayer sometimes
        https://bugs.webkit.org/show_bug.cgi?id=48570

        Only performs the overlap test for RenderLayers that paint themselves.  This
        prevents marking RenderWidgets as being overlapped unnecessarily.

        Test: fast/repaint/iframe-scroll-repaint.html

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

2010-10-28  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r70814.
        http://trac.webkit.org/changeset/70814
        https://bugs.webkit.org/show_bug.cgi?id=48612

        Caused media/controls-drag-timebar.html to fail on multiple
        platforms (Requested by aroben on #webkit).

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::seek):
        * platform/graphics/MediaPlayer.cpp:
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.h:
        * platform/graphics/win/QTMovie.cpp:
        * platform/graphics/win/QTMovie.h:

2010-10-28  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/8597430> Crash triggered by incremental layout of block truncated by line-clamp
        https://bugs.webkit.org/show_bug.cgi?id=48602

        Test: fast/flexbox/line-clamp-crash.html

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::applyLineClamp): Even if the child needs layout, call clearTruncation(),
        since layout itself may be partial and not touch the truncated line (but touch its markup box).

2010-10-28  Jian Li  <jianli@chromium.org>

        Reviewed by Dmitry Titov.

        [chromium] UUID generation does not work in Linux that has sandbox
        turned on
        https://bugs.webkit.org/show_bug.cgi?id=48571

        This is because we cannot access /proc when sandbox is on. The fix is to
        use random numbers to construct UUID.

        * platform/UUID.cpp:
        (WebCore::createCanonicalUUIDString):

2010-10-28  Jia Pu  <jpu@apple.com>

        Reviewed by Dan Bernstein.

        Editing a word with misspell or autocorrection underline should remove the underline when the editing changes the word.
        https://bugs.webkit.org/show_bug.cgi?id=48078
        <rdar://problem/8579155>

        Tests: platform/mac/editing/spelling/editing-multiple-words-with-markers.html
               platform/mac/editing/spelling/editing-word-with-marker-1.html
               platform/mac/editing/spelling/editing-word-with-marker-2.html

        This patch is part of on-going improvement of autocorrection feature on Mac OS X. When an editing
        occurs, if it affects words (by deleting/inserting characters, spliting word, merging words) that
        have Spelling and/or CorrectionIndicator markers, we want to remove the markers. If subsequntial
        spelling checking finds spelling error in newlly formed words, it will add the markers back in.

        * dom/DocumentMarker.h: Changed MarkerType to bit masks to make search multiple types easier.

        * dom/DocumentMarkerController.cpp: Refactored two removeMarkers() methods to support remove
          markers with specific type from a node.
        (WebCore::DocumentMarkerController::removeMarkers): Changed signature to remove marker with specific type.
        (WebCore::DocumentMarkerController::removeMarkersFromMarkerMapVectorPair): Refactoring.
        (WebCore::DocumentMarkerController::hasMarkers): Convenience method to search markers in range.

        * dom/DocumentMarkerController.h: Added new methods and matched new signature of removeMarkers().

        * editing/Editor.cpp:
        (WebCore::Editor::respondToChangedContents): Remove existing markers if the change formed new word.
        (WebCore::Editor::cut): Remove markers on words that will be modified by this editing.
        (WebCore::Editor::paste): Ditto.
        (WebCore::Editor::pasteAsPlainText): Ditto.
        (WebCore::Editor::removeSpellAndCorrectionMarkersFromWordsToBeEdited): Main logic for removing 
          markers on words affected by editing.

        * editing/Editor.h: Added removeSpellAndCorrectionMarkersFromWordsToBeEdited().  Added
          REMOVE_MARKERS_UPON_EDITING and SUPPORT_AUTOCORRECTION_PANEL macro to improve readability.

        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::insertText): Remove markers on words that will be modified by this editing.
        (WebCore::TypingCommand::deleteKeyPressed): Ditto.
        (WebCore::TypingCommand::forwardDeleteKeyPressed): Ditto.

2010-10-28  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Brady Eidson.

        Part of <https://bugs.webkit.org/show_bug.cgi?id=45980>
        userscripts/user-script-*-document.html tests are flaky on Windows

        In WebFrameLoaderClient::committedLoad on Windows, we call through to PluginStream::didRecieveData
        if our manual loader is a plugin stream, and we can call didRecieveData with a 0 length.
        
        We shouldn't ASSERT that length is 0, because code paths exists where we call it with a 0 length.
        
        This is tested by re-enabling user-script-plugin-document.html on Windows.

        * plugins/PluginStream.cpp:
        (WebCore::PluginStream::didReceiveData):

2010-10-28  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Darin Adler.

        [Chromium] History related tests REGRESSED after r70723
        https://bugs.webkit.org/show_bug.cgi?id=48513
        
        Remove backItem(), forwardItem() and currentItem() from the Chromium
        BackForwardList implementation, since they can use the base class
        behavior now (which call itemAtIndex with -1, 1, and 0 respectively).

        * history/BackForwardList.h:
        * history/BackForwardListChromium.cpp:

2010-10-28  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Tony Chang.

        chrome.dll!WebCore::Node::shadowAncestorNode ReadAV@NULL (98643190851b5662363449cc7303d8a5)
        https://bugs.webkit.org/show_bug.cgi?id=47888

        The crash was caused by the while loop in ApplyStyleCommand::fixRangeAndApplyInlineStyle
        not considering the case where startNode is the root editable element.
        Fixed the bug by not entering the loop when startNode is the editable root.

        Test: editing/style/fix-range-from-root-editable-crash.html

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::fixRangeAndApplyInlineStyle):

2010-10-28  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Ariya Hidayat.

        [Texmap] [Qt] Texture mapper initial implementation
        https://bugs.webkit.org/show_bug.cgi?id=47070

        Build fix, some wrong changes slipped into the previous patch.
        No new tests: build fix.

        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/opengl/TextureMapperGL.cpp:
        (WebCore::BitmapTextureGL::setContentsToImage):
        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp:
        (WebCore::TextureMapperNode::uploadTextureFromContent):
        (WebCore::TextureMapperNode::paintRecursive):
        * platform/qt/QWebPageClient.h:
        (QWebPageClient::setRootGraphicsLayer):

2010-10-28  David Hyatt  <hyatt@apple.com>

        Reviewed by James Robinson.

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

        Backgrounds don't work right with vertical RenderInlines. Make background painting
        do the right thing for vertical strips.

        Added fast/blockflow/background-* tests

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintFillLayer):

2010-10-28  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Adam Roben.

        Seeking by very small increment doesn't generate 'seeked' event
        https://bugs.webkit.org/show_bug.cgi?id=48530

        Test: media/video-seek-by-small-increment.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::seek): Ask the media engine for its closest time value so we can
        avoid asking it to seek to the current time.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::mediaTimeForTimeValue): New.
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::mediaTimeForTimeValue): Ditto.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::mediaTimeForTimeValue): Return the closest value in the movie's time scale.

        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::mediaTimeForTimeValue): Ditto
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.h:

        * platform/graphics/win/QTMovie.cpp:
        (QTMovie::timeScale): Return the movie's time scale.
        * platform/graphics/win/QTMovie.h:

2010-10-28  David Hyatt  <hyatt@apple.com>

        Reviewed by Beth Dakin.

        https://bugs.webkit.org/show_bug.cgi?id=48443
        
        Border images don't work right with vertical RenderInlines. Make border/mask/background painting
        do the right thing for vertical strips.

        Added fast/blockflow/border-image-* tests.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintBoxDecorations):
        (WebCore::InlineFlowBox::paintMask):

2010-10-28  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Roben.

        Port ContextMenuItemWin.cpp to WinCE
        https://bugs.webkit.org/show_bug.cgi?id=48407

        * platform/win/ContextMenuItemWin.cpp:

2010-10-28  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        queryCommandValue should fall back to queryCommandState
        https://bugs.webkit.org/show_bug.cgi?id=48479

        Added a fallback to Command::value so that commands with a state function without a value function
        returns the value returned by the state function as a string.

        * editing/EditorCommand.cpp:
        (WebCore::Editor::Command::value):

2010-10-28  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed. Rolling out r70800.

2010-10-28  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=48551
        HTMLDocument::isFrameSet() should not depend on renderer

        No change in functionality, so no new tests.

        * html/HTMLDocument.cpp: (WebCore::HTMLDocument::isFrameSet): Omit the check for renderer.

        * rendering/RenderLayer.h: Removed unneeded includes and forward declarations.

2010-10-28  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: make legacy resource tracking optional in the native code,
        make cookeis work against new resource manager.
        https://bugs.webkit.org/show_bug.cgi?id=48532

        * inspector/InspectorCSSStore.cpp:
        (WebCore::InspectorCSSStore::resourceStyleSheetText):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::~InspectorController):
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::releaseFrontendLifetimeAgents):
        (WebCore::InspectorController::populateScriptObjects):
        (WebCore::InspectorController::unbindAllResources):
        (WebCore::InspectorController::didCommitLoad):
        (WebCore::InspectorController::frameDetachedFromParent):
        (WebCore::InspectorController::didLoadResourceFromMemoryCache):
        (WebCore::InspectorController::identifierForInitialRequest):
        (WebCore::InspectorController::willSendRequest):
        (WebCore::InspectorController::markResourceAsCached):
        (WebCore::InspectorController::didReceiveResponse):
        (WebCore::InspectorController::didReceiveContentLength):
        (WebCore::InspectorController::didFinishLoading):
        (WebCore::InspectorController::didFailLoading):
        (WebCore::InspectorController::resourceRetrievedByXMLHttpRequest):
        (WebCore::InspectorController::scriptImported):
        (WebCore::InspectorController::setResourceTrackingEnabled):
        (WebCore::InspectorController::getCookies):
        (WebCore::InspectorController::deleteCookie):
        (WebCore::InspectorController::didCreateWebSocket):
        (WebCore::InspectorController::willSendWebSocketHandshakeRequest):
        (WebCore::InspectorController::didReceiveWebSocketHandshakeResponse):
        (WebCore::InspectorController::didCloseWebSocket):
        (WebCore::InspectorController::breakpointsSettingKey):
        (WebCore::InspectorController::getResourceContent):
        * inspector/InspectorController.h:
        * inspector/InspectorResource.cpp:
        (WebCore::InspectorResource::updateScriptObject):
        (WebCore::InspectorResource::markFailed):
        * inspector/InspectorResource.h:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::populateObjectWithFrameResources):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype._mimeTypeIsConsistentWithType):
        * inspector/front-end/ResourceManager.js:
        (WebInspector.ResourceManager.prototype._updateResourceWithResponse):
        (WebInspector.ResourceManager.prototype.didFailLoading):
        * inspector/front-end/inspector.js:
        (WebInspector.updateResource):

2010-10-28  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: fix pausing on next JavaScript statement
        https://bugs.webkit.org/show_bug.cgi?id=48534

        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::InspectorDebuggerAgent):
        (WebCore::InspectorDebuggerAgent::schedulePauseOnNextStatement):
        (WebCore::InspectorDebuggerAgent::cancelPauseOnNextStatement):
        (WebCore::InspectorDebuggerAgent::pause):
        (WebCore::InspectorDebuggerAgent::didPause):
        * inspector/InspectorDebuggerAgent.h:

2010-10-28  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by David Hyatt.

        Fix for Bug 14550 - Non-layout style change does not update nested first-letter
        https://bugs.webkit.org/show_bug.cgi?id=14550

        If a render text fragment is accompanied by a first letter, update the
        first letter's style when the fragment's style is changed.

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

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::styleDidChange): Stop calling updateFirstLetter
        from here.
        * rendering/RenderBlock.h: Make updateFirstLetter accessbile from
        RenderTextFragment.
        * rendering/RenderTextFragment.cpp:
        (WebCore::RenderTextFragment::styleDidChange): If appropriate, update
        first letter after removing stale cached pseudo style.
        (WebCore::RenderTextFragment::blockForAccompanyingFirstLetter): Helper
        to get the block for the first letter.
        * rendering/RenderTextFragment.h:
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::removeCachedPseudoStyle): Remove the specified
        pseudo style from cache.
        * rendering/style/RenderStyle.h:

2010-10-28  Benoit Jacob  <bjacob@mozilla.com>

        Reviewed by Kenneth Russell.

        Ensure that WebGL stencil buffers are correctly initialized
        https://bugs.webkit.org/show_bug.cgi?id=48351

        * html/canvas/WebGLFramebuffer.cpp:
        (WebCore::WebGLFramebuffer::initializeRenderbuffers):

2010-10-28  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Adele Peterson.

        AX: multi select group option does not handle setting of AXSelectedChildren correctly
        https://bugs.webkit.org/show_bug.cgi?id=48464

        Ensure that when selecting an item from a <select> element, it accounts for <optgroups>.

        Test: platform/mac/accessibility/select-element-selection-with-optgroups.html

        * accessibility/AccessibilityListBoxOption.cpp:
        (WebCore::AccessibilityListBoxOption::setSelected):

2010-10-28  Dan Bernstein  <mitz@apple.com>

        Reviewed by Adam Roben.

        No longer soft-link zlib
        https://bugs.webkit.org/show_bug.cgi?id=48004

        * platform/graphics/WOFFFileFormat.cpp:
        (WebCore::convertWOFFToSfnt): Removed Windows-speciific code to soft-link
        zlib.

2010-10-27  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        Work around a Mac driver bug in generateMipmap
        https://bugs.webkit.org/show_bug.cgi?id=48489

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::generateMipmap): Make sure minFilter is set to NEAREST_MIPMAP_LINEAR before generateMipmap, and after the call, set it back to the original value.
        * html/canvas/WebGLTexture.h:
        (WebCore::WebGLTexture::getMinFilter): Return the cached minFilter value.

2010-10-28  Mikhail Naganov  <mnaganov@chromium.org>

        [Chromium clang] Unreviewed. Fix forward declaration of 'struct FileMetadata'.

        See http://build.chromium.org/p/chromium.fyi/builders/Chromium%20Linux%20Debug%20Clang/builds/753/steps/compile/logs/stdio

        * fileapi/FileSystemCallbacks.h:
        * platform/AsyncFileSystemCallbacks.h:

2010-10-28  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Bring backend-frontend message format to follow the protocol specification
        https://bugs.webkit.org/show_bug.cgi?id=48406

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::getStyles):
        (WebCore::InspectorDOMAgent::applyStyleText):
        (WebCore::InspectorDOMAgent::buildObjectForStyle):
        (WebCore::InspectorDOMAgent::populateObjectWithStyleProperties):
        (WebCore::InspectorDOMAgent::buildObjectForStyleSheet):
        (WebCore::InspectorDOMAgent::buildObjectForRule):
        * inspector/InspectorDOMAgent.h:
        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun.evalCallback.selectorsCallback):
        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun):
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleModel.parseRuleArrayPayload):
        (WebInspector.CSSStyleModel.prototype.getStylesAsync):
        (WebInspector.CSSStyleModel.prototype.getComputedStyleAsync):
        (WebInspector.CSSStyleModel.prototype.getInlineStyleAsync):
        (WebInspector.CSSStyleModel.prototype.setCSSText):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.CSSStyleDeclaration):
        (WebInspector.CSSStyleDeclaration.parsePayload):
        (WebInspector.CSSStyleDeclaration.prototype.get allProperties):
        (WebInspector.CSSStyleDeclaration.prototype.getLiveProperty):
        (WebInspector.CSSStyleDeclaration.prototype.getPropertyValue):
        (WebInspector.CSSStyleDeclaration.prototype.getPropertyPriority):
        (WebInspector.CSSStyleDeclaration.prototype.getPropertyShorthand):
        (WebInspector.CSSStyleDeclaration.prototype.isPropertyImplicit):
        (WebInspector.CSSStyleDeclaration.prototype.getShorthandValue):
        (WebInspector.CSSStyleDeclaration.prototype.getShorthandPriority):
        (WebInspector.CSSStyleDeclaration.prototype.appendProperty):
        (WebInspector.CSSStyleDeclaration.prototype.propertyAt):
        (WebInspector.CSSRule):
        (WebInspector.CSSRule.parsePayload):
        (WebInspector.CSSRule.prototype.get isUserAgent):
        (WebInspector.CSSRule.prototype.get isUser):
        (WebInspector.CSSRule.prototype.get isViaInspector):
        (WebInspector.CSSRule.prototype.get isRegular):
        (WebInspector.CSSProperty):
        (WebInspector.CSSProperty.parsePayload):
        (WebInspector.CSSProperty.prototype.get propertyText):
        (WebInspector.CSSProperty.prototype.get isLive):
        (WebInspector.CSSProperty.prototype.get active):
        (WebInspector.CSSProperty.prototype.get styleBased):
        (WebInspector.CSSProperty.prototype.get inactive):
        (WebInspector.CSSProperty.prototype.get disabled):
        (WebInspector.CSSProperty.prototype.setText):
        (WebInspector.CSSProperty.prototype.setValue):
        (WebInspector.CSSProperty.prototype.setDisabled.callback):
        (WebInspector.CSSProperty.prototype.setDisabled):
        * inspector/front-end/MetricsSidebarPane.js:
        (WebInspector.MetricsSidebarPane.prototype.update.callback):
        (WebInspector.MetricsSidebarPane.prototype.update.inlineStyleCallback):
        (WebInspector.MetricsSidebarPane.prototype.update):
        (WebInspector.MetricsSidebarPane.prototype._update):
        (WebInspector.MetricsSidebarPane.prototype.editingCommitted.callback):
        (WebInspector.MetricsSidebarPane.prototype.editingCommitted.setEnabledValueCallback):
        (WebInspector.MetricsSidebarPane.prototype.editingCommitted):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype.update):
        (WebInspector.StylesSidebarPane.prototype._rebuildUpdate):
        (WebInspector.StylesSidebarPane.prototype._refreshStyleRules):
        (WebInspector.StylesSidebarPane.prototype._rebuildStyleRules):
        (WebInspector.StylesSidebarPane.prototype._markUsedProperties):
        (WebInspector.StylesSidebarPane.prototype._containsInherited):
        (WebInspector.StylePropertiesSection):
        (WebInspector.StylePropertiesSection.prototype.isPropertyInherited):
        (WebInspector.StylePropertiesSection.prototype.isPropertyOverloaded):
        (WebInspector.StylePropertiesSection.prototype.onpopulate):
        (WebInspector.StylePropertiesSection.prototype.addNewBlankProperty):
        (WebInspector.StylePropertiesSection.prototype.editingSelectorCommitted.successCallback):
        (WebInspector.StylePropertiesSection.prototype.editingSelectorCommitted):
        (WebInspector.ComputedStylePropertiesSection.prototype._isPropertyInherited):
        (WebInspector.ComputedStylePropertiesSection.prototype.onpopulate):
        (WebInspector.ComputedStylePropertiesSection.prototype.rebuildComputedTrace):
        (WebInspector.StylePropertyTreeElement):
        (WebInspector.StylePropertyTreeElement.prototype.get disabled):
        (WebInspector.StylePropertyTreeElement.prototype.get name):
        (WebInspector.StylePropertyTreeElement.prototype.get priority):
        (WebInspector.StylePropertyTreeElement.prototype.get value):
        (WebInspector.StylePropertyTreeElement.prototype.get parsedOk):
        (WebInspector.StylePropertyTreeElement.prototype):
        (WebInspector.StylePropertyTreeElement.prototype.):

2010-10-27  MORITA Hajime  <morrita@google.com>

        Reviewed by Kent Tamura.

        WebKit needs to expose an Element::spellcheck attribute to javascript.
        https://bugs.webkit.org/show_bug.cgi?id=25536

        Published Element.spellcheck property on IDL, implemented it.
        
        Tests: editing/spelling/spelling-attribute-change.html
               fast/dom/HTMLElement/spellcheck.html

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::spellcheck):
        (WebCore::HTMLElement::setSpellcheck):
        * html/HTMLElement.h:
        * html/HTMLElement.idl:

2010-10-27  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: make debugger work against new resource manager.
        https://bugs.webkit.org/show_bug.cgi?id=48376

        * inspector/Inspector.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::identifierForInitialRequest):
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::identifierForInitialRequest):
        * inspector/InspectorResourceAgent.h:
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._onGetResourceContent):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype.set content):
        * inspector/front-end/ResourceManager.js:
        (WebInspector.ResourceManager):
        (WebInspector.ResourceManager.prototype.identifierForInitialRequest):
        (WebInspector.ResourceManager.prototype._createResource):
        (WebInspector.ResourceManager.prototype.willSendRequest):
        (WebInspector.ResourceManager.prototype._updateResourceWithRequest):
        (WebInspector.ResourceManager.prototype.didFinishLoading):
        (WebInspector.ResourceManager.prototype.didFailLoading):
        (WebInspector.ResourceManager.prototype.setOverrideContent):
        (WebInspector.ResourceManager.prototype._processCachedResources):
        (WebInspector.ResourceManager.prototype._addFramesRecursively):
        (WebInspector.ResourceManager.prototype.resourceForURL):
        (WebInspector.ResourceManager.prototype.addConsoleMessage):
        (WebInspector.ResourceManager.prototype.clearConsoleMessages):
        (WebInspector.ResourceManager.prototype.forAllResources):
        (WebInspector.ResourceManager.prototype._bindResourceURL):
        (WebInspector.ResourceManager.prototype._unbindResourceURL):
        (WebInspector.ResourceManager.getContent):
        (WebInspector.ResourceTreeModel):
        (WebInspector.ResourceTreeModel.prototype.didCommitLoadForFrame):
        (WebInspector.ResourceTreeModel.prototype.addResourceToFrame):
        (WebInspector.ResourceTreeModel.prototype._clearResources):
        * inspector/front-end/StoragePanel.js:
        (WebInspector.StoragePanel.prototype.addOrUpdateFrame):
        * inspector/front-end/networkPanel.css:
        (.network.panel .resources-dividers):

2010-10-28  Andy Estes  <aestes@apple.com>

        One more Qt fix due to r70754.

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::hasValidClassId):

2010-10-28  Pascal Massimino  <pascal.massimino@gmail.com>

        Reviewed by Adam Barth.

        fix setSize() call flow: it was only called the first
        time (when onlySize is true)
        Bug URL: https://bugs.webkit.org/show_bug.cgi?id=48494

        Testing: difficult to exercise the bug, as it requires
        some manual flow (change tab, scroll,...)

        * platform/image-decoders/webp/WEBPImageDecoder.cpp:
        (WebCore::WEBPImageDecoder::decode):
           fix: call setSize() even when onlySize is false

2010-10-28  Andy Estes  <aestes@apple.com>

        Fix the Qt build after r70754.

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::hasValidClassId):
        (WebCore::HTMLObjectElement::updateWidget):
        * html/HTMLObjectElement.h:

2010-10-28  Andy Estes  <aestes@apple.com>

        Reviewed by Adam Barth.

        Fix a test failure introduced in r70748 by supporting Qt's non-standard
        use of classid.
        https://bugs.webkit.org/show_bug.cgi?id=45679

        * html/HTMLObjectElement.cpp:
        (WebCore::objectHasSupportedClassId): Return true if the object's
        serviceType is 'application/x-qt-plugin'.
        (WebCore::HTMLObjectElement::updateWidget): Do not render fallback
        content if a non-empty classid is specified for a Qt plugin object.

2010-10-28  Ivan Krstić  <ike@apple.com>

        Reviewed by Mark Rowe.

        Remove unused experimental proxied panel interface.
        <rdar://problem/7237059>

        * WebCore.exp.in:
        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:

2010-10-27  Andy Estes  <aestes@apple.com>

        Reviewed by Adam Barth.

        r66156 broke AtlasCT library, formerly affected http://map.d.co.il/
        https://bugs.webkit.org/show_bug.cgi?id=45679

        This patch removes WebKit's map of classid values to MIME types. It also
        changes the behavior of object elements to render fallback content when
        a non-empty classid attribute is specified, which is the behavior HTML5
        specifies when a UA encounters a classid it doesn't understand.

        Test: fast/replaced/object-with-non-empty-classid-triggers-fallback.html

        * html/HTMLObjectElement.cpp: Remove serviceTypeForClassId(),
        createClassIdToTypeMap(), and the ClassIdToTypeMap typedef.
        (WebCore::HTMLObjectElement::updateWidget): Do not call
        serviceTypeForClassId() when there is no type attribute, and render
        fallback content if the classid attribute is non-empty.

2010-10-27  Eric Uhrhane  <ericu@chromium.org>

        Reviewed by David Levin.

        [Chromium] Metadata queries should return full file info, not just modification time
        https://bugs.webkit.org/show_bug.cgi?id=48098

        LayoutTests that use this functionality via WorkerAsyncFileWriter are in review.

        Build file changes to add FileMetadata.
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:

        The rest of the changes here just pass the new FileMetadata object through calls that used to take a modification time.
        * platform/FileMetadata.h: Added.
        (WebCore::FileMetadata::FileMetadata):
        * fileapi/FileSystemCallbacks.cpp:
        (WebCore::FileSystemCallbacksBase::didReadMetadata):
        (WebCore::MetadataCallbacks::didReadMetadata):
        * fileapi/FileSystemCallbacks.h:
        * platform/AsyncFileSystemCallbacks.h:

2010-10-27  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Add VectorMath files
        https://bugs.webkit.org/show_bug.cgi?id=48467

        No new tests since audio API is not yet implemented.

        * platform/audio/VectorMath.cpp: Added.
        (WebCore::VectorMath::vsmul):
        (WebCore::VectorMath::vadd):
        * platform/audio/VectorMath.h: Added.

2010-10-27  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Fixup files affected by VectorMath and related API changes
        https://bugs.webkit.org/show_bug.cgi?id=48481

        No new tests since audio API is not yet implemented.

        * platform/audio/AudioBus.cpp:
        * platform/audio/AudioChannel.cpp:
        * platform/audio/Biquad.cpp:
        * platform/audio/FFTConvolver.cpp:
        * platform/audio/FFTConvolver.h:
        * platform/audio/Panner.cpp:
        (WebCore::Panner::create):
        * platform/audio/Reverb.cpp:
        (WebCore::calculateNormalizationScale):
        (WebCore::Reverb::initialize):
        (WebCore::Reverb::process):
        * platform/audio/ReverbAccumulationBuffer.cpp:
        * platform/audio/ReverbAccumulationBuffer.h:
        * platform/audio/ReverbConvolver.cpp:
        (WebCore::ReverbConvolver::ReverbConvolver):
        (WebCore::ReverbConvolver::process):
        * platform/audio/ReverbConvolver.h:
        * platform/audio/ReverbConvolverStage.cpp:
        (WebCore::ReverbConvolverStage::ReverbConvolverStage):
        * platform/audio/ReverbConvolverStage.h:
        * platform/audio/ReverbInputBuffer.h:

2010-10-27  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Dumitru Daniliuc.

        DOMFileSystem's reference should be kept while there're any active Entries/callbacks
        https://bugs.webkit.org/show_bug.cgi?id=47535

        Changed to keep DOMFileSystem's reference in each EntryBase, DirectoryReaderBase, EntryCallbacks and EntriesCallbacks.

        Test: fast/filesystem/filesystem-reference.html

        * fileapi/DOMFileSystemBase.cpp:
        (WebCore::DOMFileSystemBase::readDirectory): Changed to pass/take
        PassRefPtr but not a raw pointer.
        * fileapi/DOMFileSystemBase.h:
        * fileapi/DirectoryEntry.cpp:
        (WebCore::DirectoryEntry::DirectoryEntry): Ditto.
        (WebCore::DirectoryEntry::createReader):
        * fileapi/DirectoryEntry.h:
        (WebCore::DirectoryEntry::create): Ditto.
        * fileapi/DirectoryEntrySync.cpp:
        (WebCore::DirectoryEntrySync::DirectoryEntrySync): Ditto.
        * fileapi/DirectoryEntrySync.h:
        (WebCore::DirectoryEntrySync::create): Ditto.
        * fileapi/DirectoryReader.h:
        (WebCore::DirectoryReader::filesystem):
        * fileapi/DirectoryReaderBase.h:
        (WebCore::DirectoryReaderBase::filesystem):
        * fileapi/Entry.cpp:
        (WebCore::Entry::Entry): Ditto.
        * fileapi/Entry.h:
        (WebCore::Entry::filesystem):
        * fileapi/EntryBase.h:
        (WebCore::EntryBase::filesystem):
        (WebCore::EntryBase::EntryBase): Ditto.
        * fileapi/EntrySync.cpp:
        (WebCore::EntrySync::create): Ditto.
        (WebCore::EntrySync::getParent):
        (WebCore::EntrySync::EntrySync): Ditto.
        * fileapi/EntrySync.h:
        (WebCore::EntrySync::filesystem):
        * fileapi/FileEntry.cpp:
        (WebCore::FileEntry::FileEntry): Ditto.
        * fileapi/FileEntry.h:
        (WebCore::FileEntry::create): Ditto.
        * fileapi/FileEntrySync.cpp:
        (WebCore::FileEntrySync::FileEntrySync): Ditto.
        * fileapi/FileEntrySync.h:
        (WebCore::FileEntrySync::create): Ditto.
        * fileapi/FileSystemCallbacks.cpp:
        (WebCore::EntriesCallbacks::create): Ditto.
        (WebCore::EntriesCallbacks::EntriesCallbacks): Ditto.
        * fileapi/FileSystemCallbacks.h:

2010-10-27  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Eric Seidel.

        Fix for Bug 48310 - SVG font-face-name without name attribute causes a crash
        https://bugs.webkit.org/show_bug.cgi?id=48310

        Test: svg/custom/font-face-name-without-name-attr.svg

        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::rebuildFontFace): Don't create src
        property if the src value list is empty.
        * svg/SVGFontFaceSrcElement.cpp:
        (WebCore::SVGFontFaceSrcElement::srcValue): Don't add empty src
        values to the src value list.

2010-10-27  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Allow AudioDSPKernel to function without an AudioDSPKernelProcessor
        https://bugs.webkit.org/show_bug.cgi?id=48472

        No new tests since audio API is not yet implemented.

        * platform/audio/AudioDSPKernel.h:
        (WebCore::AudioDSPKernel::AudioDSPKernel):
        (WebCore::AudioDSPKernel::sampleRate):

2010-10-27  Enrica Casucci  <enrica@apple.com>

        Reviewed by Alexey Proskuryakov.

        Support Appkit key bindings and custom key bindings in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=48271
        <rdar://problem/7660723>

        * dom/KeyboardEvent.h:
        (WebCore::KeypressCommand::KeypressCommand): Added default constructor and modified assert for text
        insertion command constructor to support WebKit2 scenarios.
        The default constructor is needed to support the generated WebKit2 message processing code.

2010-10-26  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        WebKitTestRunner needs to support layoutTestController.dumpBackForwardList
        https://bugs.webkit.org/show_bug.cgi?id=42322
        rdar://problem/8193631

        WebKitTestRunner needs to support layoutTestController.clearBackForwardList
        https://bugs.webkit.org/show_bug.cgi?id=42333
        rdar://problem/8193643

        * WebCore.exp.in: Updated exports.

        * history/BackForwardList.h: Added comments about future refactoring.
        Moved functions that are not called inside WebCore into a separate
        section, to be removed later. Added an isActive function to replace the
        use of enabled() and entries().

        * history/BackForwardListImpl.h: Removed isBackForwardListImpl.
        Marked virtual function overrides virtual explicitly, except for the
        ones that will be non-virtual once we make the changes above.
        Added the isActive function.

        * history/PageCache.cpp:
        (WebCore::logCanCachePageDecision): Use isActive.
        (WebCore::PageCache::canCache): Ditto.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkDidPerformFirstNavigation): Check
        using currentItem, backItem, and forwardItem instead of
        using entries.

        * page/Settings.cpp:
        (WebCore::Settings::setUsesPageCache): Loop through the back/forward
        list entries using backListCount and forwardListCount instead of
        using entries.

2010-10-27  Chris Rogers  <crogers@google.com>

        Reviewed by Chris Marrin.

        Add ENABLE_WEB_AUDIO feature enable flag (initially disabled) to build-webkit
        https://bugs.webkit.org/show_bug.cgi?id=48279

        No new tests since flag is disabled.

        * Configurations/FeatureDefines.xcconfig:

2010-10-27  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Add AudioResamplerKernel files
        https://bugs.webkit.org/show_bug.cgi?id=47624

        No new tests since audio API is not yet implemented.

        * platform/audio/AudioResamplerKernel.cpp: Added.
        (WebCore::AudioResamplerKernel::AudioResamplerKernel):
        (WebCore::AudioResamplerKernel::getSourcePointer):
        (WebCore::AudioResamplerKernel::process):
        (WebCore::AudioResamplerKernel::reset):
        (WebCore::AudioResamplerKernel::rate):
        * platform/audio/AudioResamplerKernel.h: Added.

2010-10-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Ojan Vafai.

        REGRESSION(66511): CORDYS Process Factory doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=48453

        When Ojan refactored this function in 66511, he missed an "else",
        which causes us to generated HIERARCHY_REQUEST_ERR in some cases where
        we're not supposed to.  This patch restores the "else" behavior (using
        an early return) and adds a test for the cases that caused problems in
        the field.

        Test: fast/dom/allowed-children.html

        * dom/Node.cpp:
        (WebCore::isChildTypeAllowed):

2010-10-27  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=48385 Add WebKit 
        SPI to scale a WebView
        -and corresponding-
        <rdar://problem/8107667>

        This patch adds SPI to Mac WebKit that scales the page by the given 
        scale factor. The scale factor is factored into the RenderStyle's 
        transform.

        Set the current pageScale for the document.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::styleForDocument):

        Frame keeps track of the page scale factor. When 
        scalePage() is called, it modifies the RenderView's style to 
        include a transform of the appropriate scale and forces a style 
        recalc.
        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        (WebCore::Frame::scalePage):
        * page/Frame.h:
        (WebCore::Frame::pageScaleFactor):
        * WebCore.exp.in:

        Add a scale to the transformation matrix.
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::setPageScaleTransform):
        * rendering/style/RenderStyle.h:

2010-10-27  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        REGRESSION (r70335): Incorrect article layout in Safari Reader
        https://bugs.webkit.org/show_bug.cgi?id=48436

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::getMatchedCSSRules): Return rules from all origins if the cross-origin
        check is disabled.
        * page/Settings.cpp:
        (WebCore::Settings::Settings): Initialize m_crossOriginCheckInGetMatchedCSSRulesDisabled.
        * page/Settings.h:
        (WebCore::Settings::setCrossOriginCheckInGetMatchedCSSRulesDisabled): Added this accessor.
        (WebCore::Settings::crossOriginCheckInGetMatchedCSSRulesDisabled): Ditto.

2010-10-27  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        refactor the nested large switch statements in GraphicsContext3DCG.cpp:getImageData()
        https://bugs.webkit.org/show_bug.cgi?id=47027

        * platform/graphics/GraphicsContext3D.cpp:
        (WebCore::doPacking): ASSERT false if undefined format is passed in.
        * platform/graphics/GraphicsContext3D.h: Add kSourceFormatUndefined enum.
        * platform/graphics/cg/GraphicsContext3DCG.cpp:
        (WebCore::getSourceDataFormat): Decide source data format from componentsPerPixel, alpha format, bitsPerComponet, etc.
        (WebCore::GraphicsContext3D::getImageData): Refactor the code to use getSourceDataFormat and remove nested switches.

2010-10-27  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Barth.

        Use WTF::StringHasher::createBlobHash where possible
        https://bugs.webkit.org/show_bug.cgi?id=48228

        Replace StringImpl::computeHash with StringHasher::createBlobHash.
        This removes many duplicated code.

        * bindings/js/JSSVGPODTypeWrapper.h:
        (WebCore::PODTypeWrapperCacheInfoHash::hash):
        * page/SecurityOriginHash.h:
        (WebCore::SecurityOriginHash::hash):
        * platform/cf/SchedulePair.h:
        (WebCore::SchedulePairHash::hash):
        * platform/graphics/FontCache.cpp:
        (WebCore::computeHash):
        * platform/graphics/chromium/FontPlatformDataChromiumWin.h:
        (WebCore::FontPlatformData::RefCountedHFONT::hash):
        * platform/graphics/cocoa/FontPlatformData.h:
        (WebCore::FontPlatformData::hash):
        * platform/graphics/gtk/FontPlatformDataPango.h:
        (WebCore::FontPlatformData::hash):
        * platform/graphics/wince/FontPlatformData.cpp:
        (WebCore::FixedSizeFontDataKeyHash::hash):
        * platform/graphics/wx/FontPlatformDataWx.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::computeHash):
        * plugins/PluginPackage.cpp:
        (WebCore::PluginPackage::hash):
        * plugins/win/PluginPackageWin.cpp:
        (WebCore::PluginPackage::hash):
        * svg/DeprecatedSVGAnimatedTemplate.h:
        (WebCore::DeprecatedSVGAnimatedTypeWrapperKeyHash::hash):
        * svg/properties/SVGAnimatedPropertyDescription.h:
        (WebCore::SVGAnimatedPropertyDescriptionHash::hash):

2010-10-27  Tony Chang  <tony@chromium.org>

        Unreviewed, build fix after r70692.

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintBorder):

2010-10-27  Leandro Pereira  <leandro@profusion.mobi>

        Unreviewed. Build fix after r70651.

        * CMakeListsEfl.txt: Add SoupURIUtils.cpp.

2010-10-27  Crystal Zhang  <haizhang@rim.com>

        Reviewed by Eric Carlson.

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

        Fix an issue where we were passing the wrong parameter
        to MIMETypeRegistry::getMIMETypeForExtension().

        * platform/MIMETypeRegistry.cpp:

2010-10-27  David Hyatt  <hyatt@apple.com>

        Reviewed by Beth Dakin.

        https://bugs.webkit.org/show_bug.cgi?id=48449
        
        Make border drawing work correctly with vertical inline flows.  The top and bottom edge have to be omitted
        rather than the left and right edges.
        
        Also discovered that border-radius is broken with the new path-based-drawing code for all inline flows.  This
        is a regression from the old drawing code.  I patched the code to be correct rather than clipping out stuff
        that it shouldn't and applying border-radii on lines that don't even have them.

        Added fast/blockflow/border-vertical-lr.html and fast/borders/border-radius-inline-flow.html

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintBorder):
        (WebCore::RenderBoxModelObject::clipBorderSidePolygon):
        * rendering/RenderBoxModelObject.h:

2010-10-27  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [Cairo] Font fallback determination is very ineffecient
        https://bugs.webkit.org/show_bug.cgi?id=42052

        When choosing a fallback font in FontCache::getFontDataForCharacters, use FontConfig's
        mechanism for searching the fallback list directly, instead of scanning the list manually.
        If the font is a custom font or any other font with no FontConfig pattern associated with
        it, as FontConfig for a font that can supply the missing glyphs.

        Test: platform/gtk/fonts/custom-font-missing-glyphs.html

        * platform/graphics/cairo/FontCacheFreeType.cpp:
        (WebCore::createFontConfigPatternForCharacters): Added this helper which turns
        a collection of unicode characters into a FontConfig pattern.
        (WebCore::findBestFontGivenFallbacks): Using a FontConfig pattern created with th
        above helper and a FcFontSet of fallback fonts, this helper will find a font in
        the set which fulfills the requirments.
        (WebCore::FontCache::getFontDataForCharacters): Given an existing font with missing
        glyphs, either find an appropriate fallback font from the list of FontConfig fallbacks
        or ask FontConfig directly for an appropriate font.
        * platform/graphics/cairo/FontPlatformDataFreeType.h: Made a member mutable, as it is
        initialized lazily.

2010-10-27  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: "Reload Page and Audit on Load" fails to run audits when resource tracking is disabled
        https://bugs.webkit.org/show_bug.cgi?id=48431

        * inspector/front-end/AuditsPanel.js:
        (WebInspector.AuditsPanel.prototype._reloadResources):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype._createPanelEnabler):
        (WebInspector.ResourcesPanel.prototype._enableResourceTracking):

2010-10-27  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Dave Hyatt.

        Add a function to make sure child is allowed before adding to a
        render view. 
        https://bugs.webkit.org/show_bug.cgi?id=48328 

        Test: fast/inline/inline-child-height-width-calc-crash.html

        * rendering/RenderView.cpp:
        (WebCore::RenderView::isChildAllowed):
        * rendering/RenderView.h:

2010-10-27  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] r69296 includes a cast from GdkWindow* to GtkWindow*
        https://bugs.webkit.org/show_bug.cgi?id=48445

        Pass the pageClient GtkWidget* to gtk_xtbin_new instead of the
        GdkWindow*. The pageClient is used to get the proper visual for the
        plugin container widget.

        No new tests. This patch should prevent plugins/null-npp-getvalue-pointer.html
        from crashing.

        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::platformStart): Pass the widget instead of the window.
        * plugins/gtk/gtk2xtbin.c: Accept the widget instead of the window.
        (gtk_xtbin_new):
        * plugins/gtk/gtk2xtbin.h: Update the declaration.

2010-10-27  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by James Robinson.

        [BREWMP] Port graphics backend
        https://bugs.webkit.org/show_bug.cgi?id=40275

        Add PLATFORM(BREWMP) guard to skia's FontCustomPlatformData
        to share OS(LINUX) implementation.

        * loader/CachedFont.cpp:
        * platform/graphics/skia/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::~FontCustomPlatformData):
        (WebCore::FontCustomPlatformData::fontPlatformData):
        (WebCore::createFontCustomPlatformData):
        * platform/graphics/skia/FontCustomPlatformData.h:

2010-10-27  Satish Sampath  <satish@chromium.org>

        Unreviewed, rolling out r70665.
        http://trac.webkit.org/changeset/70665
        https://bugs.webkit.org/show_bug.cgi?id=47089

        Need to address Alexey's review comments.

        * page/SpeechInput.cpp:
        (WebCore::SpeechInput::startRecognition):
        * page/SpeechInput.h:
        * page/SpeechInputClient.h:
        * platform/mock/SpeechInputClientMock.cpp:
        (WebCore::SpeechInputClientMock::startRecognition):
        (WebCore::SpeechInputClientMock::setRecognitionResult):
        (WebCore::SpeechInputClientMock::timerFired):
        * platform/mock/SpeechInputClientMock.h:
        * rendering/TextControlInnerElements.cpp:
        (WebCore::TextControlInnerElement::attachInnerElement):
        (WebCore::SearchFieldCancelButtonElement::detach):
        (WebCore::SpinButtonElement::defaultEventHandler):
        (WebCore::InputFieldSpeechButtonElement::defaultEventHandler):
        (WebCore::InputFieldSpeechButtonElement::detach):

2010-10-27  ZHenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        Must enable GL_POINT_SPRITE in GraphicsContext3D implementations
        https://bugs.webkit.org/show_bug.cgi?id=45908

        * platform/graphics/mac/GraphicsContext3DMac.mm: Enable for Mac port.
        (WebCore::GraphicsContext3D::GraphicsContext3D):

2010-10-27  Leandro Gracia Gil  <leandrogracia@google.com>

        Reviewed by Jeremy Orlow.

        Patch the current speech input implementation to use the nearest
        language tag. The language is now passed to the startRecognition
        methods so that language-specific recognition could be used. Also added
        a second parameter to setMockSpeechInputResult for the language used in
        speech recognition.
        https://bugs.webkit.org/show_bug.cgi?id=47089

        This is the 2nd of a 4-sided patch in Chromium and WebKit. For more
        details see http://codereview.chromium.org/3615005/show and
        http://codereview.chromium.org/3595018/show. The last of the 4 patches
        depends also on the language tag validation provided by this patch:
        https://bugs.webkit.org/show_bug.cgi?id=48225.

        Test: fast/speech/input-text-language-tag.html

        * page/SpeechInput.cpp:
        (WebCore::SpeechInput::startRecognition):
        * page/SpeechInput.h:
        * page/SpeechInputClient.h:
        * platform/mock/SpeechInputClientMock.cpp:
        (WebCore::SpeechInputClientMock::startRecognition):
        (WebCore::SpeechInputClientMock::setRecognitionResult):
        (WebCore::SpeechInputClientMock::timerFired):
        * platform/mock/SpeechInputClientMock.h:
        * rendering/TextControlInnerElements.cpp:
        (WebCore::TextControlInnerElement::attachInnerElement):
        (WebCore::SearchFieldCancelButtonElement::detach):
        (WebCore::SpinButtonElement::defaultEventHandler):
        (WebCore::InputFieldSpeechButtonElement::defaultEventHandler):
        (WebCore::InputFieldSpeechButtonElement::detach):

2010-10-27  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

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

        Make basic layer positioning work with vertical-lr writing-mode.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintChildren):
        (WebCore::RenderBlock::paintFloats):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::adjustForFlippedBlocksWritingMode):
        (WebCore::RenderBox::locationOffsetIncludingFlipping):
        * rendering/RenderBox.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updateLayerPosition):

2010-10-27  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        object-deletion-behaviour.html fails with mesa backend
        https://bugs.webkit.org/show_bug.cgi?id=46667

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getFramebufferAttachmentParameter): If object_type is 0, we return early because object_name should be always be 0.

2010-10-27  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        If WebGL is running on top of a strict version of OpenGL ES it should make sure attribs have buffers assigned at all times
        https://bugs.webkit.org/show_bug.cgi?id=47964

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::validateRenderingState): Minimum checking: if input <= 0, only check if each enabled vertex attribute is bound to a buffer.
        (WebCore::WebGLRenderingContext::drawArrays): If underlying GL performs bounds checking, we still need to do the minimum checking using validateRenderingState.
        (WebCore::WebGLRenderingContext::drawElements): Ditto.
        * html/canvas/WebGLRenderingContext.h: Add a comment for input <= 0 in validateRenderingState.

2010-10-27  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Accelerated animation with missing values in keyframes is broken
        https://bugs.webkit.org/show_bug.cgi?id=48395

        r66339 changed the behavior of keyframe animations such that if a property
        is missing from a keyframe, the property will be interpolated between those
        keyframes that do have a value for the property. If a value is missing
        from the first or last keyframes, the element's unanimated style supplies
        that value.
        
        However, accelerated animations had a bug where if a value was missing
        from the first (and maybe subsequent) or last (and maybe preceding) keyframes,
        the animation data given to the GraphicsLayer would be missing the style from the
        first or final keyframe.

        Tests: animations/missing-values-first-keyframe.html
               animations/missing-values-last-keyframe.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::startAnimation):

2010-10-27  Renata Hodovan  <reni@inf.u-szeged.hu>

        Reviewed by Dirk Schulze.

        Calling the super class of RenderSVGImage::updateFromElement is missing
        https://bugs.webkit.org/show_bug.cgi?id=48347

        RenderSVGImage::updateFromElement is an inherited function of RenderSVGModelObject what needs calling its ancestor.
        Lack of this call caused filters were not invalidated at SVGImage objects.

        No new tests, because this modification is covered by SVGFEConvolveMatrixElement's dynamic update tests.

        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::updateFromElement):

2010-10-27  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Dirk Schulze.

        Ignore invalid blend modes
        https://bugs.webkit.org/show_bug.cgi?id=48371

        Test: svg/filters/feBlend-invalid-mode.xhtml

        * platform/graphics/filters/FEBlend.cpp:
        (WebCore::FEBlend::apply):

2010-10-27  Sergio Villar Senin  <svillar@igalia.com>

        Reviewed by Martin Robinson.

        [Gtk] http/tests/xmlhttprequest/basic-auth-default.html fails
        https://bugs.webkit.org/show_bug.cgi?id=38956

        Added a new utility function that turns SoupURIs into
        KURLs. That addresses some issues with SoupURIs like for example
        soup_uri_to_string ignoring the URI password. Basic authentication
        using URL credentials should work now.

        * GNUmakefile.am:
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::loadResourceSynchronously):
        * platform/network/soup/ResourceRequestSoup.cpp:
        (WebCore::ResourceRequest::updateFromSoupMessage):
        * platform/network/soup/ResourceResponseSoup.cpp:
        (WebCore::ResourceResponse::updateFromSoupMessage):
        * platform/network/soup/SoupURIUtils.cpp: Added.
        (WebCore::soupURIToKURL):
        * platform/network/soup/SoupURIUtils.h: Added.

2010-10-27  Ademar de Souza Reis Jr  <ademar.reis@openbossa.org>

        Reviewed by Andreas Kling.

        Remove references to ancient QGVLauncher and QtLauncher
        https://bugs.webkit.org/show_bug.cgi?id=48430

        * manual-tests/plugins/windowed.html: change to QtTestBrowser
        * manual-tests/plugins/windowless.html: ditto

2010-10-27  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Csaba Osztrogonác.

        [WINCE] Buildfix after r70400.
        https://bugs.webkit.org/show_bug.cgi?id=48419

        * platform/wince/TemporaryLinkStubs.cpp: Added.
        (WebCore::setCookieStoragePrivateBrowsingEnabled):

2010-10-27  Satish Sampath  <satish@chromium.org>

        Reviewed by Steve Block.

        Add runtime flag check before enabling speech input in code.
        https://bugs.webkit.org/show_bug.cgi?id=48426

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::isSpeechEnabled): Added runtime flag check.

2010-10-27  Adam Roben  <aroben@apple.com>

        Only decompress pixel buffers when needed (and fix a crash in the
        process)

        Fixes <http://webkit.org/b/48417> Crash when running
        compositing/video/video-background-color.html on Windows

        Reviewed by Anders Carlsson.

        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::paint): Only
        decompress the pixel buffer when it has an incompatible format. This
        also has the benefit of only decompressing the buffer when a
        QTDecompressionSession has been created! (I assume this was just a typo
        from when this code was added in r70252.)

2010-10-27  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Martin Robinson.

        getTextAtOffset returns incorrect results if a link includes text and an image
        https://bugs.webkit.org/show_bug.cgi?id=47365

        Properly consider text under a non-text renderer in textForObject.

        We need to check all the children under a non-text renderer, if
        any, to consider when current object is not a text object but some
        of its children are, in order not to miss those portions of text
        by not properly handling those situations.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (textForRenderer): New. Get the text for a RenderObject's children.
        (textForObject): Use the new textForRenderer function.

2010-10-26  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Rob Buis.

        Convert SVGRect to the new SVGPropertyTearOff concept
        https://bugs.webkit.org/show_bug.cgi?id=48204

        Convert the next SVG primitive type to use the SVGPropertyTearOff concept: SVGRect.
        Added new test verifying that StrictTypeChecking is enabled for SVGRect. Refactor and share code between JSC/V8/ObjC generators.

        Test: svg/dom/SVGRect.html

        * GNUmakefile.am: Add SVGAnimatedRect.h to build.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * bindings/scripts/CodeGenerator.pm: Refactor SVGPropertyTearOff handling, and share code between JSC/V8/ObjC generators.
        * bindings/scripts/CodeGeneratorJS.pm: Ditto.
        * bindings/scripts/CodeGeneratorObjC.pm: Ditto.
        * bindings/scripts/CodeGeneratorV8.pm: Ditto.
        * svg/DeprecatedSVGAnimatedPropertyTraits.h: Remove SVGAnimatedRect handling.
        * svg/DeprecatedSVGAnimatedTemplate.h: Ditto.
        * svg/SVGAngle.idl: Remove [SVGProperty] flag.
        * svg/SVGAnimatedAngle.idl: Remove [SVGAnimatedProperty] flag.
        * svg/SVGAnimatedLength.idl: Ditto.
        * svg/SVGAnimatedLengthList.idl: Ditto.
        * svg/SVGAnimatedRect.h: Added.
        * svg/SVGFitToViewBox.h: SVGRect now uses the new tear off concept, adapt code.
        * svg/SVGLength.idl: Remove [SVGProperty] flag.
        * svg/SVGMarkerElement.h:
        * svg/SVGPatternElement.h:
        * svg/SVGRect.idl: Remove [PODType] flag, add StrictTypeChecking to all attributes.
        * svg/SVGSVGElement.cpp: s/setViewBox/setViewBoxBaseValue/.
        (WebCore::SVGSVGElement::currentView):
        (WebCore::SVGSVGElement::inheritViewAttributes):
        * svg/SVGSVGElement.h:
        * svg/SVGSVGElement.idl: Remove [Immutable] flags for SVGRect types, no longer needed.
        * svg/SVGSymbolElement.h:
        * svg/SVGViewElement.h:
        * svg/SVGViewSpec.cpp: Take a SVGElement as context element.
        (WebCore::SVGViewSpec::SVGViewSpec):
        * svg/SVGViewSpec.h: Ditto.
        (WebCore::SVGViewSpec::contextElement):
        * svg/SVGZoomEvent.idl: Remove [Immutable] flags for SVGRect types, no longer needed.
        * svg/properties/SVGAnimatedPropertyMacros.h: Support declaring animated properties on non-SVGElement types (here: SVGViewSpec), just like the old macros handled it.

2010-10-27  Pavel Podivilov  <podivilov@chromium.org>

        Unreviewed, fix line endings in InspectorState.h

        * inspector/InspectorState.h:

2010-10-27  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: move frontend settings to local storage
        https://bugs.webkit.org/show_bug.cgi?id=47715

        * inspector/Inspector.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::didCommitLoad):
        * inspector/InspectorController.h:
        * inspector/InspectorState.cpp:
        (WebCore::InspectorState::InspectorState):
        * inspector/InspectorState.h:
        * inspector/front-end/ConsoleView.js:
        * inspector/front-end/EventListenersSidebarPane.js:
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel.prototype._createStatusbarButtons):
        * inspector/front-end/Panel.js:
        (WebInspector.Panel):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype._createStatusbarButtons):
        * inspector/front-end/Settings.js:
        (WebInspector.Settings):
        (WebInspector.Settings.prototype.installApplicationSetting):
        (WebInspector.Settings.prototype.installProjectSetting):
        (WebInspector.Settings.prototype._get):
        (WebInspector.Settings.prototype._set):
        (WebInspector.Settings.prototype._getProjectSetting):
        (WebInspector.Settings.prototype._setProjectSetting):
        (WebInspector.Settings.prototype._formatProjectKey):
        * inspector/front-end/StylesSidebarPane.js:
        * inspector/front-end/WatchExpressionsSidebarPane.js:
        (WebInspector.WatchExpressionsSidebarPane):
        (WebInspector.WatchExpressionsSidebarPane.prototype.reset):
        * inspector/front-end/inspector.js:
        (WebInspector.reset):

2010-10-27  Andy Estes  <aestes@apple.com>

        Reviewed by David Hyatt.

        Siblings of floated elements should be cleared below the float if they
        are too wide to fit in the containing block.
        https://bugs.webkit.org/show_bug.cgi?id=48396

        Test: fast/block/float/clear-element-too-wide-for-containing-block.html

        WebKit did not clear elements adjacent to floats if they were wider than
        the containing block, instead keeping them on the same line and allowing
        them to spill out the right side of the containing block. We should
        match the spec in this regard and clear the element below the float even
        if it is too wide for the containing block. Doing this seems to also
        match IE's and Firefox's behavior.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::getClearDelta): Continue to compute the clear
        delta even if the child's minimum preferred width is greater than the
        containing block's available width.

2010-10-26  Rob Buis  <rwlbuis@gmail.com>

        Reviewed by Nikolas Zimmermann.

        Title-Element has no popup on <svg>-Elements, but on <g>
        https://bugs.webkit.org/show_bug.cgi?id=47669

        Allow tooltips on non-root svg elements.

        No new tests.

        * svg/SVGStyledElement.cpp:

2010-10-26  Dai Mikurube  <dmikurube@google.com>

        Reviewed by Kent Tamura.

        constraint validation: stepMismatch (rounding error)
        https://bugs.webkit.org/show_bug.cgi?id=48220

        1. Changed the computation to achieve difference from a integral
        multiple of the allowed value step.

        The previous fmod(doubleValue, step) sometimes returned unacceptable
        remainder. For example,
            double doubleValue = 1.005; // Actually, near to 1.005
            double step = 0.005; // Actually, near to 0.005
            fmod(doubleValue, step) ==> (near to) 0.005
        It's a case that doubleValue is a little smaller than 1.005 and step is
        a little larger than 0.005.

        2. Changed the error threshold.

        Number values in HTML5 are expressed in IEEE 754 single-precision.
        Too precise comparison sometimes leads unintended errors.

        For example, I found a case :
                  remainder = 0.00000000000000022204460
            acceptableError = 0.00000000000000007105427

        * html/NumberInputType.cpp:
        (WebCore::NumberInputType::stepMismatch):

2010-10-26  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Add DelayNode files
        https://bugs.webkit.org/show_bug.cgi?id=47516

        No new tests since audio API is not yet implemented.

        * webaudio/DelayNode.cpp: Added.
        (WebCore::DelayNode::DelayNode):
        (WebCore::DelayNode::delayTime):
        * webaudio/DelayNode.h: Added.
        (WebCore::DelayNode::create):
        (WebCore::DelayNode::delayProcessor):
        * webaudio/DelayNode.idl: Added.

2010-10-26  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        AudioContext and AudioNode followup changes for AudioNodeInput/AudioNodeOutput thread safety
        https://bugs.webkit.org/show_bug.cgi?id=47504

        No new tests since audio API is not yet implemented.

        * webaudio/AudioContext.cpp:
        (WebCore::AudioContext::isAudioThread):
        (WebCore::AudioContext::isGraphOwner):
        (WebCore::AudioContext::handlePreRenderTasks):
        (WebCore::AudioContext::handlePostRenderTasks):
        (WebCore::AudioContext::deleteMarkedNodes):
        (WebCore::AudioContext::markAudioNodeInputDirty):
        (WebCore::AudioContext::markAudioNodeOutputDirty):
        (WebCore::AudioContext::handleDirtyAudioNodeInputs):
        (WebCore::AudioContext::handleDirtyAudioNodeOutputs):
        * webaudio/AudioContext.h:
        * webaudio/AudioNode.cpp:
        * webaudio/AudioNode.h:
        (WebCore::AudioNode::isMarkedForDeletion):
        * webaudio/AudioNode.idl:

2010-10-26  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Add DelayProcessor files
        https://bugs.webkit.org/show_bug.cgi?id=47517

        No new tests since audio API is not yet implemented.

        * webaudio/DelayProcessor.cpp: Added.
        (WebCore::DelayProcessor::DelayProcessor):
        (WebCore::DelayProcessor::~DelayProcessor):
        (WebCore::DelayProcessor::createKernel):
        * webaudio/DelayProcessor.h: Added.
        (WebCore::DelayProcessor::delayTime):

2010-10-26  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Add AudioNodeOutput files
        https://bugs.webkit.org/show_bug.cgi?id=45581

        No new tests since audio API is not yet implemented.

        * webaudio/AudioNodeOutput.cpp: Added.
        (WebCore::AudioNodeOutput::AudioNodeOutput):
        (WebCore::AudioNodeOutput::setNumberOfChannels):
        (WebCore::AudioNodeOutput::setInternalBus):
        (WebCore::AudioNodeOutput::updateRenderingState):
        (WebCore::AudioNodeOutput::updateNumberOfChannels):
        (WebCore::AudioNodeOutput::propagateChannelCount):
        (WebCore::AudioNodeOutput::pull):
        (WebCore::AudioNodeOutput::bus):
        (WebCore::AudioNodeOutput::renderingFanOutCount):
        (WebCore::AudioNodeOutput::fanOutCount):
        (WebCore::AudioNodeOutput::addInput):
        (WebCore::AudioNodeOutput::removeInput):
        (WebCore::AudioNodeOutput::disconnectAllInputs):
        (WebCore::AudioNodeOutput::disable):
        (WebCore::AudioNodeOutput::enable):
        * webaudio/AudioNodeOutput.h: Added.
        (WebCore::AudioNodeOutput::node):
        (WebCore::AudioNodeOutput::context):
        (WebCore::AudioNodeOutput::numberOfChannels):
        (WebCore::AudioNodeOutput::isChannelCountKnown):

2010-10-26  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Add AudioNodeInput files
        https://bugs.webkit.org/show_bug.cgi?id=45577

        No new tests since audio API is not yet implemented.

        * webaudio/AudioNodeInput.cpp: Added.
        (WebCore::AudioNodeInput::AudioNodeInput):
        (WebCore::AudioNodeInput::connect):
        (WebCore::AudioNodeInput::disconnect):
        (WebCore::AudioNodeInput::disable):
        (WebCore::AudioNodeInput::enable):
        (WebCore::AudioNodeInput::changedOutputs):
        (WebCore::AudioNodeInput::updateRenderingState):
        (WebCore::AudioNodeInput::numberOfChannels):
        (WebCore::AudioNodeInput::numberOfRenderingChannels):
        (WebCore::AudioNodeInput::bus):
        (WebCore::AudioNodeInput::internalSummingBus):
        (WebCore::AudioNodeInput::sumAllConnections):
        (WebCore::AudioNodeInput::pull):
        * webaudio/AudioNodeInput.h: Added.
        (WebCore::AudioNodeInput::node):
        (WebCore::AudioNodeInput::context):
        (WebCore::AudioNodeInput::numberOfRenderingConnections):
        (WebCore::AudioNodeInput::renderingOutput):
        (WebCore::AudioNodeInput::isConnected):
        (WebCore::AudioNodeInput::numberOfConnections):

2010-10-26  MORITA Hajime  <morrita@google.com>

        Reviewed by Tony Chang.

        Rolling in r70512 again, added missing null-check to
        Editor::isSpellCheckingEnabled().
        http://trac.webkit.org/changeset/70512

        spellcheck='' should be the same as spellcheck="true"
        https://bugs.webkit.org/show_bug.cgi?id=25539

        * dom/Element.cpp:
        (WebCore::Element::spellcheckAttributeState):
        (WebCore::Element::isSpellCheckingEnabled):
        * dom/Element.h:
        * editing/Editor.cpp:
        (WebCore::markMisspellingsOrBadGrammar):
        (WebCore::Editor::isSpellCheckingEnabledInFocusedNode):
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges):
        * editing/Editor.h:
        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::populate):

2010-10-26  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed build fixes.

        * WebCore.vcproj/WebCore.vcproj: Turn off several non-WinCairo
        files.  We don't support CoreAnimation!
        * WebCore.vcproj/WebCoreCairo.vsprops: Add missing include path
        for 'image-decoders/webp'
        * platform/network/curl/CookieJarCurl.cpp:
        (WebCore::setCookieStoragePrivateBrowsingEnabled): Add build stub.

2010-10-26  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Kent Tamura.

        Crash in CompositeEditCommand::splitTreeToNode
        https://bugs.webkit.org/show_bug.cgi?id=48349

        The bug was caused by indentIntoBlockquote's passing null pointer to splitTreeToNode.
        Fixed the crash by adding early exits.

        Test: editing/execCommand/indent-node-to-split-to-crash.html

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::splitTreeToNode):
        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::indentIntoBlockquote):

2010-10-26  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Kent Tamura.

        REGRESSION(r67170): crash in removeImplicitlyStyledElement
        https://bugs.webkit.org/show_bug.cgi?id=48389

        Fixed the crash by adding a null pointer check.

        Test: editing/style/invalid-font-size.html

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::removeImplicitlyStyledElement):

2010-10-26  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, rolling out r70573.
        http://trac.webkit.org/changeset/70573
        https://bugs.webkit.org/show_bug.cgi?id=48204

        Broke 39 tests on Chromium

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/scripts/CodeGenerator.pm:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorObjC.pm:
        * bindings/scripts/CodeGeneratorV8.pm:
        * svg/DeprecatedSVGAnimatedPropertyTraits.h:
        * svg/DeprecatedSVGAnimatedTemplate.h:
        * svg/SVGAngle.idl:
        * svg/SVGAnimatedAngle.idl:
        * svg/SVGAnimatedLength.idl:
        * svg/SVGAnimatedLengthList.idl:
        * svg/SVGAnimatedRect.h: Removed.
        * svg/SVGFitToViewBox.h:
        * svg/SVGLength.idl:
        * svg/SVGMarkerElement.h:
        * svg/SVGPatternElement.h:
        * svg/SVGRect.idl:
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::currentView):
        (WebCore::SVGSVGElement::inheritViewAttributes):
        * svg/SVGSVGElement.h:
        * svg/SVGSVGElement.idl:
        * svg/SVGSymbolElement.h:
        * svg/SVGViewElement.h:
        * svg/SVGViewSpec.cpp:
        (WebCore::SVGViewSpec::SVGViewSpec):
        * svg/SVGViewSpec.h:
        (WebCore::SVGViewSpec::contextElement):
        * svg/SVGZoomEvent.idl:
        * svg/properties/SVGAnimatedPropertyMacros.h:

2010-10-26  Anders Carlsson  <andersca@apple.com>

        Fix 32-bit build.

        * platform/graphics/mac/FontMac.mm:
        (WebCore::showGlyphsWithAdvances):

2010-10-26  Jenn Braithwaite  <jennb@chromium.org>

        Reviewed by Dmitry Titov.

        Resource tracking failure when trying to move a frame between documents
        https://bugs.webkit.org/show_bug.cgi?id=44713

        Test: fast/frames/iframe-reparenting-fail-load.html

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::transferLoadingResourcesFromPage):
        Added method that notifies the client to update resource tracking for
        loading resources that have been transferred to a different page.
        * loader/DocumentLoader.h:
        * loader/EmptyClients.h:
        (WebCore::EmptyFrameLoaderClient::transferLoadingResourceFromPage):
        Empty method.
        * loader/FrameLoader.h:
        * loader/FrameLoader.cpp:
        Added method that triggers resource tracking updates. This wraps
        the DocumentLoader method as it appears DocumentLoader is opaque
        to Frame.
        * loader/FrameLoaderClient.h:
        Added API to notify the client to update resource tracking for
        a loading resource that has been transferred to a different page.
        * page/Frame.cpp:
        (WebCore::Frame::transferChildFrameToNewDocument):
        Update resource tracking if page has changed.

2010-10-26  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Rob Buis.

        Convert SVGRect to the new SVGPropertyTearOff concept
        https://bugs.webkit.org/show_bug.cgi?id=48204

        Convert the next SVG primitive type to use the SVGPropertyTearOff concept: SVGRect.
        Added new test verifying that StrictTypeChecking is enabled for SVGRect. Refactor and share code between JSC/V8/ObjC generators.

        Test: svg/dom/SVGRect.html

        * GNUmakefile.am: Add SVGAnimatedRect.h to build.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * bindings/scripts/CodeGenerator.pm: Refactor SVGPropertyTearOff handling, and share code between JSC/V8/ObjC generators.
        * bindings/scripts/CodeGeneratorJS.pm: Ditto.
        * bindings/scripts/CodeGeneratorObjC.pm: Ditto.
        * bindings/scripts/CodeGeneratorV8.pm: Ditto.
        * svg/DeprecatedSVGAnimatedPropertyTraits.h: Remove SVGAnimatedRect handling.
        * svg/DeprecatedSVGAnimatedTemplate.h: Ditto.
        * svg/SVGAngle.idl: Remove [SVGProperty] flag.
        * svg/SVGAnimatedAngle.idl: Remove [SVGAnimatedProperty] flag.
        * svg/SVGAnimatedLength.idl: Ditto.
        * svg/SVGAnimatedLengthList.idl: Ditto.
        * svg/SVGAnimatedRect.h: Added.
        * svg/SVGFitToViewBox.h: SVGRect now uses the new tear off concept, adapt code.
        * svg/SVGLength.idl: Remove [SVGProperty] flag.
        * svg/SVGMarkerElement.h:
        * svg/SVGPatternElement.h:
        * svg/SVGRect.idl: Remove [PODType] flag, add StrictTypeChecking to all attributes.
        * svg/SVGSVGElement.cpp: s/setViewBox/setViewBoxBaseValue/.
        (WebCore::SVGSVGElement::currentView):
        (WebCore::SVGSVGElement::inheritViewAttributes):
        * svg/SVGSVGElement.h:
        * svg/SVGSVGElement.idl: Remove [Immutable] flags for SVGRect types, no longer needed.
        * svg/SVGSymbolElement.h:
        * svg/SVGViewElement.h:
        * svg/SVGViewSpec.cpp: Take a SVGElement as context element.
        (WebCore::SVGViewSpec::SVGViewSpec):
        * svg/SVGViewSpec.h: Ditto.
        (WebCore::SVGViewSpec::contextElement):
        * svg/SVGZoomEvent.idl: Remove [Immutable] flags for SVGRect types, no longer needed.
        * svg/properties/SVGAnimatedPropertyMacros.h: Support declaring animated properties on non-SVGElement types (here: SVGViewSpec), just like the old macros handled it.

2010-10-26  takano takumi  <takano1@asia.apple.com>

        Reviewed by Dave Hyatt.

        Advances are wrong and glyphs are rotated improperly in vertical writing
        https://bugs.webkit.org/show_bug.cgi?id=48315

        We shouldn't use vertical metrics for Roman fonts. Also, we should rotate vertical variant
        glyphs back on drawing as the whole run has already been rotated beforehand.

        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::FontPlatformData::FontPlatformData): Changed to ignore vertical orientation when the font doesn't support vertical metrics.
        * platform/graphics/mac/FontMac.mm:
        (WebCore::showGlyphsWithAdvances): Changed to rotate glyphs -90 degree for vertical variants.
        (WebCore::Font::drawGlyphs):

2010-10-26  Satish Sampath  <satish@chromium.org>

        Reviewed by Jeremy Orlow.

        Add a 'grammar' attribute for speech input.
        https://bugs.webkit.org/show_bug.cgi?id=48339

        To differentiate between various types of speech input, we add a 'x-webkit-grammar' attribute to a
        speech enabled input element. This is passed without validation to the speech recognizer. Typical values
        could be "builtin:search", "builtin:dictation" and even an externally hosted SRGS grammar XML file URI.
        It is up to the recognizer to interpret the value and use it as an aid in recognition.

        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::webkitGrammarEnabled):
        * html/HTMLAttributeNames.in:
        * html/HTMLInputElement.idl:
        * page/SpeechInput.cpp:
        (WebCore::SpeechInput::startRecognition):
        * page/SpeechInput.h:
        * page/SpeechInputClient.h:
        * platform/mock/SpeechInputClientMock.cpp:
        (WebCore::SpeechInputClientMock::startRecognition):
        * platform/mock/SpeechInputClientMock.h:
        * rendering/TextControlInnerElements.cpp:
        (WebCore::InputFieldSpeechButtonElement::defaultEventHandler):

2010-10-26  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: console does not work after two reloads.
        https://bugs.webkit.org/show_bug.cgi?id=48318

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::disconnectFrontend):

2010-10-26  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: console doesn't work in closures when window is overrode 
        https://bugs.webkit.org/show_bug.cgi?id=48320

        * inspector/front-end/InjectedScript.js:
        (injectedScriptConstructor.):

2010-10-26  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Fix an assert with QtPixmapInstance creation.
        https://bugs.webkit.org/show_bug.cgi?id=48323

        This places the newly refcounted QtPixmapInstance in a RefPtr
        to prevent an assert on the first ref() call.

        * bridge/qt/qt_pixmapruntime.cpp:
        (JSC::Bindings::QtPixmapInstance::createPixmapRuntimeObject):

2010-10-26  Kenichi Ishibashi  <bashi@google.com>

        Reviewed by Kent Tamura.

        Input Method inserts conversion candidates unexpectedly
        https://bugs.webkit.org/show_bug.cgi?id=46868

        Calls updateStyleIfNeeded() before setting selection for the composition to
        avoid inserting the previous composition text into a content editable element
        which has an event handler that changes the style of the element.

        Test: platform/chromium/fast/text/chromium-mac-duplicate-ime-composition.html

        * editing/Editor.cpp:
        (WebCore::Editor::setComposition): calls updateStyleIfNeeded() before setting selection.

2010-10-26  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Chris Fleizach.

        [Gtk] Layout tables should indicate that they are not data tables via an object attribute
        https://bugs.webkit.org/show_bug.cgi?id=35422

        Set the 'layout-guess' attribute to 'true' for data tables.

        Reorganized some code in AccessibilityTable so now the function
        isDataTable() is more coherent by just answering that very
        specific question, regardless of whether the table is being
        exposed or not to Assistive Technologies.

        Hence, now it's possible to make two questions separately instead
        of just one, meaning that the new function isAccessibleTable() is
        now what we formerly defined as the isDataTable() function.

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isAccessibilityTable):
           New function to allow asking tables both whether they are
           exposed and whether they are data tables, which are different
           questions whose answers might be the same in many situations,
           but different sometimes (as it can happen in the GTK port).
        * accessibility/AccessibilityTable.h:
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::hasARIARole):
           New, checks whether the table has a valid ARIA role.
        (WebCore::AccessibilityTable::isAccessibilityTable):
           New, returns the value of m_isAccessibilityTable. It's
           basically the former isDataTable() function renamed.
        (WebCore::AccessibilityTable::isDataTable):
           Changed behaviour. Instead of just returning the value of
           m_isAccessibilityTable as it did so far (which was confusing
           because of that's not what the name suggests), focus on
           checking whether it's a data table or not and return a bool
           value accordingly. It's basically a rename of the former
           isTableExposableThroughAccessibility() function, but withouth
           the GTK-specific if-endif region (which didn't make sense
           here now, because that was answering the question "is the table
           exposed in the GTK port?", instead of "is it a data table?").
        (WebCore::AccessibilityTable::isTableExposableThroughAccessibility):
           Uses the hasAriaRole(), and isDataTable() to determine whether
           a table should be exposed or not. Also includes the GTK-specific
           if-region coming from the former implementation of the function
           isTableExposableThroughAccessibility() not to check whether it's
           a data table in case the rest of the checks succeeded (all
           tables are exposed in the GTK port).
        (WebCore::AccessibilityTable::addChildren):
           Replace usage of isDataTable() with isAccessibilityTable(), to
           keep exactly the same behaviour happening before this patch.
        (WebCore::AccessibilityTable::roleValue): Ditto.
        (WebCore::AccessibilityTable::accessibilityIsIgnored): Ditto.
        (WebCore::AccessibilityTable::title): Ditto.

        Updated usage of the former function isDataTable() everywhere
        else, replacing it with the new isAccessibilityTable(), so keeping
        exactly the same behaviour happening before this patch.

        * accessibility/AccessibilityARIAGrid.cpp:
        (WebCore::AccessibilityARIAGrid::addChildren):
           Use isAccessibilityTable() instead of isDataTable().
        * accessibility/AccessibilityARIAGridCell.cpp:
        (WebCore::AccessibilityARIAGridCell::parentTable): Ditto.
        * accessibility/AccessibilityARIAGridRow.cpp:
        (WebCore::AccessibilityARIAGridRow::disclosedRows): Ditto.
        (WebCore::AccessibilityARIAGridRow::disclosedByRow): Ditto.
        (WebCore::AccessibilityARIAGridRow::parentTable): Ditto.
        * accessibility/AccessibilityTableCell.cpp:
        (WebCore::AccessibilityTableCell::isTableCell):
           Use isAccessibilityTable() instead of isDataTable().
        * accessibility/AccessibilityTableHeaderContainer.cpp:
        (WebCore::AccessibilityTableHeaderContainer::addChildren): Ditto.
        * accessibility/AccessibilityTableRow.cpp:
        (WebCore::AccessibilityTableRow::isTableRow): Ditto
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper additionalAccessibilityAttributeNames]):
           Use isAccessibilityTable() instead of isDataTable().
        (-[AccessibilityObjectWrapper accessibilityAttributeNames]): Ditto.
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]): Ditto.
        (-[AccessibilityObjectWrapper accessibilityParameterizedAttributeNames]): Ditto.
        (-[AccessibilityObjectWrapper accessibilitySetValue:forAttribute:]): Ditto.
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]): Ditto.

        Use the new function isAccessibilityTable() together with the
        modified implementation of isDataTable() to set the 'layout-guess'
        attribute when needed.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (webkit_accessible_get_attributes):
           Set the 'layout-guess' attribute to 'true' to help Assistive
           Technologies guessing which tables are not data tables.

2010-10-26  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Resuming animations causes webkitAnimationStart events to be fired
        https://bugs.webkit.org/show_bug.cgi?id=46540

        Added a flag that makes sure start animation event is only ever
        fired once. 

        Test: animations/suspend-resume-animation-events.html

        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::KeyframeAnimation):
        (WebCore::KeyframeAnimation::sendAnimationEvent):
        * page/animation/KeyframeAnimation.h:

2010-10-26  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Dimitri Glazkov.

        Added checks to ensure that events types are right before casting. 
        https://bugs.webkit.org/show_bug.cgi?id=48345

        * html/ImageDocument.cpp:
        (WebCore::ImageEventListener::handleEvent):
        * inspector/InspectorDOMStorageResource.cpp:
        (WebCore::InspectorDOMStorageResource::handleEvent):

2010-10-26  Dai Mikurube  <dmikurube@google.com>

        Reviewed by Kent Tamura.

        Number values for form controls should be in the range of IEEE 754
        single-precision floating point number
        https://bugs.webkit.org/show_bug.cgi?id=48221

        Changed the range of number values to fit in IEEE 754 single-precision

        * html/parser/HTMLParserIdioms.cpp:
        (WebCore::parseToDoubleForNumberType):
        * html/NumberInputType.cpp:

2010-10-26  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=48157
        
        Direction and writing-mode should propagate from the <body> to the <html> to the initial containing block.
        Modify the existing code that propagates from the document element to also propagate from the body.
        
        Fix the buggy code that was trying to dirty the body when the view changed size if it stretched to fill the
        viewport.  The code didn't consider the root element, and it only worked with one axis.  I pulled it
        out of calculateScrollbarModesForLayout, since it should never have been put there in the first place.
        
        Added four new tests in fast/blockflow.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::initElement):
        (WebCore::CSSStyleSelector::styleForDocument):
        (WebCore::CSSStyleSelector::applyProperty):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        * dom/Document.h:
        (WebCore::Document::directionSetOnDocumentElement):
        (WebCore::Document::writingModeSetOnDocumentElement):
        (WebCore::Document::setDirectionSetOnDocumentElement):
        (WebCore::Document::setWritingModeSetOnDocumentElement):
        * page/FrameView.cpp:
        (WebCore::FrameView::calculateScrollbarModesForLayout):
        (WebCore::FrameView::layout):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleDidChange):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::stretchesToViewport):

2010-10-26  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by David Kilzer.

        Fix Cache::dumpStats formatting
        https://bugs.webkit.org/show_bug.cgi?id=48286

        This updates the column width in the dumpStats output to be wide enough
        for all the titles. Previously one of the titles was too wide and crept
        into later column space.

        * loader/Cache.cpp:
        (WebCore::Cache::dumpStats): make columns 13 characters wide.

2010-10-26  Alexey Marinichev  <amarinichev@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Check getGraphicsResetStatusARB and reinitialize the
        renderer in an error is returned.
        https://bugs.webkit.org/show_bug.cgi?id=47848

        Tested by failure injection (stopping in the debugger and issuing a
        jump as if an error has occurred).

        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::setLayerRenderer):
        * platform/graphics/chromium/LayerRendererChromium.h:
        (WebCore::LayerRendererChromium::transferRootLayer): added

2010-10-26  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed. Touching inspector controller to kick gtk build, removing comments.

        * inspector/InspectorController.cpp:
        * inspector/front-end/ResourceManager.js:
        * inspector/front-end/ScriptsPanel.js:

2010-10-26  Pavel Feldman  <pfeldman@chromium.org>

        Web Inspector: continue making resources panel optional.
        https://bugs.webkit.org/show_bug.cgi?id=48261

        This refactoring makes console, audits and extensions tests pass while taking data from
        resources panel. Network panel as a source is to follow.

        * inspector/front-end/AuditLauncherView.js:
        (WebInspector.AuditLauncherView.prototype._createLauncherUI):
        * inspector/front-end/AuditsPanel.js:
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.addMessage):
        * inspector/front-end/CookieItemsView.js:
        (WebInspector.CookieItemsView.prototype._filterCookiesForDomain.populateResourcesForDocuments):
        (WebInspector.CookieItemsView.prototype._filterCookiesForDomain):
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._onRevealAndSelectResource):
        (WebInspector.ExtensionServer.prototype._onGetResources):
        (WebInspector.ExtensionServer.prototype._onGetResourceContent):
        * inspector/front-end/HAREntry.js:
        (WebInspector.HARLog.prototype.build):
        (WebInspector.HARLog.prototype.buildMainResourceTimings):
        (WebInspector.HARLog.prototype._convertResource):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel):
        (WebInspector.NetworkPanel.prototype._reset):
        (WebInspector.NetworkPanel.prototype.get resources):
        (WebInspector.NetworkPanel.prototype.addResource):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype.set category):
        * inspector/front-end/ResourceCategory.js:
        (WebInspector.ResourceCategory):
        (WebInspector.ResourceCategory.prototype.toString):
        * inspector/front-end/ResourceManager.js:
        (WebInspector.ResourceManager.prototype.identifierForInitialRequest):
        (WebInspector.ResourceManager.prototype.willSendRequest):
        (WebInspector.ResourceManager.prototype.didFinishLoading):
        (WebInspector.ResourceManager.prototype.didFailLoading):
        (WebInspector.ResourceManager.prototype.didLoadResourceFromMemoryCache):
        (WebInspector.ResourceManager.prototype.setOverrideContent):
        (WebInspector.ResourceTreeModel.prototype._callForFrameResources):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel):
        (WebInspector.ResourcesPanel.prototype.reset):
        (WebInspector.ResourcesPanel.prototype.addResource):
        (WebInspector.ResourcesPanel.prototype.removeResource):
        (WebInspector.ResourcesPanel.prototype._toggleResourceTracking):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.addScript):
        (WebInspector.ScriptsPanel.prototype._resourceLoadingFinished):
        (WebInspector.ScriptsPanel.prototype._breakpointAdded):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertyTreeElement.prototype.updateTitle.linkifyURL):
        * inspector/front-end/inspector.js:
        (WebInspector._updateFocusedNode):
        (WebInspector.get networkResources):
        (WebInspector.forAllResources):
        (WebInspector.resourceForURL):
        (WebInspector.updateResource):
        (WebInspector.domContentEventFired):
        (WebInspector.loadEventFired):
        (WebInspector.removeResource):
        (WebInspector.reset):
        (WebInspector.displayNameForURL):
        (WebInspector.linkifyStringAsFragment):
        (WebInspector.resourceURLForRelatedNode.callback):
        (WebInspector.resourceURLForRelatedNode):

2010-10-26  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Steve Block.
        Fix IndexedDB crashes
        https://bugs.webkit.org/show_bug.cgi?id=48266

        If IDBKey returns null, type conversion failed. Handle this case
        in the bindings.

        Change UNKNOWN_ERR to be 1 since 0 is hard coded to mean no error.
        This is just a stop-gap move until we get it figured out in standards
        land.

        IDBObjectStore needs to handle null ranges.

        It's actually OK for m_transaction to be non-null when hitting the
        destructor. We just need to then remove it from the set of pending
        transactions.

        The transaction can become aborted in the middle of processing a
        list of tasks. Fix this.

        All changes (except the last 2 races) are tested in LayoutTests.
        I couldn't find a way to reliably reproduce the races.

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjInternal::idbKeyCallback):
        * bindings/v8/IDBBindingUtilities.cpp:
        (WebCore::createIDBKeyFromValue):
        * storage/IDBDatabaseException.h:
        * storage/IDBDatabaseException.idl:
        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::openCursorInternal):
        * storage/IDBRequest.cpp:
        (WebCore::IDBRequest::~IDBRequest):
        (WebCore::IDBRequest::timerFired):
        * storage/IDBTransactionBackendImpl.cpp:
        (WebCore::IDBTransactionBackendImpl::taskTimerFired):

2010-10-25  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Show cookie data in the request headers in network pane
        https://bugs.webkit.org/show_bug.cgi?id=16531

        * inspector/front-end/CookieItemsView.js:
        (WebInspector.CookieItemsView): Factor out common cookies grid logic to CookiesTable
        (WebInspector.CookieItemsView.prototype._populateDataGrid):
        * inspector/front-end/CookieParser.js: Store cookie type (request/response) within a cookie.
        (WebInspector.CookieParser.prototype.parseCookie):
        (WebInspector.CookieParser.prototype.parseSetCookie):
        (WebInspector.CookieParser.prototype._addCookie):
        (WebInspector.Cookie):
        * inspector/front-end/DataGrid.js:
        (WebInspector.DataGrid.prototype.autoSizeColumns): Optionally, traverse nested nodes when looking for max field widths.
        (WebInspector.DataGrid.prototype._enumerateChildren):
        (WebInspector.DataGrid.prototype.updateWidths): Skip attempt to calculate column widths if grid is not attached to DOM tree yet.
        * inspector/front-end/FontView.js:
        (WebInspector.FontView.prototype.resize):
        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceView.prototype.resize):
        (WebInspector.ResourceView.prototype._selectTab):
        (WebInspector.ResourceView.prototype._selectCookiesTab):
        (WebInspector.ResourceView.prototype._innerSelectContentTab):
        (WebInspector.ResourceView.prototype._refreshRequestHeaders):
        (WebInspector.ResourceView.prototype._refreshResponseHeaders):
        (WebInspector.ResourceView.prototype._refreshHeaders):
        (WebInspector.ResourceView.prototype._refreshCookies):
        (WebInspector.ResourceCookiesTab):
        (WebInspector.ResourceCookiesTab.prototype.set requestCookies):
        (WebInspector.ResourceCookiesTab.prototype.set responseCookies):
        (WebInspector.ResourceCookiesTab.prototype._populateDataGrid):
        (WebInspector.ResourceCookiesTab.prototype._populateCookies):
        (WebInspector.ResourceCookiesTab.prototype._createFolder):
        * inspector/front-end/SourceView.js:
        (WebInspector.SourceView.prototype.resize):
        * inspector/front-end/inspector.css:
        (.resource-view .resource-view-cookies):
        (.resource-view.headers-visible .resource-view-cookies):
        (.resource-view-cookies.table .data-grid):
        (.resource-view-cookies .data-grid .row-group):

2010-10-26  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r70518.
        http://trac.webkit.org/changeset/70518
        https://bugs.webkit.org/show_bug.cgi?id=48332

        Breaks inspector tests. (Requested by pfeldman on #webkit).

        * inspector/front-end/AuditLauncherView.js:
        (WebInspector.AuditLauncherView.prototype._createLauncherUI):
        * inspector/front-end/AuditsPanel.js:
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.addMessage):
        * inspector/front-end/CookieItemsView.js:
        (WebInspector.CookieItemsView.prototype._filterCookiesForDomain):
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._onRevealAndSelectResource):
        (WebInspector.ExtensionServer.prototype._onGetResources):
        (WebInspector.ExtensionServer.prototype._onGetResourceContent):
        * inspector/front-end/HAREntry.js:
        (WebInspector.HARLog.prototype.build):
        (WebInspector.HARLog.prototype.buildMainResourceTimings):
        (WebInspector.HARLog.prototype._convertResource):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel):
        (WebInspector.NetworkPanel.prototype._reset):
        (WebInspector.NetworkPanel.prototype.addResource):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype.set category):
        * inspector/front-end/ResourceCategory.js:
        (WebInspector.ResourceCategory):
        (WebInspector.ResourceCategory.prototype.toString):
        (WebInspector.ResourceCategory.prototype.addResource):
        (WebInspector.ResourceCategory.prototype.removeResource):
        (WebInspector.ResourceCategory.prototype.removeAllResources):
        * inspector/front-end/ResourceManager.js:
        (WebInspector.ResourceManager.prototype.identifierForInitialRequest):
        (WebInspector.ResourceManager.prototype.willSendRequest):
        (WebInspector.ResourceManager.prototype.didFinishLoading):
        (WebInspector.ResourceManager.prototype.didFailLoading):
        (WebInspector.ResourceManager.prototype.didLoadResourceFromMemoryCache):
        (WebInspector.ResourceManager.prototype.setOverrideContent):
        (WebInspector.ResourceTreeModel.prototype._callForFrameResources):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel):
        (WebInspector.ResourcesPanel.prototype.reset):
        (WebInspector.ResourcesPanel.prototype.addResource):
        (WebInspector.ResourcesPanel.prototype.removeResource):
        (WebInspector.ResourcesPanel.prototype._toggleResourceTracking):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.addScript):
        (WebInspector.ScriptsPanel.prototype._resourceLoadingFinished):
        (WebInspector.ScriptsPanel.prototype._breakpointAdded):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertyTreeElement.prototype.updateTitle.linkifyURL):
        * inspector/front-end/inspector.js:
        (WebInspector._updateFocusedNode):
        (WebInspector.updateResource):
        (WebInspector.domContentEventFired):
        (WebInspector.loadEventFired):
        (WebInspector.removeResource):
        (WebInspector.reset):
        (WebInspector.displayNameForURL):
        (WebInspector.resourceForURL):
        (WebInspector.linkifyStringAsFragment):
        (WebInspector.resourceURLForRelatedNode):

2010-10-26  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Steve Block.

        Quota for IndexedDB should be per origin not per database
        https://bugs.webkit.org/show_bug.cgi?id=48064

        Merge all databases for each origin into a single SQLiteDatabase.

        Replace the awkward metaData table with a Database table.

        Create a new IDBSQLiteDatabase class that wraps SQLiteDatabase
        and implements weak pointer semantics for IDBFactory. It's ref
        counted so multiple IDBDatabaseBackendImpls can share one.

        Fix uniqueness constraints that were overly conservitive.

        Get rid of the code that blows away existing data every time
        the database is opened.

        Get rid of the fairly useless indexedDB manual test and replace
        it with one that verifies data persists.

        Use name+origin (not just name) in our cache of IDBDatabaseBackend
        objects (so one origin can't access anothers' data).

        Test: storage/indexeddb/duplicates.html

        * WebCore.gypi:
        * manual-tests/indexed-database.html: Removed.
        * manual-tests/indexeddb-persists.html: Added.
        * storage/IDBDatabaseBackendImpl.cpp:
        (WebCore::extractMetaData):
        (WebCore::setMetaData):
        (WebCore::IDBDatabaseBackendImpl::IDBDatabaseBackendImpl):
        (WebCore::IDBDatabaseBackendImpl::setDescription):
        (WebCore::IDBDatabaseBackendImpl::sqliteDatabase):
        (WebCore::IDBDatabaseBackendImpl::createObjectStoreInternal):
        (WebCore::IDBDatabaseBackendImpl::setVersionInternal):
        (WebCore::IDBDatabaseBackendImpl::loadObjectStores):
        * storage/IDBDatabaseBackendImpl.h:
        (WebCore::IDBDatabaseBackendImpl::create):
        (WebCore::IDBDatabaseBackendImpl::id):
        * storage/IDBFactoryBackendImpl.cpp:
        (WebCore::IDBFactoryBackendImpl::removeSQLiteDatabase):
        (WebCore::openSQLiteDatabase):
        (WebCore::createTables):
        (WebCore::IDBFactoryBackendImpl::open):
        (WebCore::IDBFactoryBackendImpl::databaseFileName):
        * storage/IDBFactoryBackendImpl.h:
        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::putObjectStoreData):
        (WebCore::IDBObjectStoreBackendImpl::putInternal):
        * storage/IDBSQLiteDatabase.cpp: Added.
        (WebCore::IDBSQLiteDatabase::IDBSQLiteDatabase):
        (WebCore::IDBSQLiteDatabase::~IDBSQLiteDatabase):
        * storage/IDBSQLiteDatabase.h: Added.
        (WebCore::IDBSQLiteDatabase::create):
        (WebCore::IDBSQLiteDatabase::db):

2010-10-20  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Yury Semikhatsky.

        Inspector needs to use cached resources to display image resources.
        https://bugs.webkit.org/show_bug.cgi?id=16395

        * inspector/Inspector.idl: Add base64Encode parameter to getContent
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::resourceContent):
        * inspector/InspectorResourceAgent.h:
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._onGetResourceContent):
        * inspector/front-end/ImageView.js:
        (WebInspector.ImageView.prototype.contentTabSelected.onResourceContent):
        (WebInspector.ImageView.prototype.contentTabSelected):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkDataGridNode.prototype._refreshNameCell.):
        (WebInspector.NetworkDataGridNode.prototype._refreshNameCell):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource):
        (WebInspector.Resource.prototype.set finished):
        (WebInspector.Resource.prototype.getContent):
        (WebInspector.Resource.prototype.get contentURL):
        (WebInspector.Resource.prototype._requestContent.onResourceContent):
        (WebInspector.Resource.prototype._requestContent):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourceSidebarTreeElement.prototype.createIconElement.):
        (WebInspector.ResourceSidebarTreeElement.prototype.createIconElement):
        * inspector/front-end/Settings.js: Added useDataURLForResourceImageIcons
        * inspector/front-end/SourceView.js:
        (WebInspector.SourceView.prototype.setupSourceFrameIfNeeded):

2010-10-26  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: continue making resources panel optional.
        https://bugs.webkit.org/show_bug.cgi?id=48261

        This refactoring makes console, audits and extensions tests pass while taking data from
        resources panel. Network panel as a source is to follow.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::connectFrontend):
        * inspector/front-end/AuditLauncherView.js:
        (WebInspector.AuditLauncherView.prototype._createLauncherUI):
        * inspector/front-end/AuditsPanel.js:
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.addMessage):
        * inspector/front-end/CookieItemsView.js:
        (WebInspector.CookieItemsView.prototype._filterCookiesForDomain.populateResourcesForDocuments):
        (WebInspector.CookieItemsView.prototype._filterCookiesForDomain):
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._onRevealAndSelectResource):
        (WebInspector.ExtensionServer.prototype._onGetResources):
        (WebInspector.ExtensionServer.prototype._onGetResourceContent):
        * inspector/front-end/HAREntry.js:
        (WebInspector.HARLog.prototype.build):
        (WebInspector.HARLog.prototype.buildMainResourceTimings):
        (WebInspector.HARLog.prototype._convertResource):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel):
        (WebInspector.NetworkPanel.prototype._reset):
        (WebInspector.NetworkPanel.prototype.get resources):
        (WebInspector.NetworkPanel.prototype.addResource):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype.set category):
        * inspector/front-end/ResourceCategory.js:
        (WebInspector.ResourceCategory):
        (WebInspector.ResourceCategory.prototype.toString):
        * inspector/front-end/ResourceManager.js:
        (WebInspector.ResourceManager.prototype.identifierForInitialRequest):
        (WebInspector.ResourceManager.prototype.willSendRequest):
        (WebInspector.ResourceManager.prototype.didFinishLoading):
        (WebInspector.ResourceManager.prototype.didFailLoading):
        (WebInspector.ResourceManager.prototype.didLoadResourceFromMemoryCache):
        (WebInspector.ResourceManager.prototype.setOverrideContent):
        (WebInspector.ResourceTreeModel.prototype._callForFrameResources):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel):
        (WebInspector.ResourcesPanel.prototype.reset):
        (WebInspector.ResourcesPanel.prototype.addResource):
        (WebInspector.ResourcesPanel.prototype.removeResource):
        (WebInspector.ResourcesPanel.prototype._toggleResourceTracking):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.addScript):
        (WebInspector.ScriptsPanel.prototype._resourceLoadingFinished):
        (WebInspector.ScriptsPanel.prototype._breakpointAdded):
        * inspector/front-end/Settings.js:
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertyTreeElement.prototype.updateTitle.linkifyURL):
        * inspector/front-end/inspector.js:
        (WebInspector._updateFocusedNode):
        (WebInspector.get networkResources):
        (WebInspector.forAllResources):
        (WebInspector.resourceForURL):
        (WebInspector.updateResource):
        (WebInspector.domContentEventFired):
        (WebInspector.loadEventFired):
        (WebInspector.removeResource):
        (WebInspector.reset):
        (WebInspector.displayNameForURL):
        (WebInspector.linkifyStringAsFragment):
        (WebInspector.resourceURLForRelatedNode.callback):
        (WebInspector.resourceURLForRelatedNode):

2010-10-26  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Adam Barth.

        Protect the frame from being blown away in loadWithDocumentLoader function call.
        dispatchBeforeLoadEvent can cause the frame to be freed, which gets later used in
        continueLoadAfterNavigationPolicy call.
        https://bugs.webkit.org/show_bug.cgi?id=48281

        Test: fast/events/form-iframe-target-before-load-crash.html

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

2010-10-26  Xan Lopez  <xlopez@igalia.com>

        Restore another mix-up in copy&paste error. Use height for the
        vertical adjustments instead of width.

        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::setVerticalAdjustment):

2010-10-26  Xan Lopez  <xlopez@igalia.com>

        Restore early return accidentally removed in previous
        patch. Should make API tests pass again.

        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::setHorizontalAdjustment):
        (WebCore::ScrollView::setVerticalAdjustment):

2010-10-26  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Port to new GtkScrollable interface in GTK+ 3.x
        https://bugs.webkit.org/show_bug.cgi?id=48202

        The new GtkScrollable API sets the adjustments individually, so
        adjust the code for this fact.

        * platform/ScrollView.h:
        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::setHorizontalAdjustment): new method to set the horizontal adjustment.
        (WebCore::ScrollView::setVerticalAdjustment): new method to set the vertical adjustment.
        (WebCore::ScrollView::setGtkAdjustments): make this just call the other two methods.

2010-10-26  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r70512.
        http://trac.webkit.org/changeset/70512
        https://bugs.webkit.org/show_bug.cgi?id=48314

        crashes many tests (Requested by inferno-sec on #webkit).

        * dom/Element.cpp:
        * dom/Element.h:
        * editing/Editor.cpp:
        (WebCore::markMisspellingsOrBadGrammar):
        (WebCore::Editor::spellCheckingEnabledInFocusedNode):
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges):
        * editing/Editor.h:
        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::populate):

2010-10-24  MORITA Hajime  <morrita@google.com>

        Reviewed by Tony Chang.

        spellcheck='' should be the same as spellcheck="true"
        https://bugs.webkit.org/show_bug.cgi?id=25539

        - Added a check for empty string and missing attribute.
        - Extracted the check to Element::spellCheckingEnabled()
        - Introduced SpellcheckAttributeState enum to represent the
          states for spellcheck attributes.

        * dom/Element.cpp:
        (WebCore::Element::spellcheckAttributeState): Added.
        (WebCore::Element::isSpellCheckingEnabled): Added.
        * dom/Element.h:
        * editing/Editor.cpp:
        (WebCore::markMisspellingsOrBadGrammar):
        (WebCore::Editor::isSpellCheckingEnabledInFocusedNode): Renamed, partly extracted to Element::isSpellCheckingEnabled()
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges):
        * editing/Editor.h:
        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::populate):

2010-10-25  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Refactor HTMLInputElement: Move createRender(), appendFormData(),
        saveFormControlState() and restoreFormControlState() to InputTypes.
        https://bugs.webkit.org/show_bug.cgi?id=47834

        This change adds BaseButtonInputType and BaseCheckableInputType. They
        are super classes of some concrete InputType classes.

        No new tests. Just a code refactoring.

        * CMakeLists.txt: Add BaseButtonInputType and BaseCheckableInputType files.
        * GNUmakefile.am: ditto.
        * WebCore.gypi: ditto.
        * WebCore.pro: ditto.
        * WebCore.vcproj/WebCore.vcproj: ditto.
        * WebCore.xcodeproj/project.pbxproj: ditto.
        * html/BaseButtonInputType.cpp: Added.
        (WebCore::BaseButtonInputType::appendFormData):
        (WebCore::BaseButtonInputType::createRenderer):
        * html/BaseButtonInputType.h: Added.
        (WebCore::BaseButtonInputType::BaseButtonInputType):
        * html/BaseCheckableInputType.cpp: Added.
        (WebCore::BaseCheckableInputType::saveFormControlState):
        (WebCore::BaseCheckableInputType::restoreFormControlState):
        (WebCore::BaseCheckableInputType::appendFormData):
        * html/BaseCheckableInputType.h: Added.
        (WebCore::BaseCheckableInputType::BaseCheckableInputType):
        * html/ButtonInputType.h: Change the super class.
        (WebCore::ButtonInputType::ButtonInputType):
        * html/CheckboxInputType.h: Change the super class.
        (WebCore::CheckboxInputType::CheckboxInputType):
        * html/FileInputType.cpp:
        (WebCore::FileInputType::appendFormData):
        (WebCore::FileInputType::createRenderer):
        * html/FileInputType.h: Change the super class.
        (WebCore::FileInputType::FileInputType):
        * html/HTMLFormControlElement.h:
          Make placeholderShouldBeVisible() public for access from TextFieldInputType.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::saveFormControlState):
        (WebCore::HTMLInputElement::restoreFormControlState):
        (WebCore::HTMLInputElement::createRenderer):
        (WebCore::HTMLInputElement::appendFormData):
        * html/HTMLInputElement.h:
          Add the following functions for ImageInputType and SubmitInputType.
        (WebCore::HTMLInputElement::xPosition):
        (WebCore::HTMLInputElement::yPosition):
        * html/HiddenInputType.cpp:
        (WebCore::HiddenInputType::createRenderer):
        * html/HiddenInputType.h:
        * html/ImageInputType.cpp:
        (WebCore::ImageInputType::isFormDataAppendable):
        (WebCore::ImageInputType::appendFormData):
        (WebCore::ImageInputType::createRenderer):
        * html/ImageInputType.h: Change the super class.
        (WebCore::ImageInputType::ImageInputType):
        * html/InputType.cpp:
        (WebCore::InputType::saveFormControlState):
        (WebCore::InputType::restoreFormControlState):
        (WebCore::InputType::isFormDataAppendable):
        (WebCore::InputType::appendFormData):
        (WebCore::InputType::createRenderer):
        * html/InputType.h:
        * html/PasswordInputType.cpp:
        (WebCore::PasswordInputType::saveFormControlState):
        (WebCore::PasswordInputType::restoreFormControlState):
        * html/PasswordInputType.h:
        * html/RadioInputType.h: Change the super class.
        (WebCore::RadioInputType::RadioInputType):
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::createRenderer):
        * html/RangeInputType.h:
        * html/ResetInputType.h:
        (WebCore::ResetInputType::ResetInputType):
        * html/SubmitInputType.cpp:
        (WebCore::SubmitInputType::appendFormData):
        * html/SubmitInputType.h: Change the super class.
        (WebCore::SubmitInputType::SubmitInputType):
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::createRenderer):
        * html/TextFieldInputType.h:

2010-10-25  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Fix scrolling of noncomposited iframes within composited document
        https://bugs.webkit.org/show_bug.cgi?id=47391
        
        When an iframe that is painting into a compositing layer is scrolled,
        we need to repaint via the RenderObject (which dirties the compositing layer contents),
        rather than going out to hostWindow.

        Test: compositing/iframes/composited-iframe-scroll.html

        * page/FrameView.cpp:
        (WebCore::FrameView::scrollContentsSlowPath):
        * page/FrameView.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::scrollContents):
        (WebCore::ScrollView::scrollContentsSlowPath):
        * platform/ScrollView.h:

2010-10-25  Ryosuke Niwa  <rniwa@webkit.org>

        Unreviewed Qt build fix for r70496.

        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtInstance::numberValue):
        * bridge/qt/qt_pixmapruntime.cpp:
        (JSC::Bindings::QtPixmapWidthField::valueFromInstance):
        (JSC::Bindings::QtPixmapHeightField::valueFromInstance):
        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::convertValueToQVariant):
        (JSC::Bindings::convertQVariantToValue):
        (JSC::Bindings::QtRuntimeMetaMethod::lengthGetter):
        (JSC::Bindings::QtRuntimeConnectionMethod::lengthGetter):

2010-10-25  Andy Estes  <aestes@apple.com>

        Reviewed by Simon Fraser.

        Source change by Simon Fraser.

        Setting an element's visibility property to visible has no effect when
        it has a hidden parent.
        https://bugs.webkit.org/show_bug.cgi?id=48267

        Test: fast/layers/visible-layer-with-hidden-parent.html

        When a layer is hidden, there is an optimization that removes it from
        the layer tree. If the layer is made visible again, it would only mark
        its own stacking context's z-order list as dirty. If there are hidden
        parent layers, they need to be marked dirty as well so layers with
        visible descendents are re-added to the layer tree.

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::setHasVisibleContent): Dirty the z-order lists of
        all parent stacking context render layers up to and including the first
        visible stacking context.

2010-10-25  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        Remove exec and globalData arguments from jsNumber
        https://bugs.webkit.org/show_bug.cgi?id=48270

        Mechanical removal of exec parameter to jsNumber.

        * bindings/js/JSAudioConstructor.cpp:
        (WebCore::JSAudioConstructor::JSAudioConstructor):
        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::JSCSSStyleDeclaration::nameGetter):
        * bindings/js/JSCoordinatesCustom.cpp:
        (WebCore::JSCoordinates::altitude):
        (WebCore::JSCoordinates::altitudeAccuracy):
        (WebCore::JSCoordinates::heading):
        (WebCore::JSCoordinates::speed):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::setTimeout):
        (WebCore::JSDOMWindow::setInterval):
        * bindings/js/JSDeviceMotionEventCustom.cpp:
        (WebCore::createAccelerationObject):
        (WebCore::createRotationRateObject):
        (WebCore::JSDeviceMotionEvent::interval):
        * bindings/js/JSDeviceOrientationEventCustom.cpp:
        (WebCore::JSDeviceOrientationEvent::alpha):
        (WebCore::JSDeviceOrientationEvent::beta):
        (WebCore::JSDeviceOrientationEvent::gamma):
        * bindings/js/JSGeolocationCustom.cpp:
        (WebCore::JSGeolocation::watchPosition):
        * bindings/js/JSHTMLInputElementCustom.cpp:
        (WebCore::JSHTMLInputElement::selectionStart):
        (WebCore::JSHTMLInputElement::selectionEnd):
        * bindings/js/JSHTMLOptionsCollectionCustom.cpp:
        (WebCore::JSHTMLOptionsCollection::length):
        * bindings/js/JSIDBKeyCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::createInjectedScript):
        (WebCore::JSInjectedScriptHost::pushNodePathToFrontend):
        * bindings/js/JSOptionConstructor.cpp:
        (WebCore::JSOptionConstructor::JSOptionConstructor):
        * bindings/js/JSSQLResultSetRowListCustom.cpp:
        (WebCore::JSSQLResultSetRowList::item):
        * bindings/js/JSSVGLengthCustom.cpp:
        (WebCore::JSSVGLength::value):
        * bindings/js/JSScriptProfileNodeCustom.cpp:
        (WebCore::JSScriptProfileNode::callUID):
        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::setTimeout):
        (WebCore::JSWorkerContext::setInterval):
        * bindings/js/JSWorkerContextErrorHandler.cpp:
        (WebCore::JSWorkerContextErrorHandler::handleEvent):
        * bindings/js/ScriptFunctionCall.cpp:
        (WebCore::ScriptCallArgumentHandler::appendArgument):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneDeserializer::readTerminal):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/c/c_instance.cpp:
        (JSC::Bindings::CInstance::numberValue):
        * bridge/c/c_utility.cpp:
        (JSC::Bindings::convertNPVariantToValue):
        * bridge/jni/jsc/JNIBridgeJSC.cpp:
        (JavaField::valueFromInstance):
        (JavaArray::valueAt):
        * bridge/jni/jsc/JavaInstanceJSC.cpp:
        (JavaInstance::numberValue):
        (JavaInstance::invokeMethod):
        * bridge/objc/objc_instance.mm:
        (ObjcInstance::numberValue):
        * bridge/objc/objc_utility.mm:
        (JSC::Bindings::convertObjcValueToValue):
        * bridge/runtime_array.cpp:
        (JSC::RuntimeArray::lengthGetter):
        * bridge/runtime_method.cpp:
        (JSC::RuntimeMethod::lengthGetter):

2010-10-21  Satish Sampath  <satish@chromium.org>

        Reviewed by Jeremy Orlow.

        Allow embedder to pass on all the speech recognition results to the input element.
        https://bugs.webkit.org/show_bug.cgi?id=48068

        No new tests added as functionality has not changed, tests will be added in the next
        patch where these results are exposed as an attribute to scripts.

        * Android.mk: Added new source files.
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * page/SpeechInput.cpp:
        (WebCore::SpeechInput::setRecognitionResult): Accept an array instead of a single string.
        * page/SpeechInput.h:
        * page/SpeechInputListener.h:
        * page/SpeechInputResult.cpp: Added, defines a class for managing a speech input result.
        (WebCore::SpeechInputResult::create):
        (WebCore::SpeechInputResult::SpeechInputResult):
        (WebCore::SpeechInputResult::confidence):
        (WebCore::SpeechInputResult::utterance):
        * page/SpeechInputResult.h: Added.
        * platform/mock/SpeechInputClientMock.cpp:
        (WebCore::SpeechInputClientMock::timerFired):
        * rendering/TextControlInnerElements.cpp:
        (WebCore::InputFieldSpeechButtonElement::setRecognitionResult):
        * rendering/TextControlInnerElements.h:

2010-10-25  Jian Li  <jianli@chromium.org>

        Reviewed by David Levin.

        Support appending an ArrayBuffer object in BlobBuilder
        https://bugs.webkit.org/show_bug.cgi?id=47701

        Test cases have been added to read-blob-test-cases.js.

        * fileapi/BlobBuilder.cpp:
        (WebCore::BlobBuilder::getBuffer):
        (WebCore::BlobBuilder::append): Removed bool return values since they
        weren't used.
        * fileapi/BlobBuilder.h:
        * fileapi/BlobBuilder.idl:

2010-10-25  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Texmap] [Qt] Texture mapper initial implementation
        https://bugs.webkit.org/show_bug.cgi?id=47070

        Glue layer (WebCoreSupport) changes to allow connecting TextureMapper to a Qt PageClient, i.e.
        a QWebView or a QGraphicsWebView. This enables the new type, TextureMapperPlatformLayer, to be recognized both by
        the compositor and by the page client.
        Note that this is temporarily an opt-in, under USE(TEXTURE_MAPPER)

        No new tests: the existing tests under LayoutTests/compositing already cover this.

        * platform/graphics/GraphicsLayer.h:
        * platform/qt/QWebPageClient.h:
        (QWebPageClient::setRootGraphicsLayer):

2010-10-25  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Texmap] [Qt] Texture mapper initial implementation
        https://bugs.webkit.org/show_bug.cgi?id=47070

        Add a config flag and a define (WTF_USE_TEXTURE_MAPPER) to WebCore, to enable opt-in compilation of texture-mapper with Qt.

        No new tests: WIP for a new implementation.

        * WebCore.pro:

2010-10-25  Jian Li  <jianli@chromium.org>

        Reviewed by David Levin.

        Calling FileReader.abort during reading could cause crash
        https://bugs.webkit.org/show_bug.cgi?id=48163

        Test: fast/files/file-reader-abort.html

        * fileapi/FileReader.cpp:
        (WebCore::delayedAbort):
        (WebCore::FileReader::abort): Schedule to do the abort later to work
        around the case that abort() could be called from event handler.
        (WebCore::FileReader::doAbort):
        (WebCore::FileReader::didFail): Do not go with normal error handling
        when we are in the process of aborting.
        (WebCore::FileReader::failed):
        (WebCore::FileReader::readyState):
        * fileapi/FileReader.h:

2010-10-25  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Roben.

        [WINCE] Buildfix for NetworkStateNotifier
        https://bugs.webkit.org/show_bug.cgi?id=48240

        WinCE does not support RegisterWaitForSingleObject, so disable it for now.

        * platform/network/win/NetworkStateNotifierWin.cpp:
        (WebCore::NetworkStateNotifier::NetworkStateNotifier):

2010-10-25  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

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

        Make "rl" and "bt" writing-modes work for blocks and lines.  InlineTextBox is refactored to compute the correct
        top left corner and left baseline edge once so that can be passed down to all the painting functions instead of
        tx and ty.
        
        adjustment helpers have been added that can be called before painting children or lines and that fix up
        the coordinates from flipped to physical.
        
        Added fast/blockflow/english-rl-text.html and fast/blockflow/english-bt-text.html

        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::adjustForFlippedBlocksWritingMode):
        * rendering/InlineBox.h:
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintBoxDecorations):
        (WebCore::InlineFlowBox::paintMask):
        * rendering/InlineTextBox.cpp:
        (WebCore::paintTextWithShadows):
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::paintSelection):
        (WebCore::InlineTextBox::paintCompositionBackground):
        (WebCore::InlineTextBox::paintDecoration):
        (WebCore::InlineTextBox::paintSpellingOrGrammarMarker):
        (WebCore::InlineTextBox::paintTextMatchMarker):
        (WebCore::InlineTextBox::computeRectForReplacementMarker):
        (WebCore::InlineTextBox::paintDocumentMarkers):
        (WebCore::InlineTextBox::paintCompositionUnderline):
        * rendering/InlineTextBox.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintChildren):
        (WebCore::RenderBlock::paintFloats):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::adjustForFlippedBlocksWritingMode):
        * rendering/RenderBox.h:
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::isFlippedBlocksWritingMode):

2010-10-25  Ben Murdoch  <benm@google.com>

        Reviewed by Steve Block.

        Build break with ENABLE(BLOB) and not ENABLE(3D_CANVAS)
        https://bugs.webkit.org/show_bug.cgi?id=48243

        Build fix only so no new tests.

        * bindings/generic/RuntimeEnabledFeatures.h: Guard appropriately.
        * bindings/v8/custom/V8ArrayBufferViewCustom.h: ditto.

2010-10-25  Cris Neckar  <cdn@chromium.org>

        Reviewed by Dimitri Glazkov.

        Added check to ensure that events with the type "mousedown" are mouse events before dispatching.
        https://bugs.webkit.org/show_bug.cgi?id=48159

        Test: fast/events/keyboardevent-mousedown-crash.html

        * dom/Node.cpp:
        (WebCore::Node::defaultEventHandler):

2010-10-25  Kwang Yul Seo  <skyul@company100.net>

        Unreviewed build fix for r70400.

        Add dummy setCookieStoragePrivateBrowsingEnabled.

        * platform/brew/TemporaryLinkStubs.cpp: Added.
        (WebCore::setCookieStoragePrivateBrowsingEnabled):

2010-10-25  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Roben.

        [WINCE] Use default implementation of AXObjectCache::platformGenerateAXID
        https://bugs.webkit.org/show_bug.cgi?id=48239

        WinCE does not support NotifyWinEvent, so use the default implementation.

        * accessibility/AXObjectCache.cpp:

2010-10-25  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Need WebKit2 API to figure out if a frame can provide source
        <rdar://problem/8424632>
        https://bugs.webkit.org/show_bug.cgi?id=48252

        * WebCore.exp.in:

2010-10-25  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r70451.
        http://trac.webkit.org/changeset/70451
        https://bugs.webkit.org/show_bug.cgi?id=48249

        Broke set-unloaded-frame-location.html under Qt (Requested by
        caseq on #webkit).

        * ForwardingHeaders/wtf/text/TextPosition.h: Removed.
        * bindings/js/ScriptSourceCode.h:
        (WebCore::ScriptSourceCode::ScriptSourceCode):
        * bindings/v8/ScheduledAction.cpp:
        (WebCore::ScheduledAction::ScheduledAction):
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::eventHandlerLineNumber):
        (WebCore::ScriptController::eventHandlerColumnNumber):
        * bindings/v8/ScriptController.h:
        * bindings/v8/ScriptEventListener.cpp:
        (WebCore::createAttributeEventListener):
        * bindings/v8/ScriptSourceCode.h:
        (WebCore::ScriptSourceCode::ScriptSourceCode):
        (WebCore::ScriptSourceCode::startLine):
        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListener::V8LazyEventListener):
        (WebCore::V8LazyEventListener::prepareListenerObject):
        * bindings/v8/V8LazyEventListener.h:
        (WebCore::V8LazyEventListener::create):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::compileScript):
        (WebCore::V8Proxy::evaluate):
        (WebCore::V8Proxy::runScript):
        * bindings/v8/V8Proxy.h:
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::evaluate):
        (WebCore::WorkerContextExecutionProxy::runScript):
        * bindings/v8/WorkerContextExecutionProxy.h:
        * bindings/v8/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::evaluate):
        * dom/PendingScript.cpp:
        (WebCore::PendingScript::releaseElementAndClear):
        * dom/PendingScript.h:
        (WebCore::PendingScript::PendingScript):
        (WebCore::PendingScript::operator=):
        (WebCore::PendingScript::startingLineNumber):
        * dom/ScriptableDocumentParser.h:
        * dom/XMLDocumentParser.h:
        * dom/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::XMLDocumentParser):
        (WebCore::XMLDocumentParser::startElementNs):
        (WebCore::XMLDocumentParser::endElementNs):
        (WebCore::XMLDocumentParser::lineNumber):
        (WebCore::XMLDocumentParser::columnNumber):
        * dom/XMLDocumentParserQt.cpp:
        (WebCore::XMLDocumentParser::XMLDocumentParser):
        (WebCore::XMLDocumentParser::parseStartElement):
        (WebCore::XMLDocumentParser::parseEndElement):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::runScriptsForPausedTreeBuilder):
        (WebCore::HTMLDocumentParser::columnNumber):
        * html/parser/HTMLDocumentParser.h:
        * html/parser/HTMLScriptRunner.cpp:
        (WebCore::HTMLScriptRunner::sourceFromPendingScript):
        (WebCore::HTMLScriptRunner::execute):
        (WebCore::HTMLScriptRunner::runScript):
        * html/parser/HTMLScriptRunner.h:
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::HTMLTreeBuilder):
        (WebCore::HTMLTreeBuilder::takeScriptToProcess):
        (WebCore::HTMLTreeBuilder::processEndTag):
        (WebCore::HTMLTreeBuilder::processScriptStartTag):
        * html/parser/HTMLTreeBuilder.h:

2010-10-25  Kwang Yul Seo  <skyul@company100.net>

        Unreviewed build fix for r70095.

        Provide platformDefaultLanguage().

        * platform/brew/LanguageBrew.cpp: Added.
        (WebCore::platformDefaultLanguage):
        * platform/brew/LocalizedStringsBrew.cpp:

2010-10-25  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by David Kilzer.

        Replace _countof with WTF_ARRAY_LENGTH
        https://bugs.webkit.org/show_bug.cgi?id=48229

        * platform/win/FileSystemWin.cpp:
        (WebCore::openTemporaryFile):
        * platform/wince/FileSystemWinCE.cpp:
        (WebCore::openTemporaryFile):
        * plugins/win/PluginDatabaseWin.cpp:
        (WebCore::addPluginPathsFromRegistry):
        (WebCore::addWindowsMediaPlayerPluginDirectory):
        (WebCore::addMacromediaPluginDirectories):

2010-10-25  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

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

        Make selectionRect() on InlineTextBox give the right value for a vertical line.  Selection is still too broken
        to test anything though.

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

2010-10-25  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Antonio Gomes.

        Typo in the TextureMapperGL
        https://bugs.webkit.org/show_bug.cgi?id=48241

        Fix the typo.

        * platform/graphics/opengl/TextureMapperGL.cpp:
        (WebCore::TextureMapperGL::TextureMapperGL):

2010-10-25  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: slowly make old resources panel optional (continued).
        https://bugs.webkit.org/show_bug.cgi?id=48207

        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype.set url):
        * inspector/front-end/StoragePanel.js:
        (WebInspector.StoragePanel.prototype.get toolbarItemLabel):
        (WebInspector.StoragePanel.prototype.showResource):
        (WebInspector.StoragePanel.prototype.searchMatchFound):
        (WebInspector.StoragePanel.prototype._findTreeElementForResource):
        (WebInspector.StoragePanel.prototype._findTreeElementForResource.getParent):
        (WebInspector.BaseStorageTreeElement.prototype.onattach):
        * inspector/front-end/inspector.css:
        (.storage.panel .sidebar):
        (.storage.panel .sidebar li):
        (.storage.panel .sidebar li.parent):
        (.storage.panel .sidebar li.selected):
        (.storage.panel .sidebar li .selection):
        (.storage.panel .sidebar :focus li .selection):
        (body.inactive .storage.panel .sidebar li .selection):
        (.storage.panel .sidebar .icon):

2010-10-25  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Texmap] [Qt] Texture mapper initial implementation
        This patch adds the OpenGL implementation of TextureMapper. See the other entries from bug 47070 for details.
        https://bugs.webkit.org/show_bug.cgi?id=47070

        No new tests. Part of a new implementation.

        * platform/graphics/opengl/TextureMapperGL.cpp: Added.
        * platform/graphics/opengl/TextureMapperGL.h: Added.

2010-10-25  Peter Rybin  <peter.rybin@gmail.com>

        Reviewed by Adam Barth.

        HTML parser should provide script column position within HTML document to JavaScript engine
        https://bugs.webkit.org/show_bug.cgi?id=45271

        Replaces line number with TextPosition struct so that script engine
        gets script starting line/column.

        * ForwardingHeaders/wtf/text/TextPosition.h: Added.
        * bindings/js/ScriptSourceCode.h:
        (WebCore::ScriptSourceCode::ScriptSourceCode):
        * bindings/v8/ScheduledAction.cpp:
        (WebCore::ScheduledAction::ScheduledAction):
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::eventHandlerPosition):
        * bindings/v8/ScriptController.h:
        * bindings/v8/ScriptEventListener.cpp:
        (WebCore::createAttributeEventListener):
        * bindings/v8/ScriptSourceCode.h:
        (WebCore::ScriptSourceCode::ScriptSourceCode):
        (WebCore::ScriptSourceCode::startLine):
        (WebCore::ScriptSourceCode::startPosition):
        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListener::V8LazyEventListener):
        (WebCore::V8LazyEventListener::prepareListenerObject):
        * bindings/v8/V8LazyEventListener.h:
        (WebCore::V8LazyEventListener::create):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::compileScript):
        (WebCore::V8Proxy::evaluate):
        (WebCore::V8Proxy::runScript):
        * bindings/v8/V8Proxy.h:
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::evaluate):
        (WebCore::WorkerContextExecutionProxy::runScript):
        * bindings/v8/WorkerContextExecutionProxy.h:
        * bindings/v8/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::evaluate):
        * dom/PendingScript.cpp:
        (WebCore::PendingScript::releaseElementAndClear):
        * dom/PendingScript.h:
        (WebCore::PendingScript::PendingScript):
        (WebCore::PendingScript::operator=):
        (WebCore::PendingScript::startingPosition):
        * dom/ScriptableDocumentParser.h:
        * dom/XMLDocumentParser.h:
        * dom/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::XMLDocumentParser):
        (WebCore::XMLDocumentParser::startElementNs):
        (WebCore::XMLDocumentParser::endElementNs):
        (WebCore::XMLDocumentParser::lineNumber):
        (WebCore::XMLDocumentParser::columnNumber):
        (WebCore::XMLDocumentParser::textPosition):
        (WebCore::XMLDocumentParser::textPositionOneBased):
        * dom/XMLDocumentParserQt.cpp:
        (WebCore::XMLDocumentParser::XMLDocumentParser):
        (WebCore::XMLDocumentParser::textPosition):
        (WebCore::XMLDocumentParser::parseStartElement):
        (WebCore::XMLDocumentParser::parseEndElement):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::runScriptsForPausedTreeBuilder):
        (WebCore::HTMLDocumentParser::textPosition):
        * html/parser/HTMLDocumentParser.h:
        * html/parser/HTMLScriptRunner.cpp:
        (WebCore::HTMLScriptRunner::sourceFromPendingScript):
        (WebCore::HTMLScriptRunner::execute):
        (WebCore::HTMLScriptRunner::runScript):
        * html/parser/HTMLScriptRunner.h:
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::uninitializedPositionValue1):
        (WebCore::HTMLTreeBuilder::HTMLTreeBuilder):
        (WebCore::HTMLTreeBuilder::takeScriptToProcess):
        (WebCore::HTMLTreeBuilder::processEndTag):
        (WebCore::HTMLTreeBuilder::processScriptStartTag):
        * html/parser/HTMLTreeBuilder.h:

2010-10-24  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: slowly make old resources panel optional.
        https://bugs.webkit.org/show_bug.cgi?id=48207

        * inspector/front-end/AuditsPanel.js:
        (WebInspector.AuditsPanel.prototype._reloadResources):
        (WebInspector.AuditsPanel.prototype.show):
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._onRevealAndSelectResource):
        * inspector/front-end/ResourcesPanel.js:
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._sourceFrameForScriptOrResource):
        (WebInspector.ScriptsPanel.prototype._sourceFrameForResource):
        * inspector/front-end/inspector.js:
        (WebInspector._createPanels):
        (WebInspector.doLoadedDone.populateInspectorState):
        (WebInspector.doLoadedDone):
        (WebInspector.openResource):
        (WebInspector.updateResource):
        (WebInspector.domContentEventFired):
        (WebInspector.loadEventFired):
        (WebInspector.removeResource):
        (WebInspector.displayNameForURL):
        (WebInspector._choosePanelToShowSourceLine):
        (WebInspector.doPerformSearch):

2010-10-24  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: add support for errors, warnings and search to the storage panel.
        https://bugs.webkit.org/show_bug.cgi?id=48206

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.addMessage):
        (WebInspector.ConsoleView.prototype.clearMessages):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype.set errors):
        (WebInspector.Resource.prototype.set warnings):
        (WebInspector.Resource.prototype.get searchMatches):
        (WebInspector.Resource.prototype.set searchMatches):
        (WebInspector.Resource.prototype.clearErrorsAndWarnings):
        * inspector/front-end/ResourceManager.js:
        (WebInspector.ResourceManager):
        (WebInspector.ResourceManager.prototype.identifierForInitialRequest):
        (WebInspector.ResourceManager.prototype._createResource):
        (WebInspector.ResourceManager.prototype._appendRedirect):
        (WebInspector.ResourceManager.prototype.didReceiveResponse):
        (WebInspector.ResourceManager.prototype.didFinishLoading):
        (WebInspector.ResourceManager.prototype.didFailLoading):
        (WebInspector.ResourceManager.prototype.didLoadResourceFromMemoryCache):
        (WebInspector.ResourceManager.prototype.didCommitLoadForFrame):
        (WebInspector.ResourceManager.prototype.frameDetachedFromParent):
        (WebInspector.ResourceManager.prototype._addFramesRecursively):
        (WebInspector.ResourceManager.prototype.resourceForURL):
        (WebInspector.ResourceManager.prototype.addConsoleMessage):
        (WebInspector.ResourceManager.prototype.clearConsoleMessages):
        (WebInspector.ResourceTreeModel):
        (WebInspector.ResourceTreeModel.prototype.addOrUpdateFrame):
        (WebInspector.ResourceTreeModel.prototype.didCommitLoadForFrame):
        (WebInspector.ResourceTreeModel.prototype.frameDetachedFromParent):
        (WebInspector.ResourceTreeModel.prototype._clearChildFramesAndResources):
        (WebInspector.ResourceTreeModel.prototype.addResourceToFrame):
        (WebInspector.ResourceTreeModel.prototype._clearResources):
        (WebInspector.ResourceTreeModel.prototype._bindResourceURL):
        (WebInspector.ResourceTreeModel.prototype._unbindResourceURL):
        (WebInspector.ResourceTreeModel.prototype.resourceForURL):
        (WebInspector.ResourceTreeModel.prototype.forAllResources):
        (WebInspector.ResourceTreeModel.prototype._callForFrameResources):
        * inspector/front-end/StoragePanel.js:
        (WebInspector.StoragePanel):
        (WebInspector.StoragePanel.prototype.get toolbarItemLabel):
        (WebInspector.StoragePanel.prototype.reset):
        (WebInspector.StoragePanel.prototype.removeFrame):
        (WebInspector.StoragePanel.prototype.canShowSourceLine):
        (WebInspector.StoragePanel.prototype.showSourceLine):
        (WebInspector.StoragePanel.prototype.showResource):
        (WebInspector.StoragePanel.prototype._showResourceView):
        (WebInspector.StoragePanel.prototype.updateMainViewWidth):
        (WebInspector.StoragePanel.prototype.get searchableViews.callback):
        (WebInspector.StoragePanel.prototype.get searchableViews):
        (WebInspector.StoragePanel.prototype._forAllResourceTreeElements):
        (WebInspector.StoragePanel.prototype.searchMatchFound):
        (WebInspector.StoragePanel.prototype.searchCanceled.callback):
        (WebInspector.StoragePanel.prototype.searchCanceled):
        (WebInspector.StoragePanel.prototype.performSearch):
        (WebInspector.StoragePanel.prototype.showView):
        (WebInspector.BaseStorageTreeElement.prototype.onattach):
        (WebInspector.BaseStorageTreeElement.prototype.set titleText):
        (WebInspector.BaseStorageTreeElement.prototype.isEventWithinDisclosureTriangle):
        (WebInspector.FrameResourceTreeElement):
        (WebInspector.FrameResourceTreeElement.prototype.onselect):
        (WebInspector.FrameResourceTreeElement.prototype.ondblclick):
        (WebInspector.FrameResourceTreeElement.prototype.onattach):
        (WebInspector.FrameResourceTreeElement.prototype._ondragstart):
        (WebInspector.FrameResourceTreeElement.prototype._setBubbleText):
        (WebInspector.FrameResourceTreeElement.prototype._resetBubble):
        (WebInspector.FrameResourceTreeElement.prototype._searchMatchesUpdated):
        (WebInspector.FrameResourceTreeElement.prototype._errorsWarningsUpdated):
        * inspector/front-end/inspector.css:
        (.storage.panel .sidebar):
        (.storage.panel .outline-disclosure li):
        (.storage.panel .outline-disclosure li.parent):
        (.storage.panel .outline-disclosure li .selection):
        (.storage.panel .outline-disclosure .icon):
        (.storage.panel .base-storage-tree-element-title):
        (.storage.panel .status):
        (.storage.panel li .status .bubble):
        (li .status):
        (li .status:empty):
        (li .status .bubble):
        (li .status .bubble:empty):
        (li.selected .status .bubble):
        (:focus li.selected .status .bubble):
        (body.inactive li.selected .status .bubble):
        (li.selected .bubble.search-matches):
        (:focus li.selected .bubble.search-matches):
        (body.inactive li.selected .bubble.search-matches):

2010-10-24  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by David Kilzer.

        Fix Qt minimal build break revealed by r70413.
        https://bugs.webkit.org/show_bug.cgi?id=48185

        * rendering/RenderMeter.h: Missing include added, needless include removed.

2010-10-20  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Jian Li.

        Renumber FileError/FileException error codes per latest File API spec changes
        https://bugs.webkit.org/show_bug.cgi?id=47936

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::setDOMException): Added FileExceptionType case.
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::setDOMException): Added FileExceptionType case.
        * dom/ExceptionCode.cpp:
        (WebCore::getExceptionCodeDescription): Added code for FileException.
        * dom/ExceptionCode.h:
        * fileapi/AsyncFileWriterClient.h:
        * fileapi/DirectoryEntry.cpp:
        (WebCore::DirectoryEntry::getFile):
        (WebCore::DirectoryEntry::getDirectory):
        (WebCore::DirectoryEntry::removeRecursively):
        * fileapi/DirectoryEntrySync.cpp:
        (WebCore::DirectoryEntrySync::getFile):
        (WebCore::DirectoryEntrySync::getDirectory):
        (WebCore::DirectoryEntrySync::removeRecursively):
        * fileapi/DirectoryReaderSync.cpp:
        (WebCore::DirectoryReaderSync::readEntries):
        * fileapi/Entry.cpp:
        (WebCore::Entry::getMetadata):
        (WebCore::Entry::moveTo):
        (WebCore::Entry::copyTo):
        (WebCore::Entry::remove):
        (WebCore::Entry::getParent):
        * fileapi/EntrySync.cpp:
        (WebCore::EntrySync::getMetadata):
        (WebCore::EntrySync::moveTo):
        (WebCore::EntrySync::copyTo):
        (WebCore::EntrySync::remove):
        * fileapi/FileError.h: Added error code enum.
        (WebCore::FileError::create):
        (WebCore::FileError::code):
        (WebCore::FileError::FileError):
        * fileapi/FileError.idl: Rebased error code numbers.
        * fileapi/FileException.h: Added exception code enum.
        (WebCore::FileException::ErrorCodeToExceptionCode): Added.
        * fileapi/FileException.idl: Rebased exception code numbers.
        * fileapi/FileReader.cpp:
        (WebCore::FileReader::abort):
        (WebCore::FileReader::failed):
        (WebCore::FileReader::httpStatusCodeToErrorCode): Changed from
        httpStatuCodeToExceptionCode.
        * fileapi/FileReader.h:
        * fileapi/FileReaderSync.cpp:
        (WebCore::FileReaderSyncLoader::start):
        * fileapi/FileSystemCallbacks.cpp:
        (WebCore::FileSystemCallbacksBase::didFail):
        * fileapi/FileWriter.cpp:
        (WebCore::FileWriter::write):
        (WebCore::FileWriter::seek):
        (WebCore::FileWriter::truncate):
        (WebCore::FileWriter::abort):
        (WebCore::FileWriter::didFail):
        (WebCore::FileWriter::setError):
        * fileapi/FileWriter.h:
        * fileapi/SyncCallbackHelper.h:
        (WebCore::SyncCallbackHelper::SyncCallbackHelper):
        (WebCore::SyncCallbackHelper::getResult):
        (WebCore::SyncCallbackHelper::setError):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::requestFileSystem):
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::requestFileSystem):
        (WebCore::WorkerContext::requestFileSystemSync):

2010-10-24  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        Expose HitTestResult::absoluteMediaURL() via WebKit API
        https://bugs.webkit.org/show_bug.cgi?id=48219

        * WebCore.exp.in: Export HitTestResult::absoluteMediaURL().

2010-10-24  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        Need a way to determine the screen rect for a form control in WebKit2
        <rdar://problem/8530670>
        https://bugs.webkit.org/show_bug.cgi?id=48216

        * WebCore.exp.in: Add export.
        * dom/Element.cpp:
        (WebCore::Element::boundsInWindowSpace):
        * dom/Element.h:
        Add function to return the bounding box in window (in ScrollView terminology) space,
        this is the same space as the root viewport.

2010-10-24  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] ImageBuffer::platformTransformColorSpace is unnecessarily slow
        https://bugs.webkit.org/show_bug.cgi?id=48211

        Grab the QImage::bits() and do direct access instead of going through
        QImage::pixel() and QImage::setPixel().

        This is a performance optimization, so no new tests.

        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::ImageBuffer::platformTransformColorSpace):

2010-10-24  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Filter example Chiseled from SVG Wow! is slow
        https://bugs.webkit.org/show_bug.cgi?id=48174

        Use a pointer to the ByteArray instead of the ref counted CanvasPixelArray or ImageData directly
        to access the data for pixel manipulation on SVG Filters or SVG Masker. This is a
        performance increase since the recurring use of the -> operator can be avoided.
        FEConvolveMatrix and FELighting still need to change in a followup patch.

        No functionality was changed. So, no new tests.

        * platform/graphics/filters/FEBlend.cpp:
        (WebCore::FEBlend::apply):
        * platform/graphics/filters/FEColorMatrix.cpp:
        (WebCore::luminance):
        (WebCore::effectType):
        (WebCore::FEColorMatrix::apply):
        * platform/graphics/filters/FEComponentTransfer.cpp:
        (WebCore::FEComponentTransfer::apply):
        * platform/graphics/filters/FEComposite.cpp:
        (WebCore::arithmetic):
        (WebCore::FEComposite::apply):
        * platform/graphics/filters/FEDisplacementMap.cpp:
        (WebCore::FEDisplacementMap::apply):
        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::boxBlur):
        (WebCore::FEGaussianBlur::apply):
        * platform/graphics/filters/FEMorphology.cpp:
        (WebCore::FEMorphology::apply):
        * platform/graphics/filters/FETurbulence.cpp:
        (WebCore::FETurbulence::apply):
        * rendering/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::drawContentIntoMaskImage):

2010-10-24  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: polish network panel UI.
        https://bugs.webkit.org/show_bug.cgi?id=48205

        * inspector/front-end/Images/frame.png:
        * inspector/front-end/Images/networkIcon.png:
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel.prototype._createTable):
        (WebInspector.NetworkPanel.prototype._setLargerResources):
        (WebInspector.NetworkPanel.prototype._toggleGridMode):
        * inspector/front-end/networkPanel.css:
        (.network.panel .data-grid td):
        (.network.panel .data-grid.small td):
        (#network-views .resource-view.headers-visible .resource-view-content):
        (#network-views.small .resource-view.headers-visible .resource-view-content):
        (#network-views .resource-view-headers):
        (#network-views.small .resource-view-headers):
        (#network-views .resource-view .tabbed-pane-header):
        (#network-views.small .resource-view .tabbed-pane-header):

2010-10-24  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dimitri Glazkov.

        Convert SVGAngle to the new SVGPropertyTearOff concept, reimplement it properly
        https://bugs.webkit.org/show_bug.cgi?id=48179

        Fix WebGL tests. Accept 'boolean' as valid numeric type in StrictTypeChecking mode.

        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorV8.pm:

2010-10-24  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Convert SVGAngle to the new SVGPropertyTearOff concept, reimplement it properly
        https://bugs.webkit.org/show_bug.cgi?id=48179

        Speculative fix for the WebGL tests, I was not aware they're not run on Leopard, so I missed the breakage.

        * bindings/scripts/CodeGeneratorJS.pm: Restore the order of type checking in the 'StrictTypeChecking' code.
        * bindings/scripts/CodeGeneratorV8.pm: Ditto.

2010-10-23  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Convert SVGAngle to the new SVGPropertyTearOff concept, reimplement it properly
        https://bugs.webkit.org/show_bug.cgi?id=48179

        Rewrite SVGAngle to use the new SVGPropertyTearOff concept, and consume much less memory.
        Down from two floats, one string and an ushort to one float and one ushort. Synchronize value/valueInSpecifiedUnits/valueAsString on demand.

        Adding an extensive SVGAngle test, that required to implement 'StrictTypeChecking' for attribute setters (was only implemented in V8/JSC for function cals so far).

        Test: svg/dom/SVGAngle.html

        * GNUmakefile.am: Add SVGAnimatedAngle.h to build.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * bindings/scripts/CodeGenerator.pm: Split IsPrimitiveType in IsPrimitiveType and IsNumericType.
        * bindings/scripts/CodeGeneratorJS.pm: Implement 'StrictTypeChecking' for setters and recognize SVGAngle as new SVGPropertyTearOff type.
        * bindings/scripts/CodeGeneratorObjC.pm: Ditto.
        * bindings/scripts/CodeGeneratorV8.pm: Ditto.
        * svg/DeprecatedSVGAnimatedPropertyTraits.h: Remove SVGAngle handling.
        * svg/DeprecatedSVGAnimatedTemplate.h: Remove SVGAnimatedAngle handling.
        * svg/SVGAngle.cpp: Rewrite, to consume less memory and to operate more efficient.
        * svg/SVGAngle.h: Ditto.
        * svg/SVGAngle.idl: Add 'StrictTypeChecking' to the value/valueInSpecifiedUnits methods.
        * svg/SVGAnimatedAngle.h: Added.
        * svg/SVGAnimatedAngle.idl: Mark as [SVGAnimatedProperty].
        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::parseMappedAttribute): SVGAngle::setValueAsString() now takes an ExceptionCode parameter.
        * svg/SVGMarkerElement.h: s/ANIMATED_PROPERTY/ANIMATED_PROPERTY_NEW/ for the SVGAngle type.
        * svg/SVGNumber.idl: Remove exception setter exceptions, which aren't needed. As we're now generating exception handlers in the bindings, it would lead to compile errors.
        * svg/SVGPoint.idl: Ditto.
        * svg/SVGRect.idl: Ditto.
        * svg/SVGSVGElement.idl: Remove obsolete [SVGLiveProperty] flag.

2010-10-23  Daniel Bates  <dbates@rim.com>

        Reviewed by Adam Barth.

        Remove unused method HTMLFrameElementBase::setNameAndOpenURLCallback()
        https://bugs.webkit.org/show_bug.cgi?id=48197

        With the landing of the patch for bug #45365 in
        changeset 67182 <http://trac.webkit.org/changeset/67182>, 
        HTMLFrameElementBase::setNameAndOpenURLCallback() is not needed.
        Therefore, we remove it.

        Before changeset 67182, HTMLFrameElementBase::attach() set up a post-attach
        callback to HTMLFrameElementBase::setNameAndOpenURLCallback(). Changeset 67182
        removed this callback.

        No functionality was changed. So, no new tests.

        * html/HTMLFrameElementBase.cpp: Remove HTMLFrameElementBase::setNameAndOpenURLCallback().
        * html/HTMLFrameElementBase.h: Ditto.

2010-10-23  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Sam Weinig.

        Unify globalData APIs
        https://bugs.webkit.org/show_bug.cgi?id=47969

        Adapt code to JSGlobalObject::globalData returning a reference
        instead of a pointer.

        * bindings/js/JSCallbackData.cpp:
        (WebCore::JSCallbackData::invokeCallback):
        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::lookupNamespaceURI):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::markChildren):
        * bindings/js/JSWorkerContextErrorHandler.cpp:
        (WebCore::JSWorkerContextErrorHandler::handleEvent):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::executeFunctionInContext):
        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::evaluate):
        * bridge/NP_jsobject.cpp:
        (_NPN_InvokeDefault):
        (_NPN_Invoke):
        (_NPN_Evaluate):
        (_NPN_Construct):

2010-10-23  Alexey Proskuryakov  <ap@apple.com>

        Windows debug build fix.

        * platform/network/cf/CookieStorageCFNet.cpp: Include MainThread.h for isMainThread().

2010-10-23  Alexey Proskuryakov  <ap@apple.com>

        Windows build fix.

        * platform/network/cf/CookieStorageCFNet.cpp:
        (WebCore::setCookieStoragePrivateBrowsingEnabled): It's adoptCF, not adoptPtr.

2010-10-23  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=48083
        <rdar://problem/8489082> Need WebKit2 API for private browsing (48083)

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        Added CookieStorage.h to build files that contain headers.

        * WebCore.xcodeproj/project.pbxproj: Added CookieStorage.h and CookieStorageMac.mm.

        * WebCore.exp.in: Export _wkSetCookieStoragePrivateBrowsingEnabled (WebKit initializes WKSI
        on WebCore's behalf).

        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:
        More work for passing the function pointer down to WebCore.

        * page/Settings.cpp: (WebCore::Settings::setPrivateBrowsingEnabled): Tell cookie manager to
        when to use private browsing mode. Note that although this is a per-page setting, it
        actually has global effect.

        * page/Settings.h: Extended a comment about what private browsing does.

        * platform/android/TemporaryLinkStubs.cpp: (setCookieStoragePrivateBrowsingEnabled):
        * platform/chromium/TemporaryLinkStubs.cpp: (WebCore::setCookieStoragePrivateBrowsingEnabled):
        * platform/efl/TemporaryLinkStubs.cpp: (WebCore::setCookieStoragePrivateBrowsingEnabled):
        * platform/gtk/TemporaryLinkStubs.cpp: (WebCore::setCookieStoragePrivateBrowsingEnabled):
        * platform/haiku/TemporaryLinkStubs.cpp: (WebCore::setCookieStoragePrivateBrowsingEnabled):
        * platform/qt/TemporaryLinkStubsQt.cpp: (WebCore::setCookieStoragePrivateBrowsingEnabled):
        Added an empty implementation for ports that don't implement private browsing, or implement
        it in ways I cannot discover.

        * platform/network/CookieStorage.h: Added. I'm not entirely sure how this is different from
        CookieJar.h, just following a precedent already set by Windows port with CookieStorageWin.h.

        * platform/network/mac/CookieStorageMac.mm: Added.
        (WebCore::setCookieStoragePrivateBrowsingEnabled): Call a WKSI function to enable private
        browsing mode for cookies.

        * platform/network/cf/CookieStorageCFNet.cpp:
        (WebCore::currentCookieStorage): Added ASSERT(isMainThread()).
        (WebCore::setCurrentCookieStorage): Ditto.
        (WebCore::setCookieStoragePrivateBrowsingEnabled): Set cookie storage to a private one
        when in private browsing mode. ResourceHandle applies the storage to each individual request.

        * platform/network/cf/CookieStorageCFNet.h: Added a comment explaining that these functions
        are only for WebKit1.

2010-10-23  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/48181> Add missing include of MacErrors.h

        Reviewed by Alexey Proskuryakov.

        * platform/network/mac/FormDataStreamMac.mm: Added #import of
        <MacErrors.h> for iOS since the formOpen() method uses "fnfErr",
        which was added in r55670.  The same header is included through
        <CoreServices/CoreServices.h> on Mac OS X.

2010-10-23  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by David Kilzer.

        [WINCE] Port COMPtr.h to WinCE
        https://bugs.webkit.org/show_bug.cgi?id=48190

        Don't include guiddef.h on WinCE. It's not required and only creates build problems.

        * platform/win/COMPtr.h:

2010-10-23  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by David Kilzer.

        [WINCE] Rename SharedBitmap::createInstance to SharedBitmap::create
        https://bugs.webkit.org/show_bug.cgi?id=48180

        Also use better arguments for the create function.

        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        (WebCore::GraphicsContextPlatformPrivate::getTransparentLayerBitmap):
        (WebCore::TransparentLayerDC::TransparentLayerDC):
        (WebCore::GraphicsContext::drawFrameControl):
        * platform/graphics/wince/ImageBufferWinCE.cpp:
        (WebCore::ImageBufferData::ImageBufferData):
        * platform/graphics/wince/ImageWinCE.cpp:
        (WebCore::RGBA32Buffer::asNewNativeImage):

2010-10-23  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, rolling out r70369.
        http://trac.webkit.org/changeset/70369
        https://bugs.webkit.org/show_bug.cgi?id=47974

        Caused weird artifacts in expected results.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * loader/CachedImage.cpp:
        (WebCore::CachedImage::createImage):
        * platform/graphics/ImageSource.h:
        * platform/image-decoders/ImageDecoder.cpp:
        (WebCore::RGBA32Buffer::operator=):
        (WebCore::RGBA32Buffer::clear):
        (WebCore::RGBA32Buffer::zeroFill):
        (WebCore::RGBA32Buffer::copyBitmapData):
        (WebCore::RGBA32Buffer::setSize):
        * platform/image-decoders/ImageDecoder.h:
        (WebCore::RGBA32Buffer::getAddr):
        * platform/image-decoders/cairo/ImageDecoderCairo.cpp:
        (WebCore::RGBA32Buffer::asNewNativeImage):
        * platform/image-decoders/cg/ImageDecoderCG.cpp: Removed.
        * platform/image-decoders/haiku/ImageDecoderHaiku.cpp:
        (WebCore::RGBA32Buffer::asNewNativeImage):
        * platform/image-decoders/openvg/ImageDecoderOpenVG.cpp:
        (WebCore::RGBA32Buffer::asNewNativeImage):
        * platform/image-decoders/wx/ImageDecoderWx.cpp:
        (WebCore::RGBA32Buffer::asNewNativeImage):

2010-10-23  Adam Barth  <abarth@webkit.org>

        Reviewed by Andreas Kling.

        WebP decoding hits ASSERT
        https://bugs.webkit.org/show_bug.cgi?id=48168

        Calling reserveCapacity only allocates the memory.  It doesn't actually
        set the length.  When you try to access the zeroth element, you hit an
        ASSERT.

        Covered by fast/images/webp-image-decoding.html in debug.

        * platform/image-decoders/webp/WEBPImageDecoder.cpp:
        (WebCore::WEBPImageDecoder::decode):

2010-10-23  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Menu list buttons do react properly to CSS styling
        https://bugs.webkit.org/show_bug.cgi?id=48099

        Correct the way that menu list buttons get their necessary padding from
        GTK+. Instead of resetting the padding to these values, return them via
        the popupInternalPadding* methods. Add implementations for *MenuListButton*
        methods.

        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::getComboBoxPadding): Added.
        (WebCore::RenderThemeGtk::popupInternalPaddingLeft): Added.
        (WebCore::RenderThemeGtk::popupInternalPaddingRight): Added.
        (WebCore::RenderThemeGtk::popupInternalPaddingTop): Added.
        (WebCore::RenderThemeGtk::popupInternalPaddingBottom): Added.
        (WebCore::RenderThemeGtk::adjustMenuListStyle): Do not reset CSS
        properties, instead rely on the poupInternalPadding* methods.
        (WebCore::RenderThemeGtk::adjustMenuListButtonStyle): Added.
        (WebCore::RenderThemeGtk::paintMenuListButton): Added.
        * platform/gtk/RenderThemeGtk.h: Added new method declarations.

2010-10-23  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by David Kilzer.

        Add Gradient::hasAlpha
        https://bugs.webkit.org/show_bug.cgi?id=48183

        WinCE can do some performance improvements if the gradient is opaque.

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

2010-10-23  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Reviewed by David Kilzer.

        [EFL] Implement platformDefaultLanguage() 
        https://bugs.webkit.org/show_bug.cgi?id=48113

        Implement the platformDefaultLanguage() function for EFL port.

        * platform/efl/LanguageEfl.cpp:
        (WebCore::platformDefaultLanguage):

2010-10-23  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r70367.
        http://trac.webkit.org/changeset/70367
        https://bugs.webkit.org/show_bug.cgi?id=48176

        It made 8-10 tests crash on Qt bot (Requested by Ossy on
        #webkit).

        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::MainResourceLoader):
        (WebCore::MainResourceLoader::continueAfterContentPolicy):
        (WebCore::MainResourceLoader::didReceiveResponse):
        (WebCore::MainResourceLoader::setDefersLoading):
        * loader/MainResourceLoader.h:

2010-10-22  Andy Estes  <aestes@apple.com>

        Reviewed by Adam Roben and Sam Weinig.

        WebKit shouldn't load a plug-in based on file extension if a MIME type
        is specified.
        https://bugs.webkit.org/show_bug.cgi?id=48046

        The fix landed in r70332 only covered the Mac port. Implement this fix
        for other ports as well.

        * plugins/PluginDatabase.cpp:
        (WebCore::PluginDatabase::findPlugin):

2010-10-21  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel, Peter Kasting, and Darin Fisher.
        (Eric reviewed the CoreGraphics interactions, Peter reviewed the image
        decoder interaction, and Darin Fisher SGTMed the policy decision.)

        [chromium] Chromium Mac should use WebKit's image decoders
        https://bugs.webkit.org/show_bug.cgi?id=47974

        This patch teaches WebKit's image decoders how to talk to CoreGraphics.
        This patch doesn't handle color profiles, but that will come in a
        subsequent patch.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * loader/CachedImage.cpp:
        (WebCore::CachedImage::createImage):
        * platform/graphics/ImageSource.h:
        * platform/image-decoders/ImageDecoder.cpp:
        (WebCore::RGBA32Buffer::clear):
        (WebCore::RGBA32Buffer::zeroFill):
        (WebCore::RGBA32Buffer::copyBitmapData):
        (WebCore::RGBA32Buffer::setSize):
        * platform/image-decoders/ImageDecoder.h:
        (WebCore::RGBA32Buffer::getAddr):
        * platform/image-decoders/cg: Added.
        * platform/image-decoders/cg/ImageDecoderCG.cpp: Added.
        (WebCore::RGBA32Buffer::copyBitmapData):
        (WebCore::RGBA32Buffer::setSize):
        (WebCore::RGBA32Buffer::asNewNativeImage):

2010-10-20  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Barth and Darin Adler.

        Using the decidePolicyForMIMEType delegate message in an asynchronous manner does not work
        https://bugs.webkit.org/show_bug.cgi?id=48014
        <rdar://problem/8202716>

        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::continueAfterContentPolicy):
        Resume loading.

        (WebCore::MainResourceLoader::didReceiveResponse):
        Defer loading until we hear back from the policy client.

2010-10-22  James Robinson  <jamesr@chromium.org>

        Reviewed by Dimitri Glazkov.

        REGRESSION(66391): http://ligth-arts.all-up.com/ crashes in EventHandler::selectCursor
        https://bugs.webkit.org/show_bug.cgi?id=47942

        Add checks for a NULL StyleImage in a CursorList.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::loadPendingImages):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::selectCursor):
        * rendering/style/CursorList.h:
        (WebCore::CursorList::at):
        * manual-tests/cursor-empty-url.html: Added.
        * manual-tests/resources/cursor-empty-url.css: Added.

2010-10-22  David Hyatt  <hyatt@apple.com>

        Reviewed by Adele Peterson.

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

        Make vertical lines hit test properly and show a vertical i-beam cursor.  Numerous bugs with overflow were discovered while getting this to work,
        so these are in the patch as well.  The broken layout tests are fixed by the overflow bug fixes as well (which just restore the old behavior).

        * page/EventHandler.cpp:
        (WebCore::EventHandler::selectCursor):
        * rendering/InlineBox.h:
        (WebCore::InlineBox::width):
        (WebCore::InlineBox::height):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesInInlineDirection):
        (WebCore::InlineFlowBox::computeBlockDirectionOverflow):
        (WebCore::InlineFlowBox::nodeAtPoint):
        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::logicalTopVisibleOverflow):
        (WebCore::InlineFlowBox::logicalBottomVisibleOverflow):
        (WebCore::InlineFlowBox::visibleOverflowRect):
        (WebCore::InlineFlowBox::layoutOverflowRect):
        (WebCore::InlineFlowBox::logicalTopLayoutOverflow):
        (WebCore::InlineFlowBox::logicalBottomLayoutOverflow):
        (WebCore::InlineFlowBox::visualOverflowRect):
        (WebCore::InlineFlowBox::logicalTopVisualOverflow):
        (WebCore::InlineFlowBox::logicalBottomVisualOverflow):
        (WebCore::InlineFlowBox::setBlockDirectionOverflowPositions):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::nodeAtPoint):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::blockDirectionOverflow):
        * rendering/RenderBox.h:
        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::hitTest):

2010-10-22  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        <rdar://problem/8251616> Layout not updating in a subtree when a scrollbar is hidden in a flexbox descendant
        https://bugs.webkit.org/show_bug.cgi?id=48154

        Test: scrollbars/hidden-scrollbar-prevents-layout.html

        updateScrollInfoAfterLayout() calling setHasHorizontalScrollbar() caused updateScrollbarParts()
        to call setChildNeedsLayout() on the overflow, because the RenderScrollbar was created with
        the default thickness instead of the thickness specified in style. This led to the the overflow’s
        parent to be re-marked for layout during its own parent’s finishDelayUpdateScrollInfo(), and
        the result was that at the end of RenderView::layout(), there was a dirty renderer.

        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::RenderScrollbar): Set the frame size in the 'display: none' and
        'visibility: hidden' cases as well.

2010-10-22  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed.

        [WINCE] Build fix after r70143.

        * platform/graphics/wince/ImageBufferWinCE.cpp:
        (WebCore::ImageBuffer::ImageBuffer):

2010-10-22  Adam Roben  <aroben@apple.com>

        Windows build fix

        r70319 added Windows-native versions of the various platform/network
        headers to platform/network/win. WebCoreGenerated was copying these
        headers over the CFNetwork-specific versions in $WebKitOutputDir,
        leading to the wrong headers being used in WebKit.

        This patch changes WebCoreGenerated not to copy any headers from
        platform/network/win into $WebKitOutputDir. Instead, only headers from
        platform/network/cf or platform/network/curl (as specified) are copied.
        There were some CFNetwork-specific files still hanging around in
        platform/network/win; these have been moved to platform/network/cf.

        * WebCore.vcproj/WebCore.vcproj: Updated for file moves and let VS
        * format the file as it saw fit.

        * WebCore.vcproj/WebCoreGenerated.vcproj: Added the various scripts
        * this project uses to make editing them easier.

        * WebCore.vcproj/copyForwardingHeaders.cmd: Changed not to copy any
        * headers from platform/network/win.

        * platform/network/cf/CookieJarCFNet.cpp: Renamed from WebCore/platform/network/win/CookieJarCFNetWin.cpp.
        * platform/network/cf/CookieStorageCFNet.cpp: Renamed from WebCore/platform/network/win/CookieStorageWin.cpp.
        * platform/network/cf/CookieStorageCFNet.h: Renamed from WebCore/platform/network/win/CookieStorageWin.h.

        * platform/network/cf/ResourceHandleCFNet.cpp: Updated for rename.

        * platform/network/cf/AuthenticationChallenge.h:
        * platform/network/cf/ResourceError.h:
        * platform/network/cf/ResourceRequest.h:
        * platform/network/cf/ResourceResponse.h:
        * platform/network/cf/SocketStreamError.h:
        * platform/network/cf/SocketStreamHandle.h:
        Touched to force a re-copy.

2010-10-22  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Dave Hyatt.

        Add code in getMatchedCSSRules to block cross origin access to stylesheet data. Prevent access
        in Javascript to non author stylesheets.
        https://bugs.webkit.org/show_bug.cgi?id=46853

        Tests: http/tests/security/cross-origin-getMatchedCSSRules.html
               http/tests/security/cross-origin-getMatchedCSSRules2.html

        * css/CSSRule.h:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::matchRulesForList):
        (WebCore::CSSStyleSelector::SelectorChecker::SelectorChecker):
        (WebCore::CSSStyleSelector::styleRulesForElement):
        (WebCore::CSSStyleSelector::pseudoStyleRulesForElement):
        * css/CSSStyleSelector.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::getMatchedCSSRules):
        * page/DOMWindow.idl:

2010-10-22  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        WebKit2 needs to pass the current event modifier flags when requesting a new window
        https://bugs.webkit.org/show_bug.cgi?id=48140

        Store the NavigationAction used for the newWindowPolicyDecision in the PolicyCallback
        so that it can be used after the decision has been made in further callbacks.

        * WebCore.exp.in: Fix export name for new function signature.
        * loader/EmptyClients.h:
        (WebCore::EmptyChromeClient::createWindow):
        (WebCore::EmptyFrameLoaderClient::dispatchCreatePage):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::callContinueLoadAfterNewWindowPolicy):
        (WebCore::FrameLoader::continueLoadAfterNewWindowPolicy):
        (WebCore::createWindow):
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/PolicyCallback.cpp:
        (WebCore::PolicyCallback::set):
        (WebCore::PolicyCallback::call):
        (WebCore::PolicyCallback::cancel):
        * loader/PolicyCallback.h:
        * loader/PolicyChecker.cpp:
        (WebCore::PolicyChecker::checkNewWindowPolicy):
        * page/Chrome.cpp:
        (WebCore::Chrome::createWindow):
        * page/Chrome.h:
        * page/ChromeClient.h:
        * page/ContextMenuController.cpp:
        (WebCore::openNewWindow):

2010-10-22  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=48149
        
        Update block direction line overflow computation to be writing-mode-aware.

        * rendering/InlineBox.h:
        (WebCore::InlineBox::logicalBottom):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::computeBlockDirectionOverflow):
        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::setInlineDirectionOverflowPositions):
        (WebCore::InlineFlowBox::setBlockDirectionOverflowPositions):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutInlineChildren):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::blockDirectionOverflow):
        * rendering/RenderBox.h:
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::addHighlightOverflow):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::getTextShadowBlockDirectionExtent):
        (WebCore::InheritedFlags::getBoxShadowBlockDirectionExtent):
        (WebCore::InheritedFlags::getShadowBlockDirectionExtent):

2010-10-22  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        ASSERT while viewing Google C++ style guide
        https://bugs.webkit.org/show_bug.cgi?id=48148

        This code used to stop the parser twice.  Instead of reaching in an
        trying to stop the parser manually, we now just let close() do the work
        for us.

        Test: fast/xsl/transform-to-html.xml

        * xml/XSLTProcessor.cpp:
        (WebCore::XSLTProcessor::createDocumentFromSource):

2010-10-22  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Roben.

        [WINCE] Implement GraphicsContext::(get|release)WindowsContext
        https://bugs.webkit.org/show_bug.cgi?id=48136

        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        (WebCore::GraphicsContext::getWindowsContext):
        (WebCore::GraphicsContext::releaseWindowsContext):

2010-10-22  Adam Roben  <aroben@apple.com>

        Attempt to fix the Windows build

        * platform/network/win/CookieJarCFNetWin.cpp: Add a missing #include.

2010-10-22  Cosmin Truta  <ctruta@chromium.org>

        Reviewed by Dirk Schulze.

        getBoundingClientRect does not work with SVG <text>
        https://bugs.webkit.org/show_bug.cgi?id=46775

        Added back to SVGStyledTransformableElement overloads of the following
        methods: nearestViewportElement, farthestViewportElement, getBBox.
        This was necessary to appease the Visual C++ compiler, which warned on
        inheritance via dominance.

        * svg/SVGStyledTransformableElement.cpp:
        * svg/SVGStyledTransformableElement.h:
        (SVGStyledTransformableElement::nearestViewportElement):
        (SVGStyledTransformableElement::farthestViewportElement):
        (SVGStyledTransformableElement::getBBox):

2010-10-21  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Adam Roben.

        Content in <iframe> doesn't appear when going back to http://webkit.org/blog/386/3d-transforms/
        https://bugs.webkit.org/show_bug.cgi?id=32447

        Added documentDidBecomeActive() when document comes back from cache to cause compositing
        layers in iframes to be reattached.

        There is no layout test, but I added a manual test. This test is ready to be a layout test
        but currently DRT disables the WebCore page cache, so the back/forward essentially do a 
        page load which does not exhibit the bug.

        * history/CachedFrame.cpp:
        (WebCore::CachedFrameBase::restore):
        * manual-tests/compositing/show-composited-iframe-on-back-button.html: Added.

2010-10-22  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Roben.

        [WIN] Add Windows specific files for platform/network/win
        https://bugs.webkit.org/show_bug.cgi?id=27376

        * platform/network/win/AuthenticationChallenge.h: Added.
        (WebCore::AuthenticationChallenge::AuthenticationChallenge):
        * platform/network/win/ResourceError.h: Added.
        (WebCore::ResourceError::ResourceError):
        * platform/network/win/ResourceRequest.h: Added.
        (WebCore::ResourceRequest::ResourceRequest):
        (WebCore::ResourceRequest::doUpdatePlatformRequest):
        (WebCore::ResourceRequest::doUpdateResourceRequest):
        (WebCore::ResourceRequest::doPlatformCopyData):
        (WebCore::ResourceRequest::doPlatformAdopt):
        * platform/network/win/ResourceResponse.h: Added.
        (WebCore::ResourceResponse::ResourceResponse):
        (WebCore::ResourceResponse::doPlatformCopyData):
        (WebCore::ResourceResponse::doPlatformAdopt):

2010-10-22  Adam Barth  <abarth@webkit.org>

        Unreviewed, rolling out r70290.
        http://trac.webkit.org/changeset/70290
        https://bugs.webkit.org/show_bug.cgi?id=48111

        Undelete Android build files.

        * Android.mk: Added.

2010-10-22  Cosmin Truta  <ctruta@chromium.org>

        Reviewed by Nikolas Zimmermann.

        getBoundingClientRect does not work with SVG <text>
        https://bugs.webkit.org/show_bug.cgi?id=46775

        Dispatched the calls from Element::getBoundingClientRect to getBBox
        through SVGElement::boundingBox.
        Recognized SVGTextElement in addition to SVGStyledLocatableElement
        as a class that provides getBBox.
        Fixed the result of zooming: adjusted the getBoundingClientRect rectangle
        for absolute zoom, even for SVG elements.

        Additional cleanup task:
        Removed redundant overloads of SVGStyledTransformableElement
        methods: nearestViewportElement, farthestViewportElement, getBBox.
        These methods are already inherited from SVGStyledLocatableElement.

        Test: css3/zoom-coords.xhtml

        * WebCore.xcodeproj/project.pbxproj: Set role of SVGLocatable.h to private.
        * dom/Element.cpp:
        (Element::getBoundingClientRect): Used SVGElement::boundingBox.
        Adjusted coordinates for absolute zoom, for all kinds of elements.
        * svg/SVGElement.cpp:
        * svg/SVGElement.h:
        (SVGElement::boundingBox): Added.
        * svg/SVGStyledTransformableElement.cpp:
        * svg/SVGStyledTransformableElement.h:
        (SVGStyledTransformableElement::nearestViewportElement): Removed.
        (SVGStyledTransformableElement::farthestViewportElement): Removed.
        (SVGStyledTransformableElement::getBBox): Removed.

2010-10-22  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Roben.

        [WIN] Add stubs for SocketStream classes
        https://bugs.webkit.org/show_bug.cgi?id=47983

        * platform/network/win/SocketStreamError.h: Copied from WebCore/platform/network/curl/SocketStreamError.h.
        (WebCore::SocketStreamError::SocketStreamError):
        * platform/network/win/SocketStreamHandle.h: Copied from WebCore/platform/network/curl/SocketStreamHandle.h.
        (WebCore::SocketStreamHandle::create):
        * platform/network/win/SocketStreamHandleWin.cpp: Copied from WebCore/platform/network/curl/SocketStreamHandleCurl.cpp.

2010-10-22  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Roben.

        Disable cache in ResourceHandleWin
        https://bugs.webkit.org/show_bug.cgi?id=48128

        The caching of windows does not work correctly, so disable it for now.

        * platform/network/win/ResourceHandleWin.cpp:
        (WebCore::ResourceHandle::start):

2010-10-22  Jia Pu  <jpu@apple.com>

        Reviewed by Dan Bernstein.

        Regression (r69548): cancelled autocorrection suggestion is still applied.
        https://bugs.webkit.org/show_bug.cgi?id=48081
        <rdar://problem/8579765>
        
        The test requires a 0.3 second delay using setTimeout(). So we put it in manual-tests.

        * editing/Editor.cpp:
        (WebCore::Editor::handleRejectedCorrection): Clear autocorrection info when user dismissed the panel.
        * manual-tests/autocorrection/autocorrection-cancelled-by-ESC.html: Added.

2010-10-22  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Gtk] Fix canvas/philip/tests/2d.path.isPointInPath.nonfinite.html
        https://bugs.webkit.org/show_bug.cgi?id=48133

        * platform/graphics/cairo/PathCairo.cpp:
        (WebCore::Path::contains): Return false if any x or y are nonfinite.

2010-10-22  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Implement property toggling in InspectorCSSAgent

        This change implements enablement/disablement and setting of style properties.
        Disabled properties are persisted in the (top-level) scope of InspectorStyleSheet.
        https://bugs.webkit.org/show_bug.cgi?id=47339

        Drive-by: fixes for the Web Inspector Protocol format.

        * inspector/InspectorCSSAgent.cpp:
        (WebCore::InspectorCSSAgent::getComputedStyleForNode2):
        (WebCore::InspectorCSSAgent::getInheritedStylesForNode2):
        (WebCore::InspectorCSSAgent::setPropertyText2):
        (WebCore::InspectorCSSAgent::toggleProperty2):
        (WebCore::InspectorCSSAgent::setRuleSelector2):
        (WebCore::InspectorCSSAgent::buildObjectForAttributeStyles):
        * inspector/InspectorCSSAgent.h:
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyle::buildObjectForStyle):
        (WebCore::InspectorStyle::setPropertyText):
        (WebCore::InspectorStyle::toggleProperty):
        (WebCore::InspectorStyle::disabledIndexByOrdinal):
        (WebCore::InspectorStyle::styleText):
        (WebCore::InspectorStyle::disableProperty):
        (WebCore::InspectorStyle::enableProperty):
        (WebCore::InspectorStyle::populateAllProperties):
        (WebCore::InspectorStyle::populateObjectWithStyleProperties):
        (WebCore::InspectorStyle::shiftDisabledProperties):
        (WebCore::InspectorStyle::replacePropertyInStyleText):
        (WebCore::InspectorStyle::shorthandValue):
        (WebCore::InspectorStyle::shorthandPriority):
        (WebCore::InspectorStyle::longhandProperties):
        (WebCore::InspectorStyleSheet::setText):
        (WebCore::InspectorStyleSheet::setRuleSelector):
        (WebCore::InspectorStyleSheet::addRule):
        (WebCore::InspectorStyleSheet::ruleForId):
        (WebCore::InspectorStyleSheet::buildObjectForStyleSheet):
        (WebCore::InspectorStyleSheet::buildObjectForRule):
        (WebCore::InspectorStyleSheet::buildObjectForStyle):
        (WebCore::InspectorStyleSheet::setPropertyText):
        (WebCore::InspectorStyleSheet::toggleProperty):
        (WebCore::InspectorStyleSheet::styleForId):
        (WebCore::InspectorStyleSheet::inspectorStyleForId):
        (WebCore::InspectorStyleSheet::rememberInspectorStyle):
        (WebCore::InspectorStyleSheet::forgetInspectorStyle):
        (WebCore::InspectorStyleSheet::ruleOrStyleId):
        (WebCore::InspectorStyleSheet::ensureText):
        (WebCore::InspectorStyleSheet::setStyleText):
        (WebCore::InspectorStyleSheet::styleSheetTextWithChangedStyle):
        (WebCore::InspectorStyleSheet::ruleId):
        (WebCore::InspectorStyleSheet::revalidateStyle):
        (WebCore::InspectorStyleSheet::originalStyleSheetText):
        (WebCore::InspectorStyleSheet::resourceStyleSheetText):
        (WebCore::InspectorStyleSheetForInlineStyle::InspectorStyleSheetForInlineStyle):
        (WebCore::InspectorStyleSheetForInlineStyle::setStyleText):
        (WebCore::InspectorStyleSheetForInlineStyle::inspectorStyleForId):
        * inspector/InspectorStyleSheet.h:
        (WebCore::InspectorCSSId::createFromParts):
        (WebCore::InspectorCSSId::InspectorCSSId):
        (WebCore::InspectorCSSId::styleSheetId):
        (WebCore::InspectorCSSId::ordinal):
        (WebCore::InspectorCSSId::isEmpty):
        (WebCore::InspectorCSSId::asString):
        (WebCore::InspectorStyleProperty::InspectorStyleProperty):
        (WebCore::InspectorStyle::create):
        (WebCore::InspectorStyle::InspectorStyle):
        (WebCore::InspectorStyle::cssStyle):
        (WebCore::InspectorStyle::hasDisabledProperties):
        (WebCore::InspectorStyleSheet::styleId):
        (WebCore::InspectorStyleSheetForInlineStyle::styleForId):
        (WebCore::InspectorStyleSheetForInlineStyle::ruleSourceDataFor):
        (WebCore::InspectorStyleSheetForInlineStyle::rememberInspectorStyle):
        (WebCore::InspectorStyleSheetForInlineStyle::forgetInspectorStyle):

2010-10-22  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: update resources tree in storage panel upon network events.
        https://bugs.webkit.org/show_bug.cgi?id=48121

        * inspector/Inspector.idl:
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::buildObjectForDocumentLoader):
        (WebCore::buildObjectForFrameTree):
        (WebCore::InspectorResourceAgent::didCommitLoad):
        (WebCore::InspectorResourceAgent::frameDetachedFromParent):
        * inspector/front-end/ResourceManager.js:
        (WebInspector.ResourceManager):
        (WebInspector.ResourceManager.prototype._createResource):
        (WebInspector.ResourceManager.prototype.didReceiveResponse):
        (WebInspector.ResourceManager.prototype.didLoadResourceFromMemoryCache):
        (WebInspector.ResourceManager.prototype.didCommitLoadForFrame):
        (WebInspector.ResourceManager.prototype._addResourceToStorageFrame):
        (WebInspector.ResourceManager.prototype.frameDetachedFromParent):
        (WebInspector.ResourceManager.prototype._clearResources):
        (WebInspector.ResourceManager.prototype._processCachedResources):
        (WebInspector.ResourceManager.prototype._addFramesRecursively):
        (WebInspector.ResourceManager.getContents):
        * inspector/front-end/StoragePanel.js:
        (WebInspector.StoragePanel.prototype.addOrUpdateFrame):
        (WebInspector.StoragePanel.prototype.removeFrame):
        (WebInspector.StoragePanel.prototype.addResourceToFrame):
        (WebInspector.StoragePanel.prototype.removeResourcesFromFrame):
        (WebInspector.BaseStorageTreeElement.prototype.onattach):
        (WebInspector.BaseStorageTreeElement.prototype.onreveal):
        (WebInspector.BaseStorageTreeElement.prototype.set titleText):
        (WebInspector.FrameTreeElement):
        (WebInspector.FrameTreeElement.prototype.onselect):
        (WebInspector.FrameTreeElement.prototype.get displayName):
        (WebInspector.FrameTreeElement.prototype.set displayName):

2010-10-22  François Sausset  <sausset@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        Fix wrong xHeight() value for Apple Symbols font.
        https://bugs.webkit.org/show_bug.cgi?id=41535

        Test: mathml/xHeight.xhtml

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

2010-10-22  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Further preparations to deploy the new SVGAnimatedProperty concept for the rest of the SVG datatypes
        https://bugs.webkit.org/show_bug.cgi?id=48125

        Model SVGListPropertyTearOff similar to SVGPropertyTearOff, allow it to be used for SVGXXXList datatypes, that are not animated. (SVGStringList)
        Recognize all SVG primitive datatypes in SVGPropertyTraits.
        Add a new - temporary - macro to support multiple animated properties that map to a single DOM attribute (kernelUnitLength attribute vs. kernelUnitLengthX/Y properties).
        These macros will all be removed and expanded by their content, as soon as the transition to the new SVGAnimatedProperty concept is done.

        Doesn't affect any tests yet, as the code is still unused.

        * svg/properties/SVGAnimatedProperty.h:
        (WebCore::SVGAnimatedProperty::lookupOrCreateWrapper):
        (WebCore::SVGAnimatedProperty::lookupWrapper):
        * svg/properties/SVGAnimatedPropertyMacros.h:
        * svg/properties/SVGAnimatedPropertySynchronizer.h:
        * svg/properties/SVGListPropertyTearOff.h:
        (WebCore::SVGListPropertyTearOff::create):
        (WebCore::SVGListPropertyTearOff::removeItemFromList):
        (WebCore::SVGListPropertyTearOff::detachListWrappers):
        (WebCore::SVGListPropertyTearOff::clear):
        (WebCore::SVGListPropertyTearOff::numberOfItems):
        (WebCore::SVGListPropertyTearOff::initialize):
        (WebCore::SVGListPropertyTearOff::getItem):
        (WebCore::SVGListPropertyTearOff::insertItemBefore):
        (WebCore::SVGListPropertyTearOff::replaceItem):
        (WebCore::SVGListPropertyTearOff::removeItem):
        (WebCore::SVGListPropertyTearOff::appendItem):
        (WebCore::SVGListPropertyTearOff::SVGListPropertyTearOff):
        (WebCore::SVGListPropertyTearOff::~SVGListPropertyTearOff):
        (WebCore::SVGListPropertyTearOff::commitChange):
        * svg/properties/SVGPropertyTearOff.h:
        * svg/properties/SVGPropertyTraits.h:

2010-10-22  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r70301.
        http://trac.webkit.org/changeset/70301
        https://bugs.webkit.org/show_bug.cgi?id=48126

        "Lang attribute layout tests failing" (Requested by satish on
        #webkit).

        * dom/Element.cpp:
        (WebCore::Element::computeInheritedLanguage):
        * page/SpeechInput.cpp:
        (WebCore::SpeechInput::startRecognition):
        * page/SpeechInput.h:
        * page/SpeechInputClient.h:
        * platform/mock/SpeechInputClientMock.cpp:
        (WebCore::SpeechInputClientMock::startRecognition):
        (WebCore::SpeechInputClientMock::setRecognitionResult):
        (WebCore::SpeechInputClientMock::timerFired):
        * platform/mock/SpeechInputClientMock.h:
        * rendering/TextControlInnerElements.cpp:
        (WebCore::TextControlInnerElement::attachInnerElement):
        (WebCore::SearchFieldCancelButtonElement::detach):
        (WebCore::SpinButtonElement::defaultEventHandler):
        (WebCore::InputFieldSpeechButtonElement::defaultEventHandler):
        (WebCore::InputFieldSpeechButtonElement::detach):

2010-10-22  Leandro Gracia Gil  <leandrogracia@google.com>

        Reviewed by Jeremy Orlow.

        Patch the current speech input implementation to use and validate the
        nearest language tag. The language is now passed to the startRecognition
        methods so that language-specific recognition could be used. Also added
        a second parameter to setMockSpeechInputResult for the language used in
        speech recognition.
        https://bugs.webkit.org/show_bug.cgi?id=47089

        This is the 2nd of a 4-sided patch in Chromium and WebKit. For more
        details see http://codereview.chromium.org/3615005/show and
        http://codereview.chromium.org/3595018/show.

        Test: fast/speech/input-text-language-tag.html

        * dom/Element.cpp:
        (WebCore::Element::computeInheritedLanguage): includes a brief character
          validation for the BCP 47 language tag.
        * page/SpeechInput.cpp:
        (WebCore::SpeechInput::startRecognition):
        * page/SpeechInput.h:
        * page/SpeechInputClient.h:
        * platform/mock/SpeechInputClientMock.cpp:
        (WebCore::SpeechInputClientMock::startRecognition):
        (WebCore::SpeechInputClientMock::setRecognitionResult): results are now
          stored by language using a hash map.
        (WebCore::SpeechInputClientMock::timerFired):
        * platform/mock/SpeechInputClientMock.h:
        * rendering/TextControlInnerElements.cpp:
        (WebCore::TextControlInnerElement::attachInnerElement):
        (WebCore::SearchFieldCancelButtonElement::detach):
        (WebCore::SpinButtonElement::defaultEventHandler):
        (WebCore::InputFieldSpeechButtonElement::defaultEventHandler):
        (WebCore::InputFieldSpeechButtonElement::detach):

2010-10-21  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed, rolling out r70298.WebKit win compilation failure.
        http://trac.webkit.org/changeset/70298
        https://bugs.webkit.org/show_bug.cgi?id=48122

2010-10-21  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: decouple ScriptArguments from ScriptCallStack
        https://bugs.webkit.org/show_bug.cgi?id=48058

        ScriptCallFrame and ScriptCallStack are now the same for both JSC and V8.
        The factory functions that allow to create ScriptCallStack from VM-specific
        objects are defined in ScriptCallStackFactory.cpp.

        ScriptArguments class is used for passing arguments from JS code to the native
        part.

        No new tests. This refactoring is covered with existing Console tests.

        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/ScriptCallFrame.cpp: Removed.
        * bindings/js/ScriptCallFrame.h: Removed.
        * bindings/js/ScriptCallStack.cpp: Removed.
        * bindings/js/ScriptCallStack.h: Removed.
        * bindings/js/ScriptCallStackFactory.cpp: Added.
        (WebCore::createScriptCallStack):
        (WebCore::createScriptArguments):
        (WebCore::ScriptCallStack::stackTrace):
        * bindings/js/ScriptCallStackFactory.h: Added.
        * bindings/js/ScriptState.h:
        (WebCore::ScriptStateProtectedPtr::get):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/ScriptCallFrame.cpp: Removed.
        * bindings/v8/ScriptCallFrame.h: Removed.
        * bindings/v8/ScriptCallStack.cpp: Removed.
        * bindings/v8/ScriptCallStack.h: Removed.
        * bindings/v8/ScriptCallStackFactory.cpp: Added.
        (WebCore::toScriptCallFrame):
        (WebCore::toScriptCallFramesVector):
        (WebCore::createScriptCallStack):
        (WebCore::createScriptArguments):
        (WebCore::ScriptCallStack::stackTrace):
        * bindings/v8/ScriptCallStackFactory.h: Added.
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::setCaptureCallStackForUncaughtExceptions):
        * bindings/v8/ScriptState.h:
        (WebCore::ScriptStateProtectedPtr::get):
        * bindings/v8/V8ConsoleMessage.cpp:
        (WebCore::V8ConsoleMessage::handler):
        (WebCore::V8ConsoleMessage::dispatchNow):
        * bindings/v8/V8ConsoleMessage.h:
        * bindings/v8/custom/V8ConsoleCustom.cpp:
        (WebCore::V8Console::traceCallback):
        (WebCore::V8Console::assertCallback):
        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::ConsoleMessage):
        (WebCore::ConsoleMessage::addToFrontend):
        (WebCore::ConsoleMessage::updateRepeatCountInConsole):
        (WebCore::ConsoleMessage::isEqual):
        * inspector/ConsoleMessage.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::addMessageToConsole):
        (WebCore::InspectorController::startGroup):
        * inspector/InspectorController.h:
        * inspector/ScriptArguments.cpp: Added.
        (WebCore::ScriptArguments::ScriptArguments):
        (WebCore::ScriptArguments::~ScriptArguments):
        (WebCore::ScriptArguments::argumentAt):
        (WebCore::ScriptArguments::globalState):
        (WebCore::ScriptArguments::getFirstArgumentAsString):
        (WebCore::ScriptArguments::isEqual):
        * inspector/ScriptArguments.h: Added.
        (WebCore::ScriptArguments::argumentCount):
        * inspector/ScriptCallFrame.cpp: Added.
        (WebCore::ScriptCallFrame::ScriptCallFrame):
        (WebCore::ScriptCallFrame::~ScriptCallFrame):
        (WebCore::ScriptCallFrame::isEqual):
        (WebCore::ScriptCallFrame::buildInspectorObject):
        * inspector/ScriptCallFrame.h: Added.
        (WebCore::ScriptCallFrame::functionName):
        (WebCore::ScriptCallFrame::sourceURL):
        (WebCore::ScriptCallFrame::lineNumber):
        * inspector/ScriptCallStack.cpp: Added.
        (WebCore::ScriptCallStack::ScriptCallStack):
        (WebCore::ScriptCallStack::~ScriptCallStack):
        (WebCore::ScriptCallStack::at):
        (WebCore::ScriptCallStack::size):
        (WebCore::ScriptCallStack::isEqual):
        (WebCore::ScriptCallStack::buildInspectorObject):
        * inspector/ScriptCallStack.h: Added.
        * page/Console.cpp:
        (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::markTimeline):
        (WebCore::Console::profile):
        (WebCore::Console::profileEnd):
        (WebCore::Console::timeEnd):
        (WebCore::Console::group):
        (WebCore::Console::groupCollapsed):
        (WebCore::Console::shouldCaptureFullStackTrace):
        (WebCore::Console::warn):
        * page/Console.h:

2010-10-22  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] All widgets are rendered incorrectly when rendered through a cache
        https://bugs.webkit.org/show_bug.cgi?id=47767

        When a widget is not available to the RenderTheme, default
        value are used for the state.

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::initStyleOption):
        (WebCore::RenderThemeQt::paintButton):
        (WebCore::RenderThemeQt::paintTextField):
        (WebCore::RenderThemeQt::paintMenuList):
        (WebCore::RenderThemeQt::paintMenuListButton):
        (WebCore::RenderThemeQt::paintProgressBar):
        (WebCore::RenderThemeQt::paintSliderTrack):

2010-10-22  Zoltan Herczeg  <zherczeg@webkit.org>

        Reviewed by Dirk Schulze.

        Moving all bounding box related calculation to RenderSVGResourceFilterPrimitive
        https://bugs.webkit.org/show_bug.cgi?id=47174

        The primitive sub-region calculation was spread in many
        files across in WebKit source code, and all of them are moved
        to RenderSVGResourceFilterPrimitive, where they should be.
        In this patch the calculation is a static method which will
        be turned to a real member function in the near future.

        * platform/graphics/filters/FETile.cpp:
        * platform/graphics/filters/FETile.h:
        (WebCore::FETile::filterEffectType):
        * platform/graphics/filters/Filter.h:
        * platform/graphics/filters/FilterEffect.cpp:
        * platform/graphics/filters/FilterEffect.h:
        * rendering/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::applyResource):
        * rendering/RenderSVGResourceFilterPrimitive.cpp:
        (WebCore::RenderSVGResourceFilterPrimitive::determineFilterPrimitiveSubregion):
        * rendering/RenderSVGResourceFilterPrimitive.h:
        (WebCore::RenderSVGResourceFilterPrimitive::RenderSVGResourceFilterPrimitive):
        * svg/graphics/filters/SVGFilter.cpp:
        * svg/graphics/filters/SVGFilter.h:
        (WebCore::SVGFilter::mapLocalRectToAbsoluteRect):
        (WebCore::SVGFilter::targetBoundingBox):

2010-10-21  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Kent Tamura.

        [BREWMP] Add a String constructor which takes AECHAR*
        https://bugs.webkit.org/show_bug.cgi?id=45043

        Implement String(const AECHAR*) constructor.

        * platform/text/brew/StringBrew.cpp: Added.
        (WTF::String::String):

2010-10-21  James Simonsen  <simonjam@chromium.org>

        Reviewed by Adam Barth.

        HTMLTreeBuilder's InForeignContent code needs a re-write

        Foreign Content mode was changed significantly by:
        http://www.w3.org/Bugs/Public/show_bug.cgi?id=10314

        The differences can be seen here:
        http://html5.org/tools/web-apps-tracker?from=5520&to=5522

        This bug addresses all spec changes in the diff except the select scope
        changes, which have already been fixed in a separate bug.

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

        * html/parser/HTMLElementStack.cpp:
        (WebCore::HTMLNames::isScopeMarker): Add foreign elements to list.
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::HTMLTreeBuilder):
        (WebCore::HTMLTreeBuilder::processDoctypeToken): Switch mode before reprocessing any tokens.
        (WebCore::HTMLTreeBuilder::processStartTagForInBody): Ditto. Remove secondary insertion mode.
        (WebCore::HTMLTreeBuilder::processStartTagForInTable): Switch mode before reprocessing any tokens.
        (WebCore::HTMLTreeBuilder::processStartTag): Ditto. Remove secondary insertion mode.
        (WebCore::HTMLTreeBuilder::resetInsertionModeAppropriately): Remove foreign var. Use hasTagName() instead of == localName() to fix bug with foreign elements.
        (WebCore::HTMLTreeBuilder::processEndTagForInTableBody): Switch mode before reprocessing any tokens.
        (WebCore::HTMLTreeBuilder::processEndTagForInRow): Ditto.
        (WebCore::HTMLTreeBuilder::processEndTagForInCell): Ditto.
        (WebCore::HTMLTreeBuilder::processEndTagForInBody): Ditto.
        (WebCore::HTMLTreeBuilder::processEndTag): Ditto.
        (WebCore::HTMLTreeBuilder::prepareToReprocessToken): Added.
        (WebCore::HTMLTreeBuilder::reprocessStartTag): Added.
        (WebCore::HTMLTreeBuilder::reprocessEndTag): Added.
        (WebCore::HTMLTreeBuilder::processForeignContentUsingInBodyModeAndResetMode): Added.
        (WebCore::HTMLTreeBuilder::resetForeignInsertionMode): Added.
        (WebCore::HTMLTreeBuilder::processComment): Switch mode before reprocessing any tokens.
        (WebCore::HTMLTreeBuilder::processCharacterBuffer): Ditto.
        (WebCore::HTMLTreeBuilder::processEndOfFile): Ditto.
        * html/parser/HTMLTreeBuilder.h: Functions and member for tracking potential switch from InForeignContentMode.

2010-10-21  Adam Barth  <abarth@webkit.org>

        Reviewed by David Levin.

        Remove Android build system
        https://bugs.webkit.org/show_bug.cgi?id=48111

        As far as I can tell, these files are not maintained.  They are a
        mantaince burden on the project.  If folks would like to come out of
        the woodwork and maintain these files, that's great.  At the moment,
        they seem like dead weight for the project.

        * Android.mk: Removed.

2010-10-21  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by James Robinson.

        Make sure skia is not Chromium specific
        https://bugs.webkit.org/show_bug.cgi?id=39672

        GlyphPageTreeNodeLinux does not depend on Linux or Chromium.
        Move GlyphPageTreeNodeLinux to platform/graphics/skia and rename it to
        GlyphPageTreeNodeSkia.cpp so that other ports can use it.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * platform/graphics/chromium/GlyphPageTreeNodeLinux.cpp: Removed.
        * platform/graphics/skia/GlyphPageTreeNodeSkia.cpp: Added.

2010-10-21  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Tony Chang.

        removeFormat needs to be reimplemented
        https://bugs.webkit.org/show_bug.cgi?id=43017

        Reimplemented execCommand('RemoveFormat', false, null). New implementation removes
        the same elements removed by Internet Explorer. Because WebKit supports StyleWithCSS
        we also reset any editing styles to match that of the root editable element
        while Internet Explorer does not remove any CSS styles.

        New implementation uses ApplyStyleCommand to remove appropriate elements and reset the style.
        Added new constructor and member variable to ApplyStyleCommand to support mass-removal of elements
        since it's inefficient to call ApplyStyleCommand on each element we're removing.

        To avoid an infinite loop in pushDownInlineStyleAroundNode when mass-removing, WebKit no longer
        push down element one level at a time. Instead, we keep a stack of styled elements to be applied,
        and apply wrap siblings of targetNode's ancestors by all of them at once.

        Tests: editing/execCommand/remove-format-elements.html
               editing/execCommand/remove-format-multiple-elements.html

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::ApplyStyleCommand): Added; this version takes style and a function pointer
        to a boolean function that determines which element needs to removed, and set m_removeOnly to true.
        (WebCore::ApplyStyleCommand::doApply): Added support for m_isInlineElementToRemoveFunction.
        (WebCore::ApplyStyleCommand::applyBlockStyle): Ditto.
        (WebCore::ApplyStyleCommand::applyInlineStyleToNodeRange): Exits early if m_removeOnly is true.
        (WebCore::ApplyStyleCommand::isStyledInlineElementToRemove): Added.
        (WebCore::ApplyStyleCommand::removeStyleFromRunBeforeApplyingStyle): Calls isStyledInlineElementToRemove.
        (WebCore::ApplyStyleCommand::removeInlineStyleFromElement): Ditto.
        (WebCore::ApplyStyleCommand::removeInlineStyle): Ditto.
        (WebCore::ApplyStyleCommand::pushDownInlineStyleAroundNode): See above.
        * editing/ApplyStyleCommand.h:
        (WebCore::ApplyStyleCommand::create): Added.
        * editing/RemoveFormatCommand.cpp:
        (WebCore::isElementForRemoveFormatCommand): Added.
        (WebCore::RemoveFormatCommand::doApply): Rewritten.

2010-10-21  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Adam Barth.

        Ignore document.write() when it comes from a network task
        https://bugs.webkit.org/show_bug.cgi?id=47560

        This implements the update to the spec made by:
        http://www.w3.org/Bugs/Public/show_bug.cgi?id=9767

        It also matches the latest Firefox 4 beta. The notable change is that
        document.write from a deferred script no longer works. This avoids
        blowing the patch away.

        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::write):
        * dom/Document.h:
        (WebCore::DestructiveWriteCountIncrementer::DestructiveWriteCountIncrementer):
        (WebCore::Document::ignoreDestructiveWriteCountIncrementer):
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::insertedIntoDocument):
        (WebCore::ScriptElementData::ScriptElementData):
        (WebCore::ScriptElementData::evaluateScript):
        * dom/ScriptElement.h:
        * html/parser/HTMLScriptRunner.cpp:
        (WebCore::HTMLScriptRunner::executePendingScriptAndDispatchEvent):

2010-10-21  Ryosuke Niwa  <rniwa@webkit.org>

        Unreviewed Leopard build fix attempt.

        Explicitly cast the return value of deg2rad to float.

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

2010-10-21  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by James Robinson.

        [Chromium] Fix Chromium Mac build
        https://bugs.webkit.org/show_bug.cgi?id=48096

        Fix Chromium Mac build after r70225 (Chromium uses Core Text but is not
        PLATFORM(MAC)).

        * platform/graphics/SimpleFontData.h:

2010-10-21  Xiaomei Ji  <xji@chromium.org>

        Reviewed by David Levin.

        Performance improvement for FontLinux.
        https://bugs.webkit.org/show_bug.cgi?id=47019
        
        Reduce the number of calls for the normalization function because converting
        to NFC form is very expensive.
    
        Combine space normalization and character mirroring into one text scan.

        Test: platform/chromium/fast/text/font-linux-normalize.html

        * platform/graphics/chromium/FontLinux.cpp:
        (WebCore::TextRunWalker::TextRunWalker):
        (WebCore::TextRunWalker::~TextRunWalker):
        (WebCore::TextRunWalker::getNormalizedTextRun):
        (WebCore::TextRunWalker::normalizeSpacesAndMirrorChars):

2010-10-21  David Hyatt  <hyatt@apple.com>

        Reviewed by Darin Adler.

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

        Make basic vertical text painting work.  This includes the text itself, underlines, overlines, line-throughs and shadows.

        Added fast/blockflow/english-lr-text.html

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paint):
        * rendering/InlineFlowBox.h:
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::applyShadowToGraphicsContext):
        (WebCore::paintTextWithShadows):
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::paintDecoration):
        (WebCore::InlineTextBox::paintTextMatchMarker):
        * rendering/InlineTextBox.h:
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::paintTextWithShadows):

2010-10-21  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] When doing rendering through tiling, it seems the tiles are not initialized before rendering
        https://bugs.webkit.org/show_bug.cgi?id=48070

        No new tests. Auto-tests for Tiled Backing Store should be added, see bug 48082

        * page/Frame.cpp:
        (WebCore::Frame::tiledBackingStoreBackgroundColor):
        * page/Frame.h:
        * platform/graphics/TiledBackingStoreClient.h:
        * platform/graphics/qt/TileQt.cpp:
        (WebCore::Tile::updateBackBuffer):

2010-10-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Use GCharsetConverter instead of g_iconv in TextCodecGtk
        https://bugs.webkit.org/show_bug.cgi?id=47896

        It makes error handling easier. Fixes tests:
         fast/encoding/invalid-multi-byte-over-consumption.html
         fast/encoding/invalid-xml.html
         fast/encoding/japanese-encoding-mix.html
        when building with glib unicode

        * platform/text/gtk/TextCodecGtk.cpp:
        (WebCore::TextCodecGtk::TextCodecGtk):
        (WebCore::TextCodecGtk::~TextCodecGtk):
        (WebCore::TextCodecGtk::createIConvDecoder):
        (WebCore::TextCodecGtk::createIConvEncoder):
        (WebCore::TextCodecGtk::decode):
        (WebCore::TextCodecGtk::encode):
        * platform/text/gtk/TextCodecGtk.h:

2010-10-21  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        AX: contenteditable nodes do not return correct AXSelectedText* attributes
        https://bugs.webkit.org/show_bug.cgi?id=48080

        The ariaSelectedDOMTextRange() method was not returning the correct values. 
        The fix is to return a plain text range that represents the current selection.

        Test: platform/mac/accessibility/content-editable-range-properties.html

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::accessibilityDescription):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::ariaSelectedTextRange):
        (WebCore::AccessibilityRenderObject::selectedText):
        (WebCore::AccessibilityRenderObject::selectedTextRange):
        * accessibility/AccessibilityRenderObject.h:

2010-10-20  Jer Noble  <jer.noble@apple.com>

        Reviewed by Eric Carlson.

        Video -> Canvas doesn't work on Windows
        https://bugs.webkit.org/show_bug.cgi?id=47996
        rdar://problem/7884690

        * WebCore.vcproj/QTMovieWin.vcproj: Added QTDecompressionSession.{cpp,h}
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::paint): Create a 
            QTDecompressionSession if necessary and convert the QTPixelBuffer
            into a CG-compatible one.
        * platform/graphics/win/QTDecompressionSession.cpp: Added.
        * platform/graphics/win/QTDecompressionSession.h: Added.
        * platform/graphics/win/QTPixelBuffer.cpp:
        (SetNumberValue): Moved from QTMovieVisualContext.
        (QTPixelBuffer::createPixelBufferAttributesDictionary): Moved from inside
            QTMovieVisualContext::createPixelBufferOptionsDictionary().
        * platform/graphics/win/QTPixelBuffer.h: Moved the Type enum 
            from QTMovieVisualContext.h.

2010-10-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] TextBreakIteratorGtk should initialize its internal index to 0
        https://bugs.webkit.org/show_bug.cgi?id=48065

        It fixes the following tests when using glib unicode:
          fast/forms/ValidityState-tooLong-input.html
          fast/forms/ValidityState-tooLong-textarea.html
          fast/forms/input-appearance-maxlength.html
          fast/forms/input-implicit-length-limit.html
          fast/forms/input-maxlength.html
          fast/forms/textarea-live-pseudo-selectors.html
          fast/forms/mailto/advanced-get.html
          fast/forms/mailto/advanced-put.html

        * platform/text/gtk/TextBreakIteratorGtk.cpp:
        (WebCore::setUpIterator):

2010-10-21  takano takumi  <takano1@asia.apple.com>

        Reviewed by Dan Bernstein.

        Need to swap glyphs for vertical writing
        https://bugs.webkit.org/show_bug.cgi?id=46973

        Made changes to pass the writing-mode orientation flag in RenderStyle down to FontPlatformData,
        and ultimately to CoreText APIs in both font complex path and fast path.

        Tests: fast/text/international/vertical-text-glyph-test.html
               fast/text/international/vertical-text-metrics-test.html

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj: Added platform/graphics/FontOrientation.h.
        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::getFontData): Added font orientation parameter to SimpleFontData.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty): Set appropriate font orientation to the font description
        when writing-mode is being specified.
        * loader/CachedFont.cpp:
        (WebCore::CachedFont::platformDataFromCustomData): Made to pass font orientation to FontPlatformData.
        * loader/CachedFont.h:
        * platform/graphics/FontCache.cpp: Added font orientation to FontPlatformDataCacheKey
        (WebCore::FontPlatformDataCacheKey::FontPlatformDataCacheKey):
        (WebCore::FontPlatformDataCacheKey::operator==):
        (WebCore::computeHash):
        (WebCore::FontCache::getCachedFontPlatformData):
        * platform/graphics/FontDescription.h: Added font orientation support to FontDescription class
        (WebCore::FontDescription::FontDescription):
        (WebCore::FontDescription::orientation):
        (WebCore::FontDescription::setOrientation):
        (WebCore::FontDescription::operator==):
        * platform/graphics/FontOrientation.h: Added.
        * platform/graphics/SimpleFontData.h:
        * platform/graphics/cairo/FontCustomPlatformData.cpp: Changed to pass font orientation to fontPlatformData()
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/cairo/FontCustomPlatformData.h: Changed to pass font orientation to fontPlatformData()
        * platform/graphics/cocoa/FontPlatformData.h: Added font orientation support to FontPlatformData class
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::orientation):
        (WebCore::FontPlatformData::hash):
        (WebCore::FontPlatformData::operator==):
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm: Added font orientation support
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::operator=):
        (WebCore::FontPlatformData::allowsLigatures): Don't allow ligatures when the font is vertical orientation.
        (WebCore::FontPlatformData::description):
        * platform/graphics/gtk/FontCustomPlatformDataPango.cpp: Changed to pass font orientation to fontPlatformData()
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/haiku/FontCustomPlatformData.cpp: Changed to pass font orientation to fontPlatformData()
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/haiku/FontCustomPlatformData.h: Changed to pass font orientation to fontPlatformData()
        * platform/graphics/mac/FontCacheMac.mm: Added font orientation parameter when creating FontPlatformData object.
        (WebCore::FontCache::getFontDataForCharacters):
        (WebCore::FontCache::createFontPlatformData):
        * platform/graphics/mac/FontCustomPlatformData.cpp: Added font orientation parameter when creating FontPlatformData object.
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/mac/FontCustomPlatformData.h: Changed to pass font orientation parameter to fontPlatformData()
        * platform/graphics/mac/GlyphPageTreeNodeMac.cpp:
        (WebCore::GlyphPage::fill): Changed to use CoreText to extract glyphs when the current font is vertical orientation.
        CoreText automatically swaps glyphs with vertical variants when the font orientation is vertical.
        * platform/graphics/mac/SimpleFontDataCoreText.cpp: Added vertical form attribute to the attribute dictionary for a CTLine.
        (WebCore::SimpleFontData::getCFStringAttributes):
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::platformBoundsForGlyph): Changed to use CoreText (from CG) to support vertical metrics.
        (WebCore::SimpleFontData::platformWidthForGlyph): Made to use CoreText, instead of wkGetGlyphTransformedAdvances,
        to get vertical metrics when the font orientation is vertical.
        * platform/graphics/qt/FontCustomPlatformData.h: Changed to pass font orientation to fontPlatformData()
        * platform/graphics/qt/FontCustomPlatformDataQt.cpp: Changed to pass font orientation to fontPlatformData()
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/skia/FontCustomPlatformData.cpp: Changed to pass font orientation to fontPlatformData()
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/skia/FontCustomPlatformData.h: Changed to pass font orientation to fontPlatformData()
        * platform/graphics/win/FontCustomPlatformData.cpp: Changed to pass font orientation to fontPlatformData()
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/win/FontCustomPlatformData.h: Changed to pass font orientation to fontPlatformData()
        * platform/graphics/win/FontCustomPlatformDataCairo.cpp: Changed to pass font orientation to fontPlatformData()
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/win/FontCustomPlatformDataCairo.h: Changed to pass font orientation to fontPlatformData()
        * platform/graphics/wince/FontCustomPlatformData.cpp: Changed to pass font orientation to fontPlatformData()
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/wince/FontCustomPlatformData.h: Changed to pass font orientation to fontPlatformData()
        * platform/graphics/wx/FontCustomPlatformData.cpp: Changed to pass font orientation to fontPlatformData()
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/wx/FontCustomPlatformData.h: Changed to pass font orientation to fontPlatformData()

2010-10-21  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: provide resource tree in the Storage panel (behind the flag).
        https://bugs.webkit.org/show_bug.cgi?id=48069

        * WebCore.gypi:
        * inspector/Inspector.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::frameDetachedFromParent):
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::buildObjectForDocumentLoader):
        (WebCore::buildObjectForFrameResource):
        (WebCore::buildObjectForCachedResource):
        (WebCore::populateObjectWithFrameResources):
        (WebCore::InspectorResourceAgent::identifierForInitialRequest):
        (WebCore::InspectorResourceAgent::didLoadResourceFromMemoryCache):
        (WebCore::buildObjectForFrameTree):
        (WebCore::InspectorResourceAgent::didCommitLoad):
        (WebCore::InspectorResourceAgent::frameDetachedFromParent):
        (WebCore::InspectorResourceAgent::cachedResources):
        (WebCore::InspectorResourceAgent::resourceContent):
        * inspector/InspectorResourceAgent.h:
        * inspector/front-end/Images/frame.png: Added.
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel.prototype.refreshResource):
        (WebInspector.NetworkPanel.prototype._showResource):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.Type.toString):
        (WebInspector.Resource.prototype.getContents):
        * inspector/front-end/ResourceManager.js:
        (WebInspector.ResourceManager):
        (WebInspector.ResourceManager.prototype.identifierForInitialRequest):
        (WebInspector.ResourceManager.prototype._createResource):
        (WebInspector.ResourceManager.prototype.willSendRequest):
        (WebInspector.ResourceManager.prototype._appendRedirect):
        (WebInspector.ResourceManager.prototype.markResourceAsCached):
        (WebInspector.ResourceManager.prototype.didReceiveResponse):
        (WebInspector.ResourceManager.prototype._updateResourceWithResponse):
        (WebInspector.ResourceManager.prototype.didReceiveContentLength):
        (WebInspector.ResourceManager.prototype.didFinishLoading):
        (WebInspector.ResourceManager.prototype.didFailLoading):
        (WebInspector.ResourceManager.prototype.didLoadResourceFromMemoryCache):
        (WebInspector.ResourceManager.prototype._updateResourceWithCachedResource):
        (WebInspector.ResourceManager.prototype.setOverrideContent):
        (WebInspector.ResourceManager.prototype.didCommitLoadForFrame):
        (WebInspector.ResourceManager.prototype.frameDetachedFromParent):
        (WebInspector.ResourceManager.prototype._clearResources):
        (WebInspector.ResourceManager.prototype.didCreateWebSocket):
        (WebInspector.ResourceManager.prototype.willSendWebSocketHandshakeRequest):
        (WebInspector.ResourceManager.prototype.didReceiveWebSocketHandshakeResponse):
        (WebInspector.ResourceManager.prototype.didCloseWebSocket):
        (WebInspector.ResourceManager.prototype._processCachedResources):
        (WebInspector.ResourceManager.prototype._appendFramesRecursively.comparator):
        (WebInspector.ResourceManager.prototype._appendFramesRecursively):
        (WebInspector.ResourceManager.createResourceView):
        (WebInspector.ResourceManager.resourceViewTypeMatchesResource):
        (WebInspector.ResourceManager.resourceViewForResource):
        (WebInspector.ResourceManager.getContents):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.get searchableViews):
        (WebInspector.ResourcesPanel.prototype.addMessageToResource):
        (WebInspector.ResourcesPanel.prototype._recreateViewForResourceIfNeeded):
        (WebInspector.ResourcesPanel.prototype.showResource):
        (WebInspector.ResourcesPanel.prototype.sourceFrameForResource):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._showScriptOrResource):
        * inspector/front-end/StoragePanel.js:
        (WebInspector.StoragePanel):
        (WebInspector.StoragePanel.prototype.addFrame):
        (WebInspector.StoragePanel.prototype.removeFrame):
        (WebInspector.StoragePanel.prototype.addFrameResource):
        (WebInspector.StoragePanel.prototype.removeFrameResources):
        (WebInspector.StoragePanel.prototype.showResource):
        (WebInspector.BaseStorageTreeElement.prototype.onattach):
        (WebInspector.BaseStorageTreeElement.prototype.onreveal):
        (WebInspector.FrameTreeElement):
        (WebInspector.FrameTreeElement.prototype.onselect):
        (WebInspector.FrameResourceTreeElement):
        (WebInspector.FrameResourceTreeElement.prototype.onselect):
        (WebInspector.FrameResourceTreeElement.prototype.onattach):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.css:
        (.frame-storage-tree-item .icon):
        (.storage.panel .sidebar.outline-disclosure > ol):
        (.resources-category-images .image-resource-icon-preview):
        (.children.small .resources-category-images .image-resource-icon-preview):
        * inspector/front-end/inspector.js:

2010-10-21  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/48047> Fix warnings found by check-Xcode-source-file-types

        Reviewed by Adam Roben.

        Fixes the following warning:

            WARNING: Unknown file type 'sourcecode' for file 'CSSPrimitiveValue.idl'.
            1 issues found for WebCore/WebCore.xcodeproj/project.pbxproj.

        * WebCore.xcodeproj/project.pbxproj: Removed explicit file type
        for CSSPrimitiveValue.idl to make it match other IDL files.

2010-10-21  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: decouple ScriptArguments from ScriptCallStack
        https://bugs.webkit.org/show_bug.cgi?id=48058

        ScriptCallFrame and ScriptCallStack are now the same for both JSC and V8.
        The factory functions that allow to create ScriptCallStack from VM-specific
        objects are defined in ScriptCallStackFactory.cpp.

        ScriptArguments class is used for passing arguments from JS code to the native
        part.

        No new tests. This refactoring is covered with existing Console tests.

        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/ScriptCallFrame.cpp: Removed.
        * bindings/js/ScriptCallFrame.h: Removed.
        * bindings/js/ScriptCallStack.cpp: Removed.
        * bindings/js/ScriptCallStack.h: Removed.
        * bindings/js/ScriptCallStackFactory.cpp: Added.
        (WebCore::createScriptCallStack):
        (WebCore::createScriptArguments):
        (WebCore::ScriptCallStack::stackTrace):
        * bindings/js/ScriptCallStackFactory.h: Added.
        * bindings/js/ScriptState.h:
        (WebCore::ScriptStateProtectedPtr::get):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/ScriptCallFrame.cpp: Removed.
        * bindings/v8/ScriptCallFrame.h: Removed.
        * bindings/v8/ScriptCallStack.cpp: Removed.
        * bindings/v8/ScriptCallStack.h: Removed.
        * bindings/v8/ScriptCallStackFactory.cpp: Added.
        (WebCore::toScriptCallFrame):
        (WebCore::toScriptCallFramesVector):
        (WebCore::createScriptCallStack):
        (WebCore::createScriptArguments):
        (WebCore::ScriptCallStack::stackTrace):
        * bindings/v8/ScriptCallStackFactory.h: Added.
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::setCaptureCallStackForUncaughtExceptions):
        * bindings/v8/ScriptState.h:
        (WebCore::ScriptStateProtectedPtr::get):
        * bindings/v8/V8ConsoleMessage.cpp:
        (WebCore::V8ConsoleMessage::handler):
        (WebCore::V8ConsoleMessage::dispatchNow):
        * bindings/v8/V8ConsoleMessage.h:
        * bindings/v8/custom/V8ConsoleCustom.cpp:
        (WebCore::V8Console::traceCallback):
        (WebCore::V8Console::assertCallback):
        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::ConsoleMessage):
        (WebCore::ConsoleMessage::addToFrontend):
        (WebCore::ConsoleMessage::updateRepeatCountInConsole):
        (WebCore::ConsoleMessage::isEqual):
        * inspector/ConsoleMessage.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::addMessageToConsole):
        (WebCore::InspectorController::startGroup):
        * inspector/InspectorController.h:
        * inspector/ScriptArguments.cpp: Added.
        (WebCore::ScriptArguments::ScriptArguments):
        (WebCore::ScriptArguments::~ScriptArguments):
        (WebCore::ScriptArguments::argumentAt):
        (WebCore::ScriptArguments::globalState):
        (WebCore::ScriptArguments::getFirstArgumentAsString):
        (WebCore::ScriptArguments::isEqual):
        * inspector/ScriptArguments.h: Added.
        (WebCore::ScriptArguments::argumentCount):
        * inspector/ScriptCallFrame.cpp: Added.
        (WebCore::ScriptCallFrame::ScriptCallFrame):
        (WebCore::ScriptCallFrame::~ScriptCallFrame):
        (WebCore::ScriptCallFrame::isEqual):
        (WebCore::ScriptCallFrame::buildInspectorObject):
        * inspector/ScriptCallFrame.h: Added.
        (WebCore::ScriptCallFrame::functionName):
        (WebCore::ScriptCallFrame::sourceURL):
        (WebCore::ScriptCallFrame::lineNumber):
        * inspector/ScriptCallStack.cpp: Added.
        (WebCore::ScriptCallStack::ScriptCallStack):
        (WebCore::ScriptCallStack::~ScriptCallStack):
        (WebCore::ScriptCallStack::at):
        (WebCore::ScriptCallStack::size):
        (WebCore::ScriptCallStack::isEqual):
        (WebCore::ScriptCallStack::buildInspectorObject):
        * inspector/ScriptCallStack.h: Added.
        * page/Console.cpp:
        (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::markTimeline):
        (WebCore::Console::profile):
        (WebCore::Console::profileEnd):
        (WebCore::Console::timeEnd):
        (WebCore::Console::group):
        (WebCore::Console::groupCollapsed):
        (WebCore::Console::shouldCaptureFullStackTrace):
        (WebCore::Console::warn):
        * page/Console.h:

2010-10-21  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Revert r70232. Chromium compilation failure.

2010-10-21  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Revert r70233. Too many failures.

2010-10-21  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Remove references to deleted headers from WebCore.pro

        * WebCore.pro:

2010-10-21  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: decouple ScriptArguments from ScriptCallStack
        https://bugs.webkit.org/show_bug.cgi?id=48058

        ScriptCallFrame and ScriptCallStack are now the same for both JSC and V8.
        The factory functions that allow to create ScriptCallStack from VM-specific
        objects are defined in ScriptCallStackFactory.cpp.

        ScriptArguments class is used for passing arguments from JS code to the native
        part.

        No new tests. This refactoring is covered with existing Console tests.

        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/ScriptCallFrame.cpp: Removed.
        * bindings/js/ScriptCallFrame.h: Removed.
        * bindings/js/ScriptCallStack.cpp: Removed.
        * bindings/js/ScriptCallStack.h: Removed.
        * bindings/js/ScriptCallStackFactory.cpp: Added.
        (WebCore::createScriptCallStack):
        (WebCore::createScriptArguments):
        (WebCore::ScriptCallStack::stackTrace):
        * bindings/js/ScriptCallStackFactory.h: Added.
        * bindings/js/ScriptState.h:
        (WebCore::ScriptStateProtectedPtr::get):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/ScriptCallFrame.cpp: Removed.
        * bindings/v8/ScriptCallFrame.h: Removed.
        * bindings/v8/ScriptCallStack.cpp: Removed.
        * bindings/v8/ScriptCallStack.h: Removed.
        * bindings/v8/ScriptCallStackFactory.cpp: Added.
        (WebCore::toScriptCallFrame):
        (WebCore::toScriptCallFramesVector):
        (WebCore::createScriptCallStack):
        (WebCore::createScriptArguments):
        (WebCore::ScriptCallStack::stackTrace):
        * bindings/v8/ScriptCallStackFactory.h: Added.
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::setCaptureCallStackForUncaughtExceptions):
        * bindings/v8/ScriptState.h:
        (WebCore::ScriptStateProtectedPtr::get):
        * bindings/v8/V8ConsoleMessage.cpp:
        (WebCore::V8ConsoleMessage::handler):
        (WebCore::V8ConsoleMessage::dispatchNow):
        * bindings/v8/V8ConsoleMessage.h:
        * bindings/v8/custom/V8ConsoleCustom.cpp:
        (WebCore::V8Console::traceCallback):
        (WebCore::V8Console::assertCallback):
        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::ConsoleMessage):
        (WebCore::ConsoleMessage::addToFrontend):
        (WebCore::ConsoleMessage::updateRepeatCountInConsole):
        (WebCore::ConsoleMessage::isEqual):
        * inspector/ConsoleMessage.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::addMessageToConsole):
        (WebCore::InspectorController::startGroup):
        * inspector/InspectorController.h:
        * inspector/ScriptArguments.cpp: Added.
        (WebCore::ScriptArguments::ScriptArguments):
        (WebCore::ScriptArguments::~ScriptArguments):
        (WebCore::ScriptArguments::argumentAt):
        (WebCore::ScriptArguments::globalState):
        (WebCore::ScriptArguments::getFirstArgumentAsString):
        (WebCore::ScriptArguments::isEqual):
        * inspector/ScriptArguments.h: Added.
        (WebCore::ScriptArguments::argumentCount):
        * inspector/ScriptCallFrame.cpp: Added.
        (WebCore::ScriptCallFrame::ScriptCallFrame):
        (WebCore::ScriptCallFrame::~ScriptCallFrame):
        (WebCore::ScriptCallFrame::isEqual):
        (WebCore::ScriptCallFrame::buildInspectorObject):
        * inspector/ScriptCallFrame.h: Added.
        (WebCore::ScriptCallFrame::functionName):
        (WebCore::ScriptCallFrame::sourceURL):
        (WebCore::ScriptCallFrame::lineNumber):
        * inspector/ScriptCallStack.cpp: Added.
        (WebCore::ScriptCallStack::ScriptCallStack):
        (WebCore::ScriptCallStack::~ScriptCallStack):
        (WebCore::ScriptCallStack::at):
        (WebCore::ScriptCallStack::size):
        (WebCore::ScriptCallStack::isEqual):
        (WebCore::ScriptCallStack::buildInspectorObject):
        * inspector/ScriptCallStack.h: Added.
        * page/Console.cpp:
        (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::markTimeline):
        (WebCore::Console::profile):
        (WebCore::Console::profileEnd):
        (WebCore::Console::timeEnd):
        (WebCore::Console::group):
        (WebCore::Console::groupCollapsed):
        (WebCore::Console::shouldCaptureFullStackTrace):
        (WebCore::Console::warn):
        * page/Console.h:

2010-10-21  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Chromium: use dedicated event listener type in EventListenerWrapper.
        https://bugs.webkit.org/show_bug.cgi?id=48059

        This change introduces new EventListener::Type NativeEventListenerType.
        This new type is intended to be used by any code that wants to protect
        itself from unsafe casts to particular event listener implementations.

        * dom/EventListener.h:

2010-10-21  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r70225.
        http://trac.webkit.org/changeset/70225
        https://bugs.webkit.org/show_bug.cgi?id=48061

        Build breakage on Leopard. (Requested by pfeldman on #webkit).

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::getFontData):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * loader/CachedFont.cpp:
        (WebCore::CachedFont::platformDataFromCustomData):
        * loader/CachedFont.h:
        * platform/graphics/FontCache.cpp:
        (WebCore::FontPlatformDataCacheKey::FontPlatformDataCacheKey):
        (WebCore::FontPlatformDataCacheKey::operator==):
        (WebCore::computeHash):
        (WebCore::FontCache::getCachedFontPlatformData):
        * platform/graphics/FontDescription.h:
        (WebCore::FontDescription::FontDescription):
        (WebCore::FontDescription::operator==):
        * platform/graphics/FontOrientation.h: Removed.
        * platform/graphics/SimpleFontData.h:
        * platform/graphics/cairo/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/cairo/FontCustomPlatformData.h:
        * platform/graphics/cocoa/FontPlatformData.h:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::hash):
        (WebCore::FontPlatformData::operator==):
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::operator=):
        (WebCore::FontPlatformData::allowsLigatures):
        (WebCore::FontPlatformData::description):
        * platform/graphics/gtk/FontCustomPlatformDataPango.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/haiku/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/haiku/FontCustomPlatformData.h:
        * platform/graphics/mac/FontCacheMac.mm:
        (WebCore::FontCache::getFontDataForCharacters):
        (WebCore::FontCache::createFontPlatformData):
        * platform/graphics/mac/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/mac/FontCustomPlatformData.h:
        * platform/graphics/mac/GlyphPageTreeNodeMac.cpp:
        (WebCore::GlyphPage::fill):
        * platform/graphics/mac/SimpleFontDataCoreText.cpp:
        (WebCore::SimpleFontData::getCFStringAttributes):
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::platformBoundsForGlyph):
        (WebCore::SimpleFontData::platformWidthForGlyph):
        * platform/graphics/qt/FontCustomPlatformData.h:
        * platform/graphics/qt/FontCustomPlatformDataQt.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/skia/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/skia/FontCustomPlatformData.h:
        * platform/graphics/win/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/win/FontCustomPlatformData.h:
        * platform/graphics/win/FontCustomPlatformDataCairo.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/win/FontCustomPlatformDataCairo.h:
        * platform/graphics/wince/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/wince/FontCustomPlatformData.h:
        * platform/graphics/wx/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/wx/FontCustomPlatformData.h:

2010-10-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Tests LayoutTests/fast/encoding/utf-32* fail when using glib unicode
        https://bugs.webkit.org/show_bug.cgi?id=47805

        Register UTF-32 encodings in TextCodecGtk.

        * platform/text/gtk/TextCodecGtk.cpp:
        (WebCore::TextCodecGtk::registerBaseEncodingNames):
        (WebCore::TextCodecGtk::registerBaseCodecs):

2010-10-21  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Darin Adler.

        Adding MediaQueryListListener binding test cases
        https://bugs.webkit.org/show_bug.cgi?id=48028

        MediaQueryListListener type will need special handling of the code generators. Adding the test cases.

        * bindings/scripts/test/CPP/WebDOMTestMediaQueryListListener.cpp: Added.
        (WebDOMTestMediaQueryListListener::WebDOMTestMediaQueryListListenerPrivate::WebDOMTestMediaQueryListListenerPrivate):
        (WebDOMTestMediaQueryListListener::WebDOMTestMediaQueryListListener):
        (WebDOMTestMediaQueryListListener::operator=):
        (WebDOMTestMediaQueryListListener::impl):
        (WebDOMTestMediaQueryListListener::~WebDOMTestMediaQueryListListener):
        (WebDOMTestMediaQueryListListener::method):
        (toWebCore):
        (toWebKit):
        * bindings/scripts/test/CPP/WebDOMTestMediaQueryListListener.h: Added.
        * bindings/scripts/test/GObject/WebKitDOMTestMediaQueryListListener.cpp: Added.
        (WebKit::kit):
        (webkit_dom_test_media_query_list_listener_method):
        (WebKit::core):
        (webkit_dom_test_media_query_list_listener_finalize):
        (webkit_dom_test_media_query_list_listener_set_property):
        (webkit_dom_test_media_query_list_listener_get_property):
        (webkit_dom_test_media_query_list_listener_constructed):
        (webkit_dom_test_media_query_list_listener_class_init):
        (webkit_dom_test_media_query_list_listener_init):
        (WebKit::wrapTestMediaQueryListListener):
        * bindings/scripts/test/GObject/WebKitDOMTestMediaQueryListListener.h: Added.
        * bindings/scripts/test/GObject/WebKitDOMTestMediaQueryListListenerPrivate.h: Added.
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.cpp: Added.
        (WebCore::JSTestMediaQueryListListenerConstructor::classInfo):
        (WebCore::JSTestMediaQueryListListenerConstructor::createStructure):
        (WebCore::JSTestMediaQueryListListenerConstructor::JSTestMediaQueryListListenerConstructor):
        (WebCore::JSTestMediaQueryListListenerConstructor::getOwnPropertySlot):
        (WebCore::JSTestMediaQueryListListenerConstructor::getOwnPropertyDescriptor):
        (WebCore::JSTestMediaQueryListListenerPrototype::self):
        (WebCore::JSTestMediaQueryListListenerPrototype::getOwnPropertySlot):
        (WebCore::JSTestMediaQueryListListenerPrototype::getOwnPropertyDescriptor):
        (WebCore::JSTestMediaQueryListListener::JSTestMediaQueryListListener):
        (WebCore::JSTestMediaQueryListListener::~JSTestMediaQueryListListener):
        (WebCore::JSTestMediaQueryListListener::createPrototype):
        (WebCore::JSTestMediaQueryListListener::getOwnPropertySlot):
        (WebCore::JSTestMediaQueryListListener::getOwnPropertyDescriptor):
        (WebCore::jsTestMediaQueryListListenerConstructor):
        (WebCore::JSTestMediaQueryListListener::getConstructor):
        (WebCore::jsTestMediaQueryListListenerPrototypeFunctionMethod):
        (WebCore::toJS):
        (WebCore::toTestMediaQueryListListener):
        * bindings/scripts/test/JS/JSTestMediaQueryListListener.h: Added.
        (WebCore::JSTestMediaQueryListListener::classInfo):
        (WebCore::JSTestMediaQueryListListener::createStructure):
        (WebCore::JSTestMediaQueryListListener::impl):
        (WebCore::JSTestMediaQueryListListenerPrototype::classInfo):
        (WebCore::JSTestMediaQueryListListenerPrototype::createStructure):
        (WebCore::JSTestMediaQueryListListenerPrototype::JSTestMediaQueryListListenerPrototype):
        * bindings/scripts/test/ObjC/DOMTestMediaQueryListListener.h: Added.
        * bindings/scripts/test/ObjC/DOMTestMediaQueryListListener.mm: Added.
        (-[DOMTestMediaQueryListListener dealloc]):
        (-[DOMTestMediaQueryListListener finalize]):
        (-[DOMTestMediaQueryListListener method:]):
        (core):
        (kit):
        * bindings/scripts/test/ObjC/DOMTestMediaQueryListListenerInternal.h: Added.
        * bindings/scripts/test/TestMediaQueryListListener.idl: Added.
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.cpp: Added.
        (WebCore::TestMediaQueryListListenerInternal::V8_USE):
        (WebCore::TestMediaQueryListListenerInternal::methodCallback):
        (WebCore::ConfigureV8TestMediaQueryListListenerTemplate):
        (WebCore::V8TestMediaQueryListListener::GetRawTemplate):
        (WebCore::V8TestMediaQueryListListener::GetTemplate):
        (WebCore::V8TestMediaQueryListListener::HasInstance):
        (WebCore::V8TestMediaQueryListListener::wrapSlow):
        (WebCore::V8TestMediaQueryListListener::derefObject):
        * bindings/scripts/test/V8/V8TestMediaQueryListListener.h: Added.
        (WebCore::V8TestMediaQueryListListener::toNative):
        (WebCore::V8TestMediaQueryListListener::wrap):
        (WebCore::toV8):

2010-10-21  takano takumi  <takano1@asia.apple.com>

        Reviewed by Dan Bernstein.

        Need to swap glyphs for vertical writing
        https://bugs.webkit.org/show_bug.cgi?id=46973

        Made changes to pass the writing-mode orientation flag in RenderStyle down to FontPlatformData,
        and ultimately to CoreText APIs in both font complex path and fast path.

        Tests: fast/text/international/vertical-text-glyph-test.html
               fast/text/international/vertical-text-metrics-test.html

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj: Added platform/graphics/FontOrientation.h.
        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::getFontData): Added font orientation parameter to SimpleFontData.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty): Set appropriate font orientation to the font description
        when writing-mode is being specified.
        * loader/CachedFont.cpp:
        (WebCore::CachedFont::platformDataFromCustomData): Made to pass font orientation to FontPlatformData.
        * loader/CachedFont.h:
        * platform/graphics/FontCache.cpp: Added font orientation to FontPlatformDataCacheKey
        (WebCore::FontPlatformDataCacheKey::FontPlatformDataCacheKey):
        (WebCore::FontPlatformDataCacheKey::operator==):
        (WebCore::computeHash):
        (WebCore::FontCache::getCachedFontPlatformData):
        * platform/graphics/FontDescription.h: Added font orientation support to FontDescription class
        (WebCore::FontDescription::FontDescription):
        (WebCore::FontDescription::orientation):
        (WebCore::FontDescription::setOrientation):
        (WebCore::FontDescription::operator==):
        * platform/graphics/FontOrientation.h: Added.
        * platform/graphics/SimpleFontData.h:
        * platform/graphics/cairo/FontCustomPlatformData.cpp: Changed to pass font orientation to fontPlatformData()
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/cairo/FontCustomPlatformData.h: Changed to pass font orientation to fontPlatformData()
        * platform/graphics/cocoa/FontPlatformData.h: Added font orientation support to FontPlatformData class
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::orientation):
        (WebCore::FontPlatformData::hash):
        (WebCore::FontPlatformData::operator==):
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm: Added font orientation support
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::operator=):
        (WebCore::FontPlatformData::allowsLigatures): Don't allow ligatures when the font is vertical orientation.
        (WebCore::FontPlatformData::description):
        * platform/graphics/gtk/FontCustomPlatformDataPango.cpp: Changed to pass font orientation to fontPlatformData()
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/haiku/FontCustomPlatformData.cpp: Changed to pass font orientation to fontPlatformData()
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/haiku/FontCustomPlatformData.h: Changed to pass font orientation to fontPlatformData()
        * platform/graphics/mac/FontCacheMac.mm: Added font orientation parameter when creating FontPlatformData object.
        (WebCore::FontCache::getFontDataForCharacters):
        (WebCore::FontCache::createFontPlatformData):
        * platform/graphics/mac/FontCustomPlatformData.cpp: Added font orientation parameter when creating FontPlatformData object.
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/mac/FontCustomPlatformData.h: Changed to pass font orientation parameter to fontPlatformData()
        * platform/graphics/mac/GlyphPageTreeNodeMac.cpp:
        (WebCore::GlyphPage::fill): Changed to use CoreText to extract glyphs when the current font is vertical orientation.
        CoreText automatically swaps glyphs with vertical variants when the font orientation is vertical.
        * platform/graphics/mac/SimpleFontDataCoreText.cpp: Added vertical form attribute to the attribute dictionary for a CTLine.
        (WebCore::SimpleFontData::getCFStringAttributes):
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::platformBoundsForGlyph): Changed to use CoreText (from CG) to support vertical metrics.
        (WebCore::SimpleFontData::platformWidthForGlyph): Made to use CoreText, instead of wkGetGlyphTransformedAdvances,
        to get vertical metrics when the font orientation is vertical.
        * platform/graphics/qt/FontCustomPlatformData.h: Changed to pass font orientation to fontPlatformData()
        * platform/graphics/qt/FontCustomPlatformDataQt.cpp: Changed to pass font orientation to fontPlatformData()
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/skia/FontCustomPlatformData.cpp: Changed to pass font orientation to fontPlatformData()
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/skia/FontCustomPlatformData.h: Changed to pass font orientation to fontPlatformData()
        * platform/graphics/win/FontCustomPlatformData.cpp: Changed to pass font orientation to fontPlatformData()
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/win/FontCustomPlatformData.h: Changed to pass font orientation to fontPlatformData()
        * platform/graphics/win/FontCustomPlatformDataCairo.cpp: Changed to pass font orientation to fontPlatformData()
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/win/FontCustomPlatformDataCairo.h: Changed to pass font orientation to fontPlatformData()
        * platform/graphics/wince/FontCustomPlatformData.cpp: Changed to pass font orientation to fontPlatformData()
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/wince/FontCustomPlatformData.h: Changed to pass font orientation to fontPlatformData()
        * platform/graphics/wx/FontCustomPlatformData.cpp: Changed to pass font orientation to fontPlatformData()
        (WebCore::FontCustomPlatformData::fontPlatformData):
        * platform/graphics/wx/FontCustomPlatformData.h: Changed to pass font orientation to fontPlatformData()

2010-10-20  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Redesign SVGAnimatedProperty concept to share "POD type wrappers" between all bindings (-> add ObjC SVG bindings)
        https://bugs.webkit.org/show_bug.cgi?id=47905

        Tests: svg/dom/SVGLengthList-appendItem.xhtml
               svg/dom/SVGLengthList-basics.xhtml
               svg/dom/SVGLengthList-getItem.xhtml
               svg/dom/SVGLengthList-initialize.xhtml
               svg/dom/SVGLengthList-insertItemBefore.xhtml
               svg/dom/SVGLengthList-removeItem.xhtml
               svg/dom/SVGLengthList-replaceItem.xhtml
               svg/dom/SVGLengthList-xml-dom-modifications.xhtml

        Introduce a more lightweight, less intrusive way to expose SVGAnimated* DOM bindings.

        Concrete example:
        The SVG DOM defines a 'SVGAnimatedLength' object, that's used to represent the x / y / width / height attributes of a 'SVGRectElement'.
        Each 'SVGAnimatedLength' object exposes a baseVal (markup defined attribute value) and an animVal (reflects the current state during animations),
        both of type 'SVGLength'. These objects are all _live_. That means you can do:
        var foobar = rect.x.baseVal; foobar.value += 150;

        If we'd implement the SVG DOM straightforward, we'd have to store a refcounted SVGAnimatedLength object, containing two refcounted SVGLength objects
        in SVGRectElement, for each of the x/y/width/height attributes. Our solution, to reduce memory footprint and increase performance is to store
        SVGLength stack-allocated, non refcounted types in SVGRectElement for x/y/width/height, and don't implement the SVGAnimatedLength object at all.

        In the past the JS bindings had to expose wrappers for SVGAnimatedLength on their own, and wrap each SVGLength object in an object called JSSVGPODTypeWrapper<SVGLength>.
        When JS changed the 'value' of the 'SVGLength', we constructed a copy of the SVGLength object, modified it, and called rectElement->setXBaseValue(newLength).
        This is not efficient at all, as we have to construct several copies of the SVGLength object, utilize callbacks to propagate the value changes in the SVG DOM.
        Furthermore, all bindings had to expose a similar concept, otherwhise SVG DOM wouldn't work. Up until now, only JSC and V8 bindings were available, that worked properly.

        The new SVGAnimatedProperty concept removes the need for JSSVGPODTypeWrapper (and friends like JSSVGContextCache, that associated a SVGLength with its SVGRectElement).
        Instead a solution is offered, that all bindings can use simultaneously, without adding new types or special concepts like JSSVGPODTypeWrapper.

        It works like this:
        A new refcounted SVGAnimatedProperty<PropertyType> template class is available, that stores a QualifiedName to associate the SVG DOM property with a XML DOM attribute.
        It also stores a RefPtr to the SVGElement that created it.
        
        In SVGRectElement we still store SVGLength m_x/m_y/m_width/m_height members, and offer a new "xAnimated()" method which looks up or creates a SVGAnimatedProperty<SVGLength>
        object. The JS/V8/ObjC bindings call this method whenever someone requests "rect.x/y/width/height", and a new wrapper is created, and stored in a HashMap.

        The SVGAnimatedProperty<PropertyType> is a base class for SVGAnimatedPropertyTearOff and SVGAnimatedListPropertyTearOff, the latter is used for all types of lists (SVGLengthList).
        SVGAnimatedProperty contains two methods used in the bindings: SVGProperty* baseVal and SVGProperty* animVal. SVGProperty is a base class for SVGPropertyTearOff and
        SVGListPropertyTearOff. Upon invocation of the baseVal/animVal methods a new SVG(List)PropertyTearOff object is created and stored in a RefPtr.
        The SVGPropertyTearOff objects stores a _reference_ to the type it wraps. Concrete example:
        When calling rect.x, a SVGAnimatedPropertyTearOff<SVGLength> is created, that stores a pointer to the SVGRectElement, and a SVGNames::xAttr.
        When calling rect.x.baseVal, a SVGPropertyTearOf<SVGLength> is created, that stores a reference to the "m_x" member variable of the SVGRectElement.
        Any changes applied to the SVGLength object, through the wrapper, are immediately live, as no copies are involved anymore, nor the need to fire any callback methods.
        This is the key concept of the new tear offs, no copies, no callbacks, no virtual methods (except one, needed for lists, but it's a detail).

        The SVGAnimatedListPropertyTearOff and SVGListPropertyTearOff work the same, but for SVG*List objects. The whole SVG*List API is _removed_ from the SVG DOM classes
        like SVGLengthList. It now inherits from Vector<SVGLength>, where it used to store a Vector<RefPtr<SVGListItem<SVGLength> > >. The SVGList API (insertItemBefore, appendItem, etc.)
        is exposed through SVGListPropertyTearOff, and there's no need anymore for SVGLengthList to deal with it at all.
        SVGLengthList is live just like most other SVG DOM object. Concrete example:
        var item0 = text.x.baseVal.getItem(0); item0.value += 150;

        Previously we chose to store a refcounted SVGListItem object, which wrapped the SVGLength object, to achieve liveness. We could change a single list item from DOM
        w/o copying the whole list. The drawback is that a simple type likeSVGLengthList, was heavy to store, as it contained a list of RefPtrs around a wrapper object
        around the real object 'SVGLength'. This complexity is completly gone.

        The SVGListPropertyTearOff<SVGLengthList> stores a reference to the SVGLengthList object (eg. SVGTextElement::m_x) and maintains a list of SVGPropertyTearOff<SVGLength>
        wrappers, that are created when necessary (getItem(2), will create a wrapper around the third list item), and cached. These SVGPropertyTearOff<SVGLength> objects
        store references to the SVGLength object _in the SVGLengthList_. One has to be extra carefully, to keep those lists synchronized.
        The SVGLengthList API is fully implemented for the first time, including moving items between lists, and is extensively tested with 8 new testcases.

        This patch only changed SVGLength/SVGLengthList to the new concept. All other types remain using the old DeprecatedSVGAnimatedProperty* concept.
        This will change in follow-up patches.

        * GNUmakefile.am: Add new files from svg/properties to build.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * bindings/js/JSSVGLengthCustom.cpp: Adapt to context cache removal for SVGLength.
        (WebCore::JSSVGLength::value):
        (WebCore::JSSVGLength::convertToSpecifiedUnits):
        * bindings/scripts/CodeGenerator.pm: Add new isSVGNewStyleAnimatedProperty() helper method, return true for "SVGAnimatedLength" and "SVGAnimatedLengthList".
        * bindings/scripts/CodeGeneratorJS.pm: Generate new style SVG JS bindings, that don't need JSSVGContextCache / JSSVGPODTypeWrapper.
        * bindings/scripts/CodeGeneratorObjC.pm: Ditto. (+ Finally expose a working set of SVG DOM API for Objective C).
        * bindings/scripts/CodeGeneratorV8.pm: Ditto.
        * bindings/v8/custom/V8SVGLengthCustom.cpp: Adapt to context cache removal for SVGLength.
        (WebCore::V8SVGLength::valueAccessorGetter):
        (WebCore::V8SVGLength::convertToSpecifiedUnitsCallback):
        * rendering/svg/SVGTextLayoutAttributesBuilder.cpp:
        (WebCore::extractFloatValuesFromSVGLengthList): SVGLengthList is a POD type now, passed as const reference.
        * svg/DeprecatedSVGAnimatedPropertyTraits.h: Remove handling for SVGLength/SVGLengthList, those are converted to the new SVGAnimatedProperty design now.
        * svg/DeprecatedSVGAnimatedTemplate.h: Ditto.
        * svg/SVGAnimatedLength.h: Added.
        * svg/SVGAnimatedLength.idl: Mark as [SVGAnimatedProperty].
        * svg/SVGAnimatedLengthList.h: Added.
        * svg/SVGAnimatedLengthList.idl: Mark as [SVGAnimatedProperty].
        * svg/SVGCircleElement.h: s/DECLARE_ANIMATED_PROPERTY/DECLARE_ANIMATED_PROPERTY_NEW/ until the transition to the new concept is finished.
        * svg/SVGCursorElement.h: Ditto.
        * svg/SVGEllipseElement.h: Ditto.
        * svg/SVGFilterElement.h: Ditto.
        * svg/SVGFilterPrimitiveStandardAttributes.h: Ditto.
        * svg/SVGForeignObjectElement.h: Ditto.
        * svg/SVGImageElement.h: Ditto.
        * svg/SVGLength.idl: Mark as [SVGProperty].
        * svg/SVGLengthList.cpp: Use Vector API (appendItem -> append). No need to ever use the SVGList API internally. SVGLengthList is a Vector<SVGLength> now.
        (WebCore::SVGLengthList::parse): 
        (WebCore::SVGLengthList::valueAsString):
        * svg/SVGLengthList.h: Inherit from Vector<SVGLength> - not from the SVGList base class. It's a simple, non-refcounted POD type now.
        (WebCore::SVGLengthList::SVGLengthList):
        * svg/SVGLengthList.idl: Mark as [SVGListProperty].
        * svg/SVGLineElement.h: s/DECLARE_ANIMATED_PROPERTY/DECLARE_ANIMATED_PROPERTY_NEW/ until the transition to the new concept is finished.
        * svg/SVGLinearGradientElement.h: Ditto.
        * svg/SVGMarkerElement.h: Ditto.
        * svg/SVGMaskElement.h: Ditto.
        * svg/SVGPatternElement.h: Ditto.
        * svg/SVGRadialGradientElement.h: Ditto.
        * svg/SVGRectElement.h: Ditto.
        * svg/SVGSVGElement.h: Ditto.
        * svg/SVGSVGElement.idl: Mark createSVGLength() as [SVGLiveProperty] - a wrapper for the returned object has to be created.
        * svg/SVGTextContentElement.h: s/DECLARE_ANIMATED_PROPERTY/DECLARE_ANIMATED_PROPERTY_NEW/ until the transition to the new concept is finished.
        * svg/SVGTextPathElement.h: Ditto.
        * svg/SVGTextPositioningElement.cpp:
        (WebCore::SVGTextPositioningElement::SVGTextPositioningElement):
        (WebCore::SVGTextPositioningElement::parseMappedAttribute): Detach wrappers pointing to the old x/y/dx/dy list, if the underlying list changes via XML DOM.
        (WebCore::listContainsRelativeValue): Adapt to SVGLengthList interface changes, it's a POD type now.
        * svg/SVGTextPositioningElement.h: s/DECLARE_ANIMATED_PROPERTY/DECLARE_ANIMATED_LIST_PROPERTY_NEW/ until the transition to the new concept is finished.
        * svg/SVGUseElement.h:
        * svg/properties/SVGAnimatedListPropertyTearOff.h: Added.
        * svg/properties/SVGAnimatedProperty.h: Added. This is the base class for SVGAnimatedPropertyTearOff and SVGAnimatedListPropertyTearOff.
        * svg/properties/SVGAnimatedPropertyDescription.h: Added. Refactored from DeprecatedSVGAnimatedProperty.h.
        * svg/properties/SVGAnimatedPropertyMacros.h: Added. These macros will be _removed_ as soon as the transition to the new concept is finished.
        * svg/properties/SVGAnimatedPropertyTearOff.h: Added.
        * svg/properties/SVGListPropertyTearOff.h: Added.
        * svg/properties/SVGProperty.h: Added. This is the base class for SVGPropertyTearOff and SVGListPropertyTearOff.
        * svg/properties/SVGPropertyTearOff.h: Added.
        * svg/properties/SVGPropertyTraits.h: Added.

2010-10-21  Alex Milowski  <alex@milowski.com>

        Reviewed by Kenneth Rohde Christiansen.

        Changed the layout algorithm for rows to avoid unnecessary recursion
        into child rows.  This solves the long rendering time experienced in
        https://bugs.webkit.org/show_bug.cgi?id=43462 as well as reports in
        various other bugs.  The change in the algorithm required some
        tweaks to other rendering objects to make sure that the baseline
        alignment still works.

        In addition, an attempt was made to go through the various
        rendering objects for MathML and reduce unnecessary calls that
        mark the tree in need of layout.

        * mathml/RenderMathMLFenced.cpp:
        * mathml/RenderMathMLFenced.h:
        * mathml/RenderMathMLFraction.cpp:
        (WebCore::RenderMathMLFraction::layout):
        * mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::stretchToHeight):
        * mathml/RenderMathMLRoot.cpp:
        (WebCore::RenderMathMLRoot::layout):
        * mathml/RenderMathMLRow.cpp:
        (WebCore::RenderMathMLRow::layout):
        * mathml/RenderMathMLRow.h:
        (WebCore::RenderMathMLRow::stretchToHeight):
        * mathml/RenderMathMLSubSup.cpp:
        (WebCore::RenderMathMLSubSup::addChild):
        (WebCore::RenderMathMLSubSup::stretchToHeight):
        (WebCore::RenderMathMLSubSup::nonOperatorHeight):
        (WebCore::RenderMathMLSubSup::layout):
        (WebCore::RenderMathMLSubSup::baselinePosition):
        * mathml/RenderMathMLUnderOver.cpp:
        (WebCore::RenderMathMLUnderOver::stretchToHeight):
        (WebCore::RenderMathMLUnderOver::layout):
        (WebCore::RenderMathMLUnderOver::nonOperatorHeight):
        * mathml/mathtags.in:

2010-10-21  Evan Martin  <evan@chromium.org>

        Reviewed by Tony Chang.

        sqlite: show extended error codes in error logs
        https://bugs.webkit.org/show_bug.cgi?id=47859

        SQLite can provide "extended" error codes, where extra information
        about the error is potentially encoded in the high bits of the error
        code.  It's only off by default in case older apps rely on equality
        testing on the older error codes, which WebKit doesn't do.

        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::open):
        * platform/sql/SQLiteStatement.cpp:
        (WebCore::SQLiteStatement::step):

2010-10-21  Yuta Kitamura  <yutak@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Handle WebSocket events via InspectorInstrumentation
        https://bugs.webkit.org/show_bug.cgi?id=47968

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didCreateWebSocketImpl):
        (WebCore::InspectorInstrumentation::willSendWebSocketHandshakeRequestImpl):
        (WebCore::InspectorInstrumentation::didReceiveWebSocketHandshakeResponseImpl):
        (WebCore::InspectorInstrumentation::didCloseWebSocketImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::didCreateWebSocket):
        (WebCore::InspectorInstrumentation::willSendWebSocketHandshakeRequest):
        (WebCore::InspectorInstrumentation::didReceiveWebSocketHandshakeResponse):
        (WebCore::InspectorInstrumentation::didCloseWebSocket):
        * websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::WebSocketChannel):
        Now we do not depend on InspectorController to generate a resource identifier.
        (WebCore::WebSocketChannel::disconnect):
        Check if m_identifier is valid in case we could not obtain an identifier.
        (WebCore::WebSocketChannel::didOpen):
        (WebCore::WebSocketChannel::didClose):
        (WebCore::WebSocketChannel::processBuffer):
        * websockets/WebSocketChannel.h:

2010-10-20  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Convert sidebar into the browsing tree in the Storage panel.
        https://bugs.webkit.org/show_bug.cgi?id=47988

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ApplicationCacheItemsView.js:
        (WebInspector.ApplicationCacheItemsView):
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleMessage.prototype._formatMessage):
        * inspector/front-end/CookieItemsView.js:
        (WebInspector.CookieItemsView):
        * inspector/front-end/DatabaseTableView.js:
        (WebInspector.DatabaseTableView.prototype._queryFinished):
        * inspector/front-end/StoragePanel.js:
        (WebInspector.StoragePanel):
        (WebInspector.StoragePanel.prototype.reset):
        (WebInspector.StoragePanel.prototype.addDatabase):
        (WebInspector.StoragePanel.prototype.addCookieDomain):
        (WebInspector.StoragePanel.prototype.addDOMStorage):
        (WebInspector.StoragePanel.prototype.addApplicationCache):
        (WebInspector.StoragePanel.prototype.showDatabase):
        (WebInspector.StoragePanel.prototype.showDOMStorage):
        (WebInspector.StoragePanel.prototype.showCookies):
        (WebInspector.StoragePanel.prototype.showApplicationCache):
        (WebInspector.StoragePanel.prototype.showCategoryView):
        (WebInspector.StoragePanel.prototype._innerShowView):
        (WebInspector.BaseStorageTreeElement):
        (WebInspector.BaseStorageTreeElement.prototype.onattach):
        (WebInspector.StorageCategoryTreeElement):
        (WebInspector.StorageCategoryTreeElement.prototype.onselect):
        (WebInspector.DatabaseTreeElement):
        (WebInspector.DatabaseTreeElement.prototype.onselect):
        (WebInspector.DatabaseTreeElement.prototype.onpopulate.tableNamesCallback):
        (WebInspector.DatabaseTreeElement.prototype.onpopulate):
        (WebInspector.DatabaseTableTreeElement):
        (WebInspector.DatabaseTableTreeElement.prototype.onselect):
        (WebInspector.DOMStorageTreeElement):
        (WebInspector.DOMStorageTreeElement.prototype.onselect):
        (WebInspector.CookieTreeElement):
        (WebInspector.CookieTreeElement.prototype.onselect):
        (WebInspector.ApplicationCacheTreeElement):
        (WebInspector.ApplicationCacheTreeElement.prototype.onselect):
        (WebInspector.StorageCategoryView):
        (WebInspector.StorageCategoryView.prototype.setText):
        * inspector/front-end/inspector.css:
        (.properties-tree ol):
        (.properties-tree ol.expanded):
        (.database-storage-tree-item .icon):
        (.database-table-storage-tree-item .icon):
        (.domstorage-storage-tree-item.local-storage .icon):
        (.domstorage-storage-tree-item.session-storage .icon):
        (.cookie-storage-tree-item .icon):
        (.application-cache-storage-tree-item .icon):
        (.storage.panel .sidebar):
        (.storage.panel .outline-disclosure > ol):
        (.storage.panel .outline-disclosure li):
        (.storage.panel .outline-disclosure li .selection):
        (.storage.panel .sidebar-resizer-vertical):
        (.storage-base-tree-element-title):
        (.storage.panel .outline-disclosure ol):
        (.storage.panel .outline-disclosure li.selected):
        (.storage.panel .outline-disclosure .icon):
        (.storage-empty-view, .storage-view.table .storage-table-error):

2010-10-21  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Replace encodings multi-dimensional array with calls to registrar method
        https://bugs.webkit.org/show_bug.cgi?id=47990

        * platform/text/gtk/TextCodecGtk.cpp:
        (WebCore::isEncodingAvailable):
        (WebCore::registerEncodingNameIfAvailable):
        (WebCore::registerEncodingAliasIfAvailable):
        (WebCore::registerCodecIfAvailable):
        (WebCore::TextCodecGtk::registerBaseEncodingNames):
        (WebCore::TextCodecGtk::registerBaseCodecs):
        (WebCore::TextCodecGtk::registerExtendedEncodingNames):
        (WebCore::TextCodecGtk::registerExtendedCodecs):
        (WebCore::TextCodecGtk::createIConvDecoder):
        (WebCore::TextCodecGtk::createIConvEncoder):
        * platform/text/gtk/TextCodecGtk.h:

2010-10-20  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r70040.
        http://trac.webkit.org/changeset/70040
        https://bugs.webkit.org/show_bug.cgi?id=48042

        "Reverting a performance regression detected by page_cycler"
        (Requested by hayato on #webkit).

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

2010-10-19  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Gavin Barraclough.

        https://bugs.webkit.org/show_bug.cgi?id=47851
        
        Avoid buffer overflows in CSSPrimitiveValue's use of 
        DecimalNumber, and pass the buffer size in InspectorBasicValue.

        Test: fast/css/large-value-csstext.html

        * css/CSSPrimitiveValue.cpp:
        (WebCore::formatNumber):
        * inspector/InspectorValues.cpp:
        (WebCore::InspectorBasicValue::writeJSON):

2010-10-20  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by David Levin.

        Add SecurityOrigin::threadsafeCopy() to the list of exported symbols.
        https://bugs.webkit.org/show_bug.cgi?id=40655

        * WebCore.exp.in:

2010-10-20  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r70165.
        http://trac.webkit.org/changeset/70165
        https://bugs.webkit.org/show_bug.cgi?id=48007

        It broke tests on Qt bot (Requested by Ossy on #webkit).

        * ForwardingHeaders/wtf/text/TextPosition.h: Removed.
        * bindings/js/ScriptSourceCode.h:
        (WebCore::ScriptSourceCode::ScriptSourceCode):
        * bindings/v8/ScheduledAction.cpp:
        (WebCore::ScheduledAction::ScheduledAction):
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::eventHandlerLineNumber):
        (WebCore::ScriptController::eventHandlerColumnNumber):
        * bindings/v8/ScriptController.h:
        * bindings/v8/ScriptEventListener.cpp:
        (WebCore::createAttributeEventListener):
        * bindings/v8/ScriptSourceCode.h:
        (WebCore::ScriptSourceCode::ScriptSourceCode):
        (WebCore::ScriptSourceCode::startLine):
        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListener::V8LazyEventListener):
        (WebCore::V8LazyEventListener::prepareListenerObject):
        * bindings/v8/V8LazyEventListener.h:
        (WebCore::V8LazyEventListener::create):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::compileScript):
        (WebCore::V8Proxy::evaluate):
        (WebCore::V8Proxy::runScript):
        * bindings/v8/V8Proxy.h:
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::evaluate):
        (WebCore::WorkerContextExecutionProxy::runScript):
        * bindings/v8/WorkerContextExecutionProxy.h:
        * bindings/v8/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::evaluate):
        * dom/PendingScript.cpp:
        (WebCore::PendingScript::releaseElementAndClear):
        * dom/PendingScript.h:
        (WebCore::PendingScript::PendingScript):
        (WebCore::PendingScript::operator=):
        (WebCore::PendingScript::startingLineNumber):
        * dom/ScriptableDocumentParser.h:
        * dom/XMLDocumentParser.h:
        * dom/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::XMLDocumentParser):
        (WebCore::XMLDocumentParser::startElementNs):
        (WebCore::XMLDocumentParser::endElementNs):
        (WebCore::XMLDocumentParser::lineNumber):
        (WebCore::XMLDocumentParser::columnNumber):
        * dom/XMLDocumentParserQt.cpp:
        (WebCore::XMLDocumentParser::XMLDocumentParser):
        (WebCore::XMLDocumentParser::parseStartElement):
        (WebCore::XMLDocumentParser::parseEndElement):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::runScriptsForPausedTreeBuilder):
        (WebCore::HTMLDocumentParser::columnNumber):
        * html/parser/HTMLDocumentParser.h:
        * html/parser/HTMLScriptRunner.cpp:
        (WebCore::HTMLScriptRunner::sourceFromPendingScript):
        (WebCore::HTMLScriptRunner::execute):
        (WebCore::HTMLScriptRunner::runScript):
        * html/parser/HTMLScriptRunner.h:
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::HTMLTreeBuilder):
        (WebCore::HTMLTreeBuilder::takeScriptToProcess):
        (WebCore::HTMLTreeBuilder::processEndTag):
        (WebCore::HTMLTreeBuilder::processScriptStartTag):
        * html/parser/HTMLTreeBuilder.h:

2010-10-20  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

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

        Make boxes place themselves properly in the block direction.  Get basic painting working for spans and add a test that
        verifies that span painting and replaced element painting (like images) works correctly.
        
        Added fast/blockflow/basic-vertical-line.html

        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::logicalHeight):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesInInlineDirection):
        (WebCore::InlineFlowBox::adjustMaxAscentAndDescent):
        (WebCore::verticalPositionForBox):
        (WebCore::InlineFlowBox::computeLogicalBoxHeights):
        (WebCore::InlineFlowBox::placeBoxesInBlockDirection):
        (WebCore::InlineFlowBox::flipLinesInBlockDirection):
        (WebCore::InlineFlowBox::paintBoxDecorations):
        (WebCore::InlineFlowBox::paintMask):
        * rendering/InlineFlowBox.h:
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::isFlippedLinesWritingMode):

2010-10-20  Beth Dakin  <bdakin@apple.com>

        Reviewed by Dave Hyatt.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=47514 CSS 
        transforms should affect scrolling

        This patch causes topmostPosition, lowestPosition, 
        leftmostPosition, and rightmostPosition to take transforms into 
        account.

        Compute the topmost/lowest/leftmost/rightmost position without 
        factoring in the block's transform until the end.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::topmostPosition):
        (WebCore::RenderBlock::lowestPosition):
        (WebCore::RenderBlock::rightmostPosition):
        (WebCore::RenderBlock::leftmostPosition):
        * rendering/RenderBlock.h:

        transformedFrameRect() returns the frameRect() transformed to the 
        layer's transform. applyLayerTransformToRect() does the same thing 
        for the input rect.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::applyLayerTransformToRect):
        (WebCore::RenderBox::transformedFrameRect):
        (WebCore::RenderBox::topmostPosition):
        (WebCore::RenderBox::lowestPosition):
        (WebCore::RenderBox::rightmostPosition):
        (WebCore::RenderBox::leftmostPosition):
        * rendering/RenderBox.h:
        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::topmostPosition):
        (WebCore::RenderMedia::lowestPosition):
        (WebCore::RenderMedia::rightmostPosition):
        (WebCore::RenderMedia::leftmostPosition):
        * rendering/RenderMedia.h:
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::topmostPosition):
        (WebCore::RenderTableSection::lowestPosition):
        (WebCore::RenderTableSection::rightmostPosition):
        (WebCore::RenderTableSection::leftmostPosition):
        * rendering/RenderTableSection.h:

2010-10-20  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed.

        Rename SVGAnimatedProperty* -> DeprecatedSVGAnimatedProperty*
        https://bugs.webkit.org/show_bug.cgi?id=47973

        Copy headers from svg/properties, otherwhise builds from scratch on win are broken.

        * WebCore.vcproj/copyForwardingHeaders.cmd:

2010-10-20  Peter Rybin  <peter.rybin@gmail.com>

        Reviewed by Adam Barth.

        HTML parser should provide script column position within HTML document to JavaScript engine
        https://bugs.webkit.org/show_bug.cgi?id=45271

        Replaces line number with TextPosition struct so that script engine
        gets script starting line/column.

        * ForwardingHeaders/wtf/text/TextPosition.h: Added.
        * bindings/js/ScriptSourceCode.h:
        (WebCore::ScriptSourceCode::ScriptSourceCode):
        * bindings/v8/ScheduledAction.cpp:
        (WebCore::ScheduledAction::ScheduledAction):
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::eventHandlerPosition):
        * bindings/v8/ScriptController.h:
        * bindings/v8/ScriptEventListener.cpp:
        (WebCore::createAttributeEventListener):
        * bindings/v8/ScriptSourceCode.h:
        (WebCore::ScriptSourceCode::ScriptSourceCode):
        (WebCore::ScriptSourceCode::startLine):
        (WebCore::ScriptSourceCode::startPosition):
        * bindings/v8/V8LazyEventListener.cpp:
        (WebCore::V8LazyEventListener::V8LazyEventListener):
        (WebCore::V8LazyEventListener::prepareListenerObject):
        * bindings/v8/V8LazyEventListener.h:
        (WebCore::V8LazyEventListener::create):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::compileScript):
        (WebCore::V8Proxy::evaluate):
        (WebCore::V8Proxy::runScript):
        * bindings/v8/V8Proxy.h:
        * bindings/v8/WorkerContextExecutionProxy.cpp:
        (WebCore::WorkerContextExecutionProxy::evaluate):
        (WebCore::WorkerContextExecutionProxy::runScript):
        * bindings/v8/WorkerContextExecutionProxy.h:
        * bindings/v8/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::evaluate):
        * dom/PendingScript.cpp:
        (WebCore::PendingScript::releaseElementAndClear):
        * dom/PendingScript.h:
        (WebCore::PendingScript::PendingScript):
        (WebCore::PendingScript::operator=):
        (WebCore::PendingScript::startingPosition):
        * dom/ScriptableDocumentParser.h:
        * dom/XMLDocumentParser.h:
        * dom/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::XMLDocumentParser):
        (WebCore::XMLDocumentParser::startElementNs):
        (WebCore::XMLDocumentParser::endElementNs):
        (WebCore::XMLDocumentParser::lineNumber):
        (WebCore::XMLDocumentParser::columnNumber):
        (WebCore::XMLDocumentParser::textPosition):
        (WebCore::XMLDocumentParser::textPositionOneBased):
        * dom/XMLDocumentParserQt.cpp:
        (WebCore::XMLDocumentParser::XMLDocumentParser):
        (WebCore::XMLDocumentParser::textPosition):
        (WebCore::XMLDocumentParser::parseStartElement):
        (WebCore::XMLDocumentParser::parseEndElement):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::runScriptsForPausedTreeBuilder):
        (WebCore::HTMLDocumentParser::textPosition):
        * html/parser/HTMLDocumentParser.h:
        * html/parser/HTMLScriptRunner.cpp:
        (WebCore::HTMLScriptRunner::sourceFromPendingScript):
        (WebCore::HTMLScriptRunner::execute):
        (WebCore::HTMLScriptRunner::runScript):
        * html/parser/HTMLScriptRunner.h:
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::uninitializedPositionValue1):
        (WebCore::HTMLTreeBuilder::HTMLTreeBuilder):
        (WebCore::HTMLTreeBuilder::takeScriptToProcess):
        (WebCore::HTMLTreeBuilder::processEndTag):
        (WebCore::HTMLTreeBuilder::processScriptStartTag):
        * html/parser/HTMLTreeBuilder.h:

2010-10-20  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=47994
        
        Make computeBlockDirectionPositionsForLine writing-mode-aware.  None of the functions it calls are patched yet.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::computeBlockDirectionPositionsForLine):

2010-10-20  John Abd-El-Malek  <jam@chromium.org>

        Reviewed by Darin Fisher.

        [chromium] Fix crash when mousing over scrollview
        https://bugs.webkit.org/show_bug.cgi?id=47956

        Test: plugins/mouse-move-over-plugin-in-frame.html

        * platform/Widget.h:
        (WebCore::Widget::isPluginContainer):

2010-10-20  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r70149.
        http://trac.webkit.org/changeset/70149
        https://bugs.webkit.org/show_bug.cgi?id=47989

        "Build breaks in mac and win" (Requested by satish on
        #webkit).

        * dom/Element.cpp:
        (WebCore::Element::computeInheritedLanguage):
        * page/SpeechInput.cpp:
        (WebCore::SpeechInput::startRecognition):
        * page/SpeechInput.h:
        * page/SpeechInputClient.h:
        * platform/mock/SpeechInputClientMock.cpp:
        (WebCore::SpeechInputClientMock::startRecognition):
        (WebCore::SpeechInputClientMock::setRecognitionResult):
        (WebCore::SpeechInputClientMock::timerFired):
        * platform/mock/SpeechInputClientMock.h:
        * rendering/TextControlInnerElements.cpp:
        (WebCore::TextControlInnerElement::attachInnerElement):
        (WebCore::SearchFieldCancelButtonElement::detach):
        (WebCore::SpinButtonElement::defaultEventHandler):
        (WebCore::InputFieldSpeechButtonElement::defaultEventHandler):
        (WebCore::InputFieldSpeechButtonElement::detach):

2010-10-20  Leandro Gracia Gil  <leandrogracia@google.com>

        Reviewed by Jeremy Orlow.

        Patch the current speech input implementation to use and validate the
        nearest language tag. The language is now passed to the startRecognition
        methods so that language-specific recognition could be used. Also added
        a second parameter to setMockSpeechInputResult for the language used in
        speech recognition.
        https://bugs.webkit.org/show_bug.cgi?id=47089

        This is the 2nd of a 4-sided patch in Chromium and WebKit. For more
        details see http://codereview.chromium.org/3615005/show and
        http://codereview.chromium.org/3595018/show.

        Test: fast/speech/input-text-language-tag.html

        * dom/Element.cpp:
        (WebCore::Element::computeInheritedLanguage): includes a brief character
          validation for the BCP 47 language tag.
        * page/SpeechInput.cpp:
        (WebCore::SpeechInput::startRecognition):
        * page/SpeechInput.h:
        * page/SpeechInputClient.h:
        * platform/mock/SpeechInputClientMock.cpp:
        (WebCore::SpeechInputClientMock::startRecognition):
        (WebCore::SpeechInputClientMock::setRecognitionResult): results are now
          stored by language using a hash map.
        (WebCore::SpeechInputClientMock::timerFired):
        * platform/mock/SpeechInputClientMock.h:
        * rendering/TextControlInnerElements.cpp:
        (WebCore::TextControlInnerElement::attachInnerElement):
        (WebCore::SearchFieldCancelButtonElement::detach):
        (WebCore::SpinButtonElement::defaultEventHandler):
        (WebCore::InputFieldSpeechButtonElement::defaultEventHandler):
        (WebCore::InputFieldSpeechButtonElement::detach):

2010-10-20  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Merge ColorSpace and ImageColorSpace enums
        https://bugs.webkit.org/show_bug.cgi?id=47922

        Merging these two enums makes it easier to implement color-interpolation as well as
        color-interpolation-filter for SVG.
        Added ColorSpaceLinearRGB to the ColorSpace enum and changed ImageColorSpace to ColorSpace in all related
        files. Renamed enum entries DeviceColorSpace and sRGBColorSpace to ColorSpaceDeviceRGB and ColorSpaceSRGB
        to follow webkit style rules.
        Removed gray scale support in ImageBuffer since it is not used anymore on WebKit.

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator ColorSpace):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::paintCaret):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::paint):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setAllAttributesToDefault):
        (WebCore::CanvasRenderingContext2D::setShadow):
        (WebCore::CanvasRenderingContext2D::applyShadow):
        (WebCore::CanvasRenderingContext2D::drawImage):
        (WebCore::CanvasRenderingContext2D::drawImageFromRect):
        (WebCore::CanvasRenderingContext2D::drawTextInternal):
        * html/canvas/CanvasStyle.cpp:
        (WebCore::CanvasStyle::applyStrokeColor):
        (WebCore::CanvasStyle::applyFillColor):
        * inspector/InspectorController.cpp:
        (WebCore::drawOutlinedQuad):
        (WebCore::InspectorController::drawElementTitle):
        * mathml/RenderMathMLBlock.cpp:
        (WebCore::RenderMathMLBlock::paint):
        * mathml/RenderMathMLFraction.cpp:
        (WebCore::RenderMathMLFraction::paint):
        * mathml/RenderMathMLRoot.cpp:
        (WebCore::RenderMathMLRoot::paint):
        * mathml/RenderMathMLSquareRoot.cpp:
        (WebCore::RenderMathMLSquareRoot::paint):
        * page/FrameView.cpp:
        (WebCore::FrameView::paintContents):
        * page/PrintContext.cpp:
        (WebCore::PrintContext::spoolAllPagesWithBoundaries):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::wheelEvent):
        * platform/ScrollbarTheme.h:
        (WebCore::ScrollbarTheme::paintScrollCorner):
        * platform/ScrollbarThemeComposite.cpp:
        (WebCore::ScrollbarThemeComposite::paintScrollCorner):
        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupContainer::paintBorder):
        (WebCore::PopupListBox::paint):
        (WebCore::PopupListBox::paintRow):
        * platform/chromium/ScrollbarThemeChromium.cpp:
        (WebCore::ScrollbarThemeChromium::paintTickmarks):
        * platform/chromium/ScrollbarThemeChromiumMac.mm:
        (WebCore::ScrollbarThemeChromiumMac::paint):
        * platform/graphics/ColorSpace.h:
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::setStrokePattern):
        (WebCore::GraphicsContext::setFillPattern):
        (WebCore::GraphicsContext::setStrokeGradient):
        (WebCore::GraphicsContext::setFillGradient):
        * platform/graphics/GraphicsContextPrivate.h:
        (WebCore::GraphicsContextState::GraphicsContextState):
        * platform/graphics/ImageBuffer.cpp:
        (WebCore::ImageBuffer::transformColorSpace):
        * platform/graphics/ImageBuffer.h:
        (WebCore::ImageBuffer::create):
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        * platform/graphics/cg/ColorCG.cpp:
        (WebCore::cachedCGColorSpace):
        (WebCore::cachedCGColor):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::linearRGBColorSpaceRef):
        * platform/graphics/cg/GraphicsContextCG.h:
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        (WebCore::cgImage):
        (WebCore::ImageBuffer::draw):
        * platform/graphics/cg/ImageBufferData.h:
        * platform/graphics/cg/ImageCG.cpp:
        (WebCore::imageWithColorSpace):
        * platform/graphics/chromium/GLES2Canvas.cpp:
        (WebCore::GLES2Canvas::clearRect):
        (WebCore::GLES2Canvas::fillRect):
        * platform/graphics/chromium/TransparencyWin.cpp:
        (WebCore::TransparencyWin::setupLayerForWhiteLayer):
        * platform/graphics/filters/FEColorMatrix.cpp:
        (WebCore::FEColorMatrix::apply):
        * platform/graphics/filters/FEComposite.cpp:
        (WebCore::FEComposite::apply):
        * platform/graphics/filters/FEFlood.cpp:
        (WebCore::FEFlood::apply):
        * platform/graphics/filters/FEMerge.cpp:
        (WebCore::FEMerge::apply):
        * platform/graphics/filters/FEOffset.cpp:
        (WebCore::FEOffset::apply):
        * platform/graphics/filters/FETile.cpp:
        (WebCore::FETile::apply):
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::effectContext):
        * platform/graphics/filters/SourceAlpha.cpp:
        (WebCore::SourceAlpha::apply):
        * platform/graphics/filters/SourceGraphic.cpp:
        (WebCore::SourceGraphic::apply):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::paint):
        * platform/graphics/gtk/FontGtk.cpp:
        (WebCore::Font::drawComplexText):
        * platform/graphics/mac/GraphicsContextMac.mm:
        (WebCore::GraphicsContext::drawFocusRing):
        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::setLayerBorderColor):
        (WebCore::setLayerBackgroundColor):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::GraphicsContext):
        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        (WebCore::ImageBuffer::draw):
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::uploadSoftwareToHardware):
        * platform/graphics/win/FontCGWin.cpp:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/win/GraphicsContextCGWin.cpp:
        (WebCore::GraphicsContext::GraphicsContext):
        (WebCore::GraphicsContext::drawFocusRing):
        * platform/graphics/win/GraphicsLayerCACF.cpp:
        (WebCore::setLayerBorderColor):
        (WebCore::setLayerBackgroundColor):
        * platform/graphics/win/ImageCGWin.cpp:
        (WebCore::BitmapImage::getHBITMAPOfSize):
        * platform/graphics/win/ImageCairoWin.cpp:
        (WebCore::BitmapImage::getHBITMAPOfSize):
        (WebCore::BitmapImage::drawFrameMatchingSourceSize):
        * platform/graphics/win/WebLayer.cpp:
        (WebCore::WebLayer::drawInContext):
        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        (WebCore::GraphicsContext::clearRect):
        (WebCore::GraphicsContext::fillRect):
        * platform/graphics/wince/ImageWinCE.cpp:
        (WebCore::BitmapImage::getHBITMAPOfSize):
        * platform/graphics/wx/GraphicsContextWx.cpp:
        (WebCore::GraphicsContext::GraphicsContext):
        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::paintSearchFieldResultsDecoration):
        (WebCore::RenderThemeGtk::paintSearchFieldCancelButton):
        (WebCore::paintMediaButton):
        (WebCore::RenderThemeGtk::paintMediaSliderTrack):
        (WebCore::RenderThemeGtk::paintMediaSliderThumb):
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::paint):
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenuWin::paint):
        * platform/win/WebCoreTextRenderer.cpp:
        (WebCore::doDrawTextAtPoint):
        * platform/wx/wxcode/mac/carbon/non-kerned-drawing.cpp:
        (WebCore::drawTextWithSpacing):
        * plugins/PluginView.cpp:
        (WebCore::PluginView::paintMissingPluginIcon):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::beginTransparencyLayers):
        (WebCore::RenderLayer::paintResizer):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::paint):
        * rendering/RenderMediaControlsChromium.cpp:
        (WebCore::paintMediaButton):
        (WebCore::paintMediaSlider):
        (WebCore::paintMediaVolumeSlider):
        (WebCore::paintMediaTimelineContainer):
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::paint):
        * rendering/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::applyClippingToContext):
        * rendering/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::applyResource):
        (WebCore::RenderSVGResourceFilter::postApplyResource):
        * rendering/RenderSVGResourceGradient.cpp:
        (WebCore::createMaskAndSwapContextForTextGradient):
        * rendering/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::applyResource):
        (WebCore::RenderSVGResourceMasker::drawContentIntoMaskImage):
        * rendering/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::createTileImage):
        * rendering/RenderSVGResourceSolidColor.cpp:
        (WebCore::RenderSVGResourceSolidColor::applyResource):
        * rendering/RenderScrollbarTheme.cpp:
        (WebCore::RenderScrollbarTheme::paintScrollCorner):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintProgressBar):
        (WebCore::RenderThemeMac::paintMenuListButton):
        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::paintMenuListButton):
        * rendering/RenderThemeWinCE.cpp:
        (WebCore::RenderThemeWinCE::paintSearchFieldCancelButton):
        (WebCore::RenderThemeWinCE::paintSliderTrack):
        (WebCore::RenderThemeWinCE::paintSliderThumb):
        * rendering/SVGImageBufferTools.cpp:
        (WebCore::SVGImageBufferTools::createImageBuffer):
        * rendering/SVGImageBufferTools.h:
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::build):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::nativeImageForCurrentFrame):
        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::FEImage::apply):

2010-10-20  Dirk Schulze  <krit@webkit.org>

        Reviewed by Andreas Kling.

        Remove left over code after moving Cairo port to ShadowContext
        https://bugs.webkit.org/show_bug.cgi?id=47929

        ImageBufferFilter is not needed anymore, since Cairo is using ShadowContext now.
        Made kernelPosition() in FEGaussianBlur a inline function instead of a static function.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::kernelPosition):
        * platform/graphics/filters/FEGaussianBlur.h:
        * platform/graphics/filters/ImageBufferFilter.cpp: Removed.
        * platform/graphics/filters/ImageBufferFilter.h: Removed.

2010-10-20  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed.

        Fix efl build, by adding the new svg/properties include directory.

        * CMakeLists.txt:

2010-10-19  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: expose request/response cookies in HAR
        https://bugs.webkit.org/show_bug.cgi?id=47894

        Test: inspector/cookie-parser.html

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/CookieParser.js: Added.
        * inspector/front-end/HAREntry.js:
        (WebInspector.HAREntry.prototype._buildRequest):
        (WebInspector.HAREntry.prototype._buildResponse):
        (WebInspector.HAREntry.prototype._buildCookies):
        (WebInspector.HAREntry.prototype._buildCookie):
        * inspector/front-end/Resource.js: Parse Cookie/Set-Cookie headers and expose cookies.
        (WebInspector.Resource.prototype.set requestHeaders):
        (WebInspector.Resource.prototype.get requestCookies):
        (WebInspector.Resource.prototype.set responseHeaders):
        (WebInspector.Resource.prototype.get responseCookies):
        (WebInspector.Resource.prototype._parseRequestCookies):
        (WebInspector.Resource.prototype._parseResponseCookies):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

2010-10-20  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed.

        Fix non-mac builds, by adding the new svg/properties include directory.

        * GNUmakefile.am:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.pro:
        * WebCore.vcproj/WebCoreCommon.vsprops:

2010-10-20  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Adam Roben.

        Rename SVGAnimatedProperty* -> DeprecatedSVGAnimatedProperty*
        https://bugs.webkit.org/show_bug.cgi?id=47973

        Prepare fixing bug 47905, redesigning SVGAnimatedProperty. As we're going to move type by type
        to the new animated property concept, keep the old one around, marked deprecated, until the
        transition is finished.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/scripts/CodeGeneratorObjC.pm:
        * bindings/scripts/CodeGeneratorV8.pm:
        * svg/DeprecatedSVGAnimatedProperty.h: Copied from svg/SVGAnimatedProperty.h.
        (WebCore::DeprecatedSVGAnimatedPropertyTearOff::DeprecatedSVGAnimatedPropertyTearOff):
        (WebCore::DeprecatedSVGAnimatedPropertyTearOff::~DeprecatedSVGAnimatedPropertyTearOff):
        (WebCore::DeprecatedSVGAnimatedProperty::~DeprecatedSVGAnimatedProperty):
        (WebCore::DeprecatedSVGAnimatedProperty::DeprecatedSVGAnimatedProperty):
        (WebCore::DeprecatedSVGAnimatedProperty::value):
        (WebCore::DeprecatedSVGAnimatedProperty::baseValue):
        * svg/DeprecatedSVGAnimatedPropertyTraits.h: Copied from svg/SVGAnimatedPropertyTraits.h.
        * svg/DeprecatedSVGAnimatedTemplate.h: Copied from svg/SVGAnimatedTemplate.h.
        (WebCore::DeprecatedSVGAnimatedTypeWrapperKey::DeprecatedSVGAnimatedTypeWrapperKey):
        (WebCore::DeprecatedSVGAnimatedTypeWrapperKey::operator==):
        (WebCore::DeprecatedSVGAnimatedTypeWrapperKeyHash::hash):
        (WebCore::DeprecatedSVGAnimatedTypeWrapperKeyHash::equal):
        (WebCore::DeprecatedSVGAnimatedTypeWrapperKeyHashTraits::constructDeletedValue):
        (WebCore::DeprecatedSVGAnimatedTypeWrapperKeyHashTraits::isDeletedValue):
        (WebCore::DeprecatedSVGAnimatedTemplate::~DeprecatedSVGAnimatedTemplate):
        (WebCore::DeprecatedSVGAnimatedTemplate::forgetWrapper):
        (WebCore::lookupOrCreateWrapper):
        * svg/SVGAnimatedProperty.h: Removed.
        * svg/SVGAnimatedPropertySynchronizer.h: Removed.
        * svg/SVGAnimatedPropertyTraits.h: Removed.
        * svg/SVGAnimatedTemplate.h: Removed.
        * svg/SVGElement.h:
        * svg/SVGExternalResourcesRequired.h:
        * svg/SVGFitToViewBox.h:
        * svg/SVGURIReference.h:
        * svg/properties: Added.
        * svg/properties/SVGAnimatedPropertySynchronizer.h: Copied from svg/SVGAnimatedPropertySynchronizer.h.

2010-10-20  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Kent Tamura.

        absolutely positioned list in inline element crashes
        https://bugs.webkit.org/show_bug.cgi?id=45095

        Add a NULL check to avoid crash. The rendering result isn't ideal yet.

        Test: fast/lists/positioned-count-crash.html

        * rendering/RenderListItem.cpp:
        (WebCore::previousListItem):

2010-10-19  Adam Roben  <aroben@apple.com>

        Remove uses of CACFContextRef and CARender* from WebCore

        These types are now wrapped in a WKCACFContext type exported by
        WebKitSystemInterface.

        Fixes <http://webkit.org/b/43244>.

        Reviewed by Sam Weinig.

        * platform/graphics/win/WKCACFContextFlusher.cpp:
        (WebCore::WKCACFContextFlusher::addContext):
        (WebCore::WKCACFContextFlusher::removeContext):
        (WebCore::WKCACFContextFlusher::flushAllContexts):
        * platform/graphics/win/WKCACFContextFlusher.h:
        Changed to use WKCACFContext. We don't retain/release the context when
        putting it into/taking it out of the set. WKCACFContext is not a
        ref-counted type, so we can't retain/release it, but the
        retain/release was also unnecessary as WKCACFLayerRenderer calls
        removeContext before the context is destroyed.

        * platform/graphics/win/WKCACFLayer.cpp:
        (WebCore::WKCACFLayer::becomeRootLayerForContext):
        * platform/graphics/win/WKCACFLayer.h:
        Changed to use WKCACFContext.

        * platform/graphics/win/WKCACFLayerRenderer.cpp:
        (WebCore::WKCACFLayerRenderer::didFlushContext):
        (WebCore::WKCACFLayerRenderer::WKCACFLayerRenderer):
        (WebCore::WKCACFLayerRenderer::~WKCACFLayerRenderer):
        (WebCore::WKCACFLayerRenderer::layerTreeDidChange):
        (WebCore::WKCACFLayerRenderer::createRenderer):
        (WebCore::WKCACFLayerRenderer::destroyRenderer):
        (WebCore::WKCACFLayerRenderer::render): Also replaced uses of
        CGSRegion with WebKitSystemInterface functions/types.
        (WebCore::WKCACFLayerRenderer::resetDevice):
        * platform/graphics/win/WKCACFLayerRenderer.h:
        Replaced our CACFContextRef, CARenderContext, and CARenderOGLContext
        with a single WKCACFContext, which wraps all three. We hold a bare
        pointer to it and destroy it in our destructor.

2010-10-19  Yongjun Zhang  <yongjun_zhang@apple.com>

        Reviewed by Dan Bernstein.

        Pixel cracks when using background image sprite on transformed element at certain scales.
        https://bugs.webkit.org/show_bug.cgi?id=47868

        The pixel bleeding happens when the current context has scale and interpolation is kCGInterpolationHigh
        or kCGInterpolationDefault.  If the source rect size is smaller than the intrinsic image size,  some
        pixels outside of the clip rect will also be used to interpolate the color value for clip edges, which
        results in unwanted thin lines around the painted area.  We need to use sub-image patch to get rid of
        the artifacts in this case.

        Test: fast/images/pixel-crack-image-background-webkit-transform-scale.html

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

2010-10-19  Evan Martin  <evan@chromium.org>

        Reviewed by Tony Chang.

        sqlite: remove unused member variable
        https://bugs.webkit.org/show_bug.cgi?id=47957

        There's no need to save the error code into a member variable
        because nobody ever looks at it.

        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::open):
        * platform/sql/SQLiteDatabase.h:

2010-10-19  Jia Pu  <jpu@apple.com>

        Reviewed by James Robinson.

        Moving cursor back to autocorrected word in the same line shouldn't remove the underline
        https://bugs.webkit.org/show_bug.cgi?id=47629
        <rdar://problem/8546758>
        
        Patch <http://trac.webkit.org/changeset/70071> breaks some Chromium Mac hehavior. This patch
        fixes that.

        * editing/Editor.cpp:
        (WebCore::Editor::respondToChangedSelection): Add "!PLATFORM(MAC)" to make sure nothing changes
          on non-Mac platforms.

2010-10-19  Alexey Proskuryakov  <ap@apple.com>

        Build fix (EFL, maybe more).

        * CMakeLists.txt: Added platform/Language.cpp here, too.

2010-10-19  Jian Li  <jianli@chromium.org>

        Reviewed by Darin Fisher.

        Rename createBlobURL to createObjectURL and revokeBlobURL to
        revokeObjectURL per the latest File API spec.
        https://bugs.webkit.org/show_bug.cgi?id=47934

        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype._contextMenu):
        * inspector/front-end/utilities.js:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::createObjectURL):
        (WebCore::DOMWindow::revokeObjectURL):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::createObjectURL):
        (WebCore::WorkerContext::revokeObjectURL):
        * workers/WorkerContext.h:
        * workers/WorkerContext.idl:

2010-10-19  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=47933
        <rdar://problem/8494337> navigator.language doesn't work in WebKit2

        * CMakeListsEfl.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/chromium/Language.cpp: Removed.
        * platform/chromium/LanguageChromium.cpp: Copied from WebCore/platform/chromium/Language.cpp.
        * platform/efl/Language.cpp: Removed.
        * platform/efl/LanguageEfl.cpp: Copied from WebCore/platform/efl/Language.cpp.
        * platform/gtk/Language.cpp: Removed.
        * platform/gtk/LanguageGtk.cpp: Copied from WebCore/platform/gtk/Language.cpp.
        * platform/qt/Language.cpp: Removed.
        * platform/qt/LanguageQt.cpp: Copied from WebCore/platform/qt/Language.cpp.
        * platform/win/Language.cpp: Removed.
        * platform/win/LanguageWin.cpp: Copied from WebCore/platform/win/Language.cpp.
        * platform/Language.cpp: Added.
        Cross platform code is now in platform/Language.cpp. So, I renamed platform files to match
        the common pattern.

        * WebCore.exp.in: Exported new functions.

        * platform/Language.h: Added an ability to force the language, and an ability to set up
        listeners for changes (if the platform implements that). Web process will always use the
        forced language, as sent to it from UI process.

        * platform/mac/Language.mm: Moved code from WebKit.
        (WebCore::platformDefaultLanguage): Added code to synchronize user defaults. For some reason,
        they come unsynchronized in WebKit2 here, unlike WebKit1.

        * page/mac/WebCoreViewFactory.h: Removed defaultLanguageCode. WebCore no longer goes to WebKit
        to ask for that.

        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:
        Added wkCopyCFLocalizationPreferredName().

2010-10-19  James Simonsen  <simonjam@chromium.org>

        Reviewed by Adam Barth.

        Add "in select" insertion mode to parser.

        This was added to the spec in:
        http://html5.org/tools/web-apps-tracker?from=5520&to=5522

        And as a result of:
        http://www.w3.org/Bugs/Public/show_bug.cgi?id=10314

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

        No new tests. Open to ideas.

        * html/parser/HTMLElementStack.cpp: Added "in select" mode.
        (WebCore::HTMLNames::isSelectScopeMarker): Ditto.
        (WebCore::HTMLElementStack::inSelectScope): Ditto.
        * html/parser/HTMLElementStack.h: Ditto.
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTag): Use "in select" instead of "in table."
        (WebCore::HTMLTreeBuilder::processEndTag): Ditto.

2010-10-19  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Nate Chapin.

        Fix multiple index support in IndexedDB
        https://bugs.webkit.org/show_bug.cgi?id=47919

        Fix 2 bugs that caused the IndexData of all but the last index to be
        properly updated:
        * The objectStoreDataId is NOT unique if there are multiple indexes. So
          remove the constraint.
        * Do not delete all existing entries with that objectStoreDataId before
          adding an entry for each index. Only do it once at the beginning.

        Test: storage/indexeddb/queued-commands.html
            + index-basics.html modified

        * storage/IDBFactoryBackendImpl.cpp:
        (WebCore::createTables):
        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::deleteIndexData):
        (WebCore::putIndexData):
        (WebCore::IDBObjectStoreBackendImpl::putInternal):

2010-10-19  Martin Robinson  <mrobinson@igalia.com>

        Fix the GTK+ build after r70072. The logic looks incorrect, but
        this fix tries to preserves it, even so.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (baselinePositionForAccessibilityRenderObject):
        (getAttributeSetForAccessibilityObject):

2010-10-06  Jer Noble  <jer.noble@apple.com>

        Reviewed by Eric Carlson.

        Windows: Implement 'preload=none'
        https://bugs.webkit.org/show_bug.cgi?id=47317
        <rdar://problem/7718442>
        
        Implement the 'preload=none' identically to the mac implementation. Add three new
        ivars: m_preload, m_delayLoad and m_movieURL; and override the MediaPlayerPrivate
        functions: prepareToPlay() and setPreload().

        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::MediaPlayerPrivateQuickTimeVisualContext):
            Initialize new ivars m_delayLoad and m_preload.
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::resumeLoad): Added; new.
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::load): Split contents between
            load and loadInternal.
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::loadInternal): Added; new.
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::prepareToPlay): Added; overrides MediaPlayerPrivate.
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::setPreload): Added; overrides MediaPlayerPrivate.
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.h:
        
2010-10-19  Enrica Casucci  <enrica@apple.com>

        Reviewed by Alexey Proskuryakov.

        Upstream support of KeyCodes for iOS
        https://bugs.webkit.org/show_bug.cgi?id=47857
        
        * platform/cocoa/KeyEventCocoa.mm:
        (WebCore::windowsKeyCodeForCharCode): Added special handling of keyCodes for iOS.

2010-10-19  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by David Kilzer.

        iOS: ASSERT in Cache::adjustSize running layout tests
        https://bugs.webkit.org/show_bug.cgi?id=47873

        Inside Cache::pruneDeadResources we loop over the LRU lists and make resources purgeable
        with Cache::makeResourcePurgeable(). This wasn't taking into account whether the resource
        was already purgeable or not, and the makeResourcePurgeable call was always calling
        adjustSize(). Now we make sure makeResourcePurgable only adjusts the size of the Cache's
        dead sizes when it first marks the resource purgeable. Likewise, if a resource is marked
        as purgeable and then evicted, we should not adjust the size again.

        The balancing call is when we have a resource that has been marked as purgeable and we
        successfully mark it as no longer purgeable in Cache::resourceForURL.

        No test added because this requires testing purgeable memory.

        * loader/Cache.cpp:
        (WebCore::Cache::makeResourcePurgeable):
        (WebCore::Cache::evict):

2010-10-19  Vangelis Kokkevis  <vangelis@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Disable mipmapping for ImageLayer's to prevent memory use and
        performance regression.
        https://bugs.webkit.org/show_bug.cgi?id=47913
        
        This patch is a straight revert of the patch committed with issue 46493

        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::SharedValues::SharedValues):
        (WebCore::ContentLayerChromium::updateTextureRect):
        * platform/graphics/chromium/ContentLayerChromium.h:
        (WebCore::ContentLayerChromium::SharedValues::initialized):
        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerChromium::updateContents):

2010-10-18  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        gl-teximage.html fails on chromium webkit mac bot
        https://bugs.webkit.org/show_bug.cgi?id=47034

        * platform/graphics/GraphicsContext3D.cpp: Deal with endians in 16 bit image data.
        (WebCore::convertColor16LittleTo8):
        (WebCore::convertColor16BigTo8):
        (WebCore::doPacking):
        * platform/graphics/GraphicsContext3D.h: Ditto.
        * platform/graphics/cg/GraphicsContext3DCG.cpp: Ditto.
        (WebCore::GraphicsContext3D::getImageData):

2010-10-19  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

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

        Rework baselinePosition and lineHeight to be writing-mode-aware.  There's a lot of refactoring here to clean up
        the method parameters to be more readable and to simplify the subclassing of the various methods in order to 
        keep the horizontal/vertical querying to a minimum.

        * WebCore.xcodeproj/project.pbxproj:
        * mathml/RenderMathMLFraction.cpp:
        (WebCore::RenderMathMLFraction::baselinePosition):
        * mathml/RenderMathMLFraction.h:
        * mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::baselinePosition):
        * mathml/RenderMathMLOperator.h:
        * mathml/RenderMathMLRow.cpp:
        (WebCore::RenderMathMLRow::baselinePosition):
        * mathml/RenderMathMLRow.h:
        * mathml/RenderMathMLSubSup.cpp:
        (WebCore::RenderMathMLSubSup::baselinePosition):
        * mathml/RenderMathMLSubSup.h:
        * mathml/RenderMathMLUnderOver.cpp:
        (WebCore::RenderMathMLUnderOver::layout):
        (WebCore::RenderMathMLUnderOver::baselinePosition):
        * mathml/RenderMathMLUnderOver.h:
        * rendering/InlineBox.h:
        (WebCore::InlineBox::baselinePosition):
        (WebCore::InlineBox::lineHeight):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::adjustMaxAscentAndDescent):
        (WebCore::InlineFlowBox::computeLogicalBoxHeights):
        (WebCore::InlineFlowBox::placeBoxesInBlockDirection):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::baselinePosition):
        (WebCore::InlineTextBox::lineHeight):
        * rendering/InlineTextBox.h:
        * rendering/RenderBR.cpp:
        (WebCore::RenderBR::lineHeight):
        * rendering/RenderBR.h:
        (WebCore::toRenderBR):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::lineHeight):
        (WebCore::RenderBlock::baselinePosition):
        (WebCore::RenderBlock::firstLineBoxBaseline):
        (WebCore::RenderBlock::lastLineBoxBaseline):
        (WebCore::RenderBlock::localCaretRect):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutInlineChildren):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::lineHeight):
        (WebCore::RenderBox::baselinePosition):
        * rendering/RenderBox.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::verticalPosition):
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::paintObject):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutHorizontalBox):
        (WebCore::RenderFlexibleBox::layoutVerticalBox):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::lineHeight):
        (WebCore::RenderInline::baselinePosition):
        * rendering/RenderInline.h:
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::baselinePosition):
        * rendering/RenderListBox.h:
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::lineHeight):
        (WebCore::RenderListMarker::baselinePosition):
        * rendering/RenderListMarker.h:
        * rendering/RenderObject.cpp:
        * rendering/RenderObject.h:
        * rendering/RenderReplaced.cpp:
        * rendering/RenderReplaced.h:
        * rendering/RenderSVGRoot.cpp:
        * rendering/RenderSVGRoot.h:
        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::baselinePosition):
        * rendering/RenderSlider.h:
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::baselinePosition):
        * rendering/RenderTableCell.h:
        * rendering/RenderTableCol.h:
        (WebCore::RenderTableCol::isTableCol):
        * rendering/RenderTableRow.h:
        * rendering/RenderTableSection.h:
        * rendering/RenderText.cpp:
        * rendering/RenderText.h:
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::computeLogicalHeight):
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::baselinePosition):
        * rendering/RenderTextControlMultiLine.h:
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::createInnerTextStyle):
        * rendering/RootInlineBox.h:
        (WebCore::RootInlineBox::baselinePosition):
        (WebCore::RootInlineBox::lineHeight):
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::calculateBoundaries):

2010-10-19  Jia Pu  <jpu@apple.com>

        Reviewed by Adele Peterson.

        Moving cursor back to autocorrected word in the same line shouldn't remove the underline
        https://bugs.webkit.org/show_bug.cgi?id=47629
        <rdar://problem/8546758>

        Tests: platform/mac/editing/spelling/click-autocorrected-word.html
               platform/mac/editing/spelling/delete-into-autocorrected-word.html
               platform/mac/editing/spelling/delete-into-misspelled-word.html
               platform/mac/editing/spelling/forward-delete-into-autocorrected-word.html
               platform/mac/editing/spelling/move-cursor-around-misspelled-word.html
               platform/mac/editing/spelling/move-cursor-to-autocorrected-word.html
               platform/mac/editing/spelling/move-cursor-to-beginning-of-autocorrected-word.html

        * editing/Editor.cpp:
        (WebCore::Editor::respondToChangedSelection): Don't remove misspelling or autocorrection
          underlines when cursor is moved onto a word.

2010-10-19  Eric Carlson  <eric.carlson@apple.com>

        Not reviewed. Build fix.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::selectNextSourceChild): Initialize variable to avoid Windows
        "potentially uninitialized local variable" warning.

2010-10-19  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=46763
        CRASH in WebCore::ThreadTimers::sharedTimerFiredInternal

        Fix crashes caused by moving and deleting <source> element(s) of active media element.

        Tests: media/video-source-moved.html
               media/video-source-removed.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Add logging. Initialize selectNextSourceChild.
        (WebCore::HTMLMediaElement::~HTMLMediaElement): Ditto.
        (WebCore::HTMLMediaElement::insertedIntoDocument): Ditto.
        (WebCore::HTMLMediaElement::removedFromDocument): Ditto.
        (WebCore::HTMLMediaElement::scheduleLoad): Ditto.
        (WebCore::HTMLMediaElement::setNetworkState): Deal with m_currentSourceNode being null when
        the media engine signals a failure by skipping the error message and continuing as usual.
        (WebCore::HTMLMediaElement::setVolume): Fix logging typo.
        (WebCore::HTMLMediaElement::havePotentialSourceChild): Save and restore m_nextChildNodeToConsider
        around call to selectNextSourceChild because they are both significant.
        (WebCore::HTMLMediaElement::selectNextSourceChild): Use m_nextChildNodeToConsider to pick
        the first node to consider. Bail immediately if it signals that we have already processed 
        every <source> node. Stach the node following the current source element in m_nextChildNodeToConsider
        so we can resume the search even if m_currentSourceNode is removed while it is being processed.
        (WebCore::HTMLMediaElement::sourceWasAdded): New, move logic from HTMLSourceElement::insertedIntoTree
        here and correct it to deal with a <source> node being inserted immediately after the
        current <source> node and a new <source> node being inserted at the end of the list after
        all candidates have failed.
        (WebCore::HTMLMediaElement::sourceWillBeRemoved): New, deal with current source node and next
        potential node being removed.
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::sourceChildEndOfListValue): New, define sentinal value used to indicate
        that all nodes have been processed.

        * html/HTMLSourceElement.cpp:
        (WebCore::HTMLSourceElement::HTMLSourceElement): Add logging.
        (WebCore::HTMLSourceElement::insertedIntoTree): Call mediaElement->sourceWasAdded instead
        of having logic here.
        (WebCore::HTMLSourceElement::willRemove): New, call mediaElement->sourceWillBeRemoved
        (WebCore::HTMLSourceElement::scheduleErrorEvent): Add logging.
        (WebCore::HTMLSourceElement::cancelPendingErrorEvent): Add logging.
        * html/HTMLSourceElement.h:

2010-10-19  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Antti Koivisto.

        [Qt] WebKit2 MacOS build fix
        https://bugs.webkit.org/show_bug.cgi?id=47897

        Qt WebKit2 MacOS build fix.

        * bridge/npapi.h:

2010-10-19  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Soup cache code still has some warnings
        https://bugs.webkit.org/show_bug.cgi?id=47733

        Fixed some compilation warnings happening with gcc 4.4.5 on
        64-bits architecture.

        * platform/network/soup/cache/webkit/soup-cache.c:
        (webkit_soup_cache_entry_set_freshness):
        (close_ready_cb):

2010-10-19  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: crash while trying to step over a function using inspector
        https://bugs.webkit.org/show_bug.cgi?id=47902

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.reset): reset scripts panel to resumed state on navigation.

2010-10-19  Ryuan Choi  <ryuan.choi@samsung.com>

        Unreviewed attempt to remove warning in EFL build.

        Fix #if to #ifdef.

        No new features, so no tests added.

        * platform/efl/WidgetEfl.cpp:
        (WebCore::Widget::applyFallbackCursor):

2010-10-19  Andreas Kling  <kling@webkit.org>

        Reviewed by Tor Arne Vestbø.

        [Qt] getImageData returns wrong data for non-0,0 source offset
        https://bugs.webkit.org/show_bug.cgi?id=47898

        Test: fast/canvas/canvas-getImageData-negative-source.html

        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::getImageData): Add missing *4's to get correct pixel offset.

2010-10-19  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Correct initial state of ImageBuffer QPen
        https://bugs.webkit.org/show_bug.cgi?id=47804

        Have the QPen on ImageBuffers start in Qt::SvgMiterJoin mode.

        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::ImageBufferData::ImageBufferData):

2010-10-19  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Martin Robinson.

        GStreamer PlatformVideoWindow needs an API to prepare the widget before applying the overlay
        https://bugs.webkit.org/show_bug.cgi?id=46790

        Simple API addition to PlatformVideoWindow to allow
        implementations to optionally prepare their own PlatformWidget
        before applying the GStreamer XOverlay to it. This will likely be
        needed on Mac OSX only.

        * platform/graphics/gstreamer/GStreamerGWorld.cpp:
        (WebCore::GStreamerGWorld::setWindowOverlay):
        * platform/graphics/gstreamer/PlatformVideoWindow.h:
        * platform/graphics/gstreamer/PlatformVideoWindowGtk.cpp:
        (PlatformVideoWindow::prepareForOverlay):
        * platform/graphics/gstreamer/PlatformVideoWindowEfl.cpp:
        (PlatformVideoWindow::prepareForOverlay):

2010-10-19  Ben Murdoch  <benm@google.com>

        Reviewed by Steve Block.

        Missing support for document.createTouch and document.createTouchList
        https://bugs.webkit.org/show_bug.cgi?id=47676

        These APIs are used by many sites to detect support for touch events.

        Implement the APIs according to the documentation at:
        http://developer.apple.com/library/safari/#documentation/UserExperience/Reference/DocumentAdditionsReference/DocumentAdditions/DocumentAdditions.html

        Tests: fast/events/touch/document-create-touch-list.html
               fast/events/touch/document-create-touch.html

        * bindings/js/JSBindingsAllInOne.cpp: Add new files to list.
        * bindings/js/JSTouchCustom.cpp: Added.
        (WebCore::toJSNewlyCreated):
        * bindings/js/JSTouchListCustom.cpp: Added.
        (WebCore::toJSNewlyCreated):
        * bindings/scripts/CodeGeneratorJS.pm:
        * dom/Document.cpp:
        (WebCore::Document::createTouch):
        (WebCore::Document::createTouchList):
        * dom/Document.h:
        * dom/Document.idl: Add createTouch and createTouchList functions.
        * Android.jscbindings.mk: Update makefiles.
        * CMakeLists.txt: Ditto.
        * GNUmakefile.am: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.


2010-10-19  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: migrate from legacy Object.properties to Object.keys, remove dead code.
        https://bugs.webkit.org/show_bug.cgi?id=47890

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype._reportCompletions):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel):
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._onGetResources):
        * inspector/front-end/HAREntry.js:
        (WebInspector.HARLog.prototype.build):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertyTreeElement.prototype.):
        (WebInspector.StylePropertyTreeElement.prototype):
        * inspector/front-end/utilities.js:

2010-10-19  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: do not access ResourcePanel from resources directly.
        https://bugs.webkit.org/show_bug.cgi?id=47892

        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype.set documentURL):
        (WebInspector.Resource.prototype.set startTime):
        (WebInspector.Resource.prototype.set responseReceivedTime):
        (WebInspector.Resource.prototype.set endTime):
        (WebInspector.Resource.prototype.set resourceSize):
        (WebInspector.Resource.prototype.set expectedContentLength):
        (WebInspector.Resource.prototype.set category):
        (WebInspector.Resource.prototype.set cached):
        (WebInspector.Resource.prototype.set mimeType):
        (WebInspector.Resource.prototype.get requestHeaders):
        (WebInspector.Resource.prototype.set requestHeaders):
        (WebInspector.Resource.prototype.get responseHeaders):
        (WebInspector.Resource.prototype.set responseHeaders):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.addResource):
        (WebInspector.ResourcesPanel.prototype.refreshResource):
        (WebInspector.ResourcesPanel.prototype._recreateViewForResourceIfNeeded):
        (WebInspector.ResourcesPanel.prototype._resourceViewIsConsistentWithCategory):
        (WebInspector.ResourceGraph):
        (WebInspector.ResourceGraph.prototype.refresh):
        * inspector/front-end/inspector.js:
        (WebInspector.updateResource):

2010-10-19  Yuta Kitamura  <yutak@chromium.org>

        Reviewed by Pavel Feldman.

        Make sure WebSocket resource has the url field when it is created.

        Web Inspector: Uncaught TypeError when connection to WebSocket server is refused
        https://bugs.webkit.org/show_bug.cgi?id=47891

        * inspector/InspectorResource.cpp:
        (WebCore::InspectorResource::createWebSocket):

2010-10-19  Hayato Ito  <hayato@chromium.org>

        Reviewed by Darin Adler.

        Make CSS style selector non-recursive.
        https://bugs.webkit.org/show_bug.cgi?id=43783

        This change is one of the required changes to fix the following master bug:
        https://bugs.webkit.org/show_bug.cgi?id=42806

        To avoid recursion, we prepare a call stack and maintain a list of
        function call state by ourselves and try matching iteratively.

        Test: fast/css/long-css-selector-matches.html

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

2010-10-19  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r70034.
        http://trac.webkit.org/changeset/70034
        https://bugs.webkit.org/show_bug.cgi?id=47889

        "Gustavo's bot is lame" (Requested by xan_ on #webkit).

        * platform/network/soup/CookieJarSoup.cpp:
        (WebCore::defaultCookieJar):
        (WebCore::setCookies):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::prepareForURL):
        (WebCore::restartedCallback):
        (WebCore::startHttp):
        * platform/network/soup/ResourceRequestSoup.cpp:
        (WebCore::ResourceRequest::toSoupMessage):
        (WebCore::ResourceRequest::updateFromSoupMessage):

2010-10-19  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Bump minimum requirement for libsoup to 2.30
        https://bugs.webkit.org/show_bug.cgi?id=46176

        Bump minimum required libsoup version to 2.30.

        * platform/network/soup/CookieJarSoup.cpp:
        (WebCore::defaultCookieJar):
        (WebCore::setCookies):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::prepareForURL):
        (WebCore::restartedCallback):
        (WebCore::startHttp):
        * platform/network/soup/ResourceRequestSoup.cpp:
        (WebCore::ResourceRequest::toSoupMessage):
        (WebCore::ResourceRequest::updateFromSoupMessage):

2010-10-19  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Martin Robinson.

        Fix distcheck, take 2.

        * GNUmakefile.am: also move the generated CSS hash files to the
        build dir.

2010-10-18  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        Should not save state of a detached form control.
        https://bugs.webkit.org/show_bug.cgi?id=47811

        Test: fast/forms/state-save-of-detached-control.html

        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElementWithState::shouldSaveAndRestoreFormControlState):
          If the node is detached, don't save the state.

2010-10-18  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Martin Robinson.

        * GNUmakefile.am: add missing files.

2010-10-18  Oliver Hunt  <oliver@apple.com>

        Reviewed by Sam Weinig.

        REGRESSION: Feedly extension crashes Webkit
        https://bugs.webkit.org/show_bug.cgi?id=45811

        The basic problem was the deserializer was holding a pointer into
        the constant pool, but if you were sufficiently unlucky then the
        constant pool would be moved while still relying on the pointer,
        which leads to badness.

        I looked at just making all the sites this could happen extract the
        right string/jsstring before any possible allocations, but it seemed
        too fragile so i've gone for a forwarding object as the solution.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneDeserializer::CachedStringRef::CachedStringRef):
        (WebCore::CloneDeserializer::CachedStringRef::operator->):
        (WebCore::CloneDeserializer::readStringData):
        (WebCore::CloneDeserializer::readFile):
        (WebCore::CloneDeserializer::readTerminal):
        (WebCore::CloneDeserializer::deserialize):

2010-10-18  Chris Rogers  <crogers@google.com>

        Reviewed by Chris Fleizach.

        Add AudioResampler files
        https://bugs.webkit.org/show_bug.cgi?id=47623

        No new tests since audio API is not yet implemented.

        * platform/audio/AudioResampler.cpp: Added.
        (WebCore::AudioResampler::AudioResampler):
        (WebCore::AudioResampler::configureChannels):
        (WebCore::AudioResampler::process):
        (WebCore::AudioResampler::setRate):
        (WebCore::AudioResampler::reset):
        * platform/audio/AudioResampler.h: Added.
        (WebCore::AudioResampler::~AudioResampler):
        (WebCore::AudioResampler::rate):

2010-10-18  Vangelis Kokkevis  <vangelis@chromium.org>

        Reviewed by James Robinson.

        [chromium] Prevent the creation of very large textures for layers by switching
        to "large layer" mode when a texture is larger than some fixed reasonable size
        (set to 2000 pixels for now).
        https://bugs.webkit.org/show_bug.cgi?id=47751

        The code also changes the large layer logic to use the current scissor rect used
        by the compositor instead of the visible rect to determine how to clip large layers.
        This will provide additional texture savings. In addition, the various layer rects
        have been converted to use integers instead of floats to preserve uniformity in the code.
        
        Tests: Existing large layer layout tests including huge-layer and huge-layer-img

        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::requiresClippedUpdateRect):
        (WebCore::ContentLayerChromium::calculateClippedUpdateRect):
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::getDrawRect):
        * platform/graphics/chromium/LayerChromium.h:
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::drawLayers):
        (WebCore::LayerRendererChromium::drawLayersRecursive):
        (WebCore::LayerRendererChromium::scissorToRect):
        * platform/graphics/chromium/LayerRendererChromium.h:
        (WebCore::LayerRendererChromium::currentScissorRect):

2010-10-18  Jia Pu  <jpu@apple.com>

        Reviewed by Stephanie Lewis.

        Correct the description of manual test: autocorrection-cancelled-by-typing-1.html
        https://bugs.webkit.org/show_bug.cgi?id=47722
        <rdar://problem/8556206>

        * manual-tests/autocorrection/autocorrection-cancelled-by-typing-1.html: Update description
          to match the test content.

2010-10-18  Martin Robinson  <mrobinson@igalia.com>

        Build fix for newer versions of GTK+ 2.0. Instead of using GDK_DISPLAY()
        use GDK_DRAWABLE_XDISPLAY(gdk_display_get_default()). GDK_DISPLAY() was
        recently deprecated and the latter method has been available since GTK+
        2.2.

        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::updatePluginWidget):
        (WebCore::PluginView::paint):
        (WebCore::PluginView::initXEvent):
        (WebCore::PluginView::platformGetValue):
        (WebCore::getVisualAndColormap):
        (WebCore::PluginView::platformStart):
        (WebCore::PluginView::platformDestroy):

2010-10-18  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Adam Barth.

        elementCannotHaveEndTag should be a member function of MarkupAccumulator
        https://bugs.webkit.org/show_bug.cgi?id=47846

        Moved elementCannotHaveEndTag into MarkupAccumulator.

        No new tests are added since this is a cleanup.

        * editing/MarkupAccumulator.cpp:
        (WebCore::MarkupAccumulator::elementCannotHaveEndTag): Added.
        * editing/MarkupAccumulator.h: Added MarkupAccumulator::elementCannotHaveEndTag.
        * editing/markup.cpp: Removed elementCannotHaveEndTag.
        * editing/markup.h: Removed elementCannotHaveEndTag.

2010-10-18  Johnny Ding  <jnd@chromium.org>

        Reviewed by Adam Barth.

        Set the right referent sourceURL for the script with force user gesture.
        https://bugs.webkit.org/show_bug.cgi?id=37138

        Because empty sourceURL indicates running script with force user gesture,
        make WebKit use document.url() as referent sourceURL (Since it uses blank
        URL instead empty if the input URL is empty) if WebKit isn't running the
        script from a hyper-link.

        Test: fast/events/popup-blocked-from-window-open.html

        * bindings/ScriptControllerBase.cpp:
        (WebCore::ScriptController::executeScript):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::executeScriptInWorld):

2010-10-18  Darin Adler  <darin@apple.com>

        * dom/Node.h: Fix ancient typo in just-modified comment.

2010-10-18  Darin Adler  <darin@apple.com>

        Reviewed by Alexey Proskuryakov.

        Remove some functions from class Node and make a few others non-virtual
        https://bugs.webkit.org/show_bug.cgi?id=47735

        Refactoring. No new tests.

        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::markChildren): Added a FIXME about the use of the virtual
        ownerDocument function.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::removeChildren): Removed the unused return value.

        * dom/ContainerNode.h: Made insertBefore, replaceChild, removeChild, and
        appendChild non-virtual for clarity and performance. Made removeChildren
        non-virtual and removed its return value. Moved the inline Node functions
        that call through to ContainerNode into this file since the old way involved
        an extra level of inline function but otherwise had no advantages.

        * dom/Element.h: Moved isMathMLElement here because there is no call site
        that needs to call it on a Node*. We can always move it back if we need to,
        but it's better to have less in the Node class.

        * dom/Node.cpp:
        (WebCore::Node::insertBefore): Added an isContainerNode check so this can
        be non-virtual. There are very few callers who call this function on Node.
        If we want to optimize them further we can make the isContainerNode check
        inline in the future.
        (WebCore::Node::replaceChild): Ditto.
        (WebCore::Node::removeChild): Ditto.
        (WebCore::Node::appendChild): Ditto.
        (WebCore::Node::remove): Removed unneeded ref/unref because
        ContainerNode::removeChild already does this.
        (WebCore::Node::createRendererIfNeeded): Removed #if around call to
        childShouldCreateRenderer since it's needed even without SVG and XHTMLMP.

        * dom/Node.h: Moved definitions of inline functions that depend on
        ContainerNode to the ContainerNode.h header. They already required inclusion
        of that header, so there is no functional change. Made insertBefore,
        replaceChild, removeChild, and appendChild non-virtual. There are very few
        callers of these functions on this class. Moved isMathMLElement to Element.
        Added a FIXME about the name of eventAncestors. Fixed comment formatting.
        Eliminated unused isEditableBlock function. Moved the body of the
        enclosingInlineElement function to the editing file that was the only
        call site. Removed the previousEditable and nextEditable functions,
        incorporating their bodies into the one place they were called.
        Took the childShouldCreateRenderer function out of #if since it's
        now used by the implementation of the <noscript> element.

        * dom/Position.cpp:
        (WebCore::nextRenderedEditable): Rewrote the function to use nextLeafNode
        instead of nextEditable.
        (WebCore::previousRenderedEditable): Rewrote the function to use
        previousLeafNode instead of previousEditable.

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::enclosingInline): Moved function here from the Node class. Also
        fixed an incorrect cast this function did, which assumed the function
        result was always an element, which the function does not guarantee.
        (WebCore::ReplaceSelectionCommand::doApply): Call the function above.

        * history/HistoryItem.cpp: Added include of MathExtras.h.

2010-10-18  Yongjun Zhang  <yongjun_zhang@apple.com>

        Reviewed by Darin Adler.

        Missing support for document.createEvent("OrientationEvent")
        https://bugs.webkit.org/show_bug.cgi?id=32492

        Add support for document.createEvent("OrientationEvent") to help unit testing of
        onOrientationChange event.

        Test: fast/dom/DeviceOrientation/create-event-onorientationchange.html

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

2010-10-18  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Darin Adler.

        DOMStringList should return null if the index is out of range
        https://bugs.webkit.org/show_bug.cgi?id=47829

        When item() returns a null string, it needs to be passed to JS as
        null. The indexed getter will then magically do the right thing.
        So all that's left is having DOMStringList::item() return null when
        the index is out of bounds.

        * dom/DOMStringList.cpp:
        (WebCore::DOMStringList::item):
        * dom/DOMStringList.h:
        * dom/DOMStringList.idl:

2010-10-18  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Ariya Hidayat.

        [Qt] Implement Accelerated Composition for NPAPI Plugins.

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

        * plugins/PluginView.h:
        (WebCore::PluginView::platformLayer):
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginGraphicsLayerQt::PluginGraphicsLayerQt):
        (WebCore::PluginGraphicsLayerQt::~PluginGraphicsLayerQt):
        (WebCore::PluginGraphicsLayerQt::paint):
        (WebCore::PluginView::updatePluginWidget):
        (WebCore::PluginView::paint):
        (WebCore::PluginView::invalidateRect):
        (WebCore::PluginView::invalidateRegion):
        (WebCore::PluginView::platformStart):
        (WebCore::PluginView::platformLayer):

2010-10-18  Stuart Morgan  <stuartmorgan@chromium.org>

        Reviewed by Eric Seidel.

        Switch to using the new Carbon NPAPI event declarations, and remove
        the old ones.

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

        * bridge/npapi.h:
        * plugins/mac/PluginViewMac.mm:
        (WebCore::PluginView::setFocus):
        (WebCore::PluginView::handleMouseEvent):

2010-10-18  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: comment out resource manager instantiation on front-end side.
        https://bugs.webkit.org/show_bug.cgi?id=47823

        * inspector/front-end/inspector.js:

2010-10-18  Andrei Popescu  <andreip@google.com>

        Reviewed by Jeremy Orlow.

        The description parameter of IDBFactory::open() should be mandatory.
        https://bugs.webkit.org/show_bug.cgi?id=47835

        Makes the description parameter mandatory, as per the IndexedDatabase specification.
        Modified existing tests to cover this change.

        * storage/IDBDatabaseBackendImpl.cpp:
        (WebCore::extractMetaData):
        (WebCore::setMetaData):
        (WebCore::IDBDatabaseBackendImpl::IDBDatabaseBackendImpl):
        * storage/IDBFactory.cpp:
        (WebCore::IDBFactory::open):
        * storage/IDBFactory.h:
        * storage/IDBFactory.idl:

2010-10-18  Xiaomei Ji  <xji@chromium.org>

        Reviewed by David Levin.

        Code cleanup: Move most function members in TextRunWorker from inlined.
        https://bugs.webkit.org/show_bug.cgi?id=47732

        No functionality change, so no tests added.

        * platform/graphics/chromium/FontLinux.cpp:
        (WebCore::TextRunWalker::setWordSpacingAdjustment):
        (WebCore::TextRunWalker::setLetterSpacingAdjustment):
        (WebCore::TextRunWalker::setXOffsetToZero):
        (WebCore::TextRunWalker::rtl):
        (WebCore::TextRunWalker::glyphs):
        (WebCore::TextRunWalker::length):
        (WebCore::TextRunWalker::xPositions):
        (WebCore::TextRunWalker::advances):
        (WebCore::TextRunWalker::width):
        (WebCore::TextRunWalker::logClusters):
        (WebCore::TextRunWalker::numCodePoints):
        (WebCore::TextRunWalker::fontPlatformDataForScriptRun):
        (WebCore::TextRunWalker::isCodepointSpace):
        (WebCore::TextRunWalker::TextRunWalker):
        (WebCore::TextRunWalker::~TextRunWalker):
        (WebCore::TextRunWalker::isWordBreak):
        (WebCore::TextRunWalker::setPadding):
        (WebCore::TextRunWalker::reset):
        (WebCore::TextRunWalker::setBackwardsIteration):
        (WebCore::TextRunWalker::nextScriptRun):
        (WebCore::TextRunWalker::widthOfFullRun):
        (WebCore::TextRunWalker::getTextRun):
        (WebCore::TextRunWalker::getNormalizedTextRun):
        (WebCore::TextRunWalker::setupFontForScriptRun):
        (WebCore::TextRunWalker::allocHarfbuzzFont):
        (WebCore::TextRunWalker::deleteGlyphArrays):
        (WebCore::TextRunWalker::createGlyphArrays):
        (WebCore::TextRunWalker::resetGlyphArrays):
        (WebCore::TextRunWalker::shapeGlyphs):
        (WebCore::TextRunWalker::setGlyphXPositions):
        (WebCore::TextRunWalker::mirrorCharacters):

2010-10-18  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] AC rendering bugs
        There were a few missing connections in Qt AC between GraphicsLayer and plugins, like changing the plugin's geometry to the layer's
        contentsRect, and making sure media layers handle ParentChange events and setContentsNeedsDisplay. Now media layers behave correctly.

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

        No new tests. This is in preparation for fixing AC+plugins, which already has tests that don't work yet with Qt.

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::GraphicsLayerQtImpl::flushChanges):
        (WebCore::GraphicsLayerQt::setContentsNeedsDisplay):
        * platform/graphics/qt/GraphicsLayerQt.h:

2010-10-18  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Simon Fraser.

        Web Inspector: [crash] when Inspector Open in CSSStyleSelector::loadPendingImages().
        https://bugs.webkit.org/show_bug.cgi?id=46224

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/InspectorClient.cpp: Added.
        (WebCore::InspectorClient::doDispatchMessageOnFrontendPage):
        * inspector/InspectorClient.h:
        (WebCore::InspectorClient::InspectorClient):

2010-10-18  Andrei Popescu  <andreip@google.com>

        Reviewed by Jeremy Orlow.

        IDBKeyTree.h is no longer used.
        https://bugs.webkit.org/show_bug.cgi?id=47824

        No new tests, just removing unused files.

        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * storage/IDBKeyTree.h: Removed.

2010-10-18  Andreas Kling  <kling@webkit.org>

        Unreviewed buildfix for Qt + V8.
        Add missing <wtf/text/CString.h> include.

        * inspector/InspectorInstrumentation.cpp:

2010-10-18  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: toJSON serialization for Numbers should be fixed.
        DecimalNumber is used instead of printf.

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

        * inspector/InspectorValues.cpp:
        (WebCore::InspectorBasicValue::writeJSON):

2010-10-18  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: [REGRESSION] Inspector window visible during run-webkit-tests.
        The initial state of an inspector setting should stay untouched
        if the profile has no value for it.

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

        * inspector/InspectorState.cpp:
        (WebCore::InspectorState::loadFromSettings):

2010-10-18  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: tab headers on resource panel are 1px off on Mac.
        https://bugs.webkit.org/show_bug.cgi?id=47798

        * inspector/front-end/inspector.css:
        (.tabbed-pane-header li):

2010-10-18  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed. Build fix.

        * inspector/InspectorResourceAgent.cpp:
        (WebCore::cachedResourceTypeString):

2010-10-17  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Introduce InspectorResourceAgent.h/cpp and ResourceManager.js to
        fill network panel with data.
        https://bugs.webkit.org/show_bug.cgi?id=47779
        
        InspectorResourceAgent instance / JS part are introduced in this patch. Agent's lifetime is equal
        to the front-end's. This new resource agent does not have state, instead it covers two functions:
         1) forwards loader client messages to the front-end 2) is capable of building a tree of cached resources.
        (1) feeds network panel with data, (2) shows the resource tree in the new ResourcesPanel concept.
        This bug is for extracting this new InspectorResourceAgent class and its javascript counterpart.
        Once resources panel is refactored for the new concept, InspectorResource, InspectorController's
        resource-related routines, inspector.js's code dealing with resources, they all will be gone.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/CodeGeneratorInspector.pm:
        * inspector/Inspector.idl:
        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::didReceiveManifestResponse):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::releaseFrontendLifetimeAgents):
        (WebCore::InspectorController::didCommitLoad):
        (WebCore::InspectorController::frameDetachedFromParent):
        (WebCore::InspectorController::didLoadResourceFromMemoryCache):
        (WebCore::InspectorController::identifierForInitialRequest):
        (WebCore::InspectorController::willSendRequest):
        (WebCore::InspectorController::markResourceAsCached):
        (WebCore::InspectorController::didReceiveResponse):
        (WebCore::InspectorController::didReceiveContentLength):
        (WebCore::InspectorController::didFinishLoading):
        (WebCore::InspectorController::didFailLoading):
        (WebCore::InspectorController::resourceRetrievedByXMLHttpRequest):
        (WebCore::InspectorController::scriptImported):
        (WebCore::InspectorController::didCreateWebSocket):
        (WebCore::InspectorController::willSendWebSocketHandshakeRequest):
        (WebCore::InspectorController::didReceiveWebSocketHandshakeResponse):
        (WebCore::InspectorController::didCloseWebSocket):
        * inspector/InspectorController.h:
        * inspector/InspectorResource.cpp:
        (WebCore::InspectorResource::updateResponse):
        (WebCore::cachedResourceType):
        (WebCore::InspectorResource::type):
        (WebCore::InspectorResource::sourceString):
        (WebCore::InspectorResource::sourceBytes):
        (WebCore::InspectorResource::endTiming):
        * inspector/InspectorResourceAgent.cpp:
        (WebCore::InspectorResourceAgent::resourceContent):
        (WebCore::InspectorResourceAgent::resourceContentBase64):
        (WebCore::InspectorResourceAgent::resourceData):
        (WebCore::InspectorResourceAgent::cachedResource):
        (WebCore::buildObjectForHeaders):
        (WebCore::buildObjectForTiming):
        (WebCore::buildObjectForResourceRequest):
        (WebCore::buildObjectForResourceResponse):
        (WebCore::buildObjectForMainResource):
        (WebCore::cachedResourceTypeString):
        (WebCore::buildObjectForCachedResource):
        (WebCore::buildObjectForFrameResources):
        (WebCore::InspectorResourceAgent::~InspectorResourceAgent):
        (WebCore::InspectorResourceAgent::identifierForInitialRequest):
        (WebCore::InspectorResourceAgent::willSendRequest):
        (WebCore::InspectorResourceAgent::markResourceAsCached):
        (WebCore::InspectorResourceAgent::didReceiveResponse):
        (WebCore::InspectorResourceAgent::didReceiveContentLength):
        (WebCore::InspectorResourceAgent::didFinishLoading):
        (WebCore::InspectorResourceAgent::didFailLoading):
        (WebCore::InspectorResourceAgent::didLoadResourceFromMemoryCache):
        (WebCore::InspectorResourceAgent::setOverrideContent):
        (WebCore::InspectorResourceAgent::didCommitLoad):
        (WebCore::InspectorResourceAgent::frameDetachedFromParent):
        (WebCore::createReadableStringFromBinary):
        (WebCore::InspectorResourceAgent::didCreateWebSocket):
        (WebCore::InspectorResourceAgent::willSendWebSocketHandshakeRequest):
        (WebCore::InspectorResourceAgent::didReceiveWebSocketHandshakeResponse):
        (WebCore::InspectorResourceAgent::didCloseWebSocket):
        (WebCore::InspectorResourceAgent::cachedResources):
        (WebCore::InspectorResourceAgent::InspectorResourceAgent):
        * inspector/InspectorResourceAgent.h:
        (WebCore::InspectorResourceAgent::create):
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::resourceStyleSheetText):
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._onRevealAndSelectResource):
        (WebInspector.ExtensionServer.prototype._onGetResourceContent):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype.get responseReceivedTime):
        (WebInspector.Resource.prototype.set endTime):
        * inspector/front-end/Settings.js:
        * inspector/front-end/SourceView.js:
        (WebInspector.SourceView.prototype.setupSourceFrameIfNeeded):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.css:
        (.tabbed-pane-header li):
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        (WebInspector.updateResource):
        * loader/ResourceLoadNotifier.cpp:
        (WebCore::ResourceLoadNotifier::dispatchDidReceiveResponse):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::didReceiveResponse):

2010-10-16  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: brush up URL parsing on the front-end.
        https://bugs.webkit.org/show_bug.cgi?id=47772

        * inspector/InspectorResource.cpp:
        (WebCore::InspectorResource::updateScriptObject):
        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.getDomainToResourcesMap):
        (WebInspector.AuditRules.CombineExternalResourcesRule.prototype.doRun):
        (WebInspector.AuditRules.MinimizeDnsLookupsRule.prototype.doRun):
        (WebInspector.AuditRules.ParallelizeDownloadRule.prototype.doRun):
        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun):
        (WebInspector.AuditRules.CookieSizeRule.prototype.processCookies):
        (WebInspector.AuditRules.StaticCookielessRule.prototype.processCookies):
        * inspector/front-end/CookieItemsView.js:
        (WebInspector.CookieItemsView.prototype._filterCookiesForDomain):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.Cookies.cookieMatchesResourceURL):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource):
        (WebInspector.Resource.prototype.set url):
        (WebInspector.Resource.prototype.get displayName):
        * inspector/front-end/ResourceCategory.js:
        (WebInspector.ResourceCategory.prototype.addResource):
        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceView):
        * inspector/front-end/inspector.js:
        (WebInspector.documentClick.followLink):
        (WebInspector.documentClick):
        (WebInspector.updateResource):
        (WebInspector.linkifyStringAsFragment):
        (WebInspector.resourceURLForRelatedNode):
        (WebInspector.completeURL):
        * inspector/front-end/utilities.js:
        (String.prototype.asParsedURL):

2010-10-17  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Support custom open() verbs/methods in XMLHttpRequest
        https://bugs.webkit.org/show_bug.cgi?id=40476

        Fall back to QNetworkAccessManager::CustomOperation for any HTTP verb
        that's not specifically supported by QNetworkAccessManager.

        This prevents the infinite loop that otherwise occurs after sending
        an UnknownOperation request.

        This change is covered by existing (skipped) tests that will be
        unskipped once the Qt bots are running Qt 4.7.

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

2010-10-17  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        Remove explicit passing of user gesture in NavigationScheduler
        https://bugs.webkit.org/show_bug.cgi?id=47786

        As requested by Mr. Glazkov, remove more explicit passing of the user
        gesture state.  We now use a static to pass this information around.

        * bindings/generic/BindingFrame.h:
        (WebCore::::navigateIfAllowed):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::setLocation):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::reload):
        * bindings/v8/custom/V8LocationCustom.cpp:
        (WebCore::V8Location::reloadCallback):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::setResourceTrackingEnabled):
        (WebCore::InspectorController::reloadPage):
        * loader/NavigationScheduler.cpp:
        (WebCore::ScheduledNavigation::ScheduledNavigation):
        (WebCore::ScheduledURLNavigation::ScheduledURLNavigation):
        (WebCore::ScheduledRedirect::ScheduledRedirect):
        (WebCore::ScheduledLocationChange::ScheduledLocationChange):
        (WebCore::ScheduledRefresh::ScheduledRefresh):
        (WebCore::ScheduledHistoryNavigation::ScheduledHistoryNavigation):
        (WebCore::ScheduledFormSubmission::ScheduledFormSubmission):
        (WebCore::NavigationScheduler::scheduleRedirect):
        (WebCore::NavigationScheduler::mustLockBackForwardList):
        (WebCore::NavigationScheduler::scheduleLocationChange):
        (WebCore::NavigationScheduler::scheduleFormSubmission):
        (WebCore::NavigationScheduler::scheduleRefresh):
        (WebCore::NavigationScheduler::scheduleHistoryNavigation):
        * loader/NavigationScheduler.h:
        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::loadOrRedirectSubframe):

2010-10-17  Julien Chaffraix  <jchaffraix@codeaurora.org>

        Reviewed by Andreas Kling.

        'transparent' should be a valid color
        https://bugs.webkit.org/show_bug.cgi?id=45482

        Test: svg/animations/svg-animate-color-transparent.svg

        Based on previous work by Jan Erik Hanssen  <jhanssen@codeaurora.org>

        * platform/ColorData.gperf: Added 'transparent' to the list of colors.
        Added the alpha to all the colors as it was needed to support the new color.

        * platform/graphics/Color.cpp:
        (WebCore::Color::Color):
        (WebCore::Color::setNamedColor): Avoid setting the alpha as now it is not
        always 0xFF.

2010-10-17  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Nikolas Zimmermann.

        Duplicate use element children in shadow tree.
        https://bugs.webkit.org/show_bug.cgi?id=47561

        Test: svg/custom/use-nested-children.svg

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

2010-10-17  Hyung Song  <beergun@company100.net>

        Reviewed by David Levin.

        Add !SINGLE_THREADED guard.
        https://bugs.webkit.org/show_bug.cgi?id=47608

        For SINGLE_THREADED ports LockingMutex.tryLock() returns false.
        This will prevent interrupt() from falling into infinite loop.

        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::interrupt):

2010-10-17  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Nikolas Zimmermann.

        Very large and small numbers fail to round-trip through CSS
        https://bugs.webkit.org/show_bug.cgi?id=20674
        
        Use the new DecimalNumber functionality to convert CSS numberic values to strings
        using decimal notation, rather than %g (which can output scientific notation).

        Test: fast/css/round-trip-values.html

        * css/CSSPrimitiveValue.cpp:
        (WebCore::formatNumber):
        (WebCore::CSSPrimitiveValue::cssText):

2010-10-17  Cosmin Truta  <ctruta@chromium.org>

        Reviewed by Nikolas Zimmermann.

        Crash while processing ill-formed SVG with cycles
        https://bugs.webkit.org/show_bug.cgi?id=47498

        Test: svg/custom/invalid-paint-shape-mask.svg

        * rendering/SVGResources.cpp:
        (paintingResourceFromSVGPaint): Ensured that the painting resource is
        either a pattern resource or a gradient resource.
        (SVGResources::setClipper):
        (SVGResources::setFilter):
        (SVGResources::setMarkerStart):
        (SVGResources::setMarkerMid):
        (SVGResources::setMarkerEnd):
        (SVGResources::setMasker):
        (SVGResources::setFill):
        (SVGResources::setStroke): Added ASSERT statements for previously-unchecked
        preconditions.

2010-10-17  Alex Milowski  <alex@milowski.com>

        Reviewed by Kenneth Rohde Christiansen.

        Fixed extra whitespace above operators when they aren't stretched
        yet the stretch height is large.  Also, the baseline alignment
        was changed so that rows and operators interact appropriately now
        that operators don't have the extra white space.

        * mathml/RenderMathMLOperator.cpp:
        * mathml/RenderMathMLRow.cpp:

2010-10-17  Viatcheslav Ostapenko  <ostapenko.viatcheslav@nokia.com>

        Reviewed by Antonio Gomes.

        [Qt] Fix focusing of control elements on mouse click.
        Brings GTK fix to Qt platform.
        https://bugs.webkit.org/show_bug.cgi?id=40641
                        
        Test: fast/events/click-focus-control.html

        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::isMouseFocusable):

2010-10-17  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        FrameLoader doesn't need an explicit userGesture parameter
        https://bugs.webkit.org/show_bug.cgi?id=47777

        We used to pass around the user gesture state explicitly.  Now we use
        static state.  Explicitly passing the user gesture state to FrameLoader
        in these methods is pretty out-dated.

        * bindings/ScriptControllerBase.cpp:
        (WebCore::ScriptController::executeIfJavaScriptURL):
        * bindings/generic/BindingDOMWindow.h:
        (WebCore::::createWindow):
        (WebCore::::open):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::createWindow):
        (WebCore::JSDOMWindow::open):
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::setLocation):
        * bindings/js/ScriptController.h:
        * bindings/v8/ScriptController.h:
        * html/HTMLAnchorElement.cpp:
        (WebCore::handleLinkClick):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::openInInspectedWindow):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::changeLocation):
        (WebCore::FrameLoader::urlSelected):
        (WebCore::FrameLoader::submitForm):
        * loader/FrameLoader.h:
        * loader/NavigationScheduler.cpp:
        (WebCore::ScheduledURLNavigation::fire):
        (WebCore::ScheduledRefresh::fire):
        (WebCore::ScheduledHistoryNavigation::fire):
        (WebCore::NavigationScheduler::scheduleLocationChange):

2010-10-17  Sergey A. Sukiyazov  <sergey.sukiyazov@gmail.com>

        Reviewed by Andreas Kling

        [Qt] Hovering the mouse over links produce a trail of underlined links (X11 paint engine)
        https://bugs.webkit.org/show_bug.cgi?id=42248

        The problem will appear because coordinates of points may increase by 0.05f (if line width is odd) inside
        method GraphicsContext::adjustLineToPixelBoundaries(...) and become outside of text bounding rect htere,
        then the new point coordinates will be passed to Qt graphics engine.

        The solution decreases Y cordinates of points inside drawLineForText(...) method only if Qt graphics engine
        is X11. The Y coordinates will be increase by 0.5f inside method adjustLineToPixelBoundaries(...),  which
        called from drawLine(...), and then inside Qt painting engine will be rounded to next greater integer value.

        NOTE: This changes will affect only Qt X11 verision and if only X11 Painting Engine will be used.

        No new tests.

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

2010-10-17  Rob Buis  <rwlbuis@gmail.com>

        Reviewed by Dirk Schulze.

        Text under nested link dropped
        https://bugs.webkit.org/show_bug.cgi?id=46460

        Allow links inside of tspan and textPath elements.

        * svg/SVGTSpanElement.cpp:
        (WebCore::SVGTSpanElement::childShouldCreateRenderer):
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::childShouldCreateRenderer):

2010-10-16  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Kent Tamura.

        [BREWMP] Port TextCodec
        https://bugs.webkit.org/show_bug.cgi?id=45797

        Implement TextCodec with Brew MP's ICharsetConv.
        Only UTF-8 is supported for now.

        * platform/text/TextEncoding.cpp:
        (WebCore::TextEncoding::encode):
        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::buildBaseTextCodecMaps):
        * platform/text/brew/TextCodecBrew.cpp: Added.
        (WebCore::newTextCodecBrew):
        (WebCore::TextCodecBrew::registerBaseEncodingNames):
        (WebCore::TextCodecBrew::registerBaseCodecs):
        (WebCore::TextCodecBrew::registerExtendedEncodingNames):
        (WebCore::TextCodecBrew::registerExtendedCodecs):
        (WebCore::TextCodecBrew::TextCodecBrew):
        (WebCore::TextCodecBrew::~TextCodecBrew):
        (WebCore::TextCodecBrew::decode):
        (WebCore::TextCodecBrew::encode):
        * platform/text/brew/TextCodecBrew.h: Added.

2010-10-16  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed.

        Build fix for !ENABLE(INSPECTOR) after r69844.

        * inspector/InspectorState.h: Added ENABLE(INSPECTOR) guard.

2010-10-16  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed, build fix.

        WinCE build fix for r69798.

        * platform/text/wince/TextCodecWinCE.cpp: Added missing include.

2010-10-16  Johnny Ding  <jnd@chromium.org>

        Reviewed by Adam Barth.

        Requires a user gesture when opening file choose dialog.
        https://bugs.webkit.org/show_bug.cgi?id=47593

        Test: fast/forms/input-file-not-open-without-gesture.html

        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::click):

2010-10-16  Alex Milowski  <alex@milowski.com>

        Reviewed by Kenneth Rohde Christiansen.

        Changed the vertical alignment within mfenced to baseline to
        match the rest of the containers (e.g. mrow) and adjusted the
        operator spacing to 0.1em.

        Test: mathml/presentation/fenced-mi.xhtml

        * css/mathml.css:
        * mathml/RenderMathMLFenced.cpp:

2010-10-16  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Barth.

        Rename StringHasherFunctions.h to StringHasher.h
        https://bugs.webkit.org/show_bug.cgi?id=47200

        * ForwardingHeaders/wtf/StringHashFunctions.h: Removed.
        * ForwardingHeaders/wtf/StringHasher.h: Copied from WebCore/ForwardingHeaders/wtf/StringHashFunctions.h. 
 
2010-10-15  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        unlink removes inline style of anchor elements
        https://bugs.webkit.org/show_bug.cgi?id=47424

        The bug was caused by our not extracting styles when the anchor element is removed by removeInlineStyle.
        Because we removed the element without pushing its inline style down, we lost style information.

        Fixed the bug by pushing down styles in removeInlineStyle as done in pushDownInlineStyleAroundNode.
        Also fixed a bug in addInlineStyleIfNeeded where StyleChange incorrectly removed styles of the container
        node as supposed to that of startNode from the style to apply when startNode is not an element.

        Test: editing/execCommand/toggle-unlink.html

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::removeInlineStyleFromElement): To prevent a similar bug in the future,
        added an assert that extractedStyle is specified whenever we're removing a styled element.
        (WebCore::ApplyStyleCommand::removeInlineStyle):
        (WebCore::ApplyStyleCommand::addInlineStyleIfNeeded):

2010-10-15  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Tony Chang.

        serializeNodesWithNamespaces should be in MarkupAccumulator
        https://bugs.webkit.org/show_bug.cgi?id=47749

        Moved serializeNodesWithNamespaces to MarkupAccumulator, and renamed it to serializeNodes.
        MarkupAccumulator::serializeNode now returns the resultant string instead of having a separate takeResults().
        Added several helper functions to MarkupAccumulator.

        No new tests are added since this is a cleanup.

        * editing/MarkupAccumulator.cpp:
        (WebCore::MarkupAccumulator::serializeNodes): Wrapper for serializeNodes and concatenateMarkup.
        (WebCore::MarkupAccumulator::serializeNodesWithNamespaces): Moved from markup.cpp
        (WebCore::MarkupAccumulator::appendStartTag): Calls appendString instead of appending into m_succeedingMarkup directly.
        (WebCore::MarkupAccumulator::appendEndTag): Ditto.
        (WebCore::MarkupAccumulator::totalLength): Added; extracted from takeResults.
        (WebCore::MarkupAccumulator::concatenateMarkup): Ditto.
        * editing/MarkupAccumulator.h:
        (WebCore::MarkupAccumulator::length): Added; calls totalLength.
        * editing/markup.cpp:
        (WebCore::StyledMarkupAccumulator::appendString): Added; calls MarkupAccumulator's appendString.
        (WebCore::StyledMarkupAccumulator::wrapWithStyleNode): Calls appendString.
        (WebCore::StyledMarkupAccumulator::takeResults): Calls length, totalLength, and concatenateMarkup.
        (WebCore::StyledMarkupAccumulator::serializeNodes): Became a member function.
        (WebCore::createMarkup): Uses MarkupAccumulator.

2010-10-15  Kinuko Yasuda  <kinuko@google.com>

        Reviewed by Jian Li.

        Implement FileEntrySync.file() in FileSystem API
        https://bugs.webkit.org/show_bug.cgi?id=47310

        Tests: fast/filesystem/workers/file-from-file-entry-sync.html
               fast/filesystem/workers/file-from-file-entry.html

        * fileapi/DOMFileSystem.cpp:
        (WebCore::DOMFileSystem::createFile): Added.
        * fileapi/DOMFileSystem.h:
        * fileapi/DOMFileSystemSync.cpp:
        (WebCore::DOMFileSystemSync::createFile): Added.
        * fileapi/DOMFileSystemSync.h:
        * fileapi/DirectoryReaderBase.h: Added 'virtual path' comment.
        * fileapi/EntryBase.h: Added 'virtual path' comment.
        * fileapi/FileEntry.cpp:
        (WebCore::FileEntry::file): Changed to use DOMFileSystem::createFile.
        * fileapi/FileEntrySync.cpp:
        (WebCore::FileEntrySync::file): Implemented.
        * fileapi/FileEntrySync.h:
        * fileapi/FileEntrySync.idl: Added file().

2010-10-15  Nico Weber  <thakis@chromium.org>

        Reviewed by Eric Carlson.

        Make sure to update the current graphics context when calling out to AppKit.
        https://bugs.webkit.org/show_bug.cgi?id=47757

        Like r57741, but for the spellchecking highlight

        * platform/graphics/mac/GraphicsContextMac.mm:
        (WebCore::GraphicsContext::drawLineForTextChecking):

2010-10-15  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Sam Weinig.

        REGRESSION(r69850) Loading apple.com/startpage in WebKit on Windows gets a bad request.
        https://bugs.webkit.org/show_bug.cgi?id=47753
        <rdar://problem/8558242>
        
        r69850 switched over to a different way of concatenating WebCore strings, but ran into an issue
        where some Windows calls were returning null terminated strings, and this breaks the new
        method of concatenation.
        
        GetLocaleInfo returns a null-terminated string, but WebCore strings are non-null terminated,
        so once we create our WebCore string, we want to trim off the null terminating character before
        we return the localeInfo.

        Test: fast/dom/navigator-userAgent.html

        * platform/win/Language.cpp:
        (WebCore::localeInfo):

2010-10-15  Alexey Proskuryakov  <ap@apple.com>

        Trying to fix crashes on Leopard buildbot.

        * loader/loader.cpp:
        (WebCore::Loader::Host::didFinishLoading):
        (WebCore::Loader::Host::didFail):
        Moved logging higher in the function - it seems that CachedResource can be already destroyed.

        * platform/Logging.cpp: (WebCore::getChannelFromName):
        * platform/mac/LoggingMac.mm: (WebCore::InitializeLoggingChannelsIfNecessary):
        Initialize the new channel (oops).

2010-10-15  Mike Lawther  <mikelawther@chromium.org>

        Reviewed by James Robinson.

        Prevent scrollbars from appearing in iframes with scrolling=no
        when the embedded content has overflow:scroll set on the html
        or body tags.

        iframes keep getting scrollbars with scrolling="no"
        https://bugs.webkit.org/show_bug.cgi?id=29240

        Test: fast/frames/iframe-scrolling-attribute-overflowscroll.html

        * page/FrameView.cpp:
        (WebCore::FrameView::calculateScrollbarModesForLayout)
        (WebCore::FrameView::updateCanHaveScrollbars):
        (WebCore::FrameView::layout):
        * page/FrameView.h:
        (WebCore::FrameView::calculateScrollbarModesForLayout)

2010-10-15  Dan Bernstein  <mitz@apple.com>

        Reviewed by Adele Peterson.

        Clean up RenderFlexibleBox::applyLineClamp()
        https://bugs.webkit.org/show_bug.cgi?id=47743

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::applyLineClamp):

2010-10-15  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=47736
        <rdar://problem/8429396> WebCore cache gets corrupted if revalidation request starts at an inopportune time

        Test: http/tests/cache/stopped-revalidation.html

        * loader/loader.cpp: (WebCore::Loader::Host::servePendingRequests): Copied logic for
        revalidation requests from didFail().

2010-10-15  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler in <https://bugs.webkit.org/show_bug.cgi?id=47736>.

        Add a logging channel for WebCore cache and resource loading.

        Test: http/tests/cache/stopped-revalidation.html

        * platform/Logging.cpp:
        * platform/Logging.h:
        Added a logging channel for Cache and Loader.

        * loader/Cache.cpp:
        (WebCore::Cache::requestResource):
        (WebCore::Cache::revalidateResource):
        (WebCore::Cache::revalidationFailed):
        (WebCore::Cache::evict):
        * loader/CachedResource.cpp:
        (WebCore::CachedResource::setResourceToRevalidate):
        (WebCore::CachedResource::switchClientsToRevalidatedResource):
        (WebCore::CachedResource::mustRevalidate):
        Added logging.

        * loader/loader.cpp:
        (WebCore::Loader::load): Added logging.
        (WebCore::Loader::scheduleServePendingRequests): Ditto.
        (WebCore::Loader::requestTimerFired): Ditto.
        (WebCore::Loader::servePendingRequests): Ditto.
        (WebCore::Loader::Host::servePendingRequests):  Changed logging to use the new channel.
        (WebCore::Loader::Host::didFinishLoading): Changed logging to use the new channel.
        (WebCore::Loader::Host::didFail): Added logging.

2010-10-15  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Simon Fraser.

        Add public functions to serialize TransformOperations.
        https://bugs.webkit.org/show_bug.cgi?id=47728

        Added public accessors to the internal data of the TransformOperations.

        No new tests. These functions are enablers for WebKit2.

        * platform/graphics/transforms/Matrix3DTransformOperation.h:
        (WebCore::Matrix3DTransformOperation::matrix):
        * platform/graphics/transforms/MatrixTransformOperation.h:
        (WebCore::MatrixTransformOperation::matrix):
        * platform/graphics/transforms/PerspectiveTransformOperation.h:
        (WebCore::PerspectiveTransformOperation::perspective):
        * platform/graphics/transforms/RotateTransformOperation.h:
        (WebCore::RotateTransformOperation::x):
        (WebCore::RotateTransformOperation::y):
        (WebCore::RotateTransformOperation::z):
        * platform/graphics/transforms/SkewTransformOperation.h:
        (WebCore::SkewTransformOperation::angleX):
        (WebCore::SkewTransformOperation::angleY):
        * platform/graphics/transforms/TranslateTransformOperation.h:
        (WebCore::TranslateTransformOperation::x):
        (WebCore::TranslateTransformOperation::y):
        (WebCore::TranslateTransformOperation::z):

2010-10-15  Jian Li  <jianli@chromium.org>

        Reviewed by Dmitry Titov.

        FileReader.readAsDataURL should take Blob object
        https://bugs.webkit.org/show_bug.cgi?id=47679

        Test cases have been added into read-blob-test-cases.js.

        * fileapi/FileReader.idl: Update per the latest File API spec.

2010-10-15  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Move MarkupAccumulator from markup.cpp to its own file
        https://bugs.webkit.org/show_bug.cgi?id=47734

        This patch moves the MarkupAccumulator class into its own file.
        There's a lot of clean up left to do, but this patch is a step in the
        right direction.

        No behavior change.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * editing/markup.cpp:
        (WebCore::elementCannotHaveEndTag):
        * editing/markup.h:
        * editing/MarkupAccumulator.h: Added.
        * editing/MarkupAccumulator.cpp: Added.

2010-10-15  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        Match the elements supported by execCommand('formatBlock') and queryCommandValue('formatBlock')
        https://bugs.webkit.org/show_bug.cgi?id=47712

        Extended queryCommandValue('formatBlock', false, null) to support article, aside, blockquote, dd, dl,
        div, dl, dt, dl, footer, header, hgroup, nav, and section. Because this makes isElementForFormatBlockCommand
        in Editor.cpp and FormatBlockCommand::isElementToApplyInFormatBlockCommand identical, they are merged and moved
        to FormatBlockCommand.cpp

        Tests are added to editing/execCommand/query-format-block.html

        * editing/Editor.cpp: Removed isElementForFormatBlockCommand and Editor::elementForFormatBlockCommand.
        * editing/Editor.h:
        * editing/EditorCommand.cpp:
        (WebCore::executeFormatBlock): Removed the check of tag name; the check is moved into FormatBlockCommand.
        (WebCore::valueFormatBlock): Calls FormatBlockCommand::elementForFormatBlockCommand.
        * editing/FormatBlockCommand.cpp:
        (WebCore::isElementForFormatBlock):
        (WebCore::FormatBlockCommand::FormatBlockCommand):
        (WebCore::FormatBlockCommand::formatSelection): Added to check the tag name. Exit early if the specified tag name
        is not what FormatBlock should apply. Set m_didApply true if m_didApply did apply the element.
        (WebCore::FormatBlockCommand::formatRange): Moved from Editor.cpp.  Takes Range* instead of accessing selection directly.
        (WebCore::FormatBlockCommand::elementForFormatBlockCommand): Moved from Editor.cpp
        (WebCore::enclosingBlockToSplitTreeTo): Calls isElementForFormatBlock.
        * editing/FormatBlockCommand.h:
        (WebCore::FormatBlockCommand::didApply): Added.

2010-10-15  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        carto.net Dock example redraws *way* too often
        https://bugs.webkit.org/show_bug.cgi?id=16090

        Setting the attributes x, y, width or height shouldn't cause a repaint if the image boundaries don't change.
        Added updateFromElement() to RenderSVGImage that checks if the old boundaries match the new boundaries after
        setting one of the attributes of above. Mark renderer for layout (and therefore repaint) if the boundaries
        differ, do nothing if not.
        Also added caching of the repaint rect to avoid multiple calculations.

        Test: svg/custom/repaint-on-constant-size-change.svg

        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::RenderSVGImage):
        (WebCore::RenderSVGImage::layout): Update repaint rect on layout.
        (WebCore::RenderSVGImage::updateFromElement): Check SVGImageElement for boundaries update.
        * rendering/RenderSVGImage.h:
        (WebCore::RenderSVGImage::repaintRectInLocalCoordinates): Return the cached repaint rect.
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::svgAttributeChanged): Call updateFromElement() on changes to x, y, width or height.

2010-10-15  Martin Robinson  <mrobinson@igalia.com>

        Build fix for GTK+.

        * platform/network/soup/cache/webkit/soup-cache.h: Do not use PLATFORM(...) macro
        in a file that does not include config.h

2010-10-15  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add FindIndicatorWindow class
        https://bugs.webkit.org/show_bug.cgi?id=47731

        Export symbols needed by the FindIndicator in WebKit2.

        * WebCore.exp.in:

2010-10-15  Leandro Pereira  <leandro@profusion.mobi>

        [EFL] Unreviewed. Build fix.

        Add new files needed by the Soup network backend, and #ifdef a
        GTK+-port only include in soup-cache.h.

        * CMakeListsEfl.txt:
        * platform/network/soup/cache/webkit/soup-cache.h:

2010-10-14  Darin Adler  <darin@apple.com>

        Reviewed by Alexey Proskuryakov.

        Use more specific types for node pointers, especially when calling node insertion and removal functions
        https://bugs.webkit.org/show_bug.cgi?id=47702

        Refactoring. No new tests.

        While developing this patch I temporarily removed the node insertion and
        removal member functions from the Node class and fixed almost all call sites
        so they call it directly on the ContainerNode class, which will be important
        once we make the functions non-virtual.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkSelector):
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::insertBefore):
        (WebCore::ContainerNode::replaceChild):
        (WebCore::ContainerNode::appendChild):
        * dom/Document.cpp:
        (WebCore::Document::caretRangeFromPoint):
        * dom/DynamicNodeList.cpp:
        (WebCore::DynamicNodeList::itemWithName):
        * dom/Position.cpp:
        (WebCore::Position::previous):
        (WebCore::Position::next):
        * dom/Text.cpp:
        (WebCore::Text::replaceWholeText):
        * dom/TreeWalker.cpp:
        (WebCore::TreeWalker::firstChild):
        (WebCore::TreeWalker::lastChild):
        (WebCore::TreeWalker::previousNode):
        * dom/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::XMLDocumentParser):
        * editing/BreakBlockquoteCommand.cpp:
        (WebCore::BreakBlockquoteCommand::doApply):
        * editing/CompositeEditCommand.h:
        * editing/DeleteButtonController.cpp:
        (WebCore::isDeletableElement):
        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::outdentParagraph):
        * editing/InsertNodeBeforeCommand.cpp:
        (WebCore::InsertNodeBeforeCommand::doApply):
        * editing/JoinTextNodesCommand.cpp:
        (WebCore::JoinTextNodesCommand::doApply):
        (WebCore::JoinTextNodesCommand::doUnapply):
        * editing/MergeIdenticalElementsCommand.cpp:
        (WebCore::MergeIdenticalElementsCommand::doUnapply):
        * editing/RemoveNodeCommand.cpp:
        (WebCore::RemoveNodeCommand::doApply):
        (WebCore::RemoveNodeCommand::doUnapply):
        * editing/RemoveNodeCommand.h:
        * editing/SplitElementCommand.cpp:
        (WebCore::SplitElementCommand::executeApply):
        * editing/SplitTextNodeCommand.cpp:
        (WebCore::SplitTextNodeCommand::doApply):
        (WebCore::SplitTextNodeCommand::doReapply):
        * editing/TextIterator.cpp:
        (WebCore::parentCrossingShadowBoundaries):
        * editing/htmlediting.cpp:
        (WebCore::enclosingList):
        * editing/markup.cpp:
        (WebCore::serializeNodes):
        (WebCore::ancestorToRetainStructureAndAppearance):
        (WebCore::createMarkup):
        * html/HTMLAreaElement.cpp:
        (WebCore::HTMLAreaElement::updateFocusAppearance):
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::rendererIsNeeded):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::rendererIsNeeded):
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::attach):
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::insertedIntoTree):
        * html/HTMLLegendElement.cpp:
        (WebCore::HTMLLegendElement::associatedControl):
        * html/HTMLOptGroupElement.cpp:
        (WebCore::HTMLOptGroupElement::recalcSelectOptions):
        (WebCore::HTMLOptGroupElement::ownerSelectElement):
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::ownerSelectElement):
        * html/HTMLTableCellElement.cpp:
        (WebCore::HTMLTableCellElement::additionalAttributeStyleDecls):
        * html/HTMLTableColElement.cpp:
        (WebCore::HTMLTableColElement::additionalAttributeStyleDecls):
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::insertRow):
        * html/HTMLTableRowElement.cpp:
        (WebCore::HTMLTableRowElement::rowIndex):
        * html/HTMLTableSectionElement.cpp:
        (WebCore::HTMLTableSectionElement::additionalAttributeStyleDecls):
        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::getRangeAt):
        (WebCore::DOMSelection::containsNode):
        * rendering/RenderSVGGradientStop.cpp:
        (WebCore::RenderSVGGradientStop::gradientElement):
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::ownerSVGElement):
        (WebCore::SVGElement::viewportElement):
        * svg/SVGFELightElement.cpp:
        (WebCore::SVGFELightElement::svgAttributeChanged):
        (WebCore::SVGFELightElement::childrenChanged):
        * svg/SVGFEMergeNodeElement.cpp:
        (WebCore::SVGFEMergeNodeElement::svgAttributeChanged):
        * svg/SVGFontFaceFormatElement.cpp:
        (WebCore::SVGFontFaceFormatElement::childrenChanged):
        * svg/SVGFontFaceUriElement.cpp:
        (WebCore::SVGFontFaceUriElement::childrenChanged):
        * svg/SVGGlyphElement.cpp:
        (WebCore::SVGGlyphElement::invalidateGlyphCache):
        * svg/SVGHKernElement.cpp:
        (WebCore::SVGHKernElement::insertedIntoDocument):
        (WebCore::SVGHKernElement::removedFromDocument):
        * svg/SVGLocatable.cpp:
        (WebCore::SVGLocatable::nearestViewportElement):
        (WebCore::SVGLocatable::farthestViewportElement):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::updateContainerOffsets):
        * svg/SVGVKernElement.cpp:
        (WebCore::SVGVKernElement::insertedIntoDocument):
        (WebCore::SVGVKernElement::removedFromDocument):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::targetElement):
        * wml/WMLDoElement.cpp:
        (WebCore::WMLDoElement::insertedIntoDocument):
        (WebCore::WMLDoElement::removedFromDocument):
        * wml/WMLNoopElement.cpp:
        (WebCore::WMLNoopElement::insertedIntoDocument):
        * wml/WMLOptionElement.cpp:
        (WebCore::ownerSelectElement):
        * wml/WMLPostfieldElement.cpp:
        (WebCore::WMLPostfieldElement::insertedIntoDocument):
        (WebCore::WMLPostfieldElement::removedFromDocument):
        * wml/WMLSetvarElement.cpp:
        (WebCore::WMLSetvarElement::insertedIntoDocument):
        (WebCore::WMLSetvarElement::removedFromDocument):
        * wml/WMLTaskElement.cpp:
        (WebCore::WMLTaskElement::insertedIntoDocument):
        (WebCore::WMLTaskElement::removedFromDocument):
        * wml/WMLTimerElement.cpp:
        (WebCore::WMLTimerElement::insertedIntoDocument):
        (WebCore::WMLTimerElement::removedFromDocument):
        * xml/XPathStep.cpp:
        (WebCore::XPath::Step::nodesInAxis):
        Use ContainerNode* for the result of the parentNode function now that
        it returns a ContainerNode*. In the past it used to return just Node*.

        * dom/ContainerNode.h: Added toContainerNode.

        * dom/Element.h: Use ContainerNode*. Added toElement.

        * dom/Element.cpp:
        (WebCore::Element::deprecatedCreateContextualFragment): Explcitly
        cast to HTMLElement* in the case that handles <html> and <body>
        elements.
        (WebCore::Element::baseURI): Use ContainerNode*.

        * dom/Node.cpp:
        (WebCore::Node::markAncestorsWithChildNeedsStyleRecalc): Use ContainerNode*.
        (WebCore::Node::isDescendantOf): Ditto.
        (WebCore::Node::createRendererIfNeeded): Ditto.
        (WebCore::Node::setTextContent): Use already-typecast pointer in a call to
        appendChild.
        (WebCore::Node::ancestorElement): Use ContainerNode*.

        * dom/Range.cpp:
        (WebCore::Range::compareNode): Use ContainerNode*.
        (WebCore::Range::intersectsNode): Ditto.
        (WebCore::Range::processContents): Cast to ContainerNode* in a couple cases
        where we previously checked that the node in question has a child. Any node
        that returns a non-zero value for firstChild is a ContainerNode.
        (WebCore::Range::checkNodeBA): Ditto.
        (WebCore::Range::selectNode): Ditto.
        (WebCore::Range::surroundContents): Ditto.

        * dom/XMLDocumentParser.cpp:
        (WebCore::XMLDocumentParser::insertErrorMessageBlock): Rewrote code to use
        more specific types, document instead of doc, and paragraph instead of par.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::removeStyleFromRunBeforeApplyingStyle):
        Use ContainerNode*.
        (WebCore::ApplyStyleCommand::replaceWithSpanOrRemoveIfWithoutAttributes):
        Use replaceElementWithSpanPreservingChildrenAndAttributes; the old function
        took a Node argument and had Node in its name.

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::removeNodeAndPruneAncestors): Use ContainerNode.
        (WebCore::CompositeEditCommand::replaceElementWithSpanPreservingChildrenAndAttributes):
        Renamed and changed to take HTMLElement. Also use ContainerNode.
        (WebCore::CompositeEditCommand::prune): Ditto.
        (WebCore::CompositeEditCommand::breakOutOfEmptyListItem): Ditto.
        (WebCore::CompositeEditCommand::breakOutOfEmptyMailBlockquotedParagraph): Ditto.

        * editing/ReplaceNodeWithSpanCommand.cpp:
        (WebCore::ReplaceNodeWithSpanCommand::ReplaceNodeWithSpanCommand): Take an
        HTMLElement instead of a Node. Call it m_elementToReplace instead of m_node.
        (WebCore::swapInNodePreservingAttributesAndChildren): Take HTMLElement.
        (WebCore::ReplaceNodeWithSpanCommand::doApply): Updated for name changes.
        (WebCore::ReplaceNodeWithSpanCommand::doUnapply): Ditto.
        * editing/ReplaceNodeWithSpanCommand.h: Ditto.

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplacementFragment::ReplacementFragment): Use StyledElement for result
        of insertFragmentForTestRendering since that's what it returns.
        (WebCore::ReplacementFragment::removeNode): Use ContainerNode.
        (WebCore::ReplacementFragment::insertNodeBefore): Ditto.
        (WebCore::ReplacementFragment::insertFragmentForTestRendering): Return StyledElement.
        Use HTMLElement for body.
        (WebCore::ReplacementFragment::restoreTestRenderingNodesToFragment): Take
        StyledElement.
        (WebCore::ReplaceSelectionCommand::handleStyleSpans): Use ContainerNode.
        (WebCore::ReplaceSelectionCommand::copyStyleToChildren): Use HTMLElement for
        the cloned span, since the clone will be a sspan too.
        (WebCore::ReplaceSelectionCommand::insertAsListItems): Use ContainerNode since
        the list item has a child, and that proves it is a ContainerNode.

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::selectFrameElementInParentIfFullySelected):
        Use ContainerNode and also removed an unnneded local variable.

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::setOuterText): Use ContainerNode.
        (WebCore::HTMLElement::insertAdjacent): Use ContainerNode and also use && to make
        the logic a little simpler.
        (WebCore::contextElementForInsertion): Use ContainerNode.
        (WebCore::HTMLElement::findFormAncestor): Ditto.

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::removeNode): Use ContainerNode.
        (WebCore::InspectorDOMAgent::changeTagName): Ditto.
        (WebCore::InspectorDOMAgent::setOuterHTML): Ditto.
        (WebCore::InspectorDOMAgent::innerParentNode): Use isDocumentNode instead of
        nodeType. We should almost never use nodeType inside the engine.
        (WebCore::InspectorDOMAgent::didInsertDOMNode): Use ContainerNode.
        (WebCore::InspectorDOMAgent::didRemoveDOMNode): Ditto.

        * wml/WMLOptGroupElement.cpp: Removed unneeded overrides of insertBefore,
        replaceChild, removeChild, appendChild, and removeChildren functions.
        Ths already overrides childrenChanged, that is called by all of the above,
        and it does the same thing these functions did.
        (WebCore::ownerSelectElement): Use ContainerNode.
        * wml/WMLOptGroupElement.h: Ditto.

2010-10-15  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        Crash in WebCore::ApplyStyleCommand::applyBlockStyle
        https://bugs.webkit.org/show_bug.cgi?id=47699

        The crash was caused by applyBlockStyle's invalidly assuming that visibleStart and visibleEnd always exist.
        Added an early exit to the function when either visibleStart or visibleEnd is null or orphaned.

        Test: editing/style/block-style-progress-crash.html

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyBlockStyle):

2010-10-13  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add a FindIndicator class
        https://bugs.webkit.org/show_bug.cgi?id=47635

        Make Gradient.h and Generator.h private headers; they're used by WebKit2.

        * WebCore.xcodeproj/project.pbxproj:

2010-10-15  Sergio Villar Senin  <svillar@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [Soup] Should not ignore body for redirection responses
        https://bugs.webkit.org/show_bug.cgi?id=29299

        Body is now provided to WebKitGtk+ in some redirections (like 302)
        because it could be used by servers to perform clunky redirections
        for example using http-equiv=REFRESH

        Test: http/tests/navigation/redirect302-metaredirect.html

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::gotHeadersCallback):
        (WebCore::finishedCallback):

2010-10-15  Sergio Villar Senin  <svillar@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Fix introspection support
        https://bugs.webkit.org/show_bug.cgi?id=47723

        WebKitSoupCacheType was incorrectly registered twice. Renamed to
        WebKitSoupCacheTypeType for the enumerated type.

        * platform/network/soup/cache/webkit/soup-cache.c:
        (webkit_soup_cache_type_get_type):

2010-10-15  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: extract consoleMessages related stuff from populateScriptObjects into separate function.

        This is a part of Inspector protocol sanitization activity.
        We want to populate console messages only if it is required by frontend.

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

        * inspector/Inspector.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::setConsoleMessagesEnabled):
        (WebCore::InspectorController::addConsoleMessage):
        (WebCore::InspectorController::disconnectFrontend):
        (WebCore::InspectorController::populateScriptObjects):
        * inspector/InspectorController.h:
        * inspector/InspectorState.cpp:
        (WebCore::InspectorState::InspectorState):
        * inspector/InspectorState.h:
        * inspector/front-end/inspector.js:
        (WebInspector.doLoadedDone):

2010-10-15  Ryuan Choi  <ryuan.choi@samsung.com>

        Reviewed by Nikolas Zimmermann.

        [EFL] REGRESSION(69798) UCHAR can't be converted to String.
        https://bugs.webkit.org/show_bug.cgi?id=47698

        Create String value using String(const char*, 1) instead of operator[].

        No tests. No functionality changed.

        * platform/efl/PlatformKeyboardEventEfl.cpp:
        (WebCore::createWindowsKeyMap):

2010-10-15  Sergio Villar Senin  <svillar@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Do a stricter check for invalid base64 dataURLs
        https://bugs.webkit.org/show_bug.cgi?id=47717

        Restore the strict base64 decoding we added in
        https://bugs.webkit.org/show_bug.cgi?id=44261 and then rolled back
        in https://bugs.webkit.org/show_bug.cgi?id=47666 due to a failing
        test. The actual issue was that we were not finishing the load of
        the resource gracefully when an error happened.

        Loading invalid base64-encoded data:// URLs are now handled
        properly.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::parseDataUrl):
        * platform/network/soup/cache/soup-request-data.c:
        (webkit_soup_request_data_send):

2010-10-15  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        compile fail with gtk >= 2.22
        https://bugs.webkit.org/show_bug.cgi?id=47483

        * platform/graphics/gtk/FontGtk.cpp: Removed the shrink operation,
        it was added long time ago and currently it is not adding any real
        area to the clip vertically, actually the gtk3 shrink version did
        not work.
        (WebCore::Font::drawComplexText):
        * platform/gtk/gtk2drawing.c: Undef the deprecation flags, this
        file is full of gtk2 stuff, and it does not seem interesting to
        upgrade because we are already creating a new version of the file
        for gtk3.

2010-10-14  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: inspector settings/properties/states management
        should be extracted into separate class.

        We have a lot of flags/values in InspectorController.
        Some flags are persisting into profile.
        Others are part of inspector state for frontend.
        All these flags should keep their values after navigation.
        It'd be better to extract these flags/values into separate
        class which will care about theirs lifetime.

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

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::inspectorStartsAttached):
        (WebCore::InspectorController::setInspectorStartsAttached):
        (WebCore::InspectorController::setInspectorAttachedHeight):
        (WebCore::InspectorController::inspectorAttachedHeight):
        (WebCore::InspectorController::searchingForNodeInPage):
        (WebCore::InspectorController::resourceTrackingEnabled):
        (WebCore::InspectorController::saveApplicationSettings):
        (WebCore::InspectorController::getInspectorState):
        (WebCore::InspectorController::restoreInspectorStateFromCookie):
        (WebCore::InspectorController::getSettings):
        (WebCore::InspectorController::storeLastActivePanel):
        (WebCore::InspectorController::mouseDidMoveOverElement):
        (WebCore::InspectorController::handleMousePress):
        (WebCore::InspectorController::setSearchingForNode):
        (WebCore::InspectorController::setMonitoringXHREnabled):
        (WebCore::InspectorController::showPanel):
        (WebCore::InspectorController::disconnectFrontend):
        (WebCore::InspectorController::populateScriptObjects):
        (WebCore::InspectorController::restoreDebugger):
        (WebCore::InspectorController::restoreProfiler):
        (WebCore::InspectorController::getTrackedResource):
        (WebCore::InspectorController::didLoadResourceFromMemoryCache):
        (WebCore::InspectorController::identifierForInitialRequest):
        (WebCore::InspectorController::resourceRetrievedByXMLHttpRequest):
        (WebCore::InspectorController::scriptImported):
        (WebCore::InspectorController::setResourceTrackingEnabled):
        (WebCore::InspectorController::ensureSettingsLoaded):
        (WebCore::InspectorController::startTimelineProfiler):
        (WebCore::InspectorController::stopTimelineProfiler):
        (WebCore::InspectorController::enableProfiler):
        (WebCore::InspectorController::disableProfiler):
        (WebCore::InspectorController::enableDebuggerFromFrontend):
        (WebCore::InspectorController::disableDebugger):
        (WebCore::InspectorController::loadBreakpoints):
        (WebCore::InspectorController::saveBreakpoints):
        * inspector/InspectorController.h:
        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::changeAttachedWindowHeight):
        (WebCore::InspectorFrontendClientLocal::restoreAttachedWindowHeight):
        * inspector/InspectorState.cpp: Added.
        (WebCore::InspectorState::InspectorState):
        (WebCore::InspectorState::restoreFromInspectorCookie):
        (WebCore::InspectorState::generateStateObjectForFrontend):
        (WebCore::InspectorState::loadFromSettings):
        (WebCore::InspectorState::updateCookie):
        (WebCore::InspectorState::setValue):
        (WebCore::InspectorState::getBoolean):
        (WebCore::InspectorState::getString):
        (WebCore::InspectorState::getLong):
        (WebCore::InspectorState::registerBoolean):
        (WebCore::InspectorState::registerString):
        (WebCore::InspectorState::registerLong):
        (WebCore::InspectorState::Property::create):
        * inspector/InspectorState.h: Added.
        (WebCore::InspectorState::setBoolean):
        (WebCore::InspectorState::setString):
        (WebCore::InspectorState::setLong):

2010-10-14  Jia Pu  <jpu@apple.com>

        Reviewed by Adele Peterson.

        REGRESSION (r69548): Autocorrections are applied even after typing further characters in the word
        https://bugs.webkit.org/show_bug.cgi?id=47689
        <rdar://problem/8552250>

        The test requires using setTimeout(). So we put it in manual-tests.

        * editing/Editor.cpp:
        (WebCore::Editor::markMisspellingsAfterTypingToPosition): Relpace release() with clear().
        (WebCore::Editor::startCorrectionPanelTimer): Release previously set correction range before
          start timer for next autocorrection check.
        * manual-tests/autocorrection: Added.
        * manual-tests/autocorrection/autocorrection-cancelled-by-typing-1.html: Added.

2010-10-14  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Tony Chang and Darin Adler.

        execCommand FormatBlock creates lots of blockquotes
        https://bugs.webkit.org/show_bug.cgi?id=19795

        The bug was caused by WebKit's not reusing the block node added by previous iteration
        and its inserting block node at wrong places.

        Fixed the bug by rewriting FormatBlockCommand::formatRange.  New code resembles that of
        IndentOutdentCommand::indentIntoBlockquote.  The difference between two is that formatRange
        avoids the existing block elements when replacing blocks and it also adds a placeholder
        when removing the existing block caused paragraphs to collapse.

        Also fixed a bug in moveParagraphWithClones where erroneous br is added to the start of
        the block element to which the paragraph is moved if the block element is the start of a paragraph
        and not the end of a paragraph.

        Tests: editing/execCommand/format-block-multiple-paragraphs.html
               editing/execCommand/format-block-table.html

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraphWithClones): No longer adds erroneous br.
        * editing/EditorCommand.cpp:
        (WebCore::executeFormatBlock):
        * editing/FormatBlockCommand.cpp:
        (WebCore::FormatBlockCommand::formatRange): Rewritten; see above.
        (WebCore::FormatBlockCommand::isElementToApplyInFormatBlockCommand): Renamed from validBlockElement
        and moved from htmlediting.cpp.
        (WebCore::enclosingBlockToSplitTreeTo): Added.
        * editing/FormatBlockCommand.h:
        * editing/VisiblePosition.cpp:
        (WebCore::enclosingBlockFlowElement): Changed the return type to Element*
        * editing/VisiblePosition.h:

2010-10-14  Justin Schuh  <jschuh@chromium.org>

        Reviewed by James Robinson.

        Crash in HTMLTextFormControlElement::selection()
        https://bugs.webkit.org/show_bug.cgi?id=47522

        Patch by Ryosuke Niwa  <rniwa@webkit.org>

        The bug was caused by our triggering layout inside RenderTextControl::selection.
        Fixed it by changing the return type of RenderTextControl::selection to PassRefPtr<Range> from VisibleSelection.

        Test: fast/forms/render-text-crash.html

        * editing/Editor.cpp:
        (WebCore::Editor::selectionForCommand): Calls HTMLTextFormControlElement::selection.
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::selection): Calls RenderTextControl::selection.
        * html/HTMLFormControlElement.h:
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::selection): Changed the return type.
        * rendering/RenderTextControl.h:

2010-10-14  James Robinson  <jamesr@chromium.org>

        Reviewed by Simon Fraser.

        SelectElement should check if its renderer exists after calling Element::focus()
        https://bugs.webkit.org/show_bug.cgi?id=47696

        Adds null checks for element->renderer() after calling element->focus(), since focus()
        can dispatch an event and run arbitrary javascript that may cause the select element
        to lose its renderer.

        Test: fast/forms/select-listbox-focus-displaynone.html

        * dom/SelectElement.cpp:
        (WebCore::SelectElement::menuListDefaultEventHandler):
        (WebCore::SelectElement::listBoxDefaultEventHandler):

2010-10-14  Beth Dakin  <bdakin@apple.com>

        Reviewed by Dave Hyatt.

        This patch lays the groundwork for 
        https://bugs.webkit.org/show_bug.cgi?id=47514 CSS transforms should 
        affect scrolling
        by adding topmostPosition().

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::topmostPosition):
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::topmostPosition):
        * rendering/RenderBox.h:
        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::topmostPosition):
        * rendering/RenderMedia.h:
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::topmostPosition):
        * rendering/RenderTableSection.h:

2010-10-14  Sergio Villar Senin  <svillar@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] fix compilation warnings in imported libsoup code
        https://bugs.webkit.org/show_bug.cgi?id=47674

        Fixed some warnings caused by comparisons between signed and
        unsigned integer expressions

        * platform/network/soup/cache/soup-directory-input-stream.c:
        (webkit_soup_directory_input_stream_read):
        * platform/network/soup/cache/soup-request-data.c:
        (webkit_soup_request_data_send):
        * platform/network/soup/cache/soup-request-file.c:
        (webkit_soup_request_file_ensure_file):
        * platform/network/soup/cache/webkit/soup-cache.c:
        (webkit_soup_cache_entry_is_fresh_enough):
        (webkit_soup_cache_has_response):

2010-10-14  Andreas Kling  <kling@webkit.org>

        Unreviewed buildfix, RetainPtr is a mac thing..

        * platform/network/soup/ProxyServerSoup.cpp:

2010-10-08  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Form controls do not respect GTK+ font size
        https://bugs.webkit.org/show_bug.cgi?id=47134

        Have form controls use the font specified in GtkSettings. This font is
        the default control font in GTK+ applications and Firefox. We need to
        pass the string through Pango to get a valid font name and size.

        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::getScreenDPI): A helper function which returns
        the DPI of the default screen or 96 as a fallback.
        (WebCore::RenderThemeGtk::systemFont): Calculate the system font
        by looking at the GtkSettings value and pushing it through Pango
        to get the font family and font size.

2010-10-14  Andreas Kling  <kling@webkit.org>

        Soup buildfix for r69808: add ProxyServer stub.

        * GNUmakefile.am:
        * platform/network/soup/ProxyServerSoup.cpp: Added.
        (WebCore::proxyServersForURL):

2010-10-14  Andreas Kling  <kling@webkit.org>

        Fix GTK+ build after r69808.

        * GNUmakefile.am:
        * platform/network/curl/ProxyServerCurl.cpp:
        (WebCore::proxyServersForURL):

2010-10-14  Simon Fraser  <simon.fraser@apple.com>

        Another build fix. Export FrameLoader::networkingContext()

        * WebCore.exp.in:

2010-10-14  Simon Fraser  <simon.fraser@apple.com>

        Fix the build after r69808.
        
        * WebCore.xcodeproj/project.pbxproj:
        * platform/network/cf/ProxyServerCFNet.cpp:
        (WebCore::proxyServersForURL):

2010-10-14  Gavin Barraclough  <barraclough@apple.com>

        Windows build fix following r69806.

        * platform/win/ClipboardUtilitiesWin.cpp:
        (WebCore::markupToCFHTML):

2010-10-14  Dawit Alemayehu  <adawit@kde.org>

        Reviewed by Andreas Kling

        Implemented NPN_GetValueForURL and NPN_SetValueForURL and NPN_GetAuthenticationInfo.
        https://bugs.webkit.org/show_bug.cgi?id=34539

        These missing NPN functions cause Java applets to crash in ports such
        as QtWebkit that rely on webkit for Java applet support.

        * plugins/PluginDebug.cpp:
        (WebCore::prettyNameForNPNURLVariable):
        * plugins/PluginDebug.h:
        * plugins/PluginPackage.cpp:
        (WebCore::PluginPackage::initializeBrowserFuncs):
        * plugins/PluginView.cpp:
        (WebCore::PluginView::getValueForURL):
        (WebCore::PluginView::setValueForURL):
        (WebCore::PluginView::getAuthenticationInfo):
        * plugins/PluginView.h:
        * plugins/npapi.cpp:
        (NPN_GetValueForURL):
        (NPN_SetValueForURL):
        (NPN_GetAuthenticationInfo):
        * platform/network/ProxyServer.h:
        * platform/network/cf/ProxyServerCFNet.cpp:
        (WebCore::proxyServersForURL):
        * platform/network/qt/ProxyServerQt.cpp:
        (WebCore::proxyServersForURL):
 
2010-10-14  Gavin Barraclough  <barraclough@apple.com>

        Windows build fix following r69806.

        * platform/win/ClipboardUtilitiesWin.cpp:
        (WebCore::markupToCFHTML):

2010-10-14  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        Cache link status at linkProgram and use it in useProgram instead of querying GPU
        https://bugs.webkit.org/show_bug.cgi?id=47685

        * html/canvas/WebGLProgram.cpp: Always cache link status at linkStatus and use it upon query.
        (WebCore::WebGLProgram::WebGLProgram):
        * html/canvas/WebGLProgram.h: Ditto.
        (WebCore::WebGLProgram::getLinkStatus):
        (WebCore::WebGLProgram::setLinkStatus):
        * html/canvas/WebGLRenderingContext.cpp: Ditto.
        (WebCore::WebGLRenderingContext::getProgramParameter):
        (WebCore::WebGLRenderingContext::linkProgram):
        (WebCore::WebGLRenderingContext::useProgram):

2010-10-14  Justin Schuh  <jschuh@chromium.org>

        Reviewed by James Robinson.

        Style fix for r69735
        https://bugs.webkit.org/show_bug.cgi?id=47684

        No logic change. Existing tests apply.

        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::alignBoxesInBlockDirection):

2010-10-14  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: encapsulate ScriptState into ConsoleMessage instead of passing it as additional parameter
        https://bugs.webkit.org/show_bug.cgi?id=47675

        No new tests. This refactoring is covered by existing inspector tests.

        * bindings/js/JSConsoleCustom.cpp:
        * bindings/js/ScriptCallFrame.cpp:
        * bindings/js/ScriptCallFrame.h:
        (WebCore::ScriptCallFrame::functionName):
        (WebCore::ScriptCallFrame::sourceURL):
        (WebCore::ScriptCallFrame::lineNumber):
        (WebCore::ScriptCallFrame::argumentCount):
        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::isEqual):
        * inspector/ConsoleMessage.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::addMessageToConsole):
        (WebCore::InspectorController::addConsoleMessage):
        (WebCore::InspectorController::startGroup):
        (WebCore::InspectorController::endGroup):
        * inspector/InspectorController.h:

2010-10-14  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Gavin Barraclough.

        Replace lots of String::format() usages by StringConcatenate
        https://bugs.webkit.org/show_bug.cgi?id=47664

        * ForwardingHeaders/wtf/text/StringConcatenate.h: Added.
        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::crossDomainAccessErrorMessage):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::reportUnsafeAccessTo):
        * dom/ExceptionBase.cpp:
        (WebCore::ExceptionBase::ExceptionBase):
        * dom/XMLDocumentParser.cpp:
        (WebCore::XMLDocumentParser::handleError):
        * history/PageCache.cpp:
        (WebCore::logCanCacheFrameDecision):
        * html/FTPDirectoryDocument.cpp:
        (WebCore::processFileDateString):
        * inspector/CodeGeneratorInspector.pm:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::didReceiveResponse):
        (WebCore::InspectorController::count):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::createBreakpointId):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::formatBreakpointId):
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::addProfileFinishedMessageToConsole):
        (WebCore::InspectorProfilerAgent::addStartProfilingMessageToConsole):
        (WebCore::InspectorProfilerAgent::getCurrentUserInitiatedProfileName):
        (WebCore::InspectorProfilerAgent::takeHeapSnapshot):
        * loader/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::printAccessDeniedMessage):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkIfDisplayInsecureContent):
        (WebCore::FrameLoader::checkIfRunInsecureContent):
        (WebCore::FrameLoader::shouldAllowNavigation):
        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::createFromSelection):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::postMessageTimerFired):
        * page/PrintContext.cpp:
        (WebCore::PrintContext::pageProperty):
        (WebCore::PrintContext::pageSizeAndMarginsInPixels):
        * page/XSSAuditor.cpp:
        (WebCore::XSSAuditor::canLoadObject):
        * platform/efl/PlatformKeyboardEventEfl.cpp:
        (WebCore::createKeyMap):
        (WebCore::createWindowsKeyMap):
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::animationNameForTransition):
        * platform/graphics/brew/ImageBrew.cpp:
        (WebCore::Image::loadPlatformResource):
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::toDataURL):
        * platform/graphics/efl/ImageEfl.cpp:
        (WebCore::loadResourceSharedBuffer):
        * platform/graphics/gtk/ImageBufferGtk.cpp:
        (WebCore::ImageBuffer::toDataURL):
        * platform/graphics/haiku/ImageBufferHaiku.cpp:
        (WebCore::ImageBuffer::toDataURL):
        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::animationIdentifier):
        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::ImageBuffer::toDataURL):
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageBuffer::toDataURL):
        * platform/graphics/win/WebLayer.cpp:
        (WebCore::WebLayer::drawInContext):
        * platform/network/CredentialStorage.cpp:
        (WebCore::originStringFromURL):
        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::setSynchronous):
        * platform/text/wince/TextCodecWinCE.cpp:
        (WebCore::LanguageManager::LanguageManager):
        * platform/win/ClipboardUtilitiesWin.cpp:
        (WebCore::markupToCFHTML):
        * platform/win/Language.cpp:
        (WebCore::defaultLanguage):
        * plugins/PluginStream.cpp:
        (WebCore::PluginStream::startStream):
        * svg/SVGUseElement.cpp:
        (WebCore::dumpInstanceTree):
        * websockets/WebSocket.cpp:
        (WebCore::WebSocket::connect):
        * websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::appendToBuffer):
        * websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::readServerHandshake):

2010-10-14  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Small cleanup in PluginViewGtk
        https://bugs.webkit.org/show_bug.cgi?id=47588

        Remove some dead code and use PlatformRefPtr for cairo surfaces.

        No new tests, only refactoring.

        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::paint):

2010-10-14  Dawit Alemayehu  <adawit@kde.org>

        Reviewed by Andreas Kling.

        Fix compile error when bulding webkit's Qt port using the "--v8" option.
        https://bugs.webkit.org/show_bug.cgi?id=47455

        * platform/qt/PlatformBridge.h:

2010-10-01  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Holger Freyther.

        [GTK] REGRESSION: FreeType backend does not respect XSettings font settings after r68558
        https://bugs.webkit.org/show_bug.cgi?id=47033

        Fix logic that merges XSettings defaults and FontConfig settings. If
        FontConfig or XSettings specifies a subpixel order, we force subpixel
        anti-aliasing on. If anti-aliasing is turned on explicitly, only
        override the setting if it was previously off, otherwise we ignore
        the user's preference for subpixel or gray antialiasing.

        Test: platform/gtk/fonts/xsettings_antialias_settings.html

        * platform/graphics/cairo/FontPlatformDataFreeType.cpp:
        (WebCore::setCairoFontOptionsFromFontConfigPattern): Fix merging of XSettings
        and FontConfig anti-aliasing settings.
        (WebCore::getDefaultFontOptions): Added this helper.
        (WebCore::FontPlatformData::FontPlatformData): Use the getDefaultFontOptions helper.

2010-10-14  Jian Li  <jianli@chromium.org>

        Reviewed by David Levin.

        Support typed arrays in workers
        https://bugs.webkit.org/show_bug.cgi?id=47616

        To support typed arrays in workers, we need to expose constructors in
        WorkerContext and add NoStaticTables attribute.

        I also add File API feature guard to the constructors defined in
        DOMWindow.

        * bindings/js/JSDOMWindowCustom.cpp: Add File API feature guard to the
        constructors defined in DOMWindow.
        * html/canvas/ArrayBuffer.idl: Add NoStaticTables attribute.
        * html/canvas/ArrayBufferView.idl: Add NoStaticTables attribute.
        * html/canvas/Float32Array.idl: Add NoStaticTables attribute.
        * html/canvas/Int16Array.idl: Add NoStaticTables attribute.
        * html/canvas/Int32Array.idl: Add NoStaticTables attribute.
        * html/canvas/Int8Array.idl: Add NoStaticTables attribute.
        * html/canvas/Uint16Array.idl: Add NoStaticTables attribute.
        * html/canvas/Uint32Array.idl: Add NoStaticTables attribute.
        * html/canvas/Uint8Array.idl: Add NoStaticTables attribute.
        * page/DOMWindow.idl: Add File API feature guard to the constructors
        defined in DOMWindow.
        * workers/WorkerContext.idl: Expose type array constructors.

2010-10-14  Andreas Kling  <kling@webkit.org>

        Reviewed by Ariya Hidayat.

        [Qt] Avoid creating empty transparency layers in ImageBuffer::clip()

        We were creating empty layers for sub-1 height/width clips due to
        using IntRect(FloatRect) instead of enclosingIntRect().
        This lead to a bunch of QPainter warnings on the console since you
        can't draw on an empty QPixmap.

        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::ImageBuffer::clip):

2010-10-14  Holger Hans Peter Freyther  <holger@moiji-mobile.com>

        Reviewed by Martin Robinson.

        [cairo] Typo in determining fixed width fonts
        https://bugs.webkit.org/show_bug.cgi?id=47470

        It must be a single ampersand otherwise the
        && FT_FACE_FLAG_FIXED_WIDTH will always be true.

        * platform/graphics/cairo/FontPlatformDataFreeType.cpp:
        (WebCore::FontPlatformData::FontPlatformData):

2010-10-14  Sergio Villar Senin  <svillar@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Failing test LayoutTests/editing/undo/orphaned-selection-crash-bug32823-2.html
        https://bugs.webkit.org/show_bug.cgi?id=47666

        Do a less strict decoding of base64 data url's as it was done
        before. The actual problem is most likely
        https://bugs.webkit.org/show_bug.cgi?id=47661 tough.

        * platform/network/soup/cache/soup-request-data.c:
        (webkit_soup_request_data_send):

2010-10-14  Renata Hodovan  <reni@inf.u-szeged.hu>

        Reviewed by Andreas Kling.

        SVGFEConvolveMatrixElement doesn't support dynamic invalidation, when attributes change.
        https://bugs.webkit.org/show_bug.cgi?id=47660

        The dynamic changes are captured by the svgAttributeChange function, and invalidate the filter primitive if necessary.
        The patch also implements the simple setOrder and setKernelUnitLength methods.

        Tests: svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-bias-attr.html
               svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-divisor-attr.html
               svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-edgeMode-attr.html
               svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-in-attr.html
               svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-kernelMatrix-attr.html
               svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-kernelUnitLength-attr.html
               svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-order-attr.html
               svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-preserveAlpha-attr.html
               svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-targetX-attr.html
               svg/dynamic-updates/SVGFEConvolveMatrixElement-dom-targetY-attr.html

        * svg/SVGFEConvolveMatrixElement.cpp:
        (WebCore::SVGFEConvolveMatrixElement::setOrder):
        (WebCore::SVGFEConvolveMatrixElement::setKernelUnitLength):
        (WebCore::SVGFEConvolveMatrixElement::svgAttributeChanged):
        * svg/SVGFEConvolveMatrixElement.h:

2010-10-14  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Text breaking is slow: enable ICU as an opt-in
        https://bugs.webkit.org/show_bug.cgi?id=40332

        Added a config flag that enables ICU as an opt-in instead of the Qt specific code.

        No new tests, this should be covered by existing tests.

        * WebCore.pro:
        * platform/text/qt/TextBreakIteratorQt.cpp:
        (WebCore::currentTextBreakLocaleID):

2010-10-14  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Texmap] [Qt] Texture mapper initial implementation
        https://bugs.webkit.org/show_bug.cgi?id=47070

        This patch enables compilation of TextureMapper with Media. It has an initial non-working implementation of a video layer, to be integrated
        once other parts of TextureMapper are fully working.

        No new tests: this is new implementation that's not enabled yet.

        * platform/graphics/qt/MediaPlayerPrivateQt.cpp:
        (WebCore::TextureMapperVideoLayerQt::TextureMapperVideoLayerQt):
        (WebCore::TextureMapperVideoLayerQt::setPlatformLayerClient):
        (WebCore::TextureMapperVideoLayerQt::paint):
        (WebCore::TextureMapperVideoLayerQt::size):
        (WebCore::MediaPlayerPrivateQt::acceleratedRenderingStateChanged):
        (WebCore::MediaPlayerPrivateQt::platformLayer):
        * platform/graphics/qt/MediaPlayerPrivateQt.h:
        (WebCore::MediaPlayerPrivateQt::supportsAcceleratedRendering):
        (WebCore::MediaPlayerPrivateQt::acceleratedRenderingStateChanged):
        (WebCore::MediaPlayerPrivateQt::platformLayer):

2010-10-14  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        Fixed crashes in the GTK 64bits bot, we have to use NULL instead
        of 0 when calling these glib APIs, 0 is compiled as a char and in
        64bits systems it is not correct.

        * platform/network/soup/cache/soup-requester.c:
        (webkit_soup_requester_new):
        (webkit_soup_requester_request_uri):

2010-10-14  Daniel Bates  <dbates@rim.com>

        Attempt to fix the Qt and GTK builds based on the build bot results from <http://webkit.sed.hu>.

        * rendering/RenderInline.cpp: Include header "RenderTheme.h"

2010-10-14  Daniel Bates  <dbates@rim.com>

        Reviewed by Darin Adler.

        Only draw focus ring in RenderInline and RenderImage if the theme
        is not able to draw a focus ring
        https://bugs.webkit.org/show_bug.cgi?id=47632

        Fixes an issue where RenderInline::paintOutline() and RenderImage::paintFocusRings()
        would draw a focus ring regardless of whether the port-specific theme is able to
        draw a focus ring. Instead, these methods should only draw a focus ring if the
        theme is unable to draw a focus ring.

        Also, extracted common focus ring drawing code from RenderObject::paintOutline()
        and RenderInline::paintOutline() into RenderObject::paintFocusRing().

        Tests: fast/forms/textfield-focus-ring.html
               fast/images/imagemap-focus-ring.html
               fast/inline/inline-focus-ring.html

        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintFocusRings): Modified to only draw a focus ring if the
        the theme does not draw one.
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::paintOutline): Modified to call RenderObject::paintFocusRing().
        * rendering/RenderObject.cpp:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::paintFocusRing): Added.
        (WebCore::RenderObject::paintOutline): Modified to call RenderObject::paintFocusRing().
        * rendering/RenderObject.h:

2010-10-14  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Move load and dom content event timers into InspectorController.
        https://bugs.webkit.org/show_bug.cgi?id=47668

        * inspector/CodeGeneratorInspector.pm:
        * inspector/Inspector.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::populateScriptObjects):
        (WebCore::InspectorController::mainResourceFiredDOMContentEvent):
        (WebCore::InspectorController::mainResourceFiredLoadEvent):
        * inspector/InspectorController.h:
        * inspector/InspectorResource.cpp:
        (WebCore::InspectorResource::InspectorResource):
        (WebCore::InspectorResource::updateScriptObject):
        * inspector/InspectorResource.h:
        * inspector/front-end/inspector.js:
        (WebInspector.updateResource):
        (WebInspector.domContentEventFired):
        (WebInspector.loadEventFired):

2010-10-14  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed. Re-landing r69757.

2010-10-14  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: implement pausing on window events and timeouts
        https://bugs.webkit.org/show_bug.cgi?id=47542

        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::didInstallTimerImpl):
        (WebCore::InspectorInstrumentation::didRemoveTimerImpl):
        (WebCore::InspectorInstrumentation::willDispatchEventImpl):
        (WebCore::InspectorInstrumentation::didDispatchEventImpl):
        (WebCore::InspectorInstrumentation::willDispatchEventOnWindowImpl):
        (WebCore::InspectorInstrumentation::didDispatchEventOnWindowImpl):
        (WebCore::InspectorInstrumentation::willFireTimerImpl):
        (WebCore::InspectorInstrumentation::didFireTimerImpl):
        (WebCore::InspectorInstrumentation::pauseOnNativeEventIfNeeded):
        (WebCore::InspectorInstrumentation::cancelPauseOnNativeEvent):
        * inspector/InspectorInstrumentation.h:
        * inspector/front-end/BreakpointManager.js:
        (WebInspector.EventListenerBreakpoint.prototype.populateLabelElement):
        (WebInspector.EventListenerBreakpoint.prototype.populateStatusMessageElement):
        (WebInspector.EventListenerBreakpoint.prototype._condition):
        (WebInspector.EventListenerBreakpoint.prototype._uiEventName):
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._populate):

2010-10-14  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Andreas Kling.

        Canvas: "currentColor" should inherit the canvas element's color
        https://bugs.webkit.org/show_bug.cgi?id=40273

        Warning fix after r69755. Missing default cases added.

        * html/canvas/CanvasStyle.cpp:
        (WebCore::parseColorOrCurrentColor):
        (WebCore::CanvasStyle::createFromString):
        (WebCore::CanvasStyle::createFromStringWithOverrideAlpha):

2010-10-14  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed. Rolling out r69757.

2010-10-08  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: extract content-related methods into InspectorResourceAgent.
        https://bugs.webkit.org/show_bug.cgi?id=47415

        This is needed for resource-tracking-less operation of resources panel.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * inspector/InspectorCSSAgent.cpp:
        * inspector/InspectorResource.cpp:
        (WebCore::InspectorResource::type):
        (WebCore::InspectorResource::sourceString):
        (WebCore::InspectorResource::sourceBytes):
        * inspector/InspectorResource.h:
        * inspector/InspectorResourceAgent.cpp: Added.
        (WebCore::InspectorResourceAgent::resourceContent):
        (WebCore::InspectorResourceAgent::resourceContentBase64):
        (WebCore::InspectorResourceAgent::resourceData):
        (WebCore::InspectorResourceAgent::cachedResourceType):
        (WebCore::InspectorResourceAgent::cachedResource):
        * inspector/InspectorResourceAgent.h: Added.
        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheet::resourceStyleSheetText):
        * inspector/InspectorUtilities.cpp: Removed.
        * inspector/InspectorUtilities.h: Removed.

2010-10-14  Andreas Kling  <kling@webkit.org>

        Reviewed by Darin Adler.

        Canvas: "currentColor" should inherit the canvas element's color
        https://bugs.webkit.org/show_bug.cgi?id=40273

        Add support for "currentColor" in CanvasRenderingContext2D APIs.
        If the canvas is in-document, "currentColor" is replaced by canvas.style.color,
        otherwise we use fully opaque black.

        For gradient addColorStop(), "currentColor" always means fully opaque black.

        Spec link:
        http://www.whatwg.org/specs/web-apps/current-work/#2dcontext

        Test: fast/canvas/canvas-currentColor.html

        * html/canvas/CanvasGradient.cpp:
        (WebCore::CanvasGradient::addColorStop):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setStrokeStyle):
        (WebCore::CanvasRenderingContext2D::setFillStyle):
        (WebCore::CanvasRenderingContext2D::setShadowColor):
        (WebCore::CanvasRenderingContext2D::setShadow):
        * html/canvas/CanvasStyle.cpp:
        (WebCore::parseColor):
        (WebCore::currentColor):
        (WebCore::parseColorOrCurrentColor):
        (WebCore::CanvasStyle::CanvasStyle):
        (WebCore::CanvasStyle::createFromString):
        (WebCore::CanvasStyle::createFromStringWithOverrideAlpha):
        (WebCore::CanvasStyle::isEquivalentColor):
        (WebCore::CanvasStyle::applyStrokeColor):
        (WebCore::CanvasStyle::applyFillColor):
        * html/canvas/CanvasStyle.h:
        (WebCore::CanvasStyle::isCurrentColor):
        (WebCore::CanvasStyle::hasOverrideAlpha):
        (WebCore::CanvasStyle::overrideAlpha):

2010-10-08  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [REGRESSION] Scripts panel: the bubble shows wrong values
        https://bugs.webkit.org/show_bug.cgi?id=47358

        Test: inspector/debugger-eval-on-call-frame.html

        * inspector/front-end/InjectedScript.js:
        (injectedScriptConstructor.): don't embrace expression evaluated in the local scope
        of a call frame into with(window) to avoid shadowing local variables by global ones.

2010-10-13  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Implement getParameter from the URL API
        https://bugs.webkit.org/show_bug.cgi?id=46610

        Another API from
        https://docs.google.com/document/edit?id=1r_VTFKApVOaNIkocrg0z-t7lZgzisTuGTXkdzAk4gLU&hl=en#
        getParameter lets a web site easily read the value of a URL parameter.
        This API is for the simple case of a non-repeated parameter name.
        getParameterAll will handle repeated parameter names in a future patch.

        Tests: fast/dom/anchor-getParameter.html
               http/tests/misc/location-getParameter.html

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::getParameter):
        * html/HTMLAnchorElement.h:
        * html/HTMLAnchorElement.idl:
        * page/Location.cpp:
        (WebCore::Location::getParameter):
        * page/Location.h:
        * page/Location.idl:
        * platform/KURL.cpp:
        (WebCore::KURL::copyParsedQueryTo):
        * platform/KURLGoogle.cpp:
        (WebCore::KURL::copyParsedQueryTo):
        * platform/KURL.h:

2010-10-14  Alejandro G. Castro  <alex@igalia.com>

        Unreviewed. GTK build fix.

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

2010-10-14  Adrienne Walker  <enne@google.com>

        Reviewed by James Robinson.

        Add a short-term solution for large layers.  Layers that are too
        large to be contained in a single texture just upload the portion of
        the layer that is within the content rect.  A longer-term solution
        is still tiling with proper memory management.  Layers that have full
        3D transforms (more than just translations) are still not drawn.
        https://bugs.webkit.org/show_bug.cgi?id=47016

        Test: compositing/tiling

        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::ContentLayerChromium):
        (WebCore::ContentLayerChromium::requiresClippedUpdateRect):
        (WebCore::ContentLayerChromium::calculateClippedUpdateRect):
        (WebCore::ContentLayerChromium::updateContents):
        (WebCore::ContentLayerChromium::updateTextureRect):
        (WebCore::ContentLayerChromium::draw):
        * platform/graphics/chromium/ContentLayerChromium.h:
        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerChromium::updateContents):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::drawLayers):
        * platform/graphics/chromium/LayerRendererChromium.h:
        (WebCore::LayerRendererChromium::rootLayerContentRect):

2010-10-14  Chris Rogers  <crogers@google.com>

        Reviewed by Chris Fleizach.

        Add DelayDSPKernel files
        https://bugs.webkit.org/show_bug.cgi?id=47518

        No new tests since audio API is not yet implemented.

        * webaudio/DelayDSPKernel.cpp: Added.
        (WebCore::DelayDSPKernel::DelayDSPKernel):
        (WebCore::DelayDSPKernel::process):
        (WebCore::DelayDSPKernel::reset):
        * webaudio/DelayDSPKernel.h: Added.
        (WebCore::DelayDSPKernel::maxDelayTime):
        (WebCore::DelayDSPKernel::setDelayFrames):
        (WebCore::DelayDSPKernel::delayProcessor):

2010-10-13  Sergio Villar Senin  <svillar@igalia.com>

        Reviewed by Martin Robinson.

        WebKitGtk+ to use the new API from the imported SoupURILoader code

        [GTK] Add HTTP caching support
        https://bugs.webkit.org/show_bug.cgi?id=44261

        ResourceHandleSoup now does everything via SoupURILoader. This means
        that all URLs are handled via the same code path, where WebCore simply
        asks libsoup for a WebKitSoupRequest and the request returns an input
        stream. Many of ResourceHandleSoup's data members are now PlatformRefPtr
        as well, to simplify reference counting

        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandleInternal::~ResourceHandleInternal):
        (WebCore::ResourceHandle::~ResourceHandle):
        (WebCore::restartedCallback):
        (WebCore::gotChunkCallback):
        (WebCore::parseDataUrl):
        (WebCore::cleanupSoupRequestOperation):
        (WebCore::sendRequestCallback):
        (WebCore::startHttp):
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::cancel):
        (WebCore::closeCallback):
        (WebCore::readCallback):
        (WebCore::startGio):
        * platform/network/soup/ResourceRequest.h:
        * platform/network/soup/ResourceRequestSoup.cpp:
        (WebCore::ResourceRequest::updateSoupMessage):

2010-10-12  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Darin Adler.

        Prevent block logical height of a root inline box from overflowing by clamping it
        at INT_MAX. Otherwise, we will not be able to properly dirty the set of lines during
        removal a floating object.
        https://bugs.webkit.org/show_bug.cgi?id=45611        

        Test: fast/overflow/overflow-block-logical-height-crash.html

        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::alignBoxesInBlockDirection):

2010-10-13  James Robinson  <jamesr@chromium.org>

        Reviewed by Darin Adler.

        Throw INDEX_SIZE_ERR exception if createRadialGradient is called with a negative radius
        Canvas: radialGradient with negative radius should throw exception
        https://bugs.webkit.org/show_bug.cgi?id=37176

        This matches the canvas 2d specification, Opera, IE9 beta and our behavior for arc()
        and arcTo().  Also fixes some PassRefPtr/RefPtr errors in this file.

        Test: canvas/philip/tests/2d.gradient.radial.negative.html

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::createLinearGradient):
        (WebCore::CanvasRenderingContext2D::createRadialGradient):
        (WebCore::createEmptyImageData):
        (WebCore::CanvasRenderingContext2D::measureText):

2010-10-13  Fridrich Strba  <fridrich.strba@bluewin.ch>

        Reviewed by Darin Adler.

        Add WebCore/plugins/win directory to CFLAGS
        https://bugs.webkit.org/show_bug.cgi?id=45547

        * GNUmakefile.am:

2010-10-13  Martin Robinson  <mrobinson@igalia.com>

        Build fix for older versions of libsoup.

        * platform/network/soup/cache/soup-request-file.c:
        (webkit_soup_request_file_ensure_file): Access the path member of the SoupURI directly.

2010-10-13  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Kent Tamura.

        [BREWMP] Add TextBoundaries and TextBreakIterator
        https://bugs.webkit.org/show_bug.cgi?id=46105

        Copy the implementation of WinCE port.

        * platform/text/brew/TextBoundariesBrew.cpp: Added.
        (WebCore::findNextWordFromIndex):
        (WebCore::findWordBoundary):
        * platform/text/brew/TextBreakIteratorBrew.cpp: Added.
        (WebCore::isCharStop):
        (WebCore::isLineStop):
        (WebCore::isSentenceStop):
        (WebCore::TextBreakIterator::reset):
        (WebCore::TextBreakIterator::following):
        (WebCore::TextBreakIterator::preceding):
        (WebCore::WordBreakIterator::first):
        (WebCore::WordBreakIterator::next):
        (WebCore::WordBreakIterator::previous):
        (WebCore::CharBreakIterator::first):
        (WebCore::CharBreakIterator::next):
        (WebCore::CharBreakIterator::previous):
        (WebCore::LineBreakIterator::first):
        (WebCore::LineBreakIterator::next):
        (WebCore::LineBreakIterator::previous):
        (WebCore::SentenceBreakIterator::first):
        (WebCore::SentenceBreakIterator::next):
        (WebCore::SentenceBreakIterator::previous):
        (WebCore::wordBreakIterator):
        (WebCore::characterBreakIterator):
        (WebCore::lineBreakIterator):
        (WebCore::sentenceBreakIterator):
        (WebCore::textBreakFirst):
        (WebCore::textBreakNext):
        (WebCore::textBreakPreceding):
        (WebCore::textBreakFollowing):
        (WebCore::textBreakCurrent):
        (WebCore::isTextBreak):
        (WebCore::cursorMovementIterator):

2010-10-13  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Nate Chapin.

        IndexedDB should fire some errors synchronously
        https://bugs.webkit.org/show_bug.cgi?id=47530

        Add dumb plumbing to pass around exception codes.
        Utilize that plumbing in the backend to fire some
        errors synchronously.
        Verify that create/remove* functions are only called
        in setVersionTransactions (and raise when not).
        Remove plumbing for obsolete IDBDatabase.objectStore
        Remove obsolete mode param.

        * storage/IDBCursor.cpp:
        (WebCore::IDBCursor::update):
        (WebCore::IDBCursor::continueFunction):
        (WebCore::IDBCursor::remove):
        * storage/IDBCursor.h:
        (WebCore::IDBCursor::continueFunction):
        * storage/IDBCursor.idl:
        * storage/IDBCursorBackendImpl.cpp:
        (WebCore::IDBCursorBackendImpl::update):
        (WebCore::IDBCursorBackendImpl::continueFunction):
        (WebCore::IDBCursorBackendImpl::remove):
        * storage/IDBCursorBackendImpl.h:
        * storage/IDBCursorBackendInterface.h:
        * storage/IDBDatabase.cpp:
        (WebCore::IDBDatabase::IDBDatabase):
        (WebCore::IDBDatabase::createObjectStore):
        (WebCore::IDBDatabase::removeObjectStore):
        (WebCore::IDBDatabase::setVersion):
        (WebCore::IDBDatabase::transaction):
        * storage/IDBDatabase.h:
        (WebCore::IDBDatabase::createObjectStore):
        (WebCore::IDBDatabase::transaction):
        * storage/IDBDatabase.idl:
        * storage/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::createObjectStore):
        (WebCore::IDBDatabaseBackendImpl::objectStore):
        (WebCore::IDBDatabaseBackendImpl::removeObjectStore):
        (WebCore::IDBDatabaseBackendImpl::setVersion):
        (WebCore::IDBDatabaseBackendImpl::transaction):
        * storage/IDBDatabaseBackendImpl.h:
        * storage/IDBDatabaseBackendInterface.h:
        * storage/IDBFactory.cpp:
        (WebCore::IDBFactory::open):
        * storage/IDBFactory.h:
        (WebCore::IDBFactory::open):
        * storage/IDBFactory.idl:
        * storage/IDBIndex.cpp:
        (WebCore::IDBIndex::openCursor):
        (WebCore::IDBIndex::openKeyCursor):
        (WebCore::IDBIndex::get):
        (WebCore::IDBIndex::getKey):
        * storage/IDBIndex.h:
        (WebCore::IDBIndex::openCursor):
        (WebCore::IDBIndex::openKeyCursor):
        * storage/IDBIndex.idl:
        * storage/IDBIndexBackendImpl.cpp:
        (WebCore::IDBIndexBackendImpl::openCursor):
        (WebCore::IDBIndexBackendImpl::openKeyCursor):
        (WebCore::IDBIndexBackendImpl::get):
        (WebCore::IDBIndexBackendImpl::getKey):
        * storage/IDBIndexBackendImpl.h:
        * storage/IDBIndexBackendInterface.h:
        * storage/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::get):
        (WebCore::IDBObjectStore::add):
        (WebCore::IDBObjectStore::put):
        (WebCore::IDBObjectStore::remove):
        (WebCore::IDBObjectStore::createIndex):
        (WebCore::IDBObjectStore::index):
        (WebCore::IDBObjectStore::removeIndex):
        (WebCore::IDBObjectStore::openCursor):
        * storage/IDBObjectStore.h:
        (WebCore::IDBObjectStore::add):
        (WebCore::IDBObjectStore::put):
        (WebCore::IDBObjectStore::createIndex):
        (WebCore::IDBObjectStore::openCursor):
        * storage/IDBObjectStore.idl:
        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::get):
        (WebCore::IDBObjectStoreBackendImpl::put):
        (WebCore::IDBObjectStoreBackendImpl::remove):
        (WebCore::IDBObjectStoreBackendImpl::createIndex):
        (WebCore::IDBObjectStoreBackendImpl::index):
        (WebCore::IDBObjectStoreBackendImpl::removeIndex):
        (WebCore::IDBObjectStoreBackendImpl::openCursor):
        * storage/IDBObjectStoreBackendImpl.h:
        (WebCore::IDBObjectStoreBackendImpl::name):
        (WebCore::IDBObjectStoreBackendImpl::keyPath):
        (WebCore::IDBObjectStoreBackendImpl::autoIncrement):
        * storage/IDBObjectStoreBackendInterface.h:
        * storage/IDBTransaction.cpp:
        (WebCore::IDBTransaction::objectStore):
        * storage/IDBTransaction.h:
        * storage/IDBTransactionBackendImpl.cpp:
        (WebCore::IDBTransactionBackendImpl::objectStore):

2010-10-13  Sergio Villar Senin  <svillar@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Add HTTP caching support
        https://bugs.webkit.org/show_bug.cgi?id=44261

        This patch adds HTTP caching support to libsoup networking backend.
        This code will eventually be part of libsoup, but has been temporarily
        imported into the WebCore tree for testing purposes. All libsoup code
        is located in WebCore/platform/network/soup/cache. The webkit prefix
        was added to all the symbols to prevent problems when this lands in
        libsoup. Some external API was also added under webkit/ directory and
        will be used by library clients to enable HTTP caching.

        There are two parts to this imported code, the first one is the code
        under WebCore/platform/network/soup/cache/ that contains all the
        SoupURILoader code that supports the development of the cache. The
        second part is the HTTP cache implementation located in
        WebCore/platform/network/soup/cache/webkit/.

        * GNUmakefile.am:
        * platform/network/soup/cache/soup-directory-input-stream.c: Added.
        (webkit_soup_directory_input_stream_parse_info):
        (webkit_soup_directory_input_stream_read_next_file):
        (webkit_soup_directory_input_stream_read):
        (webkit_soup_directory_input_stream_close):
        (webkit_soup_directory_input_stream_class_init):
        (webkit_soup_directory_input_stream_init):
        (webkit_soup_directory_input_stream_new):
        * platform/network/soup/cache/soup-directory-input-stream.h: Added.
        * platform/network/soup/cache/soup-http-input-stream.c: Added.
        (webkit_soup_http_input_stream_finalize):
        (webkit_soup_http_input_stream_class_init):
        (webkit_soup_http_input_stream_seekable_iface_init):
        (webkit_soup_http_input_stream_init):
        (webkit_soup_http_input_stream_queue_message):
        (webkit_soup_http_input_stream_new):
        (webkit_soup_http_input_stream_got_headers):
        (webkit_soup_http_input_stream_got_chunk):
        (webkit_soup_http_input_stream_finished):
        (webkit_soup_http_input_stream_cancelled):
        (webkit_soup_http_input_stream_prepare_for_io):
        (webkit_soup_http_input_stream_done_io):
        (set_error_if_http_failed):
        (read_from_leftover):
        (webkit_soup_http_input_stream_send_internal):
        (send_sync_finished):
        (webkit_soup_http_input_stream_send):
        (webkit_soup_http_input_stream_read):
        (webkit_soup_http_input_stream_close):
        (wrapper_callback):
        (send_async_thread):
        (webkit_soup_http_input_stream_send_async_in_thread):
        (send_async_finished):
        (webkit_soup_http_input_stream_send_async_internal):
        (webkit_soup_http_input_stream_send_async):
        (webkit_soup_http_input_stream_send_finish):
        (read_async_done):
        (webkit_soup_http_input_stream_read_async):
        (webkit_soup_http_input_stream_read_finish):
        (webkit_soup_http_input_stream_close_async):
        (webkit_soup_http_input_stream_close_finish):
        (webkit_soup_http_input_stream_tell):
        (webkit_soup_http_input_stream_can_seek):
        (webkit_soup_http_input_stream_seek):
        (webkit_soup_http_input_stream_can_truncate):
        (webkit_soup_http_input_stream_truncate):
        (webkit_soup_http_input_stream_get_message):
        * platform/network/soup/cache/soup-http-input-stream.h: Added.
        * platform/network/soup/cache/soup-request-data.c: Added.
        (webkit_soup_request_data_init):
        (webkit_soup_request_data_finalize):
        (webkit_soup_request_data_check_uri):
        (uri_decoded_copy):
        (webkit_soup_request_data_send):
        (webkit_soup_request_data_get_content_length):
        (webkit_soup_request_data_get_content_type):
        (webkit_soup_request_data_class_init):
        * platform/network/soup/cache/soup-request-data.h: Added.
        * platform/network/soup/cache/soup-request-file.c: Added.
        (webkit_soup_request_file_get_file):
        (webkit_soup_request_file_init):
        (webkit_soup_request_file_finalize):
        (webkit_soup_request_file_check_uri):
        (webkit_soup_request_file_ftp_main_loop_quit):
        (webkit_soup_request_file_ensure_file_ftp):
        (webkit_soup_request_file_ensure_file):
        (webkit_soup_request_file_send):
        (webkit_soup_request_file_send_async_thread):
        (webkit_soup_request_file_send_async):
        (webkit_soup_request_file_send_finish):
        (webkit_soup_request_file_get_content_length):
        (webkit_soup_request_file_get_content_type):
        (webkit_soup_request_file_class_init):
        * platform/network/soup/cache/soup-request-file.h: Added.
        * platform/network/soup/cache/soup-request-http.c: Added.
        (webkit_soup_request_http_get_message):
        (webkit_soup_request_http_init):
        (webkit_soup_request_http_check_uri):
        (webkit_soup_request_http_finalize):
        (webkit_soup_request_http_send):
        (sent_async):
        (conditional_get_ready_cb):
        (send_async_cb):
        (webkit_soup_request_http_send_async):
        (webkit_soup_request_http_send_finish):
        (webkit_soup_request_http_get_content_length):
        (webkit_soup_request_http_get_content_type):
        (webkit_soup_request_http_class_init):
        * platform/network/soup/cache/soup-request-http.h: Added.
        * platform/network/soup/cache/soup-request.c: Added.
        (webkit_soup_request_init):
        (webkit_soup_request_finalize):
        (webkit_soup_request_set_property):
        (webkit_soup_request_get_property):
        (webkit_soup_request_initable_init):
        (webkit_soup_request_default_check_uri):
        (webkit_soup_request_default_send_async):
        (webkit_soup_request_default_send_finish):
        (webkit_soup_request_send):
        (webkit_soup_request_send_async):
        (webkit_soup_request_send_finish):
        (webkit_soup_request_class_init):
        (webkit_soup_request_initable_interface_init):
        (webkit_soup_request_get_uri):
        (webkit_soup_request_get_session):
        (webkit_soup_request_get_content_length):
        (webkit_soup_request_get_content_type):
        * platform/network/soup/cache/soup-request.h: Added.
        * platform/network/soup/cache/soup-requester.c: Added.
        (webkit_soup_requester_init):
        (finalize):
        (webkit_soup_requester_class_init):
        (init_request_types):
        (webkit_soup_requester_new):
        (webkit_soup_requester_request):
        (webkit_soup_requester_request_uri):
        (webkit_soup_scheme_is_valid):
        (webkit_soup_requester_add_protocol):
        (webkit_soup_requester_remove_protocol):
        (webkit_soup_error_quark):
        * platform/network/soup/cache/soup-requester.h: Added.
        * platform/network/soup/cache/webkit/soup-cache-private.h: Added.
        * platform/network/soup/cache/webkit/soup-cache.c: Added.
        (get_cacheability):
        (webkit_soup_cache_entry_free):
        (copy_headers):
        (update_headers):
        (webkit_soup_cache_entry_get_current_age):
        (webkit_soup_cache_entry_is_fresh_enough):
        (webkit_soup_message_get_cache_key):
        (webkit_soup_cache_entry_set_freshness):
        (webkit_soup_cache_entry_new):
        (webkit_soup_cache_writing_fixture_free):
        (close_ready_cb):
        (write_ready_cb):
        (msg_got_chunk_cb):
        (msg_got_body_cb):
        (webkit_soup_cache_entry_delete):
        (lru_compare_func):
        (cache_accepts_entries_of_size):
        (make_room_for_new_entry):
        (webkit_soup_cache_entry_insert_by_key):
        (msg_restarted_cb):
        (append_to_ready_cb):
        (msg_got_headers_cb):
        (webkit_soup_cache_send_response):
        (request_started):
        (attach):
        (webkit_soup_cache_session_feature_init):
        (webkit_soup_cache_init):
        (webkit_soup_cache_finalize):
        (webkit_soup_cache_set_property):
        (webkit_soup_cache_get_property):
        (webkit_soup_cache_constructed):
        (webkit_soup_cache_type_get_type):
        (webkit_soup_cache_class_init):
        (webkit_soup_cache_new):
        (webkit_soup_cache_has_response):
        (webkit_soup_cache_get_cacheability):
        (force_flush_timeout):
        (webkit_soup_cache_flush):
        (remove_cache_item):
        (webkit_soup_cache_clear):
        (webkit_soup_cache_generate_conditional_request):
        (pack_entry):
        (webkit_soup_cache_dump):
        (webkit_soup_cache_load):
        (webkit_soup_cache_set_max_size):
        (webkit_soup_cache_get_max_size):
        * platform/network/soup/cache/webkit/soup-cache.h: Added.

2010-10-13  Gavin Barraclough  <barraclough@apple.com>

        Chromium build fix.

        * bindings/v8/ScriptProfiler.cpp:

2010-10-13  Chris Evans  <cevans@google.com>

        Reviewed by Jian Li.

        Blob / BlobBuilder can be put into bad state with wild integers and strings, due to integer overflows
        https://bugs.webkit.org/show_bug.cgi?id=47382

        Fix integer overflow errors in Blob.slice and BlobBuilder.append.

        Test: fast/files/blob-slice-overflow.html

        * fileapi/Blob.cpp:
        (WebCore::Blob::slice): handle integer overflow properly.
        * fileapi/BlobBuilder.cpp:
        (WebCore::BlobBuilder::append): use correct type for vector length.

2010-10-13  Gavin Barraclough  <barraclough@apple.com>

        Build fix - remove some redundant references to ScriptString.

        * WebCore.gypi:
        * WebCore.pro:
        * bindings/v8/ScriptProfiler.cpp:

2010-10-13  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Bug 47621 - Remove bindings/v8/ScriptString
        This is now redundant.

        * bindings/v8/ScriptCallFrame.h:
        (WebCore::ScriptCallFrame::functionName):
        * bindings/v8/ScriptFunctionCall.cpp:
        * bindings/v8/ScriptFunctionCall.h:
        * bindings/v8/ScriptString.h: Removed.
        * bindings/v8/ScriptStringImpl.cpp: Removed.
        * bindings/v8/ScriptStringImpl.h: Removed.

2010-10-13  Anders Carlsson  <andersca@apple.com>

        Reviewed by John Sullivan.

        Draw the find overlay holes
        https://bugs.webkit.org/show_bug.cgi?id=47631

        Export symbols needed by WebKit2.

        * WebCore.exp.in:

2010-10-13  James Simonsen  <simonjam@chromium.org>

        Reviewed by Darin Adler.

        Implement onreadystatechange event handler for Documents
        https://bugs.webkit.org/show_bug.cgi?id=26140

        Test: fast/dom/Document/readystate.html

        * dom/Document.cpp:
        (WebCore::Document::setReadyState): Fire readystatechangeevent.
        (WebCore::Document::open): Clear event listeners.
        * dom/Document.h: Add readystatechange event.
        * dom/Document.idl: Ditto.

2010-10-13  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        AX: accessibilityIsIgnored not respected on ARIA tables
        https://bugs.webkit.org/show_bug.cgi?id=47564

        For platforms that ignore column headers and header container objects (everything
        except Mac) on accessibility tables, that choice needs to be respected in 
        ARIA tables as well.

        GTK is the only open platform doing this, so I'll have to collect the result of this 
        test. It was copied from table-hierarchy.html, but changed to use ARIA tables.

        Test: platform/gtk/accessibility/aria-table-hierarchy.html

        * accessibility/AccessibilityARIAGrid.cpp:
        (WebCore::AccessibilityARIAGrid::addChildren):

2010-10-13  Victoria Kirst  <vrk@google.com>

        Reviewed by James Robinson.

        No longer ASSERT for LayerRenderer in VideoLayerChromium destructor
        https://bugs.webkit.org/show_bug.cgi?id=47432

        * platform/graphics/chromium/VideoLayerChromium.cpp:
        (WebCore::VideoLayerChromium::cleanupResources):

2010-10-13  Leandro Pereira  <leandro@profusion.mobi>

        [EFL] Unreviewed. Build fix.

        * CMakeLists.txt: Add ContextShadow.cpp.
        * CMakeListsEfl.txt: Add ContextShadowCairo.cpp.

2010-10-13  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Holger Freyther.

        [GTK] r69681 caused some tests to crash
        https://bugs.webkit.org/show_bug.cgi?id=47622

        Properly initialize m_layerContext on the ContextShadow so that in situations
        where beginShadowLayer bails out early with a null return value, it is set
        to null. This may happen when the first call to beginShadowLayer on a particular
        ContextShadow uses a region which is entirely outside the clip region or which
        is empty.

        * platform/graphics/cairo/ContextShadow.cpp:
        (WebCore::ContextShadow::ContextShadow): Properly initialize m_layerContext.

2010-10-13  Anders Carlsson  <andersca@apple.com>

        Reviewed by Beth Dakin.

        Don't set the fill/stroke colorspace before filling/stroking
        https://bugs.webkit.org/show_bug.cgi?id=47619

        Setting the colorspace has the side-effect of setting the color to black, which is
        not what we want. When fill/stroke is called, a fill/stroke color should already have been set.

        Pixel tests show no regressions from this change.

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::strokeRect):

2010-10-13  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed WinCairo build fix.
        New ContextShadow class not built for Windows builds.

        * WebCore.vcproj/WebCore.vcproj: Add missing files for
        building ContextShadow on WinCairo.
        * platform/graphics/cairo/GraphicsContextPlatformPrivateCairo.h:
        Add missing include for ContextShadow definition.

2010-10-13  Gavin Barraclough  <barraclough@apple.com>

        Chromium build fix pt1.

        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::V8XMLHttpRequest::responseTextAccessorGetter):

2010-10-13  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Send over find indicator information to the UI process
        https://bugs.webkit.org/show_bug.cgi?id=47612

        Export symbols needed by WebKit2.

        * WebCore.exp.in:

2010-10-13  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        https://bugs.webkit.org/show_bug.cgi?id=43987
        Switch XMLHttpRequest, FileReader, and FileReaderSync to use a Stringbuilder
        to construct their internal result string.  Remove ScriptString (this is now
        redundant).

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::jsOwnedStringOrNull):
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::responseText):
        * bindings/js/ScriptCallFrame.cpp:
        (WebCore::ScriptCallFrame::ScriptCallFrame):
        * bindings/js/ScriptCallFrame.h:
        (WebCore::ScriptCallFrame::functionName):
        * bindings/js/ScriptCallStack.h:
        * bindings/js/ScriptFunctionCall.cpp:
        * bindings/js/ScriptFunctionCall.h:
        * bindings/js/ScriptString.h: Removed.
        * dom/ScriptExecutionContext.h:
        * fileapi/FileReader.cpp:
        (WebCore::FileReader::FileReader):
        (WebCore::FileReader::abort):
        (WebCore::FileReader::didReceiveData):
        (WebCore::FileReader::result):
        (WebCore::FileReader::convertToText):
        (WebCore::FileReader::convertToDataURL):
        * fileapi/FileReader.h:
        * fileapi/FileReaderSync.cpp:
        (WebCore::FileReaderSyncLoader::FileReaderSyncLoader):
        (WebCore::FileReaderSyncLoader::didReceiveData):
        (WebCore::FileReaderSync::readAsBinaryString):
        (WebCore::FileReaderSync::readAsText):
        (WebCore::FileReaderSync::readAsDataURL):
        (WebCore::FileReaderSync::read):
        (WebCore::FileReaderSync::convertToText):
        * fileapi/FileReaderSync.h:
        (WebCore::FileReaderSync::readAsText):
        (WebCore::FileReaderSync::FileReaderSync):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::resourceRetrievedByXMLHttpRequest):
        (WebCore::InspectorController::scriptImported):
        * inspector/InspectorController.h:
        * inspector/InspectorResource.cpp:
        (WebCore::InspectorResource::setOverrideContent):
        * inspector/InspectorResource.h:
        * loader/FrameLoader.cpp:
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/ResourceLoadNotifier.h:
        * workers/WorkerScriptLoader.h:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::XMLHttpRequest):
        (WebCore::XMLHttpRequest::responseText):
        (WebCore::XMLHttpRequest::responseXML):
        (WebCore::XMLHttpRequest::abort):
        (WebCore::XMLHttpRequest::clearResponse):
        (WebCore::XMLHttpRequest::dropProtection):
        (WebCore::XMLHttpRequest::didFinishLoading):
        (WebCore::XMLHttpRequest::didReceiveData):
        * xml/XMLHttpRequest.h:

2010-10-13  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Bug 43987 - Downloading using XHR is much slower than before

        * svg/SVGPathStringBuilder.cpp:
        (WebCore::SVGPathStringBuilder::result):
            StringBuilder::size() -> StringBuilder::length().

2010-10-13  Yong Li  <yoli@rim.com>

        Reviewed by Oliver Hunt.

        Fix potential misaligned memory access in CloneDeserializer::readLittleEndian and readString
        that can result crash on ARM (<v6).
        https://bugs.webkit.org/show_bug.cgi?id=47594

        No new test added, because the crash can be produced by existing tests like:
        LayoutTests/fast/events/message-channel-gc-4.html

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneDeserializer::readLittleEndian):
        (WebCore::CloneDeserializer::readString):

2010-10-06  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Dirk Schulze.

        [Cairo] Activate ContextShadow in all places where shadows are drawn
        https://bugs.webkit.org/show_bug.cgi?id=46475

        Turn on ContextShadow for the Cairo port and remove all old shadow code.
        Shadow tiling optimizations will be added in a followup patch to ContextShadowCairo.

        * platform/graphics/GraphicsContext.h: Add a ContextShadow forward declaration for Cairo.
        * platform/graphics/cairo/FontCairo.cpp: Switch to using ContextShadow.
        (WebCore::prepareContextForGlyphDrawing): Added this helper which sets up the translation
        on the specified cairo_t to prepare for drawing glyphs.
        (WebCore::drawGlyphsToContext): Added this helper which draws the glyphs to a cairo_t,
        while properly handling glyphs with synthetic bold.
        (WebCore::Font::drawGlyphs): Removed old shadow code and replaced it with ContextShadow usage.
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::drawPathShadow): Modified this to use ContextShadow and to take an enum
        argument specifying whether to fill or stroke the solid figure for the shadow.
        (WebCore::fillCurrentCairoPath): Updated drawPathShadow call.
        (WebCore::strokeCurrentCairoPath): Ditto.
        (WebCore::GraphicsContext::savePlatformState): Save the ContextShadow.
        (WebCore::GraphicsContext::restorePlatformState): Restore the ContextShadow.
        (WebCore::GraphicsContext::drawPath): Updated drawPathShadow call.
        (WebCore::GraphicsContext::fillRect): Uses ContextShadow now.
        (WebCore::GraphicsContext::setPlatformShadow): Uses ContextShadow now.
        (WebCore::GraphicsContext::contextShadow): Added.
        (WebCore::GraphicsContext::clearPlatformShadow): Clears the ContextShadow member.
        (WebCore::GraphicsContext::fillRoundedRect): Updated drawPathShadow call.
        * platform/graphics/cairo/GraphicsContextPlatformPrivateCairo.h:
        (WebCore::GraphicsContextPlatformPrivate::hasShadow): Added.
        * platform/graphics/cairo/ImageCairo.cpp:
        (WebCore::BitmapImage::draw): Updated to use ContextShadow.

2010-10-13  John Knottenbelt  <jknotten@chromium.org>

        Reviewed by Steve Block.

        First step towards client-based Geolocation in Chromium. Build
        fixes for CLIENT_BASED_GEOLOCATION preprocessor feature define.
        https://bugs.webkit.org/show_bug.cgi?id=47586

        * WebCore.gyp/WebCore.gyp:
        * platform/chromium/ChromiumBridge.h:
        * platform/chromium/GeolocationServiceChromium.cpp:

2010-10-13  Steve Block  <steveblock@google.com>

        Unreviewed fix

        Need to check for the existence of DeviceOrientation and DeviceMotion controllers

        These features can be disabled at run time, so an enable guard is not sufficient.
        This bug was introduced in http://trac.webkit.org/changeset/69646

        Tested with existing tests.

        * history/PageCache.cpp:
        (WebCore::logCanCachePageDecision):
        (WebCore::PageCache::canCache):

2010-10-13  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: stack information is inconsistent between console.trace and runtime errors.
        https://bugs.webkit.org/show_bug.cgi?id=47252

        * console.trace() is now formatted the same way as other stack traces

        * If there is //@ sourceURL=url line at the end of eval'ed script source
        the url will be shown in the stack traces for script. That is why ScriptCallFrame::sourceURL
        type has changed from KURL to String.

        Tests: inspector/console-trace-in-eval.html
               inspector/console-uncaught-exception-in-eval.html

        * bindings/js/ScriptCallFrame.cpp:
        (WebCore::ScriptCallFrame::ScriptCallFrame):
        * bindings/js/ScriptCallFrame.h:
        (WebCore::ScriptCallFrame::sourceURL):
        * bindings/v8/ScriptCallFrame.cpp:
        (WebCore::ScriptCallFrame::ScriptCallFrame):
        * bindings/v8/ScriptCallFrame.h:
        (WebCore::ScriptCallFrame::sourceURL):
        * bindings/v8/ScriptCallStack.cpp:
        (WebCore::getFrameLocation):
        (WebCore::ScriptCallStack::create):
        * bindings/v8/ScriptCallStack.h:
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::setCaptureCallStackForUncaughtExceptions):
        * bindings/v8/custom/V8ConsoleCustom.cpp:
        (WebCore::V8Console::traceCallback):
        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::CallFrame::buildInspectorObject):
        (WebCore::ConsoleMessage::ConsoleMessage):
        * inspector/ConsoleMessage.h:
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleMessage.prototype._formatMessage):
        * page/Console.cpp:
        (WebCore::Console::addMessage):
        (WebCore::Console::count):
        (WebCore::Console::timeEnd):

2010-10-13  Kent Tamura  <tkent@chromium.org>

        Unreviewed, a trivial change.

        Run sort-Xcode-project-file.

        * WebCore.xcodeproj/project.pbxproj:

2010-10-13  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Andreas Kling.

        Wrong ASSERT when select element has size 0
        https://bugs.webkit.org/show_bug.cgi?id=47567

        Keep the ASSERT only if the size of the element list is more than 0
        Test: fast/dom/HTMLSelectElement/click-size-zero-no-crash.html

        * dom/SelectElement.cpp:
        (WebCore::SelectElement::updateListBoxSelection):
        (WebCore::SelectElement::listBoxDefaultEventHandler):

2010-10-13  Steve Block  <steveblock@google.com>

        Reviewed by Alexey Proskuryakov.

        Pages using DeviceOrientation and DeviceMotion should not go into the page cache
        https://bugs.webkit.org/show_bug.cgi?id=47408

        Tests: fast/dom/DeviceMotion/no-page-cache.html
               fast/dom/DeviceOrientation/no-page-cache.html

        * dom/DeviceMotionController.h:
        (WebCore::DeviceMotionController::isActive):
        * dom/DeviceOrientationController.h:
        (WebCore::DeviceOrientationController::isActive):
        * history/PageCache.cpp:
        (WebCore::logCanCachePageDecision):
        (WebCore::PageCache::canCache):
        * page/Page.cpp:

2010-10-13  Jenn Braithwaite  <jennb@chromium.org>

        Reviewed by Dmitry Titov.

        Make resource identifiers unique across pages
        https://bugs.webkit.org/show_bug.cgi?id=47002

        Test: http/tests/misc/iframe-reparenting-id-collision.html

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

2010-10-12  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by David Hyatt.

        Bug 41040 - :before/:after content should not become part of a ruby base
        https://bugs.webkit.org/show_bug.cgi?id=41040

        Also related to:
        https://bugs.webkit.org/show_bug.cgi?id=40895.
        https://bugs.webkit.org/show_bug.cgi?id=43722.

        Explicitly handle :before and :after content in the default way.

        Test: fast/ruby/ruby-beforeafter.html
              fast/ruby/after-doesnt-crash.html

        * rendering/RenderObject.h:
        (WebCore::RenderObject::isBeforeContent):
        * rendering/RenderRuby.cpp:
        (WebCore::lastRubyRun):
        (WebCore::RenderRubyAsInline::addChild):
        (WebCore::RenderRubyAsInline::removeChild):
        (WebCore::RenderRubyAsBlock::addChild):
        (WebCore::RenderRubyAsBlock::removeChild):

2010-10-12  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r69639.
        http://trac.webkit.org/changeset/69639
        https://bugs.webkit.org/show_bug.cgi?id=47575

        "regressed nav-element.html" (Requested by rniwa on #webkit).

        * editing/ApplyBlockElementCommand.cpp:
        (WebCore::ApplyBlockElementCommand::formatSelection):
        * editing/EditorCommand.cpp:
        (WebCore::executeFormatBlock):
        * editing/FormatBlockCommand.cpp:
        (WebCore::FormatBlockCommand::formatRange):
        * editing/FormatBlockCommand.h:
        (WebCore::FormatBlockCommand::editingAction):
        * editing/VisiblePosition.cpp:
        (WebCore::enclosingBlockFlowElement):
        * editing/VisiblePosition.h:
        * editing/htmlediting.cpp:
        (WebCore::validBlockTag):
        * editing/htmlediting.h:

2010-10-12  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Tony Chang.

        execCommand FormatBlock creates lots of blockquotes
        https://bugs.webkit.org/show_bug.cgi?id=19795

        The bug was caused by WebKit's not reusing the block node added by previous iteration
        and its inserting block node at wrong places.

        Fixed the bug by rewriting FormatBlockCommand::formatRange.  New code resembles that of
        IndentOutdentCommand::indentIntoBlockquote.  The difference between two is that formatRange
        avoids the existing block elements when replacing blocks and it also adds a placeholder
        when removing the existing block caused paragraphs to collapse.

        Tests: editing/execCommand/format-block-multiple-paragraphs.html
               editing/execCommand/format-block-table.html

        * editing/EditorCommand.cpp:
        (WebCore::executeFormatBlock):
        * editing/FormatBlockCommand.cpp:
        (WebCore::FormatBlockCommand::formatRange): Rewritten; see above.
        (WebCore::FormatBlockCommand::isElementToApplyInFormatBlockCommand): Renamed from validBlockElement
        and moved from htmlediting.cpp.
        (WebCore::FormatBlockCommand::enclosingBlockToSplitTreeTo): Added.
        * editing/FormatBlockCommand.h:
        * editing/VisiblePosition.cpp:
        (WebCore::enclosingBlockFlowElement): Changed the return type to Element*
        * editing/VisiblePosition.h:

2010-10-11  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Anders Carlsson.

        Make PluginView inherit from PluginViewBase.

        This change is a precursor to adding accelerated compositing support
        for NPAPI plugins.

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

        * page/Page.cpp:
        (WebCore::Page::privateBrowsingStateChanged):
        * plugins/PluginView.h:
        * plugins/PluginViewBase.h:
        (WebCore::PluginViewBase::PluginViewBase):

2010-10-12  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Jian Li.

        Pass platform path (rather than virtual path) when creating File from FileEntry
        https://bugs.webkit.org/show_bug.cgi?id=47563

        No new tests, the new test for FileWriter will be verifying this.

        * fileapi/FileEntry.cpp:
        (WebCore::FileEntry::file):

2010-10-12 David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein

        <rdar://problem/8488444> REGRESSION (r67771)
        https://bugs.webkit.org/show_bug.cgi?id=47434
        Crash when printing in RenderBlock::markDescendantBlocksAndLinesForLayout
        
        Added printing/simultaneous-position-float-change.html

        Remove the markDescendantBlocksAndLinesForLayout method since it can walk m_floatingObjects lists with deleted
        objects in them.  Make the mechanism for relayout when the page height changes the same as the one when pageY
        changes and just tie a concept of pageHeightChanged to the layout state.  If that is set, blocks will just
        automatically mark themselves as needing layout.

        * rendering/LayoutState.cpp:
        (WebCore::LayoutState::LayoutState):
        * rendering/LayoutState.h:
        (WebCore::LayoutState::LayoutState):
        (WebCore::LayoutState::pageHeight):
        (WebCore::LayoutState::pageHeightChanged):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::layoutBlockChild):
        (WebCore::RenderBlock::layoutPositionedObjects):
        (WebCore::RenderBlock::markForPaginationRelayoutIfNeeded):
        (WebCore::RenderBlock::insertFloatingObject):
        (WebCore::RenderBlock::positionNewFloats):
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        * rendering/RenderBox.h:
        (WebCore::RenderBox::markForPaginationRelayoutIfNeeded):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutHorizontalBox):
        (WebCore::RenderFlexibleBox::layoutVerticalBox):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::RenderView):
        (WebCore::RenderView::layout):
        * rendering/RenderView.h:
        (WebCore::RenderView::setPageHeight):
        (WebCore::RenderView::pushLayoutState):
        (WebCore::LayoutStateMaintainer::LayoutStateMaintainer):
        (WebCore::LayoutStateMaintainer::push):

2010-10-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Paint the find overlay background
        https://bugs.webkit.org/show_bug.cgi?id=47565

        Export symbols required by WebKit2.

        * WebCore.exp.in:

2010-10-12  James Robinson  <jamesr@chromium.org>

        Unreviewed chromium compile fixes for http://trac.webkit.org/changeset/69619

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::create):
        (WebCore::LayerRendererChromium::LayerRendererChromium):
        * platform/graphics/chromium/LayerRendererChromium.h:

2010-10-12  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Darin Adler.

        Manage DrawingBuffer lifetime in GraphicsContext3D
        https://bugs.webkit.org/show_bug.cgi?id=47501

        GraphicsContext3D and DrawingBuffer are now Refcounted. DrawingBuffer
        has a RefPtr to GraphicsContext3D to ensure the proper lifetime. 
        DrawingBuffer is now created by GraphicsContext3D. Also DrawingBuffer
        refers to GraphicsContext3D rather than SharedGraphicsContext3D.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::CanvasRenderingContext2D):
        * html/canvas/CanvasRenderingContext2D.h:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::create):
        (WebCore::WebGLRenderingContext::WebGLRenderingContext):
        * html/canvas/WebGLRenderingContext.h:
        * platform/graphics/GraphicsContext3D.cpp:
        (WebCore::GraphicsContext3D::createDrawingBuffer):
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/chromium/DrawingBufferChromium.cpp:
        (WebCore::generateColorTexture):
        (WebCore::DrawingBuffer::DrawingBuffer):
        (WebCore::DrawingBuffer::~DrawingBuffer):
        (WebCore::DrawingBuffer::publishToPlatformLayer):
        (WebCore::DrawingBuffer::reset):
        * platform/graphics/gpu/DrawingBuffer.cpp:
        (WebCore::DrawingBuffer::create):
        (WebCore::DrawingBuffer::clear):
        (WebCore::DrawingBuffer::bind):
        * platform/graphics/gpu/DrawingBuffer.h:
        (WebCore::DrawingBuffer::graphicsContext3D):
        * platform/graphics/gpu/SharedGraphicsContext3D.cpp:
        (WebCore::SharedGraphicsContext3D::create):
        (WebCore::SharedGraphicsContext3D::SharedGraphicsContext3D):
        * platform/graphics/gpu/SharedGraphicsContext3D.h:
        (WebCore::SharedGraphicsContext3D::graphicsContext3D):
        * platform/graphics/gpu/mac/DrawingBufferMac.mm:
        (WebCore::DrawingBuffer::DrawingBuffer):
        (WebCore::DrawingBuffer::~DrawingBuffer):
        (WebCore::DrawingBuffer::reset):
        * platform/graphics/mac/GraphicsContext3DMac.mm:
        (WebCore::GraphicsContext3D::create):

2010-10-12  Jian Li  <jianli@chromium.org>

        Reviewed by David Levin.

        Fix passing blob data with string data item between threads.
        https://bugs.webkit.org/show_bug.cgi?id=46543

        The fix is to use a thread-safe ref-counted Vector<char> to store the
        string data. This also makes us be able to store any binary data in it.

        I've also fix BlobBuilder and BlobRegistryImpl to avoid some additional
        copies to make blob handling faster.

        * fileapi/BlobBuilder.cpp:
        (WebCore::BlobBuilder::append):
        * fileapi/ThreadableBlobRegistry.cpp:
        (WebCore::BlobRegistryContext::BlobRegistryContext):
        * platform/network/BlobData.cpp:
        (WebCore::BlobDataItem::RawData::RawData):
        (WebCore::BlobDataItem::RawData::detachFromCurrentThread):
        (WebCore::BlobDataItem::detachFromCurrentThread):
        (WebCore::BlobData::create):
        (WebCore::BlobData::detachFromCurrentThread):
        (WebCore::BlobData::appendData):
        * platform/network/BlobData.h:
        (WebCore::BlobDataItem::RawData::create):
        (WebCore::BlobDataItem::RawData::data):
        (WebCore::BlobDataItem::RawData::length):
        (WebCore::BlobDataItem::RawData::mutableData):
        (WebCore::BlobDataItem::BlobDataItem):
        * platform/network/BlobRegistryImpl.cpp:
        (WebCore::BlobRegistryImpl::registerBlobURL):
        * platform/network/BlobResourceHandle.cpp:
        (WebCore::BlobResourceHandle::readDataSync):
        (WebCore::BlobResourceHandle::readDataAsync):
        * platform/network/mac/FormDataStreamMac.mm:
        (WebCore::setHTTPBody):
        * platform/text/LineEnding.cpp:
        (OutputBuffer::CStringBuffer::CStringBuffer):
        (OutputBuffer::CStringBuffer::~CStringBuffer):
        (OutputBuffer::CStringBuffer::allocate):
        (OutputBuffer::CStringBuffer::copy):
        (OutputBuffer::CStringBuffer::buffer):
        (OutputBuffer::VectorCharAppendBuffer::VectorCharAppendBuffer):
        (OutputBuffer::VectorCharAppendBuffer::~VectorCharAppendBuffer):
        (OutputBuffer::VectorCharAppendBuffer::allocate):
        (OutputBuffer::VectorCharAppendBuffer::copy):
        (OutputBuffer::internalNormalizeLineEndingsToCRLF):
        (WebCore::normalizeToCROrLF):
        (WebCore::normalizeLineEndingsToCRLF):
        (WebCore::normalizeLineEndingsToCR):
        (WebCore::normalizeLineEndingsToLF):
        (WebCore::normalizeLineEndingsToNative):
        * platform/text/LineEnding.h:

2010-10-12  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r69589.
        http://trac.webkit.org/changeset/69589
        https://bugs.webkit.org/show_bug.cgi?id=47547

        Wrong patch landed from a bug with two patches (Requested by
        mrobinson on #webkit).

        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandleInternal::~ResourceHandleInternal):
        (WebCore::ResourceHandle::~ResourceHandle):
        (WebCore::restartedCallback):
        (WebCore::gotChunkCallback):
        (WebCore::finishedCallback):
        (WebCore::parseDataUrl):
        (WebCore::startHttp):
        * platform/network/soup/ResourceRequest.h:
        * platform/network/soup/ResourceRequestSoup.cpp:

2010-10-12  Simon Fraser  <simon.fraser@apple.com>

        Screen.availLeft should be signed
        https://bugs.webkit.org/show_bug.cgi?id=34397
        
        Add the manual test missed in r69599.

        * manual-tests/screen-availLeft.html: Added.

2010-10-12  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Ariya Hidayat.

        [Qt] Windowless mode 64-bit Flash/X11 freezes when right-click is sent.

        Adds a new quirk PluginQuirkIgnoreRightClickInWindowlessMode. This
        quirk is enabled only for 64-bit Flash/X11 and should not affect other
        plugins. The freeze itself is in Flash code and the backtrace is not
        useful.

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

        * plugins/PluginPackage.cpp:
        (WebCore::PluginPackage::determineQuirks):
        * plugins/PluginQuirkSet.h:
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::handleMouseEvent):

2010-10-08  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Alexey Proskuryakov.

        Screen.availLeft should be signed
        https://bugs.webkit.org/show_bug.cgi?id=34397

        For the screen to the left of the main screen, screen.availLeft
        can be negative, so the Screen API needs to use signed numbers
        for availLeft and availTop.

        * manual-tests/screen-availLeft.html: Added.
        * page/Screen.cpp:
        (WebCore::Screen::availLeft):
        (WebCore::Screen::availTop):
        * page/Screen.h:
        * page/Screen.idl:

2010-10-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add FindController class
        https://bugs.webkit.org/show_bug.cgi?id=47555

        Export Page::findString.

        * WebCore.exp.in:

2010-10-12  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=47550
        <rdar://problem/8353386> For WebKit plug-ins, beforeload can be called recursively
        (esp. with AdBlock style extensions)

        No test - we don't have a WebKit-style plugin in DRT, and don't care enough to add one.

        The fix is to block plug-in scripting while in beforeload event - the plug-in is obviously
        not available yet, so scripting could only attempt to load it recursively.

        This didn't affect NPAPI plug-ins, because of a completely different code path taken in
        updateWidget(), see <https://bugs.webkit.org/show_bug.cgi?id=44575#c8>.

        * html/HTMLEmbedElement.cpp: (WebCore::HTMLEmbedElement::updateWidget):
        * html/HTMLObjectElement.cpp: (WebCore::HTMLObjectElement::updateWidget):
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::HTMLPlugInElement):
        (WebCore::HTMLPlugInElement::pluginWidget):
        * html/HTMLPlugInElement.h:

2010-10-12  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Gavin Barraclough.

        Unify JSC::StringBuilder & WebCore::StringBuilder
        https://bugs.webkit.org/show_bug.cgi?id=47538

        JSC::StringBuilder operates on a Vector<UChar, 64> and allows to build a string based on a stream of characters in an efficient manner.
        WebCore::StringBuilder operates on a Vector<String, 16> and allows to concat an arbitary number of Strings. It's not efficient in handling single
        characters, as a String with length=1 has to be constructed for those. An analysis of the callers of WebCore::StringBuilder shows that
        most callsites actually combine Strings and single characters, so using a Vector<UChar> would be more efficient. Those who only combine large
        strings are only used for debugging purposes, so it's fine to switch them to a Vector<UChar> approach as well.

        Replace WebCore::StringBuilder with JSC::StringBuilder, and move it to wtf/text/StringBuilder.h into the WTF namespace.
        While I was at it remove platform/text/StringBuffer.h, as it was only including wtf/text/StringBuffer.h.

        No change in functionality, thus no new tests.

        * Android.mk: Remove platform/text/StringBuilder.* and platform/text/StringBuffer.h.
        * CMakeLists.txt: Ditto.
        * GNUmakefile.am: Ditto. 
        * WebCore.gypi: Ditto.
        * WebCore.order: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * ForwardingHeaders/runtime/StringBuilder.h: Removed.
        * ForwardingHeaders/runtime/UStringBuilder.h: Added.
        * ForwardingHeaders/wtf/text/StringBuilder.h: Added.
        * bindings/js/ScriptString.h: Don't include PlatformString.h but wtf/text/WTFString.h.
        (WebCore::ScriptString::operator+=): Use JSC::UStringBuilder instead of JSC::StringBuilder.
        * bridge/jni/JNIBridge.cpp: Use WTF::StringBuilder (+ use append(const UChar) for single characters).
        * css/MediaQuery.cpp: Ditto.
        * css/MediaQueryExp.cpp: Ditto.
        * dom/Node.cpp: Ditto.
        (WebCore::Node::appendTextContent): Manually track wheter the StringBuilder content is empty or null, the new StringBuilder doesn't differentiate between null & empty strings.
        * dom/Node.h: Remove appendTextContent definition, it's not needed to be exported, removes the need for a StringBuilder.h include or forward declaration.
        * html/DOMTokenList.cpp: Use WTF::StringBuilder.
        * inspector/InspectorResource.cpp: Remove useless StringBuffer.h include.
        * platform/android/FileSystemAndroid.cpp: Use WTF::StringBuilder.
        * platform/brew/FileSystemBrew.cpp: Ditto.
        * platform/chromium/ClipboardChromium.cpp: Ditto (+ use append(const UChar) for single characters).
        * platform/graphics/gpu/PODInterval.h: Ditto (Only used as debugging helper here, in debug builds).
        * platform/graphics/gpu/PODRedBlackTree.h: Ditto (Only used as debugging helper here, in debug builds).
        * platform/graphics/mac/GraphicsLayerCA.mm: Remove useless StringBuilder.h include.
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp: Use WTF::StringBuilder, and use append(const UChar) for single characters.
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp: Ditto.
        * platform/network/ProxyServer.cpp:
        (WebCore::appendProxyServerString): Use WTF::StringBuilder.
        * platform/text/StringBuffer.h: Removed.
        * platform/text/StringBuilder.cpp: Removed.
        * platform/text/StringBuilder.h: Removed.
        * plugins/DOMMimeType.cpp: Use WTF::StringBuilder.
        * svg/SVGPathParserFactory.cpp: Ditto.
        * svg/SVGPathStringBuilder.cpp: SVGPathStringBuilder used stringBuilder.toString(ConcatAddingSpacesBetweenIndividualStrings), adapt to the change, that this mode is gone now.
        (WebCore::SVGPathStringBuilder::result): Just use toString(), append a space to the end of each command, when building the string. Remove the last trailing space before building the result.
        (WebCore::SVGPathStringBuilder::moveTo):
        (WebCore::SVGPathStringBuilder::lineTo):
        (WebCore::SVGPathStringBuilder::lineToHorizontal):
        (WebCore::SVGPathStringBuilder::lineToVertical):
        (WebCore::SVGPathStringBuilder::curveToCubic):
        (WebCore::SVGPathStringBuilder::curveToCubicSmooth):
        (WebCore::SVGPathStringBuilder::curveToQuadratic):
        (WebCore::SVGPathStringBuilder::curveToQuadraticSmooth):
        (WebCore::SVGPathStringBuilder::arcTo):
        (WebCore::SVGPathStringBuilder::closePath):
        * svg/SVGPathStringBuilder.h:
        (WebCore::SVGPathStringBuilder::cleanup): StringBuilder::clear() is gone, just cleanup by assigning StringBuilder().
        * websockets/WebSocket.cpp: Use WTF::StringBuilder.
        * websockets/WebSocketHandshake.cpp: Ditto (+ use append(const UChar) for single characters).

2010-10-12  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Reviewed by Antonio Gomes.

        [EFL] Add a missing file in CMakeListEfl.txt
        https://bugs.webkit.org/show_bug.cgi?id=47480

        IntRectEfl.cpp was missing in CMakeListEfl.txt. So, IntRectEfl.cpp is added.

        * CMakeListsEfl.txt:

2010-10-12  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Need WebKit2 API to get the cell above a table cell
        <rdar://problem/8537111>
        https://bugs.webkit.org/show_bug.cgi?id=47532

        Re-factor functionality to get the cell above a table cell
        into a function on HTMLTableCellElement and export it for use
        as SPI.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLTableCellElement.cpp:
        (WebCore::HTMLTableCellElement::cellAbove): Move implementation here...
        * html/HTMLTableCellElement.h:
        * page/Frame.cpp:
        (WebCore::Frame::searchForLabelsAboveCell): ...from here.

2010-10-12  Dave Moore  <davemoore@chromium.org>

        Reviewed by Tony Chang.

        Use new WebThemeEngine api on chromium / linux to draw scrollbars.
        https://bugs.webkit.org/show_bug.cgi?id=47473

        * platform/chromium/ChromiumBridge.h:
        * platform/chromium/ScrollbarThemeChromiumLinux.cpp:

2010-10-12  Andreas Kling  <kling@webkit.org>

        Reviewed by Antonio Gomes.

        [Qt] Clipping problem viewing SVG with WebKit
        https://bugs.webkit.org/show_bug.cgi?id=29596

        SVG path clipping (via GraphicsContext::clipPath()) was done using the
        Qt::ReplaceClip mode (default) instead of Qt::IntersectClip. This led
        to misrenderings when nesting multiple clip paths.

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

2010-10-07  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: refactoring of native breakpoints.
        https://bugs.webkit.org/show_bug.cgi?id=47360

        Make DOM, EventListener and XHR breakpoints subclasses of NativeBreakpoint class.
        Move stuff that depends on breakpoint type to corresponding subclass.

        * inspector/Inspector.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::didCommitLoad):
        (WebCore::InspectorController::setNativeBreakpoint):
        (WebCore::InspectorController::removeNativeBreakpoint):
        (WebCore::InspectorController::findEventListenerBreakpoint):
        (WebCore::InspectorController::findXHRBreakpoint):
        * inspector/InspectorController.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::setDOMBreakpoint):
        (WebCore::InspectorDOMAgent::removeDOMBreakpoint):
        (WebCore::InspectorDOMAgent::descriptionForDOMEvent):
        (WebCore::InspectorDOMAgent::didRemoveDOMNode):
        (WebCore::InspectorDOMAgent::removeBreakpointsForNode):
        (WebCore::InspectorDOMAgent::createBreakpointId):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::willInsertDOMNodeImpl):
        (WebCore::InspectorInstrumentation::willRemoveDOMNodeImpl):
        (WebCore::InspectorInstrumentation::willModifyDOMAttrImpl):
        (WebCore::InspectorInstrumentation::willSendXMLHttpRequestImpl):
        (WebCore::InspectorInstrumentation::willDispatchEventImpl):
        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager):
        (WebInspector.BreakpointManager.prototype.reset):
        (WebInspector.BreakpointManager.prototype.createDOMBreakpoint):
        (WebInspector.BreakpointManager.prototype.createEventListenerBreakpoint):
        (WebInspector.BreakpointManager.prototype.createXHRBreakpoint):
        (WebInspector.BreakpointManager.prototype._removeNativeBreakpoint):
        (WebInspector.BreakpointManager.prototype._setNativeBreakpointOnBackend.didSetNativeBreakpoint):
        (WebInspector.BreakpointManager.prototype._setNativeBreakpointOnBackend):
        (WebInspector.BreakpointManager.prototype.debuggerPaused):
        (WebInspector.BreakpointManager.prototype.debuggerResumed):
        (WebInspector.BreakpointManager.prototype.restoreDOMBreakpoints.restoreBreakpointsForNode):
        (WebInspector.BreakpointManager.prototype.restoreDOMBreakpoints):
        (WebInspector.NativeBreakpoint):
        (WebInspector.NativeBreakpoint.prototype.remove):
        (WebInspector.NativeBreakpoint.prototype.get _frontendId):
        (WebInspector.NativeBreakpoint.prototype.get _type):
        (WebInspector.NativeBreakpoint.prototype._compare):
        (WebInspector.NativeBreakpoint.prototype._onRemove):
        (WebInspector.DOMBreakpoint):
        (WebInspector.DOMBreakpoint.prototype.click):
        (WebInspector.DOMBreakpoint.prototype.compareTo):
        (WebInspector.DOMBreakpoint.prototype.populateLabelElement):
        (WebInspector.DOMBreakpoint.prototype.populateStatusMessageElement.formatters.s):
        (WebInspector.DOMBreakpoint.prototype.populateStatusMessageElement.append):
        (WebInspector.DOMBreakpoint.prototype.populateStatusMessageElement):
        (WebInspector.DOMBreakpoint.prototype._condition):
        (WebInspector.DOMBreakpoint.prototype._onRemove):
        (WebInspector.EventListenerBreakpoint):
        (WebInspector.EventListenerBreakpoint.prototype.compareTo):
        (WebInspector.EventListenerBreakpoint.prototype.label):
        (WebInspector.EventListenerBreakpoint.prototype.populateStatusMessageElement):
        (WebInspector.EventListenerBreakpoint.prototype._condition):
        (WebInspector.XHRBreakpoint):
        (WebInspector.XHRBreakpoint.prototype.compareTo):
        (WebInspector.XHRBreakpoint.prototype.populateLabelElement):
        (WebInspector.XHRBreakpoint.prototype.populateStatusMessageElement):
        (WebInspector.XHRBreakpoint.prototype._condition):
        (WebInspector.domBreakpointTypeLabel):
        (WebInspector.domBreakpointTypeContextMenuLabel):
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.BreakpointItem):
        (WebInspector.BreakpointItem.prototype._breakpointClicked):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._populate):
        * inspector/front-end/CallStackSidebarPane.js:
        (WebInspector.CallStackSidebarPane):
        (WebInspector.CallStackSidebarPane.prototype.registerShortcuts):
        (WebInspector.CallStackSidebarPane.prototype._breakpointHit):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode):
        (WebInspector.DOMAgent.prototype._setDocument):
        (WebInspector.DOMAgent.prototype._removeBreakpoints):
        (WebInspector.childNodeRemoved):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype._populateTagContextMenu):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.debuggerPaused):
        * inspector/front-end/inspector.js:
        (WebInspector.createDOMBreakpointsSidebarPane.breakpointAdded):
        (WebInspector.createDOMBreakpointsSidebarPane):
        (WebInspector.reset):

2010-10-11  Eric Uhrhane  <ericu@chromium.org>

        Reviewed by Dumitru Daniliuc.

        FileWriter should hold a reference to a Blob during write
        https://bugs.webkit.org/show_bug.cgi?id=47318

        Without this reference, the Blob might get garbage-collected from JS
        before the write has completed, which would be quite unintuitive to the
        user.  I just grab a RefPtr to the Blob at write(), then clear it when
        we're done.

        * fileapi/FileWriter.cpp:
        (WebCore::FileWriter::stop):
        (WebCore::FileWriter::write):
        (WebCore::FileWriter::didWrite):
        (WebCore::FileWriter::didFail):
        * fileapi/FileWriter.h:

2010-10-11  Michael Saboff  <msaboff@apple.com>

        Reviewed by Darin Adler.

        Changed DOMWindow to have a constructor.  Updated the code generator
        to add security checks to the constructors if CheckDomainSecurity is 
        set.  Also changed the constructor generation code to use 
        globalObject->prototype() for DOMWindow object prototypes instead
        of "self".
        https://bugs.webkit.org/show_bug.cgi?id=47422

        Test: fast/dom/Window/window-constructor.html

        * bindings/scripts/CodeGeneratorJS.pm:
        * page/DOMWindow.idl:

2010-10-11  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by Tony Chang.

        [chromium] Prepare Clipboard/DragData for transition to new drag-and-drop interface.
        https://bugs.webkit.org/show_bug.cgi?id=44992

        In order to allow a graceful transition, ChromiumDataObject has been
        reimplemented as a wrapper around the three different types of data
        objects that the Chrome port uses:
        1. ChromiumDataObjectLegacy -- this is the original ChromiumDataObject.
           All the data that ClipboardChromium/DragDataChromium can potentially
           use is copied over, regardless of whether or not it is needed.
        2. ReadableDataObject -- used for dragging in and pasting into WebKit.
           For efficiency, it caches an optimistic list of types it believes it
           can handle. When getData() is called, a browser IPC is called to
           retrieve the appropriate data.
        3. WritableDataObject -- similar to ChromiumDataObjectLegacy in that it
           buffers all data when dragging out of WebKit or copying/cutting.
           Unfortunately, there is a difference between dragging out and
           copying/cutting--on drag outs, the data is buffered and flushed out
           when startDrag() is called. For copy/cut, any calls to setData()
           result in a browser IPC right away, so calls to setData() in one
           copy/cut event are not atomic.

        Copy and paste has been changed to use the new data objects. Dragging
        out uses the legacy data object, and dragging in now has two potential
        entry points--one using the legacy data object, and one using
        ReadableDataObject. Once Chromium transitions to using the new drag-in
        interface, the old interface will be removed.

        This change is covered by existing tests.

        * WebCore.gypi:
        * editing/chromium/EditorChromium.cpp:
        (WebCore::Editor::newGeneralClipboard):
        * page/chromium/EventHandlerChromium.cpp:
        (WebCore::EventHandler::createDraggingClipboard):
        * platform/chromium/ChromiumDataObject.cpp:
        (WebCore::ChromiumDataObject::ChromiumDataObject):
        (WebCore::ChromiumDataObject::create):
        (WebCore::ChromiumDataObject::createReadable):
        (WebCore::ChromiumDataObject::createWritable):
        (WebCore::ChromiumDataObject::clearData):
        (WebCore::ChromiumDataObject::clearAll):
        (WebCore::ChromiumDataObject::clearAllExceptFiles):
        (WebCore::ChromiumDataObject::hasData):
        (WebCore::ChromiumDataObject::types):
        (WebCore::ChromiumDataObject::getData):
        (WebCore::ChromiumDataObject::setData):
        (WebCore::ChromiumDataObject::urlTitle):
        (WebCore::ChromiumDataObject::setUrlTitle):
        (WebCore::ChromiumDataObject::htmlBaseUrl):
        (WebCore::ChromiumDataObject::setHtmlBaseUrl):
        (WebCore::ChromiumDataObject::containsFilenames):
        (WebCore::ChromiumDataObject::filenames):
        (WebCore::ChromiumDataObject::setFilenames):
        (WebCore::ChromiumDataObject::fileExtension):
        (WebCore::ChromiumDataObject::setFileExtension):
        (WebCore::ChromiumDataObject::fileContentFilename):
        (WebCore::ChromiumDataObject::setFileContentFilename):
        (WebCore::ChromiumDataObject::fileContent):
        (WebCore::ChromiumDataObject::setFileContent):
        * platform/chromium/ChromiumDataObject.h:
        * platform/chromium/ChromiumDataObjectLegacy.cpp: Copied from ChromiumDataObject.cpp
        (WebCore::ChromiumDataObjectLegacy::clearData):
        (WebCore::ChromiumDataObjectLegacy::clearAll):
        (WebCore::ChromiumDataObjectLegacy::clearAllExceptFiles):
        (WebCore::ChromiumDataObjectLegacy::hasData):
        (WebCore::ChromiumDataObjectLegacy::types):
        (WebCore::ChromiumDataObjectLegacy::getData):
        (WebCore::ChromiumDataObjectLegacy::setData):
        (WebCore::ChromiumDataObjectLegacy::ChromiumDataObjectLegacy):
        * platform/chromium/ChromiumDataObjectLegacy.h: Copied from ChromiumDataObject.h
        (WebCore::ChromiumDataObjectLegacy::create):
        (WebCore::ChromiumDataObjectLegacy::copy):
        (WebCore::ChromiumDataObjectLegacy::urlTitle):
        (WebCore::ChromiumDataObjectLegacy::setUrlTitle):
        (WebCore::ChromiumDataObjectLegacy::htmlBaseUrl):
        (WebCore::ChromiumDataObjectLegacy::setHtmlBaseUrl):
        (WebCore::ChromiumDataObjectLegacy::containsFilenames):
        (WebCore::ChromiumDataObjectLegacy::filenames):
        (WebCore::ChromiumDataObjectLegacy::setFilenames):
        (WebCore::ChromiumDataObjectLegacy::fileExtension):
        (WebCore::ChromiumDataObjectLegacy::setFileExtension):
        (WebCore::ChromiumDataObjectLegacy::fileContentFilename):
        (WebCore::ChromiumDataObjectLegacy::setFileContentFilename):
        (WebCore::ChromiumDataObjectLegacy::fileContent):
        (WebCore::ChromiumDataObjectLegacy::setFileContent):
        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::ClipboardChromium::create):
        * platform/chromium/ClipboardChromium.h:
        * platform/chromium/ReadableDataObject.cpp:
        (WebCore::ReadableDataObject::getData):
        * platform/chromium/WritableDataObject.cpp:
        (WebCore::WritableDataObject::setData):

2010-10-11  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Remove WebIconFetcher from WebKit and IconFetcher from WebCore
        https://bugs.webkit.org/show_bug.cgi?id=47523

        Remove all traces of the WebCore IconFetcher class. It's SPI that nobody uses.

        * GNUmakefile.am:
        * WebCore.exp.in:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/icon/IconFetcher.cpp: Removed.
        * loader/icon/IconFetcher.h: Removed.

2010-10-11  Jia Pu  <jpu@apple.com>

        Reviewed by Adele Peterson.

        Should commit pending autocorrection before next round of text checking.
        https://bugs.webkit.org/show_bug.cgi?id=46986
        <rdar://problem/8424535>

        1. Apply pending autocorrection before calling markAllMisspellingsAndBadGrammarInRanges().
        2. Remove unneccessary calls to dismissCorrectionPanel(), since the panel is dismissed when
           selection changes, which occurs after every typing command.

        * editing/Editor.cpp:
        (WebCore::Editor::markMisspellingsAfterTypingToPosition): Apply pending autocorrection.
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges): Store current correction replacement
          in m_correctionReplacementString.
        (WebCore::Editor::startCorrectionPanelTimer): Remove call to dismissCorrectionPanel().
        * editing/Editor.h: Add m_correctionReplacementString to store proposed autocorrection string.

2010-10-11  Oliver Hunt  <oliver@apple.com>

        Reviewed by Adam Barth.

        Make fast/canvas/webgl/glsl-conformance pass again
        https://bugs.webkit.org/show_bug.cgi?id=47525

        Remove incorrect call to glGetShaderiv, so it is only
        called in the case where we don't have our own simulated
        log.

        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::getShaderInfoLog):

2010-10-11  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add WebKit2 equivalents for setValueForUser and setAutoFilled
        <rdar://problem/8475934>
        https://bugs.webkit.org/show_bug.cgi?id=47524

        * WebCore.exp.in: Add needed export.

2010-10-11  Andrei Popescu  <andreip@google.com>

        Reviewed by Jeremy Orlow.

        The names of IndexedDB-specific attributes of DOMWindow should be prefixed with 'webkit'.
        https://bugs.webkit.org/show_bug.cgi?id=47508

        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setWebkitIndexedDBEnabled):
        (WebCore::RuntimeEnabledFeatures::webkitIndexedDBEnabled):
        (WebCore::RuntimeEnabledFeatures::webkitIDBCursorEnabled):
        (WebCore::RuntimeEnabledFeatures::webkitIDBDatabaseEnabled):
        (WebCore::RuntimeEnabledFeatures::webkitIDBDatabaseErrorEnabled):
        (WebCore::RuntimeEnabledFeatures::webkitIDBDatabaseExceptionEnabled):
        (WebCore::RuntimeEnabledFeatures::webkitIDBErrorEventEnabled):
        (WebCore::RuntimeEnabledFeatures::webkitIDBEventEnabled):
        (WebCore::RuntimeEnabledFeatures::webkitIDBFactoryEnabled):
        (WebCore::RuntimeEnabledFeatures::webkitIDBIndexEnabled):
        (WebCore::RuntimeEnabledFeatures::webkitIDBKeyRangeEnabled):
        (WebCore::RuntimeEnabledFeatures::webkitIDBObjectStoreEnabled):
        (WebCore::RuntimeEnabledFeatures::webkitIDBRequestEnabled):
        (WebCore::RuntimeEnabledFeatures::webkitIDBSuccessEventEnabled):
        (WebCore::RuntimeEnabledFeatures::webkitIDBTransactionEnabled):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::webkitIndexedDB):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:

2010-10-11  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add ability to convert from a JSObjectRef back to a WKBundleNodeHandleRef
        https://bugs.webkit.org/show_bug.cgi?id=47509

        * WebCore.exp.in: Export toNode.

2010-10-11  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Tony Chang.

        [GTK] editing/pasteboard/dataTransfer-setData-getData.html fails on GTK+
        https://bugs.webkit.org/show_bug.cgi?id=47244

        Store the URI list as a String in DataObjectGtk, so that non-URI elements
        are preserved when getData(...) is called. This necessitates some other
        changes, including adding a m_filenames member to DataObjectGtk to store
        filenames extracted during setURIList(...). The logic in getData(...) has
        also changed to set success = true no matter what to match the spec. A
        followup patch will remove this parameter completely for all platforms.

        * platform/gtk/ClipboardGtk.cpp:
        (WebCore::ClipboardGtk::getData): Always succeed to match the HTML5
        spec and Firefox. Simply return the uriList string from the DataObject
        instead of reconstructing it from a vector of KURLs.
        (WebCore::ClipboardGtk::setData): The DataObject now accepts a string
        for the uriList parameter.
        (WebCore::ClipboardGtk::types): Predicate the "Files" member on 
        DataObjectGtk::hasFilenames().
        (WebCore::ClipboardGtk::files): Update to reflect the change from
        DataObjectGtk::files() to DataObjectGtk::filenames().
        * platform/gtk/DataObjectGtk.cpp:
        (WebCore::DataObjectGtk::setURIList): Expanded this setter to find the
        first valid URL to use as the m_url member and also extract a list of filenames
        from the URI list.
        (WebCore::DataObjectGtk::setURL): Updated to reflect changes to m_uriList.
        (WebCore::DataObjectGtk::clear): Updated to reflect changes to m_uriList and
        also leave a comment explaining why we do not clear filenames here.
        * platform/gtk/DataObjectGtk.h:
        (WebCore::DataObjectGtk::url): This implementation is now a simple getter.
        (WebCore::DataObjectGtk::uriList): Ditto.
        (WebCore::DataObjectGtk::filenames): Added.
        (WebCore::DataObjectGtk::hasURL): Now a simple check.
        (WebCore::DataObjectGtk::hasFilenames): Added.
        (WebCore::DataObjectGtk::clearURIList): Simple setter.
        (WebCore::DataObjectGtk::clearURL): Ditto.
        * platform/gtk/DragDataGtk.cpp:
        (WebCore::DragData::containsFiles): Updated to access DataObjectGtk::hasFilenames().
        (WebCore::DragData::asFilenames): Updated to access DataObjectGtk::filenames().
        * platform/gtk/PasteboardHelper.cpp:
        (WebCore::PasteboardHelper::getClipboardContents): Use the uriList as a string now.
        (WebCore::PasteboardHelper::fillSelectionData):  Ditto.
        (WebCore::PasteboardHelper::fillDataObjectFromDropData): Ditto.

2010-10-11  James Robinson  <jamesr@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] DRT crash in fast/canvas tests w/accel 2D canvas due to NULL DrawingBuffer
        https://bugs.webkit.org/show_bug.cgi?id=47241

        Avoid initializing accelerated graphics objects on CanvasRenderingContext2D
        if there is no drawingContext associated with the canvas.

        Test: fast/canvas/access-zero-sized-canvas.html
              fast/canvas/canvas-skia-excessive-size.html
              fast/canvas/toDataURL-noData.html
        with --accelerated-compositing and --accelerated-2d-canvas

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

2010-10-11  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] Cleanup font selection code for the Freetype backend
        https://bugs.webkit.org/show_bug.cgi?id=47503

        Do some miscellaneous cleanup work in the Freetype font font selection backend.

        * platform/graphics/cairo/FontCacheFreeType.cpp:
        (WebCore::getFamilyNameStringFromFontDescriptionAndFamily): Modified this method to return
        a WebCore String.
        (WebCore::FontCache::createFontPlatformData): Do a bit of cleanup in this method: properly
        handle cursive and fantasy as fallback-like fonts. Instead of using raw CStrings do string
        comparisons using WebCore Strings. Remove a large block comment that originated from a
        Apache-licensed file.

2010-10-11  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] Buttons activated with the keyboard should be painted as clicked
        https://bugs.webkit.org/show_bug.cgi?id=18364

        When a button is pressed, force it into the hovered state as far as the
        Mozilla theme drawing code is concerned. This bug also seems to be an
        issue for Firefox. When we switch away from the Mozilla theme drawing
        code this work-around should no longer be necessary.

        No new tests. I was not able to generate a pixel test for this issue. It
        seems that our DRT does not have the necessary infrastructure to generate a
        pixel dump while a button is in the pressed state.

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

2010-10-11  Jian Li  <jianli@chromium.org>

        Unreviewed. Build fix.

        * bindings/js/JSArrayBufferCustom.cpp:
        * bindings/js/JSArrayBufferViewCustom.cpp:
        * bindings/js/JSFloat32ArrayCustom.cpp:
        * bindings/js/JSInt16ArrayCustom.cpp:
        * bindings/js/JSInt32ArrayCustom.cpp:
        * bindings/js/JSInt8ArrayCustom.cpp:
        * bindings/js/JSUint16ArrayCustom.cpp:
        * bindings/js/JSUint32ArrayCustom.cpp:
        * bindings/js/JSUint8ArrayCustom.cpp:
        * bindings/v8/custom/V8ArrayBufferCustom.cpp:
        * bindings/v8/custom/V8ArrayBufferViewCustom.cpp:
        * bindings/v8/custom/V8Float32ArrayCustom.cpp:
        * bindings/v8/custom/V8Int16ArrayCustom.cpp:
        * bindings/v8/custom/V8Int32ArrayCustom.cpp:
        * bindings/v8/custom/V8Int8ArrayCustom.cpp:
        * bindings/v8/custom/V8Uint16ArrayCustom.cpp:
        * bindings/v8/custom/V8Uint32ArrayCustom.cpp:
        * bindings/v8/custom/V8Uint8ArrayCustom.cpp:

2010-10-11  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed WinCairo build fixes.

        * platform/network/curl/ResourceResponse.h: Correct forward declaration
        for CFURLResponseRef.
        * rendering/RenderMediaControls.h: Add ENABLE(VIDEO) guard to new
        header file to avoid build failure on non-VIDEO builds.

2010-10-11  Jian Li  <jianli@chromium.org>

        Reviewed by Adam Barth.

        Add File API feature guard to all typed array files
        https://bugs.webkit.org/show_bug.cgi?id=47437

        Since we're going to add ArrayBuffer support to FileReader and BlobBuilder,
        we need to update all type array files to include File API feature guard
        in addition to the existing 3D_CANVAS guard. When ArrayBuffer is used in
        XMLHttpRequest, we will then remove all the guards. This is per the
        discussion on webkit-dev mailing list:
        https://lists.webkit.org/pipermail/webkit-dev/2010-October/014716.html

        * html/canvas/ArrayBuffer.cpp:
        * html/canvas/ArrayBuffer.idl:
        * html/canvas/ArrayBufferView.cpp:
        * html/canvas/ArrayBufferView.idl:
        * html/canvas/Float32Array.cpp:
        * html/canvas/Float32Array.idl:
        * html/canvas/Int16Array.cpp:
        * html/canvas/Int16Array.idl:
        * html/canvas/Int32Array.cpp:
        * html/canvas/Int32Array.idl:
        * html/canvas/Int8Array.cpp:
        * html/canvas/Int8Array.idl:
        * html/canvas/Uint16Array.cpp:
        * html/canvas/Uint16Array.idl:
        * html/canvas/Uint32Array.cpp:
        * html/canvas/Uint32Array.idl:
        * html/canvas/Uint8Array.cpp:
        * html/canvas/Uint8Array.idl:

2010-10-11  Andreas Kling  <kling@webkit.org>

        Build fix (implicit float conversion in Path.cpp)

        * platform/graphics/Path.cpp:

2010-10-11  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Refactor Plugin X Pixmap painting code to a separate function

        The refactored function will be used for rendering by the Accelerated
        Composition enabled graphics layer.

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

        * plugins/PluginView.h:
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::paintUsingXPixmap):
        (WebCore::PluginView::paint):

2010-10-11  Andreas Kling  <kling@webkit.org>

        Reviewed by Dirk Schulze.

        SVG: Remove "create" methods and use port-specific "add" counterparts
        https://bugs.webkit.org/show_bug.cgi?id=46052

        Circles and ellipses will be significantly faster on platforms that
        implement Path::addEllipse() in a sane fashion.

        Also, a lot of Path copying has been factored out by changing functions
        that would return Paths to take Path& arguments instead (toPathData, toClipPath)

        * mathml/RenderMathMLRoot.cpp:
        (WebCore::RenderMathMLRoot::paint):
        * mathml/RenderMathMLSquareRoot.cpp:
        (WebCore::RenderMathMLSquareRoot::paint):
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::addRoundedRectClip):
        (WebCore::GraphicsContext::clipOutRoundedRect):
        * platform/graphics/Path.cpp:
        (WebCore::pathLengthApplierFunction):
        (WebCore::Path::addRoundedRect):
        * platform/graphics/Path.h:
        * platform/graphics/cairo/ContextShadowCairo.cpp:
        (WebCore::ContextShadow::drawRectShadowWithoutTiling):
        (WebCore::ContextShadow::drawRectShadow):
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawFocusRing):
        (WebCore::GraphicsContext::drawTiledShadow):
        (WebCore::GraphicsContext::fillRoundedRect):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::fillRoundedRect):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::fillRoundedRect):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintBorder):
        (WebCore::RenderBoxModelObject::paintBoxShadow):
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::getReplacementTextGeometry):
        * rendering/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::pathOnlyClipping):
        * rendering/svg/RenderSVGPath.cpp:
        (WebCore::RenderSVGPath::layout):
        * rendering/svg/RenderSVGTextPath.cpp:
        (WebCore::RenderSVGTextPath::layoutPath):
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::paintDecorationWithStyle):
        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::animationPath):
        * svg/SVGCircleElement.cpp:
        (WebCore::SVGCircleElement::toPathData):
        * svg/SVGCircleElement.h:
        * svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::toPathData):
        * svg/SVGEllipseElement.h:
        * svg/SVGLineElement.cpp:
        (WebCore::SVGLineElement::toPathData):
        * svg/SVGLineElement.h:
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::getTotalLength):
        (WebCore::SVGPathElement::getPointAtLength):
        (WebCore::SVGPathElement::toPathData):
        * svg/SVGPathElement.h:
        * svg/SVGPolygonElement.cpp:
        (WebCore::SVGPolygonElement::toPathData):
        * svg/SVGPolygonElement.h:
        * svg/SVGPolylineElement.cpp:
        (WebCore::SVGPolylineElement::toPathData):
        * svg/SVGPolylineElement.h:
        * svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::toPathData):
        * svg/SVGRectElement.h:
        * svg/SVGStyledTransformableElement.cpp:
        (WebCore::SVGStyledTransformableElement::toClipPath):
        * svg/SVGStyledTransformableElement.h:
        (WebCore::SVGStyledTransformableElement::toPathData):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::toClipPath):
        * svg/SVGUseElement.h:

2010-10-01  Oliver Hunt  <oliver@apple.com>

        Reviewed by Gavin Barraclough.

        [ES5] Implement strict mode
        https://bugs.webkit.org/show_bug.cgi?id=10701

        Test: fast/js/basic-strict-mode.html

        Override toStrictThisObject on the domwindow so that
        it correctly provides the shell object when used as this
        in a strict mode function.

        * bindings/js/JSDOMWindowBase.cpp:
        (WebCore::JSDOMWindowBase::toStrictThisObject):
        * bindings/js/JSDOMWindowBase.h:

2010-10-11  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Eric Carlson.

        CRASH at WebCore::HTMLSourceElement::scheduleErrorEvent
        https://bugs.webkit.org/show_bug.cgi?id=46777

        Another case that could lead to an improper set of states between
        m_currentNode and m_loadingState. Also added an ASSERT and early
        return to prevent crashes if this case can still happen in other ways.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::prepareForLoad):

2010-10-11  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        spellcheck="false" not respected in designMode
        https://bugs.webkit.org/show_bug.cgi?id=39978

        The bug was caused by WebKit's setting focus to html element rather than body element in design mode.
        Because we disable spell-check only if ancestor nodes of the focused element had spellcheck=false,
        this caused us to ignore body element's spellcheck attribute.

        Fixed the bug by overriding supportsFocus in HTMLBodyElement to make body element focusable
        when the parent node of body elements (namely html element) is editable.

        Test: editing/spelling/design-mode-spellcheck-off.html

        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::supportsFocus): Added.
        * html/HTMLBodyElement.h:

2010-10-11  Oliver Hunt  <oliver@apple.com>

        Build fix -- I thought i had killed the prior commit in time to have this be part of the commit.

        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::getShaderInfoLog):

2010-10-11  Oliver Hunt  <oliver@apple.com>

        Reviewed by Andreas Kling.

        Incorrect handling of 0 length logs in GraphicsContext3DOpenGL.cpp
        https://bugs.webkit.org/show_bug.cgi?id=47494

        Working on another patch I found that there was some screwy behaviour
        when dealing with logs from GL.  GL_INFO_LOG_LENGTH is defined as being
        zero if there is no log message, but we did not check for that case and
        simply perfomed a zero sized alloc and passed the resultant buffer to
        glGetShaderInfoLog, etc.  glGetShaderInfoLog would then write a null
        terminator to the buffer, thus causing an overflow.  This is obviously
        not a problem in practice as allocations are at least 4 bytes long in
        all common allocators, but it is still a bug.

        I also removed some unnecessary null checks following calls to fastMalloc.

        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::getProgramInfoLog):
        (WebCore::GraphicsContext3D::getShaderInfoLog):

2010-10-11  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Andreas Kling.

        Kill Path::debugString()
        https://bugs.webkit.org/show_bug.cgi?id=47493

        Remove the obsolete Path::debugString() method. DRT now dumps paths in a platform independant way.

        * platform/graphics/Path.h:
        * platform/graphics/cairo/PathCairo.cpp:
        * platform/graphics/cg/PathCG.cpp:
        * platform/graphics/haiku/PathHaiku.cpp:
        * platform/graphics/openvg/PathOpenVG.cpp:
        * platform/graphics/qt/PathQt.cpp:
        * platform/graphics/skia/PathSkia.cpp:
        * platform/graphics/wince/PathWinCE.cpp:
        * platform/graphics/wince/PlatformPathWinCE.cpp:
        * platform/graphics/wince/PlatformPathWinCE.h:
        * platform/graphics/wx/PathWx.cpp:
        * svg/SVGGlyphElement.h:
        (WebCore::SVGGlyphIdentifier::operator==):

2010-10-11  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Search field icons should be centered vertically in the field
        https://bugs.webkit.org/show_bug.cgi?id=47441

        Center search field icons vertically in the search field.

        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::centerRectVerticallyInParentInputElement): Added this helper.
        (WebCore::RenderThemeGtk::paintSearchFieldResultsDecoration): Center the search
        field icon by adjusting its drawing rect relative to the containing search field.
        (WebCore::RenderThemeGtk::paintSearchFieldCancelButton): Ditto.

2010-10-11  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: fix event listener breakpoints sidebar pane style
        https://bugs.webkit.org/show_bug.cgi?id=47487

        * inspector/front-end/inspector.css:
        (.section .properties, .event-bar .event-properties):
        (.section.expanded .properties, .event-bar.expanded .event-properties):
        (.properties-tree):
        (.properties-tree li):
        (.properties-tree li.parent):
        (.properties-tree li.parent::before):
        (.properties-tree li.parent.expanded::before):
        (.properties-tree li .info):
        (.properties-tree ol, .stack-trace ol, ol.stack-trace):
        (.properties-tree ol.expanded, .stack-trace ol, ol.stack-trace):
        (ol.stack-trace):
        (.event-listener-breakpoints .event-category):
        (.event-listener-breakpoints.properties-tree .children li):
        (.event-listener-breakpoints .checkbox-elem):
        (.breakpoint-list .breakpoint-hit):

2010-10-11  Andreas Kling  <kling@webkit.org>

        Reviewed by Tor Arne Vestbø.

        [Qt] Avoid QPainterPath::operator=(QPainterPath()) when possible

        Same concept as <http://trac.webkit.org/changeset/69462>, do nothing
        when clearing an already empty QPainterPath. Avoids one delete+new.

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContextPlatformPrivate::clearCurrentPath):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::beginPath):

2010-10-11  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Unreviewed. Remove unnecessary GTK+ and Pango includes.

        * platform/gtk/FileChooserGtk.cpp:
        * platform/gtk/Language.cpp:

2010-10-11  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by David Levin.

        Support DirectoryEntry.removeRecursively for FileSystem API
        https://bugs.webkit.org/show_bug.cgi?id=47400

        Also disallows remove/removeRecursively on the root directory.

        Test: fast/filesystem/op-remove.html

        * fileapi/DOMFileSystemBase.cpp:
        (WebCore::DOMFileSystemBase::removeRecursively): Added.
        * fileapi/DOMFileSystemBase.h:
        * fileapi/DirectoryEntry.cpp:
        (WebCore::DirectoryEntry::removeRecursively): Added.
        * fileapi/DirectoryEntry.h:
        * fileapi/DirectoryEntry.idl:
        * fileapi/DirectoryEntrySync.cpp:
        (WebCore::DirectoryEntrySync::removeRecursively): Added.
        * fileapi/DirectoryEntrySync.h:
        * fileapi/DirectoryEntrySync.idl:
        * platform/AsyncFileSystem.h:

2010-10-11  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        SVG feImage take preserveAspectRatio into account for absolute paint rect
        https://bugs.webkit.org/show_bug.cgi?id=47464

        Determine the smallest effect region for SVGFEImage by taking preserveAspectRatio into account.

        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::FEImage::determineAbsolutePaintRect):
        (WebCore::FEImage::apply):
        * svg/graphics/filters/SVGFEImage.h:

2010-10-10  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Dan Bernstein.

        <rdar://problem/8510200> Lines flow around a float that has been removed 

        Overhanging floats are not added to flexible boxes since they behave like
        block formatting contexts. This causes the intruding floats added in siblings
        to not get cleared. Enforce the float release by checking if the parent is a
        flexible box and if yes, use that as the outermost block.
        
        https://bugs.webkit.org/show_bug.cgi?id=47104

        Test: fast/flexbox/overhanging-floats-removed.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::removeFloatingOrPositionedChildFromBlockLists):

2010-10-10  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        AX: if aria-live is on a <span> or ignored element, live regions don't work
        https://bugs.webkit.org/show_bug.cgi?id=47443

        If an element has aria attributes, but has no other native role associated with it,
        accessibility should fallback to exposing that element as an AXGroup.

        Test: platform/mac/accessibility/live-region-on-span.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):

2010-10-10  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by Adam Barth.

        [chromium] Clipboard no longer accepts 'text' as a synonym for 'text/plain'
        https://bugs.webkit.org/show_bug.cgi?id=47419

        This was a regression introduced in r68807. mimeTypeText had the incorrect
        value.

        Test: editing/pasteboard/dataTransfer-setData-getData.html

        * platform/chromium/ClipboardMimeTypes.cpp:

2010-10-09  Eric Uhrhane  <ericu@chromium.org>

        Reviewed by Andreas Kling.

        FileWriter sends write event instead of progress event
        https://bugs.webkit.org/show_bug.cgi?id=47454

        No new tests; FileWriter tests will be added shortly, but currently
        there's no implementation capable of running them.

        * fileapi/FileWriter.cpp:
        (WebCore::FileWriter::didWrite):

2010-10-09  Andreas Kling  <kling@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Fast-path in Path::clear() for already empty paths
        https://bugs.webkit.org/show_bug.cgi?id=47460

        The only way to clear a QPainterPath is to assign QPainterPath() to it.
        Avoid creating a temporary object etc if the path is already empty.

        * platform/graphics/qt/PathQt.cpp:
        (WebCore::Path::clear):

2010-10-08  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        Redo in ReplaceNodeWithSpanCommand is broken
        https://bugs.webkit.org/show_bug.cgi?id=47428

        The bug was caused by ReplaceNodeWithSpanCommand's inheriting from CompositeEditCommand,
        and ReplaceNodeWithSpanCommand's not implementing doReapply. Because ReplaceNodeWithSpanCommand's doApply
        directly modifies DOM and does not use simple edit commands while CompositeEditCommand's doReapply
        only calls reapply of compositing simple edit commands, ReplaceNodeWithSpanCommand's doReapply was no-op.

        Fixed the bug by changing the base class of ReplaceNodeWithSpanCommand to SimpleEditCommand.
        This allows ReplaceNodeWithSpanCommand's doReapply to call its doApply, which already supports redo operation.

        Test: editing/undo/replace-by-span-then-remove.html

        * editing/ReplaceNodeWithSpanCommand.cpp:
        (WebCore::ReplaceNodeWithSpanCommand::ReplaceNodeWithSpanCommand):
        * editing/ReplaceNodeWithSpanCommand.h:

2010-10-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Implement subregion rendering in WebView when using gtk3
        https://bugs.webkit.org/show_bug.cgi?id=47411

        * GNUmakefile.am:
        * platform/graphics/FloatRect.h:
        * platform/graphics/cairo/FloatRectCairo.cpp: Added.
        (WebCore::FloatRect::FloatRect):
        (WebCore::FloatRect::operator cairo_rectangle_t):

2010-10-09  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Implement subregion rendering in WebView when using gtk3
        https://bugs.webkit.org/show_bug.cgi?id=47411

        * GNUmakefile.am:
        * platform/graphics/FloatRect.h:
        * platform/graphics/cairo/FloatRectCairo.cpp: Added.
        (WebCore::FloatRect::FloatRect):
        (WebCore::FloatRect::operator cairo_rectangle_t):

2010-10-09  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Andreas Kling.

        Add ENABLE(ACCELERATED_2D_CANVAS) guard for m_uploadTexture
        https://bugs.webkit.org/show_bug.cgi?id=47114

        PlatformContextSkia's m_uploadTexture is used only in code guarded with ENABLE(ACCELERATED_2D_CANVAS).

        * platform/graphics/skia/PlatformContextSkia.h:

2010-10-09  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Barth.

        Use WTF::StringHasher for hashing MappedAttributeKey
        https://bugs.webkit.org/show_bug.cgi?id=46516

        * dom/StyledElement.cpp:
        (WebCore::MappedAttributeHash::hash):

2010-10-09  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [Gtk] Non-rectangular buttons have a square background behind them
        https://bugs.webkit.org/show_bug.cgi?id=23569

        Remove some code which was clearing pieces of the GdkDrawable if it was
        currently mapped to a window. In our case it is unnecessary, because the
        platform-independent parts of the render have already cleared this section
        if it is needed.

        Mozilla must not trip this code path, which means they are probably rendering
        most often to a non-mapped GdkPixmap.

        No new tests as some themed rendering is covered by existing tests that
        render buttons. This particular bug is very hard to test as it only appears
        with certain GTK+ themes and we currently have no mechanism to test different
        themes in DRT.

        * platform/gtk/gtk2drawing.c:
        (moz_gtk_button_paint): Remove unnecessary code.

2010-10-09  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Slider padding translate into a larger track rect
        https://bugs.webkit.org/show_bug.cgi?id=47435

        Instead of painting the track rectangle for ranges onto the entire RenderBox
        rectangle, simply paint it on the content rectangle. This prevents misrendering
        sliders with padding.

        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::paintSliderTrack): Paint onto the absoluteContentRect
        of the slider instead of the entire area (which includes padding).

2010-10-09  Kent Tamura  <tkent@chromium.org>

        Unreviewed, trivial regression fix for r69445.

        RangeInputType::supportsRequired() should return false.
        https://bugs.webkit.org/show_bug.cgi?id=47405

        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::supportsRequired):
        * html/RangeInputType.h:

2010-10-09  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        Refactor HTMLInputElement: Move typeMismatch(), valueMissing(),
        isRequiredFormControl(), and recalcWillValidate()
        https://bugs.webkit.org/show_bug.cgi?id=47405

        Also make checkedRadioButtons() an inline member function of
        HTMLInputElement in order that RadioInputType can use it.

        * html/BaseDateAndTimeInputType.cpp:
        (WebCore::BaseDateAndTimeInputType::typeMismatchFor):
        (WebCore::BaseDateAndTimeInputType::typeMismatch):
        * html/BaseDateAndTimeInputType.h:
        * html/ButtonInputType.cpp:
        (WebCore::ButtonInputType::supportsValidation):
        * html/ButtonInputType.h:
        * html/CheckboxInputType.cpp:
        (WebCore::CheckboxInputType::valueMissing):
        * html/CheckboxInputType.h:
        * html/ColorInputType.cpp:
        (WebCore::isValidColorString):
        (WebCore::ColorInputType::typeMismatchFor):
        (WebCore::ColorInputType::typeMismatch):
        (WebCore::ColorInputType::supportsRequired):
        * html/ColorInputType.h:
        * html/EmailInputType.cpp:
        (WebCore::isValidEmailAddress):
        (WebCore::EmailInputType::typeMismatchFor):
        (WebCore::EmailInputType::typeMismatch):
        * html/EmailInputType.h:
        * html/FileInputType.cpp:
        (WebCore::FileInputType::valueMissing):
        * html/FileInputType.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::updateCheckedRadioButtons):
        (WebCore::HTMLInputElement::isValidValue):
        (WebCore::HTMLInputElement::typeMismatch):
        (WebCore::HTMLInputElement::valueMissing):
        (WebCore::HTMLInputElement::isKeyboardFocusable):
        (WebCore::HTMLInputElement::updateType):
        (WebCore::HTMLInputElement::parseMappedAttribute):
        (WebCore::HTMLInputElement::setChecked):
        (WebCore::HTMLInputElement::preDispatchEventHandler):
        (WebCore::HTMLInputElement::isRequiredFormControl):
        (WebCore::HTMLInputElement::recalcWillValidate):
        * html/HTMLInputElement.h:
        (WebCore::HTMLInputElement::checkedRadioButtons):
        * html/HiddenInputType.cpp:
        (WebCore::HiddenInputType::supportsValidation):
        * html/HiddenInputType.h:
        * html/ImageInputType.cpp:
        (WebCore::ImageInputType::supportsValidation):
        * html/ImageInputType.h:
        * html/InputType.cpp:
        (WebCore::InputType::supportsValidation):
        (WebCore::InputType::typeMismatchFor):
        (WebCore::InputType::typeMismatch):
        (WebCore::InputType::supportsRequired):
        (WebCore::InputType::valueMissing):
        * html/InputType.h:
        * html/IsIndexInputType.cpp:
        (WebCore::IsIndexInputType::supportsRequired):
        * html/IsIndexInputType.h:
        * html/NumberInputType.cpp:
        (WebCore::NumberInputType::typeMismatchFor):
        (WebCore::NumberInputType::typeMismatch):
        * html/NumberInputType.h:
        * html/RadioInputType.cpp:
        (WebCore::RadioInputType::valueMissing):
        * html/RadioInputType.h:
        * html/ResetInputType.cpp:
        (WebCore::ResetInputType::supportsValidation):
        * html/ResetInputType.h:
        * html/SubmitInputType.cpp:
        (WebCore::SubmitInputType::supportsValidation):
        * html/SubmitInputType.h:
        * html/TextFieldInputType.cpp:
        (WebCore::TextFieldInputType::valueMissing):
        * html/TextFieldInputType.h:
        * html/URLInputType.cpp:
        (WebCore::URLInputType::typeMismatchFor):
        (WebCore::URLInputType::typeMismatch):
        * html/URLInputType.h:
        * html/ValidityState.cpp:
        (WebCore::ValidityState::typeMismatch):

2010-10-09  Pratik Solanki  <psolanki@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=47450
        Crash in WebCore::SocketStreamHandle::chooseProxyFromArray because proxyArray passed is nil
        <rdar://problem/8244376>

        * platform/network/cf/SocketStreamHandleCFNet.cpp:
        (WebCore::SocketStreamHandle::chooseProxyFromArray): If proxyArray is
        NULL, return early to avoid crash.

2010-10-08  Chris Rogers  <crogers@google.com>

        Reviewed by James Robinson.

        Add HRTFPanner files
        https://bugs.webkit.org/show_bug.cgi?id=46299

        No new tests since audio API is not yet implemented.

        * platform/audio/HRTFPanner.cpp: Added.
        (WebCore::HRTFPanner::HRTFPanner):
        (WebCore::HRTFPanner::~HRTFPanner):
        (WebCore::HRTFPanner::fftSizeForSampleRate):
        (WebCore::HRTFPanner::reset):
        (WebCore::wrapDistance):
        (WebCore::HRTFPanner::calculateDesiredAzimuthIndexAndBlend):
        (WebCore::HRTFPanner::pan):
        * platform/audio/HRTFPanner.h: Added.
        (WebCore::HRTFPanner::fftSize):
        (WebCore::HRTFPanner::sampleRate):

2010-10-08  James Robinson  <jamesr@chromium.org>

        Reviewed by Adam Barth.

        Avoid inlining large and/or virtual functions in widely included header files
        https://bugs.webkit.org/show_bug.cgi?id=47230

        Functions with very large bodies should not be included in widely included header files.
        This results in the function's code ending up included in hundreds of object files that
        the linker has to discard, at a cost of linker memory use, link time, and disk space. This
        is a particular problem in the Chromium windows build where MSVC often exhausts its 32-bit
        virtual address space and completely fails to link.

        This patch moves function definitions from the .h to the corresponding .cpp when the function
        is large and not a candidate for inlining either because it is virtual or because its size is
        above any reasonable compiler's threshhold for inlining.  The most common case by far in this
        patch is changing a class' implicitly defined destructor to an explicitly declared d'tor in
        the header and an explicitly defined d'tor in the .cpp.  This is important since many of our
        container and utility classes (especially Vector, String, and HashSet) have quite large
        destructors.

        This patch removes 22.4MB of object file size in a debug 64 bit compile.

        * css/CSSBorderImageValue.cpp:
        (WebCore::CSSBorderImageValue::~CSSBorderImageValue):
        * css/CSSBorderImageValue.h:
        * css/CSSFontFaceSrcValue.cpp:
        (WebCore::CSSFontFaceSrcValue::~CSSFontFaceSrcValue):
        * css/CSSFontFaceSrcValue.h:
        * css/CSSFunctionValue.h:
        * dom/BeforeTextInsertedEvent.cpp:
        (WebCore::BeforeTextInsertedEvent::~BeforeTextInsertedEvent):
        * dom/BeforeTextInsertedEvent.h:
        * dom/BeforeUnloadEvent.cpp:
        (WebCore::BeforeUnloadEvent::~BeforeUnloadEvent):
        * dom/BeforeUnloadEvent.h:
        * dom/ClassNodeList.h:
        * dom/ClipboardEvent.cpp:
        (WebCore::ClipboardEvent::~ClipboardEvent):
        * dom/ClipboardEvent.h:
        * dom/CustomEvent.cpp:
        (WebCore::CustomEvent::~CustomEvent):
        * dom/CustomEvent.h:
        * dom/Element.cpp:
        * dom/Element.h:
        * dom/EventTarget.cpp:
        (WebCore::EventTargetData::EventTargetData):
        * dom/EventTarget.h:
        * dom/InputElement.cpp:
        (WebCore::InputElementData::~InputElementData):
        * dom/InputElement.h:
        * dom/MutationEvent.cpp:
        (WebCore::MutationEvent::~MutationEvent):
        * dom/MutationEvent.h:
        * dom/Node.cpp:
        (WebCore::Node::refEventTarget):
        (WebCore::Node::derefEventTarget):
        * dom/Node.h:
        * dom/OptionElement.cpp:
        (WebCore::OptionElementData::~OptionElementData):
        * dom/OptionElement.h:
        * dom/PopStateEvent.cpp:
        (WebCore::PopStateEvent::~PopStateEvent):
        * dom/PopStateEvent.h:
        * dom/QualifiedName.cpp:
        (WebCore::QualifiedName::~QualifiedName):
        * dom/QualifiedName.h:
        * dom/SelectElement.cpp:
        (WebCore::SelectElementData::~SelectElementData):
        * dom/SelectElement.h:
        * dom/StaticHashSetNodeList.cpp:
        (WebCore::StaticHashSetNodeList::StaticHashSetNodeList):
        (WebCore::StaticHashSetNodeList::~StaticHashSetNodeList):
        * dom/StaticHashSetNodeList.h:
        * dom/StyleElement.cpp:
        (WebCore::StyleElement::~StyleElement):
        * dom/StyleElement.h:
        * dom/TouchEvent.cpp:
        (WebCore::TouchEvent::TouchEvent):
        (WebCore::TouchEvent::~TouchEvent):
        * dom/TouchEvent.h:
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::~CompositeEditCommand):
        * editing/CompositeEditCommand.h:
        * editing/TextIterator.cpp:
        (WebCore::BitStack::~BitStack):
        (WebCore::TextIterator::~TextIterator):
        (WebCore::WordAwareIterator::~WordAwareIterator):
        * editing/TextIterator.h:
        * inspector/InspectorValues.cpp:
        (WebCore::InspectorObject::~InspectorObject):
        (WebCore::InspectorObject::InspectorObject):
        (WebCore::InspectorArray::~InspectorArray):
        (WebCore::InspectorArray::InspectorArray):
        * inspector/InspectorValues.h:
        * loader/CachedResource.cpp:
        (WebCore::CachedResource::registerHandle):
        (WebCore::CachedResource::unregisterHandle):
        * loader/CachedResource.h:
        * platform/network/HTTPHeaderMap.cpp:
        (WebCore::HTTPHeaderMap::HTTPHeaderMap):
        (WebCore::HTTPHeaderMap::~HTTPHeaderMap):
        (WebCore::HTTPHeaderMap::get):
        (WebCore::HTTPHeaderMap::add):
        * platform/network/HTTPHeaderMap.h:
        * rendering/RenderApplet.cpp:
        (WebCore::RenderApplet::~RenderApplet):
        * rendering/RenderApplet.h:
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::~RenderButton):
        * rendering/RenderButton.h:
        * rendering/RenderCounter.cpp:
        (WebCore::RenderCounter::~RenderCounter):
        * rendering/RenderCounter.h:
        * rendering/RenderFieldset.h:
        * rendering/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::~RenderForeignObject):
        * rendering/RenderForeignObject.h:
        * rendering/RenderFrame.h:
        * rendering/RenderFrameBase.h:
        * rendering/RenderHTMLCanvas.h:
        * rendering/RenderIFrame.h:
        * rendering/RenderInline.h:
        * rendering/RenderListItem.h:
        * rendering/RenderMarquee.cpp:
        (WebCore::RenderMarquee::~RenderMarquee):
        * rendering/RenderMarquee.h:
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::~RenderPath):
        * rendering/RenderPath.h:
        * rendering/RenderSVGBlock.h:
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::~RenderSVGContainer):
        * rendering/RenderSVGContainer.h:
        * rendering/RenderSVGHiddenContainer.h:
        * rendering/RenderSVGInline.h:
        * rendering/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::~RenderSVGInlineText):
        * rendering/RenderSVGInlineText.h:
        * rendering/RenderSVGModelObject.h:
        * rendering/RenderSVGResourceFilterPrimitive.h:
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::~RenderSVGRoot):
        * rendering/RenderSVGRoot.h:
        * rendering/RenderSVGTSpan.h:
        * rendering/RenderSVGText.h:
        * rendering/RenderSVGTextPath.h:
        * rendering/RenderSVGTransformableContainer.h:
        * rendering/RenderSVGViewportContainer.h:
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::~RenderTable):
        * rendering/RenderTable.h:
        * rendering/RenderTableCell.h:
        * rendering/RenderTableCol.h:
        * rendering/RenderTableRow.h:
        * rendering/RenderTextFragment.cpp:
        (WebCore::RenderTextFragment::~RenderTextFragment):
        * rendering/RenderTextFragment.h:
        * rendering/RenderWordBreak.h:
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::~SVGStyledElement):
        * svg/SVGStyledElement.h:
        * svg/SVGStyledTransformableElement.cpp:
        (WebCore::SVGStyledTransformableElement::~SVGStyledTransformableElement):
        * svg/SVGStyledTransformableElement.h:
        * xml/XPathParser.cpp:
        (WebCore::XPath::Parser::~Parser):
        * xml/XPathParser.h:

2010-10-08  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Daniel Bates.

        [GTK] Fails /LayoutTests/fast/css/button-height.html
        https://bugs.webkit.org/show_bug.cgi?id=33936

        GTK buttons honor height property set via CSS. The code for the method
        adjustButtonStyle originates from the original GTK+ theme drawing code
        and is clearly just a copy-paste from the Safari theme drawing code. The
        Safari theme drawing code does quite a bit of work to ensure that button
        fonts are consistent with the system theme, which is not something the GTK+
        port does.

        This change brings the method more in line with the Chromium port, which
        allows CSS to style buttons, only overriding the line-height property,
        which is required for layout tests to pass.

        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::adjustButtonStyle): No longer override most CSS
        properties for button styling.

2010-10-08  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Adam Barth.

        popstate events are lost when network connection is in progress
        https://bugs.webkit.org/show_bug.cgi?id=42940
        
        Instead of checking FrameLoader::isComplete() (which isn't true if the
        document's resource loader has requests outstanding), check that the
        document's readyState is complete, as the spec says.

        Test: http/tests/history/popstate-fires-with-pending-requests.html

        * dom/Document.cpp:
        (WebCore::Document::statePopped):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::didBeginDocument): Added call to set readyState
        to Loading earlier. Otherwise, readyState's initial value is Complete,
        and we only set it to Loading in Document::implicitOpen (which is called
        after FrameLoader::didBeginDocument by DocumentWriter::begin), so we 
        could end up in Document::statePopped and have the readyState be
        Complete, even if we hadn't even begin loading the document.

2010-10-08  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by Tony Chang.

        [chromium] Update ReadableDataObject/WritableDataObject interface for ChromiumDataObject change
        https://bugs.webkit.org/show_bug.cgi?id=47394

        Minor cleanup--these classes have suffered from bit rot since they aren't
        actively used at the moment. The three main changes are to:
        1) Condense getURL, setURL, getHTML, setHTML, urlTitle, htmlBaseUrl,
           setUrlTitle, and sethtmlBaseUrl into setters/getters for just the URL
           title and HTML base URL.
        2) Use Clipboard::ClipboardType instead of a bool.
        3) Remove the use of virtuals, as they are no longer needed..

        * platform/chromium/ReadableDataObject.cpp:
        (WebCore::clipboardBuffer):
        (WebCore::ReadableDataObject::create):
        (WebCore::ReadableDataObject::ReadableDataObject):
        (WebCore::ReadableDataObject::getData):
        (WebCore::ReadableDataObject::urlTitle): renamed from getURL
        (WebCore::ReadableDataObject::htmlBaseUrl): renamed from getHTML
        (WebCore::ReadableDataObject::containsFilenames):
        (WebCore::ReadableDataObject::filenames):
        (WebCore::ReadableDataObject::ensureTypeCacheInitialized):
        * platform/chromium/ReadableDataObject.h:
        * platform/chromium/WritableDataObject.cpp:
        (WebCore::WritableDataObject::create):
        (WebCore::WritableDataObject::WritableDataObject):
        (WebCore::WritableDataObject::setData):
        * platform/chromium/WritableDataObject.h:
        (WebCore::WritableDataObject::setUrlTitle): renamed from setURL
        (WebCore::WritableDataObject::setHtmlBaseUrl): renamed from setHTML
        (WebCore::WritableDataObject::dataMap):
        (WebCore::WritableDataObject::urlTitle):
        (WebCore::WritableDataObject::htmlBaseURL):
        (WebCore::WritableDataObject::fileExtension):
        (WebCore::WritableDataObject::fileContentFilename):
        (WebCore::WritableDataObject::fileContent):
        (WebCore::WritableDataObject::setFileExtension):
        (WebCore::WritableDataObject::setFileContentFilename):
        (WebCore::WritableDataObject::setFileContent):

2010-10-08  Abhishek Arya  <inferno@chromium.org>

        Unreviewed, rolling out r69360.
        http://trac.webkit.org/changeset/69360
        https://bugs.webkit.org/show_bug.cgi?id=46921

        Test still crashing on chromium test_shell

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::renderFallbackContent):

2010-10-08  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r68574.
        http://trac.webkit.org/changeset/68574
        https://bugs.webkit.org/show_bug.cgi?id=47433

        [chromium] Breaks partial repaint of images while scrolling
        (Requested by jamesr on #webkit).

        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::computeResamplingMode):
        (WebCore::drawResampledBitmap):

2010-10-08  Andy Estes  <aestes@apple.com>

        Reviewed by Darin Adler.

        REGRESSION (r66223): Crash when using CSS content and -webkit-mask-box-image properties containing cached images.
        https://bugs.webkit.org/show_bug.cgi?id=47430

        Test: fast/replaced/css-content-and-webkit-mask-box-image-crash.html

        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::imageChanged): imageChanged() can be called prior
        to m_imageResource being set. The appropriate thing to do in this case
        is to return early.
        (WebCore::RenderImage::notifyFinished): Ditto.

2010-10-08  Andrei Popescu  <andreip@google.com>

        Reviewed by Jeremy Orlow.

        IndexedDB does not have a quota mechanism.
        https://bugs.webkit.org/show_bug.cgi?id=47389

        Test: storage/indexeddb/database-quota.html

        Add a simple mechanism for enforcing a maximum size
        for each origin using IndexedDB. Note that this depends
        on having one SQLite database file per origin, which is
        addressed in a separate patch.

        * page/GroupSettings.cpp:
        (WebCore::GroupSettings::GroupSettings):
        (WebCore::GroupSettings::setIndexedDBQuotaBytes):
        * page/GroupSettings.h:
        (WebCore::GroupSettings::indexedDBQuotaBytes):
        * storage/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::createObjectStore):
        (WebCore::IDBDatabaseBackendImpl::createObjectStoreInternal):
        (WebCore::IDBDatabaseBackendImpl::removeObjectStore):
        (WebCore::IDBDatabaseBackendImpl::setVersionInternal):
        * storage/IDBFactory.cpp:
        (WebCore::IDBFactory::open):
        * storage/IDBFactoryBackendImpl.cpp:
        (WebCore::openSQLiteDatabase):
        (WebCore::IDBFactoryBackendImpl::open):
        * storage/IDBFactoryBackendImpl.h:
        * storage/IDBFactoryBackendInterface.h:
        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::putObjectStoreData):
        (WebCore::putIndexData):
        (WebCore::IDBObjectStoreBackendImpl::put):
        (WebCore::IDBObjectStoreBackendImpl::putInternal):
        (WebCore::IDBObjectStoreBackendImpl::createIndexInternal):
        * storage/IDBObjectStoreBackendImpl.h:

2010-10-08  Gavin Peters  <gavinp@chromium.org>

        Reviewed by Adam Barth.

        Output X-Purpose header for prefetch requests
        https://bugs.webkit.org/show_bug.cgi?id=46529

        Test: http/tests/misc/prefetch-purpose.html

        * loader/loader.cpp:
        (WebCore::Loader::Host::servePendingRequests):

2010-10-08  James Kozianski  <koz@chromium.org>

        Reviewed by Simon Fraser.

        Crash on reload when CSS property 'content' has malformed URL.
        https://bugs.webkit.org/show_bug.cgi?id=47322

        Make CSSStyleSelector handle the case where a cached image can't be
        produced due to a malformed URL.

        Test: fast/css-generated-content/malformed-url.html

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

2010-10-08  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        SVG feImage needs absolute subregion for preserveAspectRatio
        https://bugs.webkit.org/show_bug.cgi?id=47409

        PreserverAspectRatio needs the subregion in absolute coordinates to determine
        the destination position and size of the input image. The maxEffectRect() already
        stores the absolute subregion, but clipped to the filter region.

        Test: svg/W3C-SVG-1.1se/filters-image-03-f.svg

        * platform/graphics/filters/FETile.cpp:
        (WebCore::FETile::apply):
        * platform/graphics/filters/FilterEffect.h: Added enum to differentate sourece inputs, feTile and feImage.
        (WebCore::FilterEffect::filterEffectType):
        * platform/graphics/filters/SourceAlpha.h: Make use of the new enum in FilterEffect
        (WebCore::SourceAlpha::filterEffectType):
        * platform/graphics/filters/SourceGraphic.h: Ditto.
        (WebCore::SourceGraphic::filterEffectType):
        * svg/graphics/filters/SVGFEImage.cpp: Take the absolute subregion to determine the destination rect for input image.
        (WebCore::FEImage::apply):
        * svg/graphics/filters/SVGFEImage.h: Ditto.
        (WebCore::FEImage::setAbsoluteSubregion):
        (WebCore::FEImage::filterEffectType):
        * svg/graphics/filters/SVGFilter.cpp: Give over subregion in absolute coordinates to feImage. Just feImage makes use of it.
        (WebCore::SVGFilter::determineFilterPrimitiveSubregion):

2010-10-08  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        gradient stroke on lines does not work
        https://bugs.webkit.org/show_bug.cgi?id=40985

        Correct handling of invalid fill/stroke paint servers / colors according to SVG 1.1 2nd Edition.
        Perfectly matches Opera, and now lets us pass three of the new tests.

        Fix incorrect svg/custom/invalid-fill* tests:
        -> If there's an invalid fill URI, but no fallback specified, it is as if fill="black" was specified. (invalid-fill.svg)
        -> If there's an invalid fill color, but no fallback specified, it is as if fill="none" was specified. (invalid-fill-hex.svg)

        Needed to refactor some of the gradient/pattern code to properly handle fallback paint servers.
        As side effect, we're allowing gradients with gradientUnits="userSpaceOnUse" to apply on 1d objects (lines) again, per SVG 1.1 2nd edition.

        Tests: svg/W3C-SVG-1.1-SE/pservers-pattern-03-f.svg
               svg/W3C-SVG-1.1-SE/pservers-grad-17-b.svg
               svg/W3C-SVG-1.1-SE/pservers-grad-20-b.svg

        * rendering/RenderSVGResource.cpp: Rewrite fill/stroke paint resource requests, share all code between the similar functions.
        (WebCore::requestPaintingResource):
        (WebCore::RenderSVGResource::fillPaintingResource):
        (WebCore::RenderSVGResource::strokePaintingResource):
        * rendering/RenderSVGResource.h:
        * rendering/RenderSVGResourceGradient.cpp: Split collecting gradient properties from building the gradient. We don't need to build it, if it's not applyable (eg. on 1d lines).
        (WebCore::RenderSVGResourceGradient::RenderSVGResourceGradient):
        (WebCore::RenderSVGResourceGradient::removeAllClientsFromCache):
        (WebCore::clipToTextMask):
        (WebCore::RenderSVGResourceGradient::applyResource):
        * rendering/RenderSVGResourceGradient.h: Stop storing boundingBoxMode & gradientTransform in each GradientData object, it's enough to just store it in the gradient resource, once.
        * rendering/RenderSVGResourceLinearGradient.cpp:
        (WebCore::RenderSVGResourceLinearGradient::collectGradientAttributes): Splitted from buildGradient.
        (WebCore::RenderSVGResourceLinearGradient::buildGradient):
        * rendering/RenderSVGResourceLinearGradient.h:
        (WebCore::RenderSVGResourceLinearGradient::boundingBoxMode): Return bounding box mode information, from m_attributes instead of storing in gradientData.
        (WebCore::RenderSVGResourceLinearGradient::calculateGradientTransform): Ditto.
        * rendering/RenderSVGResourcePattern.cpp: Split collecting pattern properties from building the pattern. We don't need to build it, if it's not applyable (eg. on 1d lines).
        (WebCore::RenderSVGResourcePattern::RenderSVGResourcePattern):
        (WebCore::RenderSVGResourcePattern::removeAllClientsFromCache):
        (WebCore::RenderSVGResourcePattern::applyResource):
        (WebCore::RenderSVGResourcePattern::buildTileImageTransform):
        * rendering/RenderSVGResourcePattern.h:
        * rendering/RenderSVGResourceRadialGradient.cpp:
        (WebCore::RenderSVGResourceRadialGradient::collectGradientAttributes):
        (WebCore::RenderSVGResourceRadialGradient::buildGradient):
        * rendering/RenderSVGResourceRadialGradient.h:
        (WebCore::RenderSVGResourceRadialGradient::boundingBoxMode):
        (WebCore::RenderSVGResourceRadialGradient::calculateGradientTransform):
        * rendering/SVGRenderTreeAsText.cpp: Adapt to change, that fill/strokePaintingResource now take a Color& fallbackColor parameter.
        (WebCore::writeStyle):
        (WebCore::writeSVGResourceContainer):
        * rendering/svg/RenderSVGPath.cpp: 
        (WebCore::RenderSVGPath::fillContains): Ditto.
        (WebCore::RenderSVGPath::strokeContains): Ditto.
        (WebCore::RenderSVGPath::fillAndStrokePath): Properly handle fallback color, if an existing (!) paint server failed to apply.
        * rendering/svg/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::acquirePaintingResource): Ditto.
        * svg/SVGLinearGradientElement.cpp:
        (WebCore::SVGLinearGradientElement::collectGradientAttributes): Pass LinearGradientAttributes by reference, instead of returning a copy.
        * svg/SVGLinearGradientElement.h: Rename collectGradientProperties to collectGradientAttributes.
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::collectPatternAttributes): Pass PatternAttributes by reference, instead of returning.
        * svg/SVGPatternElement.h: Rename collectPatternProperties to collectPatternAttributes.
        * svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::collectGradientAttributes): Pass RadialGradientAttributes by reference, instead of returning a copy.
        * svg/SVGRadialGradientElement.h: Rename collectGradientProperties to collectGradientAttributes.

2010-10-08  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Slider widgets looks bad on Mac
        https://bugs.webkit.org/show_bug.cgi?id=47421

        This patch change the rendering of the slider to only have the
        subcontrols that would be defined by default on a QSlider.

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

2010-10-08  Renata Hodovan  <reni@inf.u-szeged.hu>

        Reviewed by Andreas Kling.

        SVGFEColorMatrixElement doesn't support dynamic invalidation, when attributes change.
        https://bugs.webkit.org/show_bug.cgi?id=47342

        The dynamic changes are captured by the svgAttributeChange function, and invalidate the filter primitive if necessary.

        Tests: svg/dynamic-updates/SVGFEColorMatrixElement-dom-in-attr.html
               svg/dynamic-updates/SVGFEColorMatrixElement-dom-type-attr.html
               svg/dynamic-updates/SVGFEColorMatrixElement-dom-values-attr.html
               svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-in-prop.html
               svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-type-prop.html
               svg/dynamic-updates/SVGFEColorMatrixElement-svgdom-values-prop.html

        * svg/SVGFEColorMatrixElement.cpp:
        (WebCore::SVGFEColorMatrixElement::svgAttributeChanged):
        * svg/SVGFEColorMatrixElement.h:

2010-10-08  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: save InspectorController in instrumentation cookie
        https://bugs.webkit.org/show_bug.cgi?id=47406

        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::evaluate):
        (WebCore::V8Proxy::callFunction):
        * dom/Document.cpp:
        (WebCore::Document::recalcStyle):
        * dom/Node.cpp:
        (WebCore::Node::dispatchGenericEvent):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::pumpTokenizer):
        * inspector/InspectorInstrumentation.cpp:
        * inspector/InspectorInstrumentation.h:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::didReceiveResponse):
        (WebCore::ResourceLoader::didReceiveData):
        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::fired):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::dispatchEvent):
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        (WebCore::FrameView::paintContents):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintContents):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::callReadyStateChangeListener):

2010-10-08  Adam Roben  <aroben@apple.com>

        Windows Release build fix for 32-bit systems

        WebCore had once again grown too large for the linker's virtual
        address space on 32-bit systems. I combined WebCore/rendering,
        WebCore/rendering/style, and WebCore/dom into new *AllInOne.cpp files,
        and added a few more files to RenderSVGAllInOne.cpp.

        Fixes <http://webkit.org/b/47417> <rdar://problem/8529362>

        * WebCore.vcproj/WebCore.vcproj: Added new *AllInOne.cpp files and
        excluded the individual files they contain from the build.

        * rendering/RenderSVGAllInOne.cpp: Added a few more files to this.

        * dom/DOMAllInOne.cpp: Added.
        * rendering/RenderingAllInOne.cpp: Added.
        * rendering/style/StyleAllInOne.cpp: Added.

2010-10-08  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Andreas Kling.

        [Qt] Use constBegin and constEnd when using const iterators

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::GraphicsLayerQtImpl::~GraphicsLayerQtImpl):
        (WebCore::GraphicsLayerQtImpl::updateTransform):
        (WebCore::GraphicsLayerQtImpl::flushChanges):

2010-10-07  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: add resource viewer to the network panel.
        https://bugs.webkit.org/show_bug.cgi?id=47346

        * inspector/front-end/DataGrid.js:
        (WebInspector.DataGrid):
        (WebInspector.DataGrid.prototype.autoSizeColumns):
        (WebInspector.DataGrid.prototype.updateWidths):
        (WebInspector.DataGrid.prototype.columnWidthsMap):
        (WebInspector.DataGrid.prototype.applyColumnWidthsMap):
        (WebInspector.DataGrid.prototype.isColumnVisible):
        (WebInspector.DataGrid.prototype.showColumn):
        (WebInspector.DataGrid.prototype.hideColumn):
        (WebInspector.DataGrid.prototype._positionResizers):
        (WebInspector.DataGrid.prototype._resizerDragging):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel):
        (WebInspector.NetworkPanel.prototype.updateSidebarWidth):
        (WebInspector.NetworkPanel.prototype.updateMainViewWidth):
        (WebInspector.NetworkPanel.prototype.handleShortcut):
        (WebInspector.NetworkPanel.prototype._createTable):
        (WebInspector.NetworkPanel.prototype._sortItems):
        (WebInspector.NetworkPanel.prototype._sortByTimeline):
        (WebInspector.NetworkPanel.prototype._createSummaryBar):
        (WebInspector.NetworkPanel.prototype._updateDividersIfNeeded):
        (WebInspector.NetworkPanel.prototype.hide):
        (WebInspector.NetworkPanel.prototype.get searchableViews):
        (WebInspector.NetworkPanel.prototype.refresh):
        (WebInspector.NetworkPanel.prototype.reset):
        (WebInspector.NetworkPanel.prototype.refreshResource):
        (WebInspector.NetworkPanel.prototype.canShowSourceLine):
        (WebInspector.NetworkPanel.prototype.showSourceLine):
        (WebInspector.NetworkPanel.prototype._showResource):
        (WebInspector.NetworkPanel.prototype._closeVisibleResource):
        (WebInspector.NetworkPanel.prototype._resourceViewForResource):
        (WebInspector.NetworkPanel.prototype._resourceViewTypeMatchesResource):
        (WebInspector.NetworkPanel.prototype._toggleGridMode):
        (WebInspector.NetworkPanel.prototype._toggleViewingResourceMode):
        (WebInspector.NetworkDataGridNode):
        (WebInspector.NetworkDataGridNode.prototype.select):
        (WebInspector.NetworkDataGridNode.prototype._createTimelineCell):
        * inspector/front-end/networkPanel.css:
        (#network-container):
        (#network-views):
        (.network.panel .data-grid.full-grid-mode .viewer-column):
        (.network.panel .data-grid.brief-grid-mode .time-column):
        (.network.panel.viewing-resource .network-timeline-grid):
        (.network.panel .data-grid.viewing-resource-mode .timeline-column):
        (.network.panel .network-sidebar):
        (.network.panel:not(.viewing-resource) .sidebar-resizer-vertical):
        (.network.panel.viewing-resource .data-grid-resizer):
        (.network.panel .scope-bar):
        (.network.panel .resource-view.headers-visible .resource-view-content):
        (.network.panel:not(.viewing-resource) .data-grid tr.selected):

2010-10-08  Andreas Kling  <kling@webkit.org>

        Reviewed by Nikolas Zimmermann.

        SVGTextLayoutAttributesBuilder: "XValue" and "YValue" clash with X11 macros
        https://bugs.webkit.org/show_bug.cgi?id=47180

        Rename *Value to *ValueAttribute

        * rendering/svg/SVGTextLayoutAttributesBuilder.cpp:
        (WebCore::SVGTextLayoutAttributesBuilder::nextLayoutValue):
        (WebCore::SVGTextLayoutAttributesBuilder::assignLayoutAttributesForCharacter):
        * rendering/svg/SVGTextLayoutAttributesBuilder.h:

2010-10-08  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Don't use -whole-archive to link-in libWebKit2.a except for libQtWebKit.so
        https://bugs.webkit.org/show_bug.cgi?id=47347

        * WebCore.pro:

2010-10-08  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Reviewed by Kenneth Rohde Christiansen.

        [EFL] Implement IntRectEfl.cpp
        https://bugs.webkit.org/show_bug.cgi?id=47403

        Implement IntRect for Efl Port using Eina_Rectangle.

        * platform/graphics/IntRect.h:
        * platform/graphics/efl/IntRectEfl.cpp:
        (WebCore::IntRect::IntRect):
        (WebCore::IntRect::operator Eina_Rectangle):

2010-10-08  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Nikolas Zimmermann.

        SVG: Make RenderPath DRT output platform-independent
        https://bugs.webkit.org/show_bug.cgi?id=46051

        Move away from using the port-specific Path::debugString() to dump
        RenderPath objects. This shrinks the DRT output delta between platforms
        and makes it more readable as we now dump only the relevant,
        element-specific properties of each object.

        * rendering/SVGRenderTreeAsText.cpp:
        (WebCore::operator<<):
        Generate DRT output for RenderPaths in a platform-independent manner,
        dumping the relevant element properties.

2010-10-08  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by David Levin.

        Fix FileSystem path validation order to normalize '..' and '.' before restriction checks
        https://bugs.webkit.org/show_bug.cgi?id=47309

        Test: fast/filesystem/op-get-entry.html

        * fileapi/DOMFileSystemBase.cpp:
        (WebCore::DOMFileSystemBase::getFile): Fixed the path validation order.
        (WebCore::DOMFileSystemBase::getDirectory): Fixed the path validation order.

2010-10-08  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Port GTK+ theming code to GTK+ 3.x APIs
        https://bugs.webkit.org/show_bug.cgi?id=47398

        Create a new gtk3drawing file for the widget drawing primitives in
        WebKit, using the GTK+ 3.x APIs. It's very similar to the GTK+ 2.x
        code at the moment, but we'll evolve it incrementally from here.

        * GNUmakefile.am:
        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::partsForDrawable):
        (WebCore::RenderThemeGtk::paintMozillaGtkWidget):
        * platform/gtk/gtk2drawing.c:
        (TSOffsetStyleGCArray):
        (TSOffsetStyleGCs):
        (moz_gtk_button_paint):
        (moz_gtk_scrollbar_thumb_paint):
        (moz_gtk_entry_paint):
        (moz_gtk_combo_box_paint):
        (moz_gtk_get_widget_border):
        * platform/gtk/gtk3drawing.c: Added.
        * platform/gtk/gtkdrawing.h:

2010-10-07  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by Kent Tamura.

        [chromium] Fix indentation in ChromiumDataObject.h 
        https://bugs.webkit.org/show_bug.cgi?id=47396

        Just a cleanup patch to make followup diffs smaller.

        * platform/chromium/ChromiumDataObject.h:
        (WebCore::ChromiumDataObject::create):
        (WebCore::ChromiumDataObject::copy):
        (WebCore::ChromiumDataObject::urlTitle):
        (WebCore::ChromiumDataObject::setUrlTitle):
        (WebCore::ChromiumDataObject::htmlBaseUrl):
        (WebCore::ChromiumDataObject::setHtmlBaseUrl):
        (WebCore::ChromiumDataObject::containsFilenames):
        (WebCore::ChromiumDataObject::filenames):
        (WebCore::ChromiumDataObject::setFilenames):
        (WebCore::ChromiumDataObject::fileExtension):
        (WebCore::ChromiumDataObject::setFileExtension):
        (WebCore::ChromiumDataObject::fileContentFilename):
        (WebCore::ChromiumDataObject::setFileContentFilename):
        (WebCore::ChromiumDataObject::fileContent):
        (WebCore::ChromiumDataObject::setFileContent):

2010-10-07  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        Refactor HTMLInputElement: Move valueAsDate and valueAsNumber implementations
        https://bugs.webkit.org/show_bug.cgi?id=47327

        Move the content of HTMLInputElement::valueAsDate(), setValueAsDate(),
        valueAsNumber(), and setValueAsNumber() to InputType, and move
        serialize() and serializeForDateTimeTypes() too

        * html/BaseDateAndTimeInputType.cpp:
        (WebCore::BaseDateAndTimeInputType::valueAsDate):
        (WebCore::BaseDateAndTimeInputType::setValueAsDate):
        (WebCore::BaseDateAndTimeInputType::valueAsNumber):
        (WebCore::BaseDateAndTimeInputType::setValueAsNumber):
        (WebCore::BaseDateAndTimeInputType::serialize):
        * html/BaseDateAndTimeInputType.h:
        * html/DateInputType.cpp:
        (WebCore::DateInputType::setMillisecondToDateComponents):
        * html/DateInputType.h:
        * html/DateTimeInputType.cpp:
        (WebCore::DateTimeInputType::setMillisecondToDateComponents):
        * html/DateTimeInputType.h:
        * html/DateTimeLocalInputType.cpp:
        (WebCore::DateTimeLocalInputType::valueAsDate):
        (WebCore::DateTimeLocalInputType::setValueAsDate):
        (WebCore::DateTimeLocalInputType::setMillisecondToDateComponents):
        * html/DateTimeLocalInputType.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::valueAsDate):
        (WebCore::HTMLInputElement::setValueAsDate):
        (WebCore::HTMLInputElement::valueAsNumber):
        (WebCore::HTMLInputElement::setValueAsNumber):
        (WebCore::HTMLInputElement::stepUpFromRenderer):
        * html/HTMLInputElement.h:
        * html/InputType.cpp:
        (WebCore::InputType::valueAsDate):
        (WebCore::InputType::setValueAsDate):
        (WebCore::InputType::valueAsNumber):
        (WebCore::InputType::setValueAsNumber):
        (WebCore::InputType::serialize):
        * html/InputType.h:
        * html/MonthInputType.cpp:
        (WebCore::MonthInputType::valueAsDate):
        (WebCore::MonthInputType::setValueAsDate):
        (WebCore::MonthInputType::setMillisecondToDateComponents):
        * html/MonthInputType.h:
        * html/NumberInputType.cpp:
        (WebCore::NumberInputType::valueAsNumber):
        (WebCore::NumberInputType::setValueAsNumber):
        (WebCore::NumberInputType::serialize):
        * html/NumberInputType.h:
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::valueAsNumber):
        (WebCore::RangeInputType::setValueAsNumber):
        (WebCore::RangeInputType::serialize):
        * html/RangeInputType.h:
        * html/TimeInputType.cpp:
        (WebCore::TimeInputType::setMillisecondToDateComponents):
        * html/TimeInputType.h:
        * html/WeekInputType.cpp:
        (WebCore::WeekInputType::setMillisecondToDateComponents):
        * html/WeekInputType.h:

2010-10-07  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Texmap] [Qt] Texture mapper initial implementation
        Texture Mapper is an implementation of accelerated compositing that doesn't require a
        platform specific scenegraph library like CA or QGraphicsView. The idea is that with
        time this would replace GraphicsLayerQt, and could serve as an implementation for other
        platforms that don't have a scenegraph library. The first stage of this is to add all the code to trunk,
        and enable it in Qt with an opt-in build flag so that it can be easily tested. Once it reaches
        an adequate level of stability, we can enable it by default and eventually have it replace GraphicsLayerQt.

        This change includes only the common new files and the Qt backend; Still to come: the GL backend and integration layer.

        * platform/graphics/qt/TextureMapperQt.cpp: Added.
        * platform/graphics/texmap/GraphicsLayerTextureMapper.cpp: Added.
        * platform/graphics/texmap/GraphicsLayerTextureMapper.h: Added.
        * platform/graphics/texmap/TextureMapper.h: Added.
        * platform/graphics/texmap/TextureMapperPlatformLayer.h: Added.

2010-10-07  Antonio Gomes  <agomes@rim.com>

        Reviewed by Simon Fraser.

        [Mac] [DRT] implement setSpatialNavigationEnabled
        https://bugs.webkit.org/show_bug.cgi?id=47291

        Added Settings::setSpatialNavigationEnabled symbols to WebKit.exp.in
        so it can be used from WebKit/mac.

        * WebCore.exp.in:

2010-10-07  Eric Uhrhane  <ericu@chromium.org>

        Reviewed by Jian Li

        [V8] Add FileWriter to active DOM map
        https://bugs.webkit.org/show_bug.cgi?id=47380

        It's an ActiveDOMObject; it needs to be in the map.

        * bindings/scripts/CodeGeneratorV8.pm:

2010-10-07  Nico Weber  <thakis@chromium.org>

        Reviewed by James Robinson.

        [chromium] Make sure to update the current graphics context when calling out to AppKit.
        https://bugs.webkit.org/show_bug.cgi?id=47387

        This ports r57741 to ThemeChromiumMac. It also reverts r66975, which is
        now no longer necessary.

        Should be covered by existing tests. The checkbox at
        http://webkit.org/blog-files/3d-transforms/morphing-cubes.html should
        now show up correctly.

        * platform/chromium/ThemeChromiumMac.mm:
        (WebCore::paintCheckbox):
        (WebCore::paintRadio):
        Create current context.
        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::updateContents):
        Remove LocalCurrentContext, it's now no longer necessary.

2010-10-07  Cris Neckar  <cdn@chromium.org>

        Reviewed by Adam Barth.

        Postpone clearing the imageLoader when rendering certain fallback content for objects until after the attach().
        https://bugs.webkit.org/show_bug.cgi?id=46921

        Test: fast/html/object-image-nested-fallback.html

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::renderFallbackContent):

2010-10-07  Rafael Antognolli  <antognolli@profusion.mobi>

        Reviewed by Kenneth Rohde Christiansen.

        [EFL] Fix shared timers on EFL port - make them thread safe.
        https://bugs.webkit.org/show_bug.cgi?id=47383

        Using ecore_timer_add to create a timer from a thread that is
        not the main thread isn't safe. Now we add a pipe that is used
        to request a timer to be added in the main thread.

        In order to reduce some delay on timers that are added with a
        very small interval, the timer callback is called immediately
        if the interval is smaller than the mainloop frame time.

        No new features, so no tests added.

        * platform/efl/SharedTimerEfl.cpp:
        (WebCore::setSharedTimerFiredFunction):
        (WebCore::timerEvent):
        (WebCore::processTimers):
        (WebCore::pipeHandlerCb):
        (WebCore::stopSharedTimer):
        (WebCore::addNewTimer):
        (WebCore::setSharedTimerFireTime):

2010-10-07  James Kozianski  <koz@chromium.org>

        Reviewed by Adam Barth.

        getPropertyValue('border') is incorrect after border-top-width is set
        https://bugs.webkit.org/show_bug.cgi?id=45949

        Test: fast/dom/css-shorthand-common-value.html

        CSSMutableStyleDeclaration::getCommonValue() was ignoring values from
        properties that were implicitly set, which led to erroneous results
        from getPropertyValue().

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::getCommonValue):

2010-10-07  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Tony Chang.

        REGRESSION: Indenting pre duplicates content
        https://bugs.webkit.org/show_bug.cgi?id=47233

        The bug was caused by our not splitting text nodes properly.

        In new approach, we split text nodes in each iteration. Added rangeForParagraphSplitingTextNodesIfNeeded
        to split text nodes at the start and at the end of paragraph, which also adjusts start and end positions
        for moveParagraphWithClones. Added endOfNextParagrahSplittingTextNodesIfNeeded to adjust endOfNextParagraph,
        start, and end to work-around moveParagraphWithClones's removing a line feed.

        Tests: editing/execCommand/indent-pre-list.html
               editing/execCommand/indent-pre-paragraphs.html

        * editing/ApplyBlockElementCommand.cpp:
        (WebCore::ApplyBlockElementCommand::formatSelection): See above.
        (WebCore::isNewLineAtPosition):
        (WebCore::renderStyleOfEnclosingTextNode): Added.
        (WebCore::ApplyBlockElementCommand::rangeForParagraphSplittingTextNodesIfNeeded): Added.
        (WebCore::ApplyBlockElementCommand::endOfNextParagrahSplittingTextNodesIfNeeded): Added.
        * editing/ApplyBlockElementCommand.h:
        * editing/FormatBlockCommand.cpp:
        (WebCore::FormatBlockCommand::formatRange): Takes two Positions instead of one VisiblePosition.
        * editing/FormatBlockCommand.h:
        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::tryIndentingAsListItem): Ditto.
        (WebCore::IndentOutdentCommand::indentIntoBlockquote): Ditto.
        (WebCore::IndentOutdentCommand::formatRange): Ditto.
        * editing/IndentOutdentCommand.h:

2010-10-07  Jian Li  <jianli@chromium.org>

        Reviewed by Adam Barth.

        Support generating a FormData object based on the data in an existing <form>.
        https://bugs.webkit.org/show_bug.cgi?id=45929

        Test: http/tests/local/formdata/send-form-data-constructed-from-form.html

        * bindings/js/JSDOMFormDataCustom.cpp:
        (WebCore::toHTMLFormElement):
        (WebCore::JSDOMFormDataConstructor::constructJSDOMFormData):
        * bindings/v8/custom/V8DOMFormDataCustom.cpp:
        (WebCore::V8DOMFormData::constructorCallback):
        * html/DOMFormData.cpp:
        (WebCore::DOMFormData::DOMFormData):
        * html/DOMFormData.h:
        (WebCore::DOMFormData::create):
        * html/DOMFormData.idl:

2010-10-07  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Dave Hyatt.

        Set the m_selectedChildren flag on the root inline box if one of the leaf 
        inline box from the bidi runs walk has a selection state. Remove the flag
        setting logic from addToLine, since line boxes created in createLinesBoxes
        should not be propagating selection state to root inline box.
        https://bugs.webkit.org/show_bug.cgi?id=47201

        Test: editing/selection/root-inlinebox-selected-children-crash.html

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::addToLine):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::constructLine):

2010-10-07  Benjamin Otte  <otte@gnome.org>

        Reviewed by Martin Robinson.

        [GTK] Code cleanup in PluginViewGtk.cpp for transparent plugins
        https://bugs.webkit.org/show_bug.cgi?id=47361

        Reduce some code in PluginViewGtk.cpp by doing things with Cairo instead
        of directly with X11. This should work fine with GDK double-buffering, but
        if we ever disable it, we'll need to verify that this is still functioning
        properly.

        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::paint): Do a bit of code cleanup.

2010-10-07  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add a WKPageFindClient, hook up WKPageCountStringMatches
        https://bugs.webkit.org/show_bug.cgi?id=47373

        Export find related symbols needed by WebKit2.

        * WebCore.exp.in:

2010-10-07  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=47370
        
        Make line box placement in the inline direction writing-mode-aware.  Lines now set their y-position instead of x-position
        when vertical.
        
        Refactored shadow overflow to give text-shadow the same helpers in RenderStyle that box-shadow has so that the shadow-walking loop in
        placeBoxesInInlineDirection can be replaced with the helper.

        Overflow had to be patched to be writing-mode-aware so that the correct physical directions would be set for vertical line
        boxes.

        Vertical lines are still not testable until they can be placed in the block direction.  Then the render tree dumps
        become meaningful (even if the pixel results look horrible).

        * rendering/InlineBox.h:
        (WebCore::InlineBox::logicalRight):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesInInlineDirection):
        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::logicalLeftLayoutOverflow):
        (WebCore::InlineFlowBox::logicalRightLayoutOverflow):
        (WebCore::InlineFlowBox::logicalLeftVisualOverflow):
        (WebCore::InlineFlowBox::logicalRightVisualOverflow):
        (WebCore::InlineFlowBox::setInlineDirectionOverflowPositions):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::computeInlineDirectionPositionsForLine):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::getShadowExtent):
        (WebCore::RenderStyle::getShadowHorizontalExtent):
        (WebCore::RenderStyle::getShadowVerticalExtent):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::getTextShadowExtent):
        (WebCore::InheritedFlags::getTextShadowHorizontalExtent):
        (WebCore::InheritedFlags::getTextShadowVerticalExtent):
        (WebCore::InheritedFlags::getTextShadowInlineDirectionExtent):
        (WebCore::InheritedFlags::getBoxShadowExtent):
        (WebCore::InheritedFlags::getBoxShadowHorizontalExtent):
        (WebCore::InheritedFlags::getBoxShadowVerticalExtent):
        (WebCore::InheritedFlags::getBoxShadowInlineDirectionExtent):
        (WebCore::InheritedFlags::getShadowInlineDirectionExtent):

2010-10-07  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/8142645> REGRESSION (r47440): Printing Mail messages with large fonts does not fill page
        https://bugs.webkit.org/show_bug.cgi?id=47374

        In the legacy (paint-time pagination) printing model, when there are overlapping lines,
        adjustPageHeightDeprecated() was not idempotent, since the truncation point imposed by line n,
        namely the top of line n, was above the bottom of line n-1, so in the next round, line n-1
        moved the truncation point up again.

        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::paint): Consider the top of the next line when deciding if the
        current line extends below the truncation point.

2010-10-07  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Beth Dakin.

        Use isIdentityOrTranslationOrFlipped() in scrollbar code
        https://bugs.webkit.org/show_bug.cgi?id=47378

        Replace old code that looked at values in the CGAffineTransform
        with nicely named method that does the same test.

        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::paint):

2010-10-07  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Beth Dakin.

        Edge fringe artifact with transformed, masked elements (including reflections)
        https://bugs.webkit.org/show_bug.cgi?id=19179
        
        When drawing the mask images, use a transparency layer if the CTM
        has a rotation, scale or skew in it to avoid antialiasing issues at
        the edges.

        Test: fast/css/transformed-mask.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintMask): Don't bother painting the mask if
        painting is disabled, which also avoids an assertion in getCTM().
        (WebCore::RenderBox::paintMaskImages):

2010-10-07  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Kent Tamura.

        [BREWMP] Map non-alphabet key code to Unicode value
        https://bugs.webkit.org/show_bug.cgi?id=46002

        Non-alphabet key codes are not equal to the unicode values. Add conversion.

        * platform/brew/PlatformKeyboardEventBrew.cpp:
        (WebCore::singleCharacterString):

2010-10-05  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Chris Fleizach.

        [GTK] The FreeType backend does not respect the FC_EMBOLDEN property
        https://bugs.webkit.org/show_bug.cgi?id=46216

        Look for the FC_EMBOLDEN property of the FcPattern when constructing
        FontPlatformData and use it to enable synthetic bold fonts when necessary.

        Test: platform/gtk/fonts/fontconfig-synthetic-bold.html

        * platform/graphics/cairo/FontPlatformDataFreeType.cpp:
        (WebCore::FontPlatformData::FontPlatformData): Properly handle the FC_EMBOLDEN property.

2010-10-07  James Simonsen  <simonjam@chromium.org>

        Reviewed by Pavel Feldman.

        [Web Timing] Use platform definition of responseEnd
        https://bugs.webkit.org/show_bug.cgi?id=46306

        No new tests. Used existing webtiming test.

        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::didFinishLoading):

2010-10-05  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Chris Fleizach.

        [Gtk] CSS font-style: italic behavior
        https://bugs.webkit.org/show_bug.cgi?id=33299

        Properly interpret the FC_MATRIX property from a FontConfig pattern.
        FontConfig will use this property when returning fonts which have a
        synthetic oblique variant configured in the fonts.conf configuration
        file.

        Test: platform/gtk/fonts/fontconfig-synthetic-oblique.html

        * platform/graphics/cairo/FontPlatformDataFreeType.cpp:
        (WebCore::FontPlatformData::FontPlatformData): Added a constructor that
        takes an existing FontPlatformData and a font size.
        (WebCore::FontPlatformData::initializeWithFontFace): Added this helper
        intialization method that properly handles the FC_MATRIX property from
        the FcPattern.
        * platform/graphics/cairo/FontPlatformDataFreeType.h: Added a declaration
        to the new constructor and the initializeWithFontFace.
        * platform/graphics/cairo/SimpleFontDataCairo.cpp:
        (WebCore::SimpleFontData::smallCapsFontData): Use the new FontPlatformData
        constructor.

2010-10-07  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=47357
        
        Make findNextLineBreak and some of the helper functions it also calls writing-mode-aware.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::computeLogicalBoxHeights):
        (WebCore::InlineFlowBox::placeBoxesInBlockDirection):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::positionNewFloatOnLine):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::getBorderPaddingMargin):
        (WebCore::inlineLogicalWidth):
        (WebCore::RenderBlock::computeInlineDirectionPositionsForLine):
        (WebCore::inlineFlowRequiresLineBox):
        (WebCore::RenderBlock::skipLeadingWhitespace):
        (WebCore::RenderBlock::fitBelowFloats):
        (WebCore::RenderBlock::findNextLineBreak):
        * rendering/RenderBoxModelObject.h:
        (WebCore::RenderBoxModelObject::hasInlineDirectionBordersPaddingOrMargin):
        (WebCore::RenderBoxModelObject::hasInlineDirectionBordersOrPadding):

2010-10-07  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        Fixing viewport meta tag user-scalable handling
        https://bugs.webkit.org/show_bug.cgi?id=47330

        user-scalable attribute was not considered in viewport meta tag handling.

        * dom/ViewportArguments.cpp:
        (WebCore::findConfigurationForViewportData):
        * dom/ViewportArguments.h:

2010-10-05  Diego Gonzalez  <diegohcg@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] Hook up accelerometer data via Qt DeviceMotion
        https://bugs.webkit.org/show_bug.cgi?id=47105

        Get accelerometer necessary data via Qt mobility library using a
        provider class. Enable, also the RotationRate using the current device
        orientation provider.

        * WebCore.pro:

2010-10-07  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        Some viewport meta tag api refactoring
        https://bugs.webkit.org/show_bug.cgi?id=47334

        WebCore::findConfigurationForViewportData renamed to computeViewportAttributes.
        WebCore::ViewportAttributes::layoutViewport renamed to layoutSize.

        * dom/ViewportArguments.cpp:
        (WebCore::computeViewportAttributes):
        * dom/ViewportArguments.h:

2010-10-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Don't use GtkObject
        https://bugs.webkit.org/show_bug.cgi?id=47090

        GtkObject has been removed in gtk3.

        * plugins/gtk/gtk2xtbin.c:
        (gtk_xtbin_class_init):
        (gtk_xtbin_dispose):

2010-10-07  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: highlight XHR breakpoint when hit.
        https://bugs.webkit.org/show_bug.cgi?id=47253

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::didCommitLoad):
        (WebCore::InspectorController::setNativeBreakpoint):
        (WebCore::InspectorController::removeNativeBreakpoint):
        (WebCore::InspectorController::findEventListenerBreakpoint):
        (WebCore::InspectorController::findXHRBreakpoint):
        * inspector/InspectorController.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::instrumentWillDispatchEventImpl):
        (WebCore::InspectorInstrumentation::instrumentWillSendXMLHttpRequestImpl):
        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager.prototype.createEventListenerBreakpoint):
        (WebInspector.BreakpointManager.prototype.createXHRBreakpoint):
        (WebInspector.BreakpointManager.prototype._xhrBreakpointRemoved):
        (WebInspector.BreakpointManager.prototype._removeNativeBreakpoint):
        (WebInspector.BreakpointManager.prototype._setNativeBreakpointEnabled):
        (WebInspector.BreakpointManager.prototype._setNativeBreakpointOnBackend.didSetNativeBreakpoint):
        (WebInspector.BreakpointManager.prototype._setNativeBreakpointOnBackend):
        (WebInspector.BreakpointManager.prototype._removeNativeBreakpointFromBackend):
        (WebInspector.BreakpointManager.prototype.debuggerPaused):
        (WebInspector.BreakpointManager.prototype.debuggerResumed):
        (WebInspector.NativeBreakpoint):
        (WebInspector.NativeBreakpoint.prototype.get enabled):
        (WebInspector.NativeBreakpoint.prototype.set enabled):
        (WebInspector.NativeBreakpoint.prototype.remove):
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.BreakpointItem):
        (WebInspector.BreakpointItem.prototype._breakpointClicked):
        (WebInspector.BreakpointItem.prototype._hitStateChanged):
        * inspector/front-end/CallStackSidebarPane.js:
        (WebInspector.CallStackSidebarPane.prototype.updateStatus):
        * inspector/front-end/inspector.css:
        (.breakpoint-list .breakpoint-hit):
        * inspector/front-end/inspector.js:
        (WebInspector.pausedScript):
        (WebInspector.resumedScript):

2010-10-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Fix the build for GTK+ 3
        https://bugs.webkit.org/show_bug.cgi?id=47249

        Use GdkVisual instead of GdkColormap. GdkColormap has been removed
        in gtk3.

        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::platformStart):
        * plugins/gtk/gtk2xtbin.c:
        (gtk_xtbin_new):

2010-10-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Fix the build for GTK+ 3
        https://bugs.webkit.org/show_bug.cgi?id=47249

        Do not use GdkDrawable deprecated API. Some methods of GdkDrawable
        are deprecated in gtk2 and have been removed in gtk3. Equivalent
        API has been added to GdkWindow.

        * platform/gtk/GtkVersioning.c:
        (getDefaultGDKPointerDevice):
        * platform/gtk/GtkVersioning.h:
        * platform/gtk/PlatformScreenGtk.cpp:
        (WebCore::getVisual):
        (WebCore::screenAvailableRect):

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

        Reviewed by Andreas Kling.

        [Qt] Disconnect signals before destroying MediaPlayerPrivateQt

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

        * platform/graphics/qt/MediaPlayerPrivateQt.cpp:

2010-10-07  Alexander Pavlov  <apavlov@chromium.org>

        Unreviewed, release build fix.

        * inspector/InspectorStyleSheet.cpp:
        (WebCore::InspectorStyleSheetForInlineStyle::setStyleText):
        * inspector/InspectorStyleSheet.h:
        (WebCore::InspectorStyleSheetForInlineStyle::styleForId):
        (WebCore::InspectorStyleSheetForInlineStyle::ruleSourceDataFor):

2010-10-07  Pavel Podivilov  <podivilov@chromium.org>

        Unreviewed, build fix.

        Build fix for r69283.

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

2010-10-07  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Fix the build for GTK+ 3
        https://bugs.webkit.org/show_bug.cgi?id=47249

        Don't use gtk_size_request_get_size(). It has been removed,
        gtk_widget_get_preferred_size() should be used instead

        * platform/gtk/PopupMenuGtk.cpp:
        (WebCore::PopupMenuGtk::show):

2010-10-06  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Implement handling of CSS operations in InspectorCSSAgent.
        Property toggling not implemented yet. The code is not going live.
        https://bugs.webkit.org/show_bug.cgi?id=45825

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/InspectorCSSAgent.cpp: Added.
        (WebCore::InspectorCSSAgent::buildObjectForStyle):
        (WebCore::InspectorCSSAgent::parentStyleSheet):
        (WebCore::InspectorCSSAgent::asCSSStyleRule):
        (WebCore::InspectorCSSAgent::InspectorCSSAgent):
        (WebCore::InspectorCSSAgent::~InspectorCSSAgent):
        (WebCore::InspectorCSSAgent::reset):
        (WebCore::InspectorCSSAgent::getMatchedRulesForNode2):
        (WebCore::InspectorCSSAgent::getMatchedPseudoRulesForNode2):
        (WebCore::InspectorCSSAgent::getAttributeStylesForNode2):
        (WebCore::InspectorCSSAgent::getInlineStyleForNode2):
        (WebCore::InspectorCSSAgent::getComputedStyleForNode2):
        (WebCore::InspectorCSSAgent::getInheritedStylesForNode2):
        (WebCore::InspectorCSSAgent::getAllStyles2):
        (WebCore::InspectorCSSAgent::getStyleSheet2):
        (WebCore::InspectorCSSAgent::setStyleSheetText2):
        (WebCore::InspectorCSSAgent::setStyleText2):
        (WebCore::InspectorCSSAgent::toggleProperty2):
        (WebCore::InspectorCSSAgent::setRuleSelector2):
        (WebCore::InspectorCSSAgent::addRule2):
        (WebCore::InspectorCSSAgent::getSupportedCSSProperties):
        (WebCore::InspectorCSSAgent::inlineStyleElement):
        (WebCore::InspectorCSSAgent::populateObjectWithStyleProperties):
        (WebCore::InspectorCSSAgent::shorthandValue):
        (WebCore::InspectorCSSAgent::shorthandPriority):
        (WebCore::InspectorCSSAgent::longhandProperties):
        (WebCore::InspectorCSSAgent::asInspectorStyleSheet):
        (WebCore::InspectorCSSAgent::elementForId):
        (WebCore::InspectorCSSAgent::bindStyleSheet):
        (WebCore::InspectorCSSAgent::viaInspectorStyleSheet):
        (WebCore::InspectorCSSAgent::styleSheetForId):
        (WebCore::InspectorCSSAgent::detectOrigin):
        (WebCore::InspectorCSSAgent::buildArrayForRuleList):
        (WebCore::InspectorCSSAgent::buildObjectForAttributeStyles):
        (WebCore::InspectorCSSAgent::didRemoveDocument):
        (WebCore::InspectorCSSAgent::didRemoveDOMNode):
        * inspector/InspectorCSSAgent.h: Added.
        (WebCore::InspectorCSSAgent::create):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        (WebCore::InspectorDOMAgent::setDOMListener):
        (WebCore::InspectorDOMAgent::unbind):
        (WebCore::InspectorDOMAgent::didRemoveDOMNode):
        (WebCore::InspectorDOMAgent::getSupportedCSSProperties):
        * inspector/InspectorDOMAgent.h:
        (WebCore::InspectorDOMAgent::DOMListener::~DOMListener):
        (WebCore::InspectorDOMAgent::documents):
        * inspector/InspectorStyleSheet.cpp: Added.
        (ParsedStyleSheet::cssStyleSheet):
        (ParsedStyleSheet::text):
        (ParsedStyleSheet::hasText):
        (ParsedStyleSheet::sourceData):
        (ParsedStyleSheet::hasSourceData):
        (ParsedStyleSheet::ParsedStyleSheet):
        (ParsedStyleSheet::setText):
        (ParsedStyleSheet::setSourceData):
        (ParsedStyleSheet::ruleSourceDataAt):
        (WebCore::InspectorStyleSheet::InspectorStyleSheet):
        (WebCore::InspectorStyleSheet::~InspectorStyleSheet):
        (WebCore::InspectorStyleSheet::setText):
        (WebCore::InspectorStyleSheet::setRuleSelector):
        (WebCore::InspectorStyleSheet::addRule):
        (WebCore::InspectorStyleSheet::ruleForId):
        (WebCore::InspectorStyleSheet::buildObjectForStyleSheet):
        (WebCore::InspectorStyleSheet::buildObjectForRule):
        (WebCore::InspectorStyleSheet::buildObjectForStyle):
        (WebCore::InspectorStyleSheet::styleForId):
        (WebCore::InspectorStyleSheet::setStyleText):
        (WebCore::InspectorStyleSheet::ownerDocument):
        (WebCore::InspectorStyleSheet::ruleSourceDataFor):
        (WebCore::InspectorStyleSheet::ruleIndexByStyle):
        (WebCore::InspectorStyleSheet::ensureParsedDataReady):
        (WebCore::InspectorStyleSheet::text):
        (WebCore::InspectorStyleSheet::ensureText):
        (WebCore::InspectorStyleSheet::ensureSourceData):
        (WebCore::InspectorStyleSheet::innerSetStyleSheetText):
        (WebCore::InspectorStyleSheet::innerSetStyleText):
        (WebCore::InspectorStyleSheet::styleSheetTextWithChangedStyle):
        (WebCore::InspectorStyleSheet::findPageRuleWithStyle):
        (WebCore::InspectorStyleSheet::fullRuleId):
        (WebCore::InspectorStyleSheet::revalidateStyle):
        (WebCore::InspectorStyleSheet::styleSheetText):
        (WebCore::InspectorStyleSheet::resourceStyleSheetText):
        (WebCore::InspectorStyleSheet::inlineStyleSheetText):
        (WebCore::InspectorStyleSheet::buildArrayForRuleList):
        (WebCore::InspectorStyleSheetForInlineStyle::InspectorStyleSheetForInlineStyle):
        (WebCore::InspectorStyleSheetForInlineStyle::setStyleText):
        (WebCore::InspectorStyleSheetForInlineStyle::ownerDocument):
        (WebCore::InspectorStyleSheetForInlineStyle::ensureParsedDataReady):
        (WebCore::InspectorStyleSheetForInlineStyle::inlineStyle):
        (WebCore::InspectorStyleSheetForInlineStyle::getStyleAttributeRanges):
        * inspector/InspectorStyleSheet.h: Added.
        (WebCore::InspectorStyleSheet::create):
        (WebCore::InspectorStyleSheet::id):
        (WebCore::InspectorStyleSheet::pageStyleSheet):
        (WebCore::InspectorStyleSheet::canBind):
        (WebCore::InspectorStyleSheet::fullRuleOrStyleId):
        (WebCore::InspectorStyleSheet::ruleOrStyleId):
        (WebCore::InspectorStyleSheet::fullStyleId):
        (WebCore::InspectorStyleSheetForInlineStyle::create):
        (WebCore::InspectorStyleSheetForInlineStyle::styleForId):
        (WebCore::InspectorStyleSheetForInlineStyle::ruleSourceDataFor):
        (WebCore::InspectorStyleSheetForInlineStyle::ruleIndexByStyle):
        * inspector/InspectorUtilities.cpp: Added.
        (WebCore::InspectorUtilities::resourceContentForURL):
        * inspector/InspectorUtilities.h: Added.

2010-10-05  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: extract Inspector Instrumentation API as a class
        https://bugs.webkit.org/show_bug.cgi?id=47173

        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::send):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::evaluateInWorld):
        * bindings/v8/V8DOMWindowShell.cpp:
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::evaluate):
        (WebCore::V8Proxy::callFunction):
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::V8XMLHttpRequest::sendCallback):
        * dom/Document.cpp:
        (WebCore::Document::recalcStyle):
        * dom/Document.h:
        * dom/Node.cpp:
        (WebCore::Node::dispatchGenericEvent):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::pumpTokenizer):
        * html/parser/HTMLDocumentParser.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::InspectorInstrumentation::hasFrontend):
        (WebCore::InspectorInstrumentation::retrieveTimelineAgent):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::hasFrontends):
        (WebCore::InspectorInstrumentation::inspectorControllerForContext):
        (WebCore::InspectorInstrumentation::inspectorControllerForDocument):
        (WebCore::InspectorInstrumentation::inspectorControllerForFrame):
        (WebCore::InspectorInstrumentation::inspectorControllerForPage):
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::InspectorTimelineAgent):
        (WebCore::InspectorTimelineAgent::~InspectorTimelineAgent):
        * inspector/InspectorTimelineAgent.h:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::didReceiveResponse):
        (WebCore::ResourceLoader::didReceiveData):
        * loader/loader.cpp:
        (WebCore::Loader::load):
        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::install):
        (WebCore::DOMTimer::removeById):
        (WebCore::DOMTimer::fired):
        * page/DOMTimer.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::dispatchEvent):
        * page/DOMWindow.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        (WebCore::FrameView::paintContents):
        * page/FrameView.h:
        * page/Page.cpp:
        * page/Page.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintContents):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::callReadyStateChangeListener):

2010-10-07  Zraly Mike  <mike.zraly@nokia.com>

        Reviewed by Andreas Kling.

        Windowless flash plugin is not rendered in Symbian
        https://bugs.webkit.org/show_bug.cgi?id=47172

        * plugins/symbian/PluginViewSymbian.cpp:
        (WebCore::PluginView::platformStart):
        Add call to updatePluginWidget() following changes to
        platform widget.  This is needed to set PluginView's
        m_windowRect and m_clipRect members properly after
        the proxy widget and its container get created.

2010-10-07  Andreas Kling  <kling@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Rename (and move) RenderPath to svg/RenderSVGPath
        https://bugs.webkit.org/show_bug.cgi?id=47053

        Also renamed RenderObject::isRenderPath() to isSVGPath()

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.order:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isSVGPath):
        * rendering/RenderPath.cpp: Removed.
        * rendering/RenderPath.h: Removed.
        * rendering/RenderSVGHiddenContainer.cpp:
        * rendering/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::drawContentIntoMaskImage):
        (WebCore::RenderSVGResourceClipper::calculateClipContentRepaintRect):
        (WebCore::RenderSVGResourceClipper::hitTestClipContent):
        * rendering/RenderSVGResourceContainer.cpp:
        (WebCore::RenderSVGResourceContainer::transformOnNonScalingStroke):
        * rendering/RenderSVGResourceSolidColor.cpp:
        (WebCore::RenderSVGResourceSolidColor::postApplyResource):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::write):
        * rendering/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::layoutChildren):
        * rendering/SVGRenderTreeAsText.cpp:
        (WebCore::writeStyle):
        (WebCore::operator<<):
        (WebCore::write):
        * rendering/SVGRenderTreeAsText.h:
        * rendering/style/SVGRenderStyle.cpp:
        (WebCore::SVGRenderStyle::diff):
        * rendering/svg/RenderSVGPath.cpp: Copied from WebCore/rendering/RenderPath.cpp.
        (WebCore::RenderSVGPath::RenderSVGPath):
        (WebCore::RenderSVGPath::fillContains):
        (WebCore::RenderSVGPath::strokeContains):
        (WebCore::RenderSVGPath::layout):
        (WebCore::RenderSVGPath::fillAndStrokePath):
        (WebCore::RenderSVGPath::paint):
        (WebCore::RenderSVGPath::addFocusRingRects):
        (WebCore::RenderSVGPath::nodeAtFloatPoint):
        (WebCore::RenderSVGPath::calculateMarkerBoundsIfNeeded):
        (WebCore::RenderSVGPath::updateCachedBoundaries):
        * rendering/svg/RenderSVGPath.h: Copied from WebCore/rendering/RenderPath.h.
        (WebCore::RenderSVGPath::isSVGPath):
        (WebCore::RenderSVGPath::renderName):
        (WebCore::toRenderSVGPath):
        * svg/SVGCircleElement.cpp:
        (WebCore::SVGCircleElement::svgAttributeChanged):
        * svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::svgAttributeChanged):
        * svg/SVGGradientElement.cpp:
        * svg/SVGLineElement.cpp:
        (WebCore::SVGLineElement::svgAttributeChanged):
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::svgAttributeChanged):
        * svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::svgAttributeChanged):
        * svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::svgAttributeChanged):
        * svg/SVGStyledLocatableElement.cpp:
        * svg/SVGStyledTransformableElement.cpp:
        (WebCore::SVGStyledTransformableElement::createRenderer):

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

        Reviewed by Pavel Feldman.

        Web Inspector: clear line highlight when switching current view
        https://bugs.webkit.org/show_bug.cgi?id=47262

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.clearLineHighlight):
        * inspector/front-end/SourceView.js:
        (WebInspector.SourceView.prototype.hide):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype.highlightLine):
        (WebInspector.TextViewer.prototype.clearLineHighlight):

2010-10-06  Chris Evans  <cevans@google.com>

        Reviewed by David Levin.

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

        Fix integer errors with enormous input strings to newline normalization APIs.

        * platform/text/LineEnding.cpp:
        (WebCore::normalizeLineEndingsToCRLF): return the empty string upon huge input strings. (Behaves similarly to base64Encode now).
        (WebCore::normalizeToCROrLF): use the correct type for a string length.

2010-10-06  Kent Tamura  <tkent@chromium.org>

        Unreviewed, build fix.

        Windows build fix for r69272.

        * html/BaseDateAndTimeInputType.cpp:
        (WebCore::BaseDateAndTimeInputType::stepBase):
         Use defaultStepBase() instead of defaultStepBase.
        * html/InputType.h:
        (WebCore::InputType::defaultStepBase):
         Make defaultStepBase static function.
        * html/NumberInputType.cpp:
        (WebCore::NumberInputType::stepBase):
         Use defaultStepBase() instead of defaultStepBase.

2010-10-06  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        Refactor HTMLInputElement: Move range/step related functions
        https://bugs.webkit.org/show_bug.cgi?id=47251

        Move the content of the following functions:
         - rangeUnderflow()
         - rangeOverflow()
         - minimum()
         - maximum()
         - stepMismatch()
         - stepBase()

        getStepParameters() was split into InputType::defaultStep() and
        stepScaleFactor().

        * html/BaseDateAndTimeInputType.cpp:
        (WebCore::BaseDateAndTimeInputType::rangeUnderflow):
        (WebCore::BaseDateAndTimeInputType::rangeOverflow):
        (WebCore::BaseDateAndTimeInputType::stepMismatch):
        (WebCore::BaseDateAndTimeInputType::stepBase):
        * html/BaseDateAndTimeInputType.h:
        * html/DateInputType.cpp:
        (WebCore::DateInputType::minimum):
        (WebCore::DateInputType::maximum):
        (WebCore::DateInputType::defaultStep):
        (WebCore::DateInputType::stepScaleFactor):
        (WebCore::DateInputType::parsedStepValueShouldBeInteger):
        * html/DateInputType.h:
        * html/DateTimeInputType.cpp:
        (WebCore::DateTimeInputType::minimum):
        (WebCore::DateTimeInputType::maximum):
        (WebCore::DateTimeInputType::defaultStep):
        (WebCore::DateTimeInputType::stepScaleFactor):
        (WebCore::DateTimeInputType::scaledStepValeuShouldBeInteger):
        * html/DateTimeInputType.h:
        * html/DateTimeLocalInputType.cpp:
        (WebCore::DateTimeLocalInputType::minimum):
        (WebCore::DateTimeLocalInputType::maximum):
        (WebCore::DateTimeLocalInputType::defaultStep):
        (WebCore::DateTimeLocalInputType::stepScaleFactor):
        (WebCore::DateTimeLocalInputType::scaledStepValeuShouldBeInteger):
        * html/DateTimeLocalInputType.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::rangeUnderflow):
        (WebCore::HTMLInputElement::rangeOverflow):
        (WebCore::HTMLInputElement::minimum):
        (WebCore::HTMLInputElement::maximum):
        (WebCore::HTMLInputElement::stepMismatch):
        (WebCore::HTMLInputElement::getAllowedValueStep):
        (WebCore::HTMLInputElement::applyStep):
        (WebCore::HTMLInputElement::handleKeyEventForRange):
        (WebCore::HTMLInputElement::stepUpFromRenderer):
        * html/HTMLInputElement.h:
        * html/InputType.cpp:
        (WebCore::InputType::patternMismatch):
        (WebCore::InputType::rangeUnderflow):
        (WebCore::InputType::rangeOverflow):
        (WebCore::InputType::minimum):
        (WebCore::InputType::maximum):
        (WebCore::InputType::stepMismatch):
        (WebCore::InputType::stepBase):
        (WebCore::InputType::defaultStep):
        (WebCore::InputType::stepScaleFactor):
        (WebCore::InputType::parsedStepValueShouldBeInteger):
        (WebCore::InputType::scaledStepValeuShouldBeInteger):
        * html/InputType.h:
        * html/MonthInputType.cpp:
        (WebCore::MonthInputType::minimum):
        (WebCore::MonthInputType::maximum):
        (WebCore::MonthInputType::defaultStep):
        (WebCore::MonthInputType::stepScaleFactor):
        (WebCore::MonthInputType::parsedStepValueShouldBeInteger):
        * html/MonthInputType.h:
        * html/NumberInputType.cpp:
        (WebCore::NumberInputType::rangeUnderflow):
        (WebCore::NumberInputType::rangeOverflow):
        (WebCore::NumberInputType::minimum):
        (WebCore::NumberInputType::maximum):
        (WebCore::NumberInputType::stepMismatch):
        (WebCore::NumberInputType::stepBase):
        (WebCore::NumberInputType::defaultStep):
        (WebCore::NumberInputType::stepScaleFactor):
        * html/NumberInputType.h:
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::rangeUnderflow):
        (WebCore::RangeInputType::rangeOverflow):
        (WebCore::RangeInputType::minimum):
        (WebCore::RangeInputType::maximum):
        (WebCore::RangeInputType::stepMismatch):
        (WebCore::RangeInputType::stepBase):
        (WebCore::RangeInputType::defaultStep):
        (WebCore::RangeInputType::stepScaleFactor):
        * html/RangeInputType.h:
        * html/TimeInputType.cpp:
        (WebCore::TimeInputType::minimum):
        (WebCore::TimeInputType::maximum):
        (WebCore::TimeInputType::defaultStep):
        (WebCore::TimeInputType::stepScaleFactor):
        (WebCore::TimeInputType::scaledStepValeuShouldBeInteger):
        * html/TimeInputType.h:
        * html/WeekInputType.cpp:
        (WebCore::WeekInputType::minimum):
        (WebCore::WeekInputType::maximum):
        (WebCore::WeekInputType::stepBase):
        (WebCore::WeekInputType::defaultStep):
        (WebCore::WeekInputType::stepScaleFactor):
        (WebCore::WeekInputType::parsedStepValueShouldBeInteger):
        * html/WeekInputType.h:

2010-10-06  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein, Darin Adler.

        :first-letter should apply to "punctuation" after the first letter
        https://bugs.webkit.org/show_bug.cgi?id=45986
        
        Follow the CSS 2.1 spec by allow certain kinds of punctuation before and after
        the :first-letter character.
        
        The spec does not describe whitespace behavior, and browsers are inconsistent.
        This patch allows whitespace (including non-breaking spaces) before and after the
        leading punctuation, and before the trailing punctuation.

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

        * rendering/RenderBlock.cpp:
        (WebCore::isPunctuationForFirstLetter):
        (WebCore::shouldSkipForFirstLetter):
        (WebCore::RenderBlock::updateFirstLetter):

2010-10-06  Sanjeev Radhakrishnan  <sanjeevr@chromium.org>

        Reviewed by Darin Fisher.

        Released the pluginNode in PluginDocument::detach() and prevents a memory leak.
        https://bugs.webkit.org/show_bug.cgi?id=47129

        * html/PluginDocument.cpp:
        (WebCore::PluginDocument::detach):
        * html/PluginDocument.h:

2010-10-06  Vincent Scheib  <scheib@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Thumbnail generation asserts on zero alpha values.
        https://bugs.webkit.org/show_bug.cgi?id=47292

        Test: Tested manually by running debug mode, and analyzing in PIX.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::drawLayers):

2010-10-06  Kinuko Yasuda  <kinuko@chromium.org>

        Unreviewed, trying to fix chromium Windows build.

        Explicitly give the parameter value that has a default parameter value.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::requestFileSystem):
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::requestFileSystem):

2010-10-06  Darin Adler  <darin@apple.com>

        Try to fix Windows build.

        * platform/graphics/cg/ColorCG.cpp:
        (WebCore::cachedCGColor): Put in braces to make the Windows compiler
        happy with this file.

        * platform/graphics/cg/ImageCG.cpp: Added include of RetainPtr.h.

2010-10-06  Darin Adler  <darin@apple.com>

        Reviewed by Alexey Proskuryakov.

        Cache CGColor as we do NSColor
        https://bugs.webkit.org/show_bug.cgi?id=47226

        This fixes performance problems on certain web pages that use
        multiple colors. Once in the past we were using NSColor. Now that
        we are using CGColor, we need the same sort of caching that we have
        for NSColor.

        One example: <http://results.active.com/uploads/html/100759.html>.

        * WebCore.xcodeproj/project.pbxproj: Add GraphicsContextCG.h.

        * platform/graphics/Color.h: Replace createCGColor with cachedCGColor.

        * platform/graphics/cg/ColorCG.cpp:
        (WebCore::cachedCGColorSpace): Added.
        (WebCore::leakCGColor): Added. 
        (WebCore::cachedCGColor): Added.

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::setCGFillColor): Use cachedCGColor.
        (WebCore::setCGStrokeColor): Ditto.
        (WebCore::GraphicsContext::fillRect): Ditto.
        (WebCore::GraphicsContext::setPlatformShadow): Ditto.

        * platform/graphics/cg/GraphicsContextCG.h: Added.
        * platform/graphics/cg/GraphicsContextPlatformPrivateCG.h:
        Moved the color space functions here.

        * platform/graphics/cg/ImageCG.cpp: Tweaked headers and formatting.

        * platform/graphics/mac/ColorMac.mm: Removed the createCGColor
        function.

        * platform/graphics/mac/GraphicsContextMac.mm:
        (WebCore::drawFocusRingToContext): Removed innappropriate use of
        RetainPtr for the arguments to this function.
        (WebCore::GraphicsContext::drawFocusRing): Use cachedCGColor.

        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::setLayerBorderColor): Use cachedCGColor.
        (WebCore::setLayerBackgroundColor): Ditto.
        * platform/graphics/win/GraphicsContextCGWin.cpp:
        (WebCore::GraphicsContext::drawFocusRing): Ditto.
        * platform/graphics/win/GraphicsLayerCACF.cpp:
        (WebCore::setLayerBorderColor): Ditto.
        (WebCore::setLayerBackgroundColor): Ditto.

        * platform/graphics/win/WKCACFLayerRenderer.cpp:
        (WebCore::WKCACFLayerRenderer::WKCACFLayerRenderer): Use
        CGColorCreateGenericRGB for color used only for debugging.
        * platform/graphics/win/WebTiledLayer.cpp:
        (WebCore::WebTiledLayer::addTile): Ditto.

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

        Reviewed by James Robinson

        ScrollViews without scrollbars should not eat scroll events
        https://bugs.webkit.org/show_bug.cgi?id=47036

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::wheelEvent):

2010-10-06  Daniel Bates  <dbates@rim.com>

        Reviewed by Darin Adler.

        ASSERTION FAILURE: Attempt to cast RenderObject to RenderFrameSet
        when <frameset> has CSS content property
        https://bugs.webkit.org/show_bug.cgi?id=47314

        Fixes an issue where sending a mouse event to an HTML Frameset Element that
        whose content was replaced via the CSS content property causes an assertion
        failure.

        By default, HTMLFrameSetElement forwards mouse events to RenderFrameSet so as
        to support resizing a frame within the set. When a <frameset> specifies an
        image in its CSS content property we create a generic render object (RenderObject)
        for the frame set instead of a RenderFrameSet object. The event handler code
        in HTMLFrameSetElement calls WebCore::toRenderFrameSet() to cast its renderer
        to type RenderFrameSet, which fails. To correct this, HTMLFrameSetElement
        must check that its renderer is of type RenderFrameSet before casting to this type.

        Test: fast/frames/crash-frameset-CSS-content-property.html

        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::defaultEventHandler): Check that our renderer is
        of type RenderFrameSet before casting it as such.

2010-10-06  Albert J. Wong  <ajwong@chromium.org>

        Reviewed by Andreas Kling.

        r69181 breaks compilation of WebCore/platform/graphics/filters/FETile.cpp if ENABLE(SVG) is false.
        https://bugs.webkit.org/show_bug.cgi?id=47315

        Compile fix. No tests.

        * platform/graphics/filters/FETile.cpp:
        (WebCore::FETile::apply):

2010-10-06  Kinuko Yasuda  <kinuko@chromium.org>

        Unreviewed, fixing screwed up ChangeLogs.

2010-10-06  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by David Levin.

        Add FileSystemSync implementation for Worker
        https://bugs.webkit.org/show_bug.cgi?id=47044

        Tests: fast/filesystem/async-operations.html
               fast/filesystem/workers/async-operations.html
               fast/filesystem/workers/sync-operations.html

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/generic/RuntimeEnabledFeatures.h: Removed
        requestFileSystemEnabled() as I changed the idl/generator to
        use fileSystemEnabled for all the FileSystem related features.
        * fileapi/DOMFileSystem.cpp:
        * fileapi/DOMFileSystem.h:
        * fileapi/DOMFileSystemBase.cpp:
        (WebCore::DOMFileSystemBase::getMetadata): Moved from DOMFileSystem.
        (WebCore::checkValidityForForCopyOrMove): Moved from DOMFileSystem.
        (WebCore::DOMFileSystemBase::move): Moved from DOMFileSystem.
        (WebCore::DOMFileSystemBase::copy): Moved from DOMFileSystem.
        (WebCore::DOMFileSystemBase::remove): Moved from DOMFileSystem.
        (WebCore::DOMFileSystemBase::getParent): Moved from DOMFileSystem.
        (WebCore::DOMFileSystemBase::getFile): Moved from DOMFileSystem.
        (WebCore::DOMFileSystemBase::getDirectory): Moved from DOMFileSystem.
        (WebCore::DOMFileSystemBase::readDirectory): Moved from DOMFileSystem.
        * fileapi/DOMFileSystemBase.h:
        * fileapi/DOMFileSystemSync.h:
        * fileapi/DirectoryEntry.cpp:
        (WebCore::DirectoryEntry::DirectoryEntry): Updated to call
        DOMFileSystemBase's method instead of DOMFileSystem's one.
        (WebCore::DirectoryEntry::getFile): Ditto.
        (WebCore::DirectoryEntry::getDirectory): Ditto.
        * fileapi/DirectoryEntry.h:
        * fileapi/DirectoryEntrySync.cpp:
        (WebCore::DirectoryEntrySync::getFile): Implemented.
        (WebCore::DirectoryEntrySync::getDirectory): Implemented.
        * fileapi/DirectoryReader.h:
        * fileapi/DirectoryReaderSync.cpp:
        (WebCore::DirectoryReaderSync::readEntries): Implemented.
        * fileapi/Entry.cpp:
        (WebCore::Entry::Entry): Updated to call DOMFileSystemBase's method.
        (WebCore::Entry::getMetadata): Ditto.
        (WebCore::Entry::moveTo): Ditto.
        (WebCore::Entry::copyTo): Ditto.
        (WebCore::Entry::remove): Ditto.
        (WebCore::Entry::getParent): Ditto.
        * fileapi/Entry.h:
        * fileapi/Entry.idl:
        * fileapi/EntryArraySync.cpp:
        (WebCore::EntryArraySync::create): Added.
        * fileapi/EntryArraySync.h:
        * fileapi/EntryBase.h:
        (WebCore::EntryBase::filesystem): Added.
        * fileapi/EntrySync.cpp:
        (WebCore::EntrySync::create): Implemented.
        (WebCore::EntrySync::getMetadata): Implemented.
        (WebCore::EntrySync::moveTo): Implemented.
        (WebCore::EntrySync::copyTo): Implemented.
        (WebCore::EntrySync::remove): Implemented.
        * fileapi/EntrySync.h:
        * fileapi/FileEntry.cpp:
        * fileapi/FileEntry.h:
        * fileapi/FileSystemCallbacks.cpp:
        (WebCore::EntryCallbacks::create): Updated to take DOMFileSystemBase
        instead of DOMFileSystem.
        (WebCore::EntryCallbacks::EntryCallbacks): Ditto.
        (WebCore::EntriesCallbacks::create): Ditto.
        (WebCore::EntriesCallbacks::EntriesCallbacks): Ditto.
        * fileapi/FileSystemCallbacks.h:
        * fileapi/LocalFileSystem.cpp:
        (WebCore::LocalFileSystem::requestFileSystem): Added synchronous
        parameter.
        * fileapi/LocalFileSystem.h:
        * fileapi/Metadata.h:
        * fileapi/SyncCallbackHelper.h: Added. This defines a helper template
        for synchronous implementation.
        * page/DOMWindow.idl:
        * platform/AsyncFileSystem.h:
        (WebCore::AsyncFileSystem::waitCompletion): Added.
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::requestFileSystemSync): Added.
        * workers/WorkerContext.h:
        * workers/WorkerContext.idl:

2010-10-06  Andrei Popescu  <andreip@google.com>

        Reviewed by Jeremy Orlow.

        IDBDatabase and IDBObjectStore metadata is not recovered correctly when the setVersion transactions aborts.
        https://bugs.webkit.org/show_bug.cgi?id=47245

        Recover metadata properly by adding abort tasks that
        are run when a transaction aborts.
 
        * storage/IDBDatabase.cpp:
        (WebCore::IDBDatabase::createObjectStore):
        (WebCore::IDBDatabase::removeObjectStore):
        * storage/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::createObjectStore):
        (WebCore::IDBDatabaseBackendImpl::removeObjectStore):
        (WebCore::IDBDatabaseBackendImpl::setVersion):
        (WebCore::IDBDatabaseBackendImpl::removeObjectStoreFromMap):
        (WebCore::IDBDatabaseBackendImpl::addObjectStoreToMap):
        (WebCore::IDBDatabaseBackendImpl::resetVersion):
        * storage/IDBDatabaseBackendImpl.h:
        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::createIndex):
        (WebCore::IDBObjectStoreBackendImpl::removeIndex):
        (WebCore::IDBObjectStoreBackendImpl::removeIndexFromMap):
        (WebCore::IDBObjectStoreBackendImpl::addIndexToMap):
        * storage/IDBObjectStoreBackendImpl.h:
        * storage/IDBTransactionBackendImpl.cpp:
        (WebCore::IDBTransactionBackendImpl::scheduleTask):
        (WebCore::IDBTransactionBackendImpl::abort):
        * storage/IDBTransactionBackendImpl.h:
        * storage/IDBTransactionBackendInterface.h:
        * storage/IDBTransactionCoordinator.h:

2010-10-06  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=47306
        
        Convert determineStart/EndPosition and matchedEndLine to be writing-mode-aware.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::determineStartPosition):
        (WebCore::RenderBlock::determineEndPosition):
        (WebCore::RenderBlock::matchedEndLine):

22010-10-06  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        REGRESSION (r53857): AREA tag with tabindex="-1" displays focus ring after multiple mouse clicks.
        https://bugs.webkit.org/show_bug.cgi?id=45832

        Test: fast/events/mouse-focus-imagemap.html

        * html/HTMLAreaElement.cpp:
        (WebCore::HTMLAreaElement::isKeyboardFocusable):
        (WebCore::HTMLAreaElement::isMouseFocusable):
        (WebCore::HTMLAreaElement::isFocusable):
        (WebCore::HTMLAreaElement::updateFocusAppearance):
        * html/HTMLAreaElement.h:

010-10-06  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

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

        Convert layoutInlineChildren to be block-flow-aware.  None of the functions it calls are patched yet.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::forceLayoutInlineChildren):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutInlineChildren):
        (WebCore::RenderBlock::beforeSideVisibleOverflowForLine):
        (WebCore::RenderBlock::afterSideVisibleOverflowForLine):
        (WebCore::RenderBlock::beforeSideLayoutOverflowForLine):
        (WebCore::RenderBlock::afterSideLayoutOverflowForLine):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::logicalLeftLayoutOverflow):
        (WebCore::RenderBox::logicalRightLayoutOverflow):
        (WebCore::RenderBox::logicalLeftVisualOverflow):
        (WebCore::RenderBox::logicalRightVisualOverflow):

2010-10-06  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=47298
        
        Rename blockHeight to blockLogicalHeight.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::markLinesDirtyInBlockRange):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::computeBlockDirectionPositionsForLine):
        (WebCore::RenderBlock::layoutInlineChildren):
        (WebCore::RenderBlock::determineStartPosition):
        (WebCore::RenderBlock::determineEndPosition):
        (WebCore::RenderBlock::matchedEndLine):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::RootInlineBox):
        (WebCore::RootInlineBox::adjustPosition):
        * rendering/RootInlineBox.h:
        (WebCore::RootInlineBox::blockLogicalHeight):
        (WebCore::RootInlineBox::setBlockLogicalHeight):
        * rendering/svg/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::layoutRootBox):

2010-10-05  James Robinson  <jamesr@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] DRT assertion w/accel 2D canvas in PlatformContextSkia
        https://bugs.webkit.org/show_bug.cgi?id=47242

        Call PlatformContextSkia::prepareForSoftwareDraw before doing putImageData
        since that call mutates the software backing store.

        Test: fast/canvas/canvas-putImageData.html

        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageBuffer::putUnmultipliedImageData):

2010-10-06  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Brady Eidson.

        https://bugs.webkit.org/show_bug.cgi?id=47294
        <rdar://problem/8425647>Application cache isn't consulted on redirect

        Test: http/tests/appcache/main-resource-redirect.html

        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::continueAfterNavigationPolicy): If we have substitute data now
        (presumably after a redirect is served by appcache), switch to it.
        (WebCore::MainResourceLoader::willSendRequest): Check appcache for the new URL.

        * loader/MainResourceLoader.h: Made handleDataLoadSoon() take a const ResourceRequest
        reference - it doesn't ever modify it, and we can call it from continueAfterNavigationPolicy() now.

2010-10-06  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Dirk Schulze.

        ContextShadow should not use the blur radius as kernel size of the
        box blurs
        https://bugs.webkit.org/show_bug.cgi?id=46918

        Calculate the size of the kernel in the blur algorithm using the radius instead
        of using the blur distance directly. Change the name of the variables to match the
        terminology in the spec.

        * platform/graphics/ContextShadow.cpp:
        (WebCore::ContextShadow::ContextShadow):
        (WebCore::ContextShadow::clear):
        (WebCore::ContextShadow::blurLayerImage):
        (WebCore::ContextShadow::calculateLayerBoundingRect):
        * platform/graphics/ContextShadow.h:

2010-10-06  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Correct CamelCase of socketSentdata() in SocketStreamHandlePrivate 
        to fix "QMetaObject::invokeMethod: No such method" warnings in layout tests.
        https://bugs.webkit.org/show_bug.cgi?id=47284

        No new tests needed.

        * platform/network/qt/SocketStreamHandlePrivate.h:
        * platform/network/qt/SocketStreamHandleQt.cpp:
        (WebCore::SocketStreamHandlePrivate::socketSentData):

2010-10-06  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

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

        Update to the latest writing-mode draft. The block-flow property is gone and has been replaced with writing-mode.
        Change all the code to use writingMode() instead of blockFlow() and rename all functions that referred to block flow
        as appropriate.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator WritingMode):
        (WebCore::CSSPrimitiveValue::operator SVGWritingMode):
        * css/CSSProperty.cpp:
        (WebCore::resolveToPhysicalProperty):
        (WebCore::CSSProperty::resolveDirectionAwareProperty):
        * css/CSSProperty.h:
        * css/CSSPropertyNames.in:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::styleForDocument):
        (WebCore::CSSStyleSelector::adjustRenderStyle):
        (WebCore::CSSStyleSelector::applyDeclarations):
        (WebCore::CSSStyleSelector::applyProperty):
        * css/CSSValueKeywords.in:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::MarginInfo::MarginInfo):
        (WebCore::RenderBlock::expandsToEncloseOverhangingFloats):
        (WebCore::RenderBlock::setLogicalLeftForChild):
        (WebCore::RenderBlock::setLogicalTopForChild):
        (WebCore::RenderBlock::layoutBlockChild):
        (WebCore::RenderBlock::insertFloatingObject):
        (WebCore::RenderBlock::addOverhangingFloats):
        (WebCore::RenderBlock::addIntrudingFloats):
        (WebCore::RenderBlock::collapsedMarginBeforeForChild):
        (WebCore::RenderBlock::collapsedMarginAfterForChild):
        (WebCore::RenderBlock::marginBeforeForChild):
        (WebCore::RenderBlock::marginAfterForChild):
        (WebCore::RenderBlock::marginStartForChild):
        (WebCore::RenderBlock::marginEndForChild):
        (WebCore::RenderBlock::setMarginStartForChild):
        (WebCore::RenderBlock::setMarginEndForChild):
        (WebCore::RenderBlock::setMarginBeforeForChild):
        (WebCore::RenderBlock::setMarginAfterForChild):
        (WebCore::RenderBlock::marginValuesForChild):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::logicalWidthForChild):
        (WebCore::RenderBlock::logicalHeightForChild):
        (WebCore::RenderBlock::logicalTopForChild):
        (WebCore::RenderBlock::logicalRightOffsetForContent):
        (WebCore::RenderBlock::logicalLeftOffsetForContent):
        (WebCore::RenderBlock::logicalTopForFloat):
        (WebCore::RenderBlock::logicalBottomForFloat):
        (WebCore::RenderBlock::logicalLeftForFloat):
        (WebCore::RenderBlock::logicalRightForFloat):
        (WebCore::RenderBlock::logicalWidthForFloat):
        (WebCore::RenderBlock::setLogicalTopForFloat):
        (WebCore::RenderBlock::setLogicalLeftForFloat):
        (WebCore::RenderBlock::setLogicalHeightForFloat):
        (WebCore::RenderBlock::setLogicalWidthForFloat):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::marginBefore):
        (WebCore::RenderBox::marginAfter):
        (WebCore::RenderBox::marginStart):
        (WebCore::RenderBox::marginEnd):
        (WebCore::RenderBox::setMarginStart):
        (WebCore::RenderBox::setMarginEnd):
        (WebCore::RenderBox::setMarginBefore):
        (WebCore::RenderBox::setMarginAfter):
        (WebCore::RenderBox::styleDidChange):
        (WebCore::RenderBox::perpendicularContainingBlockLogicalHeight):
        (WebCore::RenderBox::computeLogicalWidth):
        (WebCore::RenderBox::computeLogicalHeight):
        (WebCore::RenderBox::availableLogicalHeightUsing):
        (WebCore::RenderBox::avoidsFloats):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::logicalLeft):
        (WebCore::RenderBox::logicalTop):
        (WebCore::RenderBox::logicalWidth):
        (WebCore::RenderBox::logicalHeight):
        (WebCore::RenderBox::setLogicalLeft):
        (WebCore::RenderBox::setLogicalTop):
        (WebCore::RenderBox::setLogicalWidth):
        (WebCore::RenderBox::setLogicalHeight):
        (WebCore::RenderBox::setLogicalLocation):
        (WebCore::RenderBox::contentLogicalWidth):
        (WebCore::RenderBox::contentLogicalHeight):
        (WebCore::RenderBox::stretchesToViewport):
        (WebCore::RenderBox::intrinsicLogicalWidth):
        (WebCore::RenderBox::intrinsicLogicalHeight):
        (WebCore::RenderBox::availableWidth):
        (WebCore::RenderBox::availableHeight):
        (WebCore::RenderBox::scrollbarLogicalHeight):
        (WebCore::RenderBox::isWritingModeRoot):
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::paintBoxDecorations):
        (WebCore::RenderFieldset::paintMask):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::computeReplacedLogicalWidth):
        (WebCore::RenderImage::computeReplacedLogicalHeight):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::marginLeft):
        (WebCore::RenderInline::marginRight):
        (WebCore::RenderInline::marginTop):
        (WebCore::RenderInline::marginBottom):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paddingTop):
        (WebCore::RenderTableCell::paddingBottom):
        (WebCore::RenderTableCell::paddingLeft):
        (WebCore::RenderTableCell::paddingRight):
        * rendering/RenderView.h:
        (WebCore::RenderView::viewLogicalWidth):
        (WebCore::RenderView::viewLogicalHeight):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::RootInlineBox):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::diff):
        (WebCore::RenderStyle::logicalWidth):
        (WebCore::RenderStyle::logicalHeight):
        (WebCore::RenderStyle::logicalMinWidth):
        (WebCore::RenderStyle::logicalMaxWidth):
        (WebCore::RenderStyle::logicalMinHeight):
        (WebCore::RenderStyle::logicalMaxHeight):
        (WebCore::RenderStyle::borderBeforeWidth):
        (WebCore::RenderStyle::borderAfterWidth):
        (WebCore::RenderStyle::borderStartWidth):
        (WebCore::RenderStyle::borderEndWidth):
        (WebCore::RenderStyle::marginBefore):
        (WebCore::RenderStyle::marginAfter):
        (WebCore::RenderStyle::marginBeforeUsing):
        (WebCore::RenderStyle::marginAfterUsing):
        (WebCore::RenderStyle::marginStart):
        (WebCore::RenderStyle::marginEnd):
        (WebCore::RenderStyle::marginStartUsing):
        (WebCore::RenderStyle::marginEndUsing):
        (WebCore::RenderStyle::paddingBefore):
        (WebCore::RenderStyle::paddingAfter):
        (WebCore::RenderStyle::paddingStart):
        (WebCore::RenderStyle::paddingEnd):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::setBitDefaults):
        (WebCore::InheritedFlags::writingMode):
        (WebCore::InheritedFlags::isHorizontalWritingMode):
        (WebCore::InheritedFlags::setWritingMode):
        (WebCore::InheritedFlags::initialWritingMode):
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/SVGRenderStyle.h:
        (WebCore::SVGRenderStyle::initialWritingMode):
        (WebCore::SVGRenderStyle::setWritingMode):
        (WebCore::SVGRenderStyle::writingMode):
        * rendering/style/SVGRenderStyleDefs.h:

2010-10-06  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r69201.
        http://trac.webkit.org/changeset/69201
        https://bugs.webkit.org/show_bug.cgi?id=47279

        This change broke the WebKitGTK+ build for GTK+ 2.0.
        (Requested by mrobinson on #webkit).

        * platform/gtk/GtkVersioning.c:
        (getDefaultGDKPointerDevice):
        * platform/gtk/GtkVersioning.h:
        * platform/gtk/PlatformScreenGtk.cpp:
        (WebCore::getVisual):
        (WebCore::screenAvailableRect):

2010-10-06  Stephen White  <senorblanco@chromium.org>

        Reviewed by James Robinson.
        https://bugs.webkit.org/show_bug.cgi?id=47282

        Robustify the creation of SharedGraphicsContext3D against shader
        compilation failures.

        Covered by any canvas 2D layout test, when opened in chrome with 
        --enable-accelerated-2d-canvas --in-process-webgl.

        * platform/graphics/gpu/SharedGraphicsContext3D.cpp:
        (WebCore::SharedGraphicsContext3D::create):
        (WebCore::SharedGraphicsContext3D::SharedGraphicsContext3D):
        * platform/graphics/gpu/SharedGraphicsContext3D.h:

2010-10-06  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        Renaming WebCore::ViewportConfiguration to WebCore::ViewportAttributes
        https://bugs.webkit.org/show_bug.cgi?id=47268

        Renaming WebCore::ViewportConfiguration to WebCore::ViewportAttributes

        * dom/ViewportArguments.cpp:
        (WebCore::findConfigurationForViewportData):
        * dom/ViewportArguments.h:

2010-10-06  Renata Hodovan  <reni@inf.u-szeged.hu>

        Reviewed by Nikolas Zimmermann.

        SVGFEMergeNodeElement doesn't support dynamic invalidation, when attributes change.
        https://bugs.webkit.org/show_bug.cgi?id=47181

        Since feMergeNode doesn't have own renderer, we have to call the invalidation via its parent.

        Tests: svg/dynamic-updates/SVGFEMergeNodeElement-dom-in-attr.html
               svg/dynamic-updates/SVGFEMergeNodeElement-svgdom-in-prop.html

        * svg/SVGFEMergeNodeElement.cpp:
        (WebCore::SVGFEMergeNodeElement::svgAttributeChanged):
        * svg/SVGFEMergeNodeElement.h:

2010-10-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Remove unused code from gtk2drawing.c
        https://bugs.webkit.org/show_bug.cgi?id=47086

        gtk2drawing.c was copied from mozilla and contains a lot of code that is not
        used by WebKit. Most of that unused code is uncompatible with gtk3, so
        removing it will make easier porting to gtk3.

        * platform/gtk/gtk2drawing.c:
        (moz_gtk_get_widget_border):
        (moz_gtk_widget_paint):
        (moz_gtk_destroy_theme_parts_widgets):
        * platform/gtk/gtkdrawing.h:

2010-10-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Use pixbufs instead of pixmaps when creating platform cursors
        https://bugs.webkit.org/show_bug.cgi?id=47087

        gdk_cursor_new_from_pixmap() has been removed in gtk3. We can use a
        pixbuf instead of a pixman and use gdk_cursor_new_from_pixbuf() instead
        for both gtk2 and gtk3.

        * platform/gtk/CursorGtk.cpp:
        (WebCore::createNamedCursor):
        * platform/gtk/GtkVersioning.c:
        (gdk_cairo_format_for_content):
        (gdk_cairo_surface_coerce_to_image):
        (convert_alpha):
        (convert_no_alpha):
        (gdk_pixbuf_get_from_surface):
        * platform/gtk/GtkVersioning.h:

2010-10-06  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: add event listener breakpoints sidebar pane
        https://bugs.webkit.org/show_bug.cgi?id=46738

        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager.prototype.createEventListenerBreakpoint):
        (WebInspector.BreakpointManager.prototype.createXHRBreakpoint.breakpoint.compareTo):
        (WebInspector.BreakpointManager.prototype.createXHRBreakpoint):
        (WebInspector.NativeBreakpoint):
        (WebInspector.NativeBreakpoint.prototype._setOnBackend.didSet):
        (WebInspector.NativeBreakpoint.prototype._setOnBackend):
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.XHRBreakpointsSidebarPane.prototype._showEditBreakpointDialog):
        (WebInspector.BreakpointItem):
        (WebInspector.EventListenerBreakpointsSidebarPane):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._populate):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._createCheckbox):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._categoryCheckboxClicked):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._eventNameCheckboxClicked):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._breakpointEnableChanged):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype._updateCategoryCheckbox):
        (WebInspector.EventListenerBreakpointsSidebarPane.prototype.reset):
        * inspector/front-end/EventListenersSidebarPane.js:
        ():
        * inspector/front-end/PropertiesSection.js:
        (WebInspector.PropertiesSection):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype.reset):
        * inspector/front-end/inspector.css:
        (.section .properties, .event-bar .event-properties):
        (.section.expanded .properties, .event-bar.expanded .event-properties):
        (ol.properties-tree):
        (ol.properties-tree li):
        (ol.properties-tree li.parent):
        (ol.properties-tree li.parent::before):
        (ol.properties-tree li.parent.expanded::before):
        (ol.properties-tree li .info):
        (ol.properties-tree ol, .stack-trace ol, ol.stack-trace):
        (ol.properties-tree ol.expanded, .stack-trace ol, ol.stack-trace):
        (ol.stack-trace):
        (.event-listener-breakpoints .event-category):
        (ol.event-listener-breakpoints.properties-tree .children li):
        (.event-listener-breakpoints .checkbox-elem):
        * inspector/front-end/inspector.js:
        (WebInspector.createXHRBreakpointsSidebarPane.breakpointAdded):
        (WebInspector.createXHRBreakpointsSidebarPane):

2010-10-06  Carlos Garcia Campos  <cgarcia@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Port to gtk+3 (2.91.0)
        https://bugs.webkit.org/show_bug.cgi?id=47249

        Do not use GdkDrawable deprecated API

        Some methods of GdkDrawable are deprecated in gtk2 and have been
        remmoved in gtk3. Equivalent API has been added to GdkWindow.

        * platform/gtk/GtkVersioning.c:
        (getDefaultGDKPointerDevice):
        * platform/gtk/GtkVersioning.h:
        * platform/gtk/PlatformScreenGtk.cpp:
        (WebCore::getVisual):
        (WebCore::screenAvailableRect):

2010-10-06  Ryuan Choi  <ryuan.choi@samsung.com>

        Reviewed by Antonio Gomes.

        [EFL] Support Progress Tag
        https://bugs.webkit.org/show_bug.cgi?id=45951

        Implement to render progress tag.

        No new tests. Existing tests in fast/dom/HTMLProgressElement.

        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::paintThemePart):
        (WebCore::RenderThemeEfl::edjeGroupFromFormType):
        (WebCore::RenderThemeEfl::adjustProgressBarStyle):
        (WebCore::RenderThemeEfl::paintProgressBar):
        * platform/efl/RenderThemeEfl.h:

2010-10-06  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Darin Adler.

        Add KURL::protocolIsData()
        https://bugs.webkit.org/show_bug.cgi?id=47219

        * page/Page.cpp:
        (WebCore::Page::userStyleSheetLocationChanged):
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::taintsCanvas):
        * page/XSSAuditor.cpp:
        (WebCore::XSSAuditor::findInRequest):
        * platform/KURL.h:
        (WebCore::KURL::protocolIsData):
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::dispatchSynchronousJob):
        (WebCore::ResourceHandleManager::startJob):
        * platform/network/win/ResourceHandleWin.cpp:
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::fileLoadTimer):

2010-10-06  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        CSSParser: Enable rule selector source range extraction.
        API modification followed by clients.
        https://bugs.webkit.org/show_bug.cgi?id=46367

        Some code removal suggested by Darin Adler.

        * css/CSSGrammar.y:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::CSSParser):
        (WebCore::CSSParser::parseSheet):
        (WebCore::CSSParser::parseDeclaration):
        (WebCore::CSSParser::createStyleRule):
        (WebCore::CSSParser::markSelectorListStart):
        (WebCore::CSSParser::markSelectorListEnd):
        (WebCore::CSSParser::markRuleBodyStart):
        (WebCore::CSSParser::markRuleBodyEnd):
        (WebCore::CSSParser::markPropertyStart):
        (WebCore::CSSParser::markPropertyEnd):
        * css/CSSParser.h:
        (WebCore::CSSParser::resetSelectorListMarks):
        (WebCore::CSSParser::resetRuleBodyMarks):
        (WebCore::CSSParser::resetPropertyMarks):
        * css/CSSPropertySourceData.cpp:
        * css/CSSPropertySourceData.h:
        (WebCore::CSSRuleSourceData::create):
        * inspector/InspectorCSSStore.cpp:
        (WebCore::InspectorCSSStore::getRuleSourceData):
        (WebCore::InspectorCSSStore::extractRanges):
        (WebCore::InspectorCSSStore::getStyleAttributeRanges):
        * inspector/InspectorCSSStore.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::getStyleSourceData):

2010-10-06  Dirk Schulze  <krit@webkit.org>

        Added reviewer to commit r69187.

2010-10-06  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        SVG feMorphology - big radii cause huge ImageBuffer sizes
        https://bugs.webkit.org/show_bug.cgi?id=47263

        The current code in FEMorphology::determineAbsolutePaintRect calculates the smallest paint rect by inflate the paint rect
        of a previous effect with the radius. This was meant as an optimization, but I forgot to clip the calculated image size
        by the maximal effect size. This caused huge image sizes for big radii.

        This is covered by svg/filters/feMorphology-invalid-radius.svg and fixes the crashes on Windows and Snow Leopard bots.

        * platform/graphics/filters/FEMorphology.cpp:
        (WebCore::FEMorphology::determineAbsolutePaintRect):

2010-10-06  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Dirk Schulze.

        Fixed crash in gtk bots (filter-empty-g.svg) after r69181.

        * rendering/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::postApplyResource):

2010-10-06  Antonio Gomes  <agomes@rim.org>

        Reviewed by Kenneth Rohde Christiansen.

        Rename HitTestResult::rectFromPoint to rectForPoint
        https://bugs.webkit.org/show_bug.cgi?id=47261

        As per Kenneth Christiansen request inhttps://bugs.webkit.org/show_bug.cgi?id=46336#c20.

        * WebCore.exp.in:
        * dom/Document.cpp:
        (WebCore::Document::nodesFromRect):
        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::nodeAtPoint):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::addNodeToRectBasedTestResult):
        (WebCore::HitTestResult::rectForPoint):
        * rendering/HitTestResult.h:
        (WebCore::HitTestResult::rectForPoint):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::nodeAtPoint):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::nodeAtPoint):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::nodeAtPoint):
        (WebCore::RenderBlock::hitTestColumns):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::nodeAtPoint):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::hitTestLayer):
        (WebCore::RenderLayer::hitTestChildLayerColumns):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::nodeAtPoint):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::nodeAtPoint):

2010-10-06  Dirk Schulze  <krit@webkit.org>

        Reviewed by Martin Robinson.

        SVGs with filters look grainy when scaled
        https://bugs.webkit.org/show_bug.cgi?id=5526

        Fixed issues on Cairos shadow implementation after the changes to FilterEffects.
        Cairo calculates the inflation of the effect rect itself. Respect this for FEGaussianBlur.
        This is just a temporary solution, since Cairo and Qt will use ContextShadow soon.

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::drawBorderlessRectShadow):
        (WebCore::GraphicsContext::applyPlatformShadow):
        (WebCore::GraphicsContext::createShadowMask):
        (WebCore::GraphicsContext::drawTiledShadow):
        (WebCore::GraphicsContext::fillRoundedRect):
        * platform/graphics/filters/ImageBufferFilter.cpp:
        (WebCore::ImageBufferFilter::ImageBufferFilter):
        (WebCore::ImageBufferFilter::create):
        * platform/graphics/filters/ImageBufferFilter.h:
        (WebCore::ImageBufferFilter::filterRegion):
        (WebCore::ImageBufferFilter::sourceImageRect):

2010-10-06  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Only execute first SVG text layout phase if needed
        https://bugs.webkit.org/show_bug.cgi?id=47254

        The first SVG text layout phase which computes the per-character metrics and extracts
        the x/y/dx/dy/rotate values from the SVG DOM is currently executed upon every RenderSVGText::layout() call.

        Optimize this, by only calling it:
        - if x/y/dx/dy/rotate value lists change
        - the style of a RenderSVGInlineText changes (eg. font-size changes influence metrics)
        - the text content of any of the children in the <text> subtree change

        No change in layout tests, a pure performance change - covered by existing tests.

        * rendering/RenderSVGResourceGradient.cpp:
        (WebCore::createMaskAndSwapContextForTextGradient): Adapt to renames, use RenderSVGText::locateRenderSVGTextAncestor().
        (WebCore::clipToTextMask): Ditto.
        * rendering/SVGRenderSupport.cpp:
        * rendering/SVGRenderSupport.h: Move findTreeRootObject to RenderSVGText::locateRenderSVGTextAncestor().
        * rendering/svg/RenderSVGInline.cpp:
        (WebCore::RenderSVGInline::objectBoundingBox): adapt to renames, use RenderSVGText::locateRenderSVGTextAncestor().
        (WebCore::RenderSVGInline::strokeBoundingBox): Ditto.
        (WebCore::RenderSVGInline::repaintRectInLocalCoordinates): Ditto.
        (WebCore::RenderSVGInline::absoluteQuads): Ditto.
        * rendering/svg/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::styleDidChange): Call setNeedsPositioningValuesUpdate() on the RenderSVGText root object, if diff == StyleDifferenceLayout.
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::RenderSVGText): Initialize m_needsPositioningValuesUpdate.
        (WebCore::RenderSVGText::locateRenderSVGTextAncestor): New helper function, moved from SVGRenderSupport, to a more sensible place.
        (WebCore::RenderSVGText::layout): Only execute the first SVG text layout phase, if m_needsPositioningValuesUpdate=true.
        * rendering/svg/RenderSVGText.h:
        (WebCore::RenderSVGText::setNeedsPositioningValuesUpdate):
        (WebCore::toRenderSVGText): Add new helper casting methods, like most other renderers have.
        * svg/SVGTextPositioningElement.cpp:
        (WebCore::updatePositioningValuesInRenderer):
        (WebCore::SVGTextPositioningElement::svgAttributeChanged): If x/y/dx/dy/rotate changes, call setNeedsPositioningValuesUpdate on the RenderSVGText root object.
        (WebCore::SVGTextPositioningElement::childrenChanged): If any children changes (addition, removal), do the same.
        * svg/SVGTextPositioningElement.h:

2010-10-05  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: [Extensions API] Expose access to resource bodies
        Added support for encoding resource in WebInspector.getResourceContent()
        https://bugs.webkit.org/show_bug.cgi?id=45953

        * inspector/Inspector.idl: Added encoding parameter to getResourceContent()
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::getResourceContent):
        * inspector/InspectorController.h:
        * inspector/InspectorResource.cpp: Added sourceBytes() to return encoded representation of resource's binary body.
        (WebCore::InspectorResource::sourceBytes):
        * inspector/InspectorResource.h:
        * inspector/front-end/ExtensionAPI.js:
        (WebInspector.injectedExtensionAPI.Resources.prototype.getContent):
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer):
        (WebInspector.ExtensionServer.prototype._onGetResourceContent):
        (WebInspector.ExtensionServer.prototype._onGetResourceContent.onContentAvailable):
        (WebInspector.getEncodedResourceContent):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.getResourceContent):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.getResourceContent):

2010-10-06  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=47235
        
        Make "lr" block-flow fieldsets work.
        
        (1) Patched html.css rules for legends and fieldsets to use logical margins and padding.
        (2) Converted just enough of computePreferredLogicalWidths to make basic examples work.
        (3) Removed the extra border drawing code from fieldsets so that the "clip out the legend" approach
        is now just always used.  It's silly to keep the old border drawing code in (which has already gotten out
        of sync with the base class) just to avoid a save/restore and some clipping.
        (4) Modified the layout/painting routines to place the legend properly and to be able to draw it in
        both the top and the left borders.

        Added fast/blockflow/fieldsets.html

        * css/html.css:
        (legend):
        (fieldset):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::determineLogicalLeftPositionForChild):
        (WebCore::RenderBlock::setLogicalLeftForChild):
        (WebCore::RenderBlock::setLogicalTopForChild):
        (WebCore::RenderBlock::layoutBlockChild):
        (WebCore::RenderBlock::computePreferredLogicalWidths):
        * rendering/RenderBlock.h:
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::layoutLegend):
        (WebCore::RenderFieldset::paintBoxDecorations):
        (WebCore::RenderFieldset::paintMask):
        * rendering/RenderFieldset.h:

2010-10-06  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Darin Adler.

        Move parseDataUrl() from CURL into own file
        https://bugs.webkit.org/show_bug.cgi?id=41462

        Move the data URL parsing algorithm into a new file to use it in ResourceHandleWin too.

        * CMakeLists.txt:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * platform/network/DataURL.cpp: Added.
        (WebCore::handleDataURL):
        * platform/network/DataURL.h: Added.
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::dispatchSynchronousJob):
        (WebCore::ResourceHandleManager::startJob):
        * platform/network/win/ResourceHandleWin.cpp:
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::fileLoadTimer):

2010-10-06  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        SVGs with filters look grainy when scaled
        https://bugs.webkit.org/show_bug.cgi?id=5526

        SVG filter effects need smarter size calculation
        https://bugs.webkit.org/show_bug.cgi?id=31370

        SVG elements use Filters before own transformations
        https://bugs.webkit.org/show_bug.cgi?id=32486

        Calculate all filter results in device space instead of the filtered objects user space. This change is similar to
        the patches for SVG Pattern and SVG Masker before. It avoids pixelation and guarantees smooth filter results for
        every scale level and is independent of any transformation to the target element or any ancester of the target.
        The second part of this patch reduces the size of every effect to the smallest affected region instead of the complete
        filter primitive subregion (http://www.w3.org/TR/SVG/filters.html#FilterPrimitiveSubRegion). We just use the subregion
        as clipping region, like mentioned in the SVG specification, to make the affected region even smaller now.

        This is a huge speed up. The ECMA cloud (http://ejohn.org/files/ecma-cloud.svg) is more than 100 times faster on Gtk and
        renders in less than a second.
        Some examples on svg-wow.org can be viewed the first time now, since the subregions were much bigger than the affected
        region.
        There's still more potential to speed up filters, by further reducing the ImageBuffer sizes.
        Renamed repaintRectInLocalCoordinates to absolutePaintRect, since all coordinates are in device space instead of the
        user space now.
        The absolute paint rect is calculated by determineAbsolutePaintRect() and gets called by FilterEffect::effectContext() on
        applying the effect.
        Partly rewrote filter resolution (http://www.w3.org/TR/SVG/filters.html#FilterElementFilterResAttribute) to work with the
        new concept. This also corrects the old behavior to match the SVG specification.

        Tests: svg/filters/filterRes1.svg
               svg/filters/filterRes2.svg
               svg/filters/filterRes3.svg

        * platform/graphics/cairo/GraphicsContextCairo.cpp: Call setAbsolutePaintRect instead of setRepaintRectInLocalCoordinates.
        (WebCore::GraphicsContext::createShadowMask):
        * platform/graphics/filters/FEBlend.cpp: Renamed repaintRectInLocalCoordinates to absolutePaintRect.
        (WebCore::FEBlend::apply):
        * platform/graphics/filters/FEColorMatrix.cpp: Ditto.
        (WebCore::FEColorMatrix::apply):
        * platform/graphics/filters/FEComponentTransfer.cpp: Ditto.
        (WebCore::FEComponentTransfer::apply):
        * platform/graphics/filters/FEComposite.cpp: Ditto.
        (WebCore::FEComposite::determineAbsolutePaintRect):
        (WebCore::FEComposite::apply):
        * platform/graphics/filters/FEComposite.h:
        * platform/graphics/filters/FEConvolveMatrix.cpp: Ditto.
        (WebCore::FEConvolveMatrix::apply):
        * platform/graphics/filters/FEConvolveMatrix.h:
        (WebCore::FEConvolveMatrix::determineAbsolutePaintRect):
        * platform/graphics/filters/FEDisplacementMap.cpp: Ditto.
        (WebCore::FEDisplacementMap::apply):
        * platform/graphics/filters/FEDisplacementMap.h:
        (WebCore::FEDisplacementMap::determineAbsolutePaintRect):
        * platform/graphics/filters/FEFlood.cpp: Ditto.
        (WebCore::FEFlood::apply):
        * platform/graphics/filters/FEFlood.h:
        (WebCore::FEFlood::determineAbsolutePaintRect):
        * platform/graphics/filters/FEGaussianBlur.cpp: Ditto.
        (WebCore::calculateKernelSize):
        (WebCore::FEGaussianBlur::determineAbsolutePaintRect):
        (WebCore::FEGaussianBlur::apply):
        * platform/graphics/filters/FEGaussianBlur.h:
        * platform/graphics/filters/FELighting.cpp: Ditto.
        (WebCore::FELighting::apply):
        * platform/graphics/filters/FEMerge.cpp: Ditto.
        (WebCore::FEMerge::apply):
        * platform/graphics/filters/FEMorphology.cpp: Ditto.
        (WebCore::FEMorphology::determineAbsolutePaintRect):
        (WebCore::FEMorphology::apply):
        * platform/graphics/filters/FEMorphology.h:
        * platform/graphics/filters/FEOffset.cpp: Ditto.
        (WebCore::FEOffset::determineAbsolutePaintRect):
        (WebCore::FEOffset::apply):
        * platform/graphics/filters/FEOffset.h:
        * platform/graphics/filters/FETile.cpp: Ditto.
        (WebCore::FETile::determineFilterPrimitiveSubregion):
        (WebCore::FETile::apply):
        * platform/graphics/filters/FETile.h:
        (WebCore::FETile::determineAbsolutePaintRect):
        * platform/graphics/filters/FETurbulence.cpp: Ditto.
        (WebCore::FETurbulence::apply):
        * platform/graphics/filters/FETurbulence.h:
        (WebCore::FETurbulence::determineAbsolutePaintRect):
        * platform/graphics/filters/Filter.h:
        (WebCore::Filter::applyHorizontalScale): Map horizontal effect values to absolute coordinates.
        (WebCore::Filter::applyVerticalScale): Map vertical effect values to absolute coordinates.
        (WebCore::Filter::mapAbsolutePointToLocalPoint):
        (WebCore::Filter::filterRegionInUserSpace):
        * platform/graphics/filters/FilterEffect.cpp: Ditto.
        (WebCore::FilterEffect::determineFilterPrimitiveSubregion):
        (WebCore::FilterEffect::determineAbsolutePaintRect):
        (WebCore::FilterEffect::requestedRegionOfInputImageData):
        (WebCore::FilterEffect::drawingRegionOfInputImage):
        (WebCore::FilterEffect::effectContext):
        * platform/graphics/filters/FilterEffect.h:
        (WebCore::FilterEffect::absolutePaintRect):
        (WebCore::FilterEffect::setAbsolutePaintRect):
        (WebCore::FilterEffect::maxEffectRect): The subregion in absolute coordinates for SVG.
        (WebCore::FilterEffect::setMaxEffectRect):
        * platform/graphics/filters/SourceAlpha.cpp: Ditto.
        (WebCore::SourceAlpha::determineAbsolutePaintRect):
        (WebCore::SourceAlpha::apply):
        * platform/graphics/filters/SourceAlpha.h:
        * platform/graphics/filters/SourceGraphic.cpp: Ditto.
        (WebCore::SourceGraphic::determineAbsolutePaintRect):
        (WebCore::SourceGraphic::apply):
        * platform/graphics/filters/SourceGraphic.h:
        * rendering/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::applyResource):
        (WebCore::RenderSVGResourceFilter::postApplyResource):
        * rendering/RenderSVGResourceFilter.h:
        (WebCore::FilterData::FilterData):
        * svg/graphics/filters/SVGFEImage.cpp: Ditto.
        (WebCore::FEImage::apply):
        * svg/graphics/filters/SVGFEImage.h:
        (WebCore::FEImage::determineAbsolutePaintRect):
        * svg/graphics/filters/SVGFilter.cpp:
        (WebCore::SVGFilter::SVGFilter):
        (WebCore::SVGFilter::determineFilterPrimitiveSubregion):
        (WebCore::SVGFilter::applyHorizontalScale):
        (WebCore::SVGFilter::applyVerticalScale):
        (WebCore::SVGFilter::create):
        * svg/graphics/filters/SVGFilter.h:
        (WebCore::SVGFilter::effectBoundingBoxMode):
        (WebCore::SVGFilter::filterRegionInUserSpace):
        (WebCore::SVGFilter::filterRegion):
        (WebCore::SVGFilter::mapAbsolutePointToLocalPoint): Map absolute point to local point in userspace.
        (WebCore::SVGFilter::sourceImageRect):
        (WebCore::SVGFilter::maxImageSize):

2010-10-06  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: add "Set Breakpoint" item to XHR resource context menu.
        https://bugs.webkit.org/show_bug.cgi?id=47085

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype._contextMenu):

2010-10-05  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by David Levin.

        Add idl and mock classes for FileSystemSync for FileSystem API
        https://bugs.webkit.org/show_bug.cgi?id=46405

        Added bunch of *Sync classes, plus refactored some classes:
        Added DOMFileSystemBase as a common base class for DOMFileSystem and
        DOMFileSystemSync.
        Added EntryBase as a common base class for Entry and EntrySync.
        Added DirectoryReaderBase as a common base class for DirectoryReader and
        DirectoryReaderSync.

        Test: fast/filesystem/workers/

        * CMakeLists.txt: Added new files.
        * DerivedSources.cpp: Added new files.
        * DerivedSources.make: Added new files.
        * GNUmakefile.am: Added new files.
        * WebCore.gypi: Added new files.
        * WebCore.pri: Added new files.
        * WebCore.pro: Added new files.
        * WebCore.vcproj/WebCore.vcproj: Added new files. Also removed the duplicated fileapi\FileEntry.cpp entry.
        * WebCore.xcodeproj/project.pbxproj: Added new files.
        * bindings/js/JSDirectoryEntrySyncCustom.cpp: Added.
        * bindings/js/JSEntrySyncCustom.cpp: Added.
        * bindings/v8/custom/V8DirectoryEntrySyncCustom.cpp: Added.
        * bindings/v8/custom/V8EntrySyncCustom.cpp: Added.
        * fileapi/DOMFileSystemBase.cpp: Added.
        * fileapi/DOMFileSystemBase.h: Added.
        * fileapi/DOMFileSystemSync.cpp: Added.
        * fileapi/DOMFileSystemSync.h: Added.
        * fileapi/DOMFileSystemSync.idl: Added.
        * fileapi/DirectoryEntrySync.cpp: Added.
        * fileapi/DirectoryEntrySync.h: Added.
        * fileapi/DirectoryEntrySync.idl: Added.
        * fileapi/DirectoryReaderBase.h: Added.
        * fileapi/DirectoryReaderSync.cpp: Added.
        * fileapi/DirectoryReaderSync.h: Added.
        * fileapi/DirectoryReaderSync.idl: Added.
        * fileapi/EntryArraySync.cpp: Added.
        * fileapi/EntryArraySync.h: Added.
        * fileapi/EntryArraySync.idl: Added.
        * fileapi/EntryBase.h: Added.
        * fileapi/EntrySync.cpp: Added.
        * fileapi/EntrySync.h: Added.
        * fileapi/EntrySync.idl: Added.
        * fileapi/FileEntrySync.cpp: Added.
        * fileapi/FileEntrySync.h: Added.
        * fileapi/FileEntrySync.idl: Added.

2010-10-05  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        REGRESSION (r67166): "Placeholder" text remains in input box after 2nd focus()
        https://bugs.webkit.org/show_bug.cgi?id=45940

        Test: fast/forms/input-placeholder-focus-twice.html

        * html/HTMLFormControlElement.h: Make supportsPlaceholder() public.
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::updateFromElement):
         We always need to update the renderer value with the DOM value if
         the element supports the placeholder feature.
         Note: the placeholder feature and "unacceptable renderer value"
         are exclusive.

2010-10-05  Kyusun Kim  <maniagoon@company100.net>

        Reviewed by Kent Tamura.

        [BREWMP] Translate key code in PlatformKeyboardEvent with IKeysMapping
        https://bugs.webkit.org/show_bug.cgi?id=47234

        Brew MP devices have a variey of key configurations and use modifiers to
        input capital letters, symbols and special characters. Use IKeysMapping to translate key code.

        * platform/brew/PlatformKeyboardEventBrew.cpp:
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):

2010-10-05  W. James MacLean  <wjmaclean@chromium.org>

        Reviewed by James Robinson.

        [chromium] Add mipmap support for ImageLayerChromium
        https://bugs.webkit.org/show_bug.cgi?id=46493

        Mipmap behaviour can be tested with existing tests.
        Tests in LayoutTests/compositing/images/ will detect if
        mipmaps fail.

        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::SharedValues::SharedValues):
        (WebCore::isPowerOfTwo):
        (WebCore::ContentLayerChromium::updateTextureRect):
        * platform/graphics/chromium/ContentLayerChromium.h:
        (WebCore::ContentLayerChromium::SharedValues::npotSupported):
        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerChromium::updateContents):

2010-10-05  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Issue in treebuilder parsing related to table tags
        https://bugs.webkit.org/show_bug.cgi?id=47190

        Update ASSERT to match the spec and our behavior.

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processEndTagForInCell):

2010-10-05  Victoria Kirst  <vrk@google.com>

        Reviewed by James Robinson.

        VideoLayerChromium releases old resources if the LayerRenderer changes.
        https://bugs.webkit.org/show_bug.cgi?id=47030

        Refactored LayerChromium to have a virtual cleanupResources() method
        that will release textures/other context-dependent resources when a
        LayerRenderer changes. ContentLayerChromium and VideoLayerChromium now
        override this method to perform cleanup.

        * platform/graphics/chromium/ContentLayerChromium.cpp:
        * platform/graphics/chromium/ContentLayerChromium.h:
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::setLayerRenderer):
        * platform/graphics/chromium/LayerChromium.h:
        (WebCore::LayerChromium::cleanupResources):
        * platform/graphics/chromium/VideoLayerChromium.cpp:
        (WebCore::VideoLayerChromium::~VideoLayerChromium):
        (WebCore::VideoLayerChromium::cleanupResources):
        * platform/graphics/chromium/VideoLayerChromium.h:

2010-10-05  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Jian Li.

        FileEntry::file needs to be implemented
        https://bugs.webkit.org/show_bug.cgi?id=47192

        Test: fast/filesystem/file-from-file-entry.html

        * fileapi/FileEntry.cpp:
        (WebCore::FileEntry::file): Implemented.

2010-09-29  Alpha Lam  <hclam@chromium.org>

        Reviewed by James Robinson.

        Render textures in video frame directly.
        https://bugs.webkit.org/show_bug.cgi?id=46765

        Render textures in VideoLayerChromium directly if the video frame type
        is GL texture. In the future VideoLayerChromium will not allocate
        textures and perform textures upload as those operations will be done
        in Chromium to minimize memory copy. This patch will help moving toward
        this direction and facilitate hardware video decoding.

        * platform/graphics/chromium/VideoFrameChromium.h:
        * platform/graphics/chromium/VideoFrameProvider.h:
        (WebCore::VideoFrameProvider::~VideoFrameProvider):
        * platform/graphics/chromium/VideoLayerChromium.cpp:
        (WebCore::VideoLayerChromium::VideoLayerChromium):
        (WebCore::VideoLayerChromium::~VideoLayerChromium):
        (WebCore::VideoLayerChromium::updateContents):
        (WebCore::VideoLayerChromium::draw):
        (WebCore::VideoLayerChromium::releaseCurrentFrame):
        (WebCore::VideoLayerChromium::resetFrameParameters):
        (WebCore::VideoLayerChromium::saveCurrentFrame):
        * platform/graphics/chromium/VideoLayerChromium.h:
        (WebCore::VideoLayerChromium::SharedValues::initialized):

2010-10-05  Fady Samuel  <fsamuel@chromium.org>

        Reviewed by Darin Adler.

        REGRESSION (r65539): One pixel white gaps when scrolling Trac changeset pages
        https://bugs.webkit.org/show_bug.cgi?id=45131

        When border-collapse: separate property is set on the table, paintObject
        may skip repainting cells, if the dirty region only touches one row/col of pixels.

        Test: fast/table/simple_paint_separate_borders.html

        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::paintObject):  
            Don't subtract one from the right and bottom of the dirty paint rect.

2010-10-05  Sanjeev Radhakrishnan  <sanjeevr@chromium.org>

        Reviewed by Darin Fisher.

        PluginDocument now holds on to the created plugin node so that the pluginNode() and pluginWidget() methods can return the correct node.
        https://bugs.webkit.org/show_bug.cgi?id=47129

        * html/PluginDocument.cpp:
        (WebCore::PluginDocumentParser::createDocumentStructure):
        (WebCore::PluginDocument::pluginWidget):
        (WebCore::PluginDocument::pluginNode):
        * html/PluginDocument.h:
        (WebCore::PluginDocument::setPluginNode):

2010-10-05  Andreas Kling  <kling@webkit.org>

        Reviewed by Tor Arne Vestbø.

        [Qt] Re-enable single-NPP_SetWindow quirk for 64-bit
        https://bugs.webkit.org/show_bug.cgi?id=45363

        This is still causing trouble for people, so let's put the
        quirk back until we can figure this out properly.

        * plugins/PluginPackage.cpp:
        (WebCore::PluginPackage::determineQuirks):

2010-10-05  Jian Li  <jianli@chromium.org>

        Reviewed by Nate Chapin.

        [V8] Add FileReader to active DOM map
        https://bugs.webkit.org/show_bug.cgi?id=47205

        We need to have a custom FileReader V8 constructor in order to add object
        into active DOM map to prevent it from GC-ed when it is still in-use.

        * Android.v8bindings.mk:
        * WebCore.gypi:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/custom/V8FileReaderCustom.cpp: Added.
        (WebCore::V8FileReader::constructorCallback):
        * fileapi/FileReader.idl:

2010-10-05  Vincent Scheib  <scheib@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] 51304 GPU compositor resorts to "slow" text rendering for base page layer
        https://bugs.webkit.org/show_bug.cgi?id=47193

        Test: Accelerated compositor test infrastructure still coming online. Tested manually.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::setRootLayerCanvasSize):
        (WebCore::LayerRendererChromium::prepareToDrawLayers):
        (WebCore::LayerRendererChromium::drawLayers):

2010-10-05  Nico Weber  <thakis@chromium.org>

        Reviewed by Andreas Kling.

        Fix clang build
        https://bugs.webkit.org/show_bug.cgi?id=47198

        * page/Chrome.h:
        Declare ViewportArguments as struct, not as class.

2010-10-05  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=47204
        
        Make isSelfCollapsingBlock use logical height instead of height in all its checks.

        Added fast/blockflow/self-collapsing-block.html

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

2010-10-05  Eric Uhrhane  <ericu@chromium.org>

        Reviewed by David Levin.

        Relax restrictions on FileWriter::didWrite calls
        https://bugs.webkit.org/show_bug.cgi?id=47139

        No new tests; they're still waiting on the first implementation.

        * fileapi/FileWriter.cpp:
        (WebCore::FileWriter::FileWriter):
        (WebCore::FileWriter::write):
        (WebCore::FileWriter::didWrite):
        * fileapi/FileWriter.h:

2010-10-05  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by Tony Chang.

        [chromium] getData('text/uri-list') should return the same thing that was passed to setData('text/uri-list')
        https://bugs.webkit.org/show_bug.cgi?id=46943

        We no longer parse the input of setData('text/uri-list') and only store
        the valid URLs that were parsed out.

        Test: editing/pasteboard/dataTransfer-setData-getData.html

        * platform/chromium/ChromiumDataObject.cpp:
        (WebCore::ChromiumDataObject::clearData):
        (WebCore::ChromiumDataObject::clearAllExceptFiles):
        (WebCore::ChromiumDataObject::types):
        (WebCore::ChromiumDataObject::getData):
        (WebCore::ChromiumDataObject::setData):
        * platform/chromium/ChromiumDataObject.h:

2010-10-05  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Support FontPlatformData::isFixedPitch for custom fonts
        https://bugs.webkit.org/show_bug.cgi?id=47124

        Instead of determining whether or not a font is a fixed-width font
        lazily, do it up front. For fonts not backed by Fontconfig patterns,
        fetch information about whether or not the font is fixed-width from
        the FreeType face.

        No new tests as this should not change functionality.

        * platform/graphics/cairo/FontPlatformDataFreeType.cpp:
        (WebCore::FontPlatformData::FontPlatformData): Initialize the m_fixedWidth member
        from the Fontconfig pattern or the FreeType face.
        (WebCore::FontPlatformData::operator=): Copy over the m_fixedWidth member.
        (WebCore::FontPlatformData::isFixedPitch): Just return the value of the m_fixedWidth member.
        * platform/graphics/cairo/FontPlatformDataFreeType.h: Added an m_fixedWidth member.

2010-10-05  David Hyatt  <hyatt@apple.com>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=47199
        
        Make float positioning work in block layout with block children.
        It doesn't work yet from inside line layout, since line layout is unpatched.

        Added fast/blockflow/floats-in-block-layout.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::adjustFloatingBlock):
        (WebCore::RenderBlock::setLogicalLeftForChild):
        (WebCore::RenderBlock::setLogicalTopForChild):
        (WebCore::RenderBlock::insertFloatingObject):
        (WebCore::RenderBlock::positionNewFloats):
        (WebCore::RenderBlock::logicalLeftOffsetForLine):
        (WebCore::RenderBlock::logicalRightOffsetForLine):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::FloatingObject::type):
        (WebCore::RenderBlock::FloatingObject::renderer):
        (WebCore::RenderBlock::logicalRightForFloat):
        (WebCore::RenderBlock::setLogicalTopForFloat):
        (WebCore::RenderBlock::setLogicalLeftForFloat):
        (WebCore::RenderBlock::setLogicalHeightForFloat):
        (WebCore::RenderBlock::setLogicalWidthForFloat):

2010-10-05  Kimmo Kinnunen  <kimmo.t.kinnunen@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Web process crash when pressing modifiers in input field
        https://bugs.webkit.org/show_bug.cgi?id=44935

        Revert part of the http://trac.webkit.org/changeset/69105 due to a
        test regression.  Unix: Add ASSERTs to plugin related code. These
        will fail if Qt WebKit2 is used with plugins, unless code is not
        fixed before.

        * plugins/qt/PluginViewQt.cpp:
        (WebCore::setXKeyEventSpecificFields): Use qKeyEvent, Use ASSERT as a reminder.

2010-10-05  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Add AudioBasicProcessorNode files
        https://bugs.webkit.org/show_bug.cgi?id=46495

        No new tests since audio API is not yet implemented.

        * webaudio/AudioBasicProcessorNode.cpp: Added.
        (WebCore::AudioBasicProcessorNode::AudioBasicProcessorNode):
        (WebCore::AudioBasicProcessorNode::initialize):
        (WebCore::AudioBasicProcessorNode::uninitialize):
        (WebCore::AudioBasicProcessorNode::process):
        (WebCore::AudioBasicProcessorNode::pullInputs):
        (WebCore::AudioBasicProcessorNode::reset):
        (WebCore::AudioBasicProcessorNode::checkNumberOfChannelsForInput):
        (WebCore::AudioBasicProcessorNode::numberOfChannels):
        * webaudio/AudioBasicProcessorNode.h: Added.
        (WebCore::AudioBasicProcessorNode::processor):

2010-10-05  Chris Marrin  <cmarrin@apple.com>

        Unreviewed.

        The platform/graphics/gpu folder was mistakenly inside the filters folder.
        I moved it to the right place in the Group Tree.

        * WebCore.xcodeproj/project.pbxproj:

2010-10-05  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Adam Roben.

        Fix ownership of GraphicsContext3D in SharedGraphicsContext3D to prevent early deallocation and crash
        https://bugs.webkit.org/show_bug.cgi?id=47197

        This is work in progress and the crash only happens with ACCELERATED_2D_CANVAS turned on (which is off
        by default). Many existing test cases will crash before and after this patch.

        * platform/graphics/gpu/SharedGraphicsContext3D.cpp:
        (WebCore::SharedGraphicsContext3D::create):

2010-10-05  Tony Chang  <tony@chromium.org>

        Reviewed by Kent Tamura.

        [chromium] properly paint really small scrollbar arrows on linux
        https://bugs.webkit.org/show_bug.cgi?id=47109

        * platform/chromium/ScrollbarThemeChromiumLinux.cpp:
        (WebCore::ScrollbarThemeChromiumLinux::buttonSize): Clamp button size based on available size.  This matches what
            we do on Win.

2010-10-05  Nate Chapin  <japhet@chromium.org>

        Reviewed by David Levin.

        Remove unused CachedResource::Status values (New and NotCached).
        https://bugs.webkit.org/show_bug.cgi?id=47132

        Refactor only, no new tests.

        * loader/CachedResource.h:
        * loader/CachedResourceLoader.cpp:
        (WebCore::CachedResourceLoader::checkCacheObjectStatus):

2010-10-04  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Nate Chapin.

        Rename get* and open*Cursor per the spec on IDBIndex
        https://bugs.webkit.org/show_bug.cgi?id=46906

        The spec changed so that:
        IDBIndex.get -> getKey
        IDBIndex.getObject -> get
        IDBIndex.openCursor -> openKeyCursor
        IDBIndex.openObjectCursor -> openCursor

        Existing tests cover since this is just renaming stuff.

        * storage/IDBIndex.cpp:
        (WebCore::IDBIndex::openCursor):
        (WebCore::IDBIndex::openKeyCursor):
        (WebCore::IDBIndex::get):
        (WebCore::IDBIndex::getKey):
        * storage/IDBIndex.h:
        * storage/IDBIndex.idl:
        * storage/IDBIndexBackendImpl.cpp:
        (WebCore::IDBIndexBackendImpl::openCursor):
        (WebCore::IDBIndexBackendImpl::openKeyCursor):
        (WebCore::IDBIndexBackendImpl::get):
        (WebCore::IDBIndexBackendImpl::getKey):
        * storage/IDBIndexBackendImpl.h:
        * storage/IDBIndexBackendInterface.h:

2010-10-05  Keith Kyzivat  <keith.kyzivat@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix breakage in RVCT 2.2 compile
        https://bugs.webkit.org/show_bug.cgi?id=47187

        Fix bug in RVCT 2.2 compile for Symbian^3 in html/canvas/Int32Array.h and 
        html/canvas/Uin8Array.h
        For RVCT2.2, the using clause is unneeded, and can be omitted.

        A Test case cannot be made for this since this is a build-related issue.

        * html/canvas/Int32Array.h:
        * html/canvas/Uint8Array.h:

2010-10-04  Andrei Popescu  <andreip@google.com>

        Reviewed by Jeremy Orlow.

        IDBDatabase::createObjectStore/removeObjectStore and IDBObjectStore::createIndex/removeIndex should be synchronous.
        https://bugs.webkit.org/show_bug.cgi?id=46883

        Makes the schema manipulation methods synchronous. Modifies the transaction
        logic to support tasks that may have pending events as well as tasks that
        don't have such events.

        * storage/IDBDatabase.cpp:
        (WebCore::IDBDatabase::createObjectStore):
        (WebCore::IDBDatabase::removeObjectStore):
        * storage/IDBDatabase.h:
        * storage/IDBDatabase.idl:
        * storage/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::createObjectStore):
        (WebCore::IDBDatabaseBackendImpl::createObjectStoreInternal):
        (WebCore::IDBDatabaseBackendImpl::removeObjectStore):
        (WebCore::IDBDatabaseBackendImpl::removeObjectStoreInternal):
        * storage/IDBDatabaseBackendImpl.h:
        * storage/IDBDatabaseBackendInterface.h:
        * storage/IDBIndexBackendImpl.cpp:
        (WebCore::IDBIndexBackendImpl::IDBIndexBackendImpl):
        * storage/IDBIndexBackendImpl.h:
        (WebCore::IDBIndexBackendImpl::create):
        (WebCore::IDBIndexBackendImpl::id):
        (WebCore::IDBIndexBackendImpl::setId):
        * storage/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::createIndex):
        (WebCore::IDBObjectStore::removeIndex):
        * storage/IDBObjectStore.h:
        * storage/IDBObjectStore.idl:
        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::IDBObjectStoreBackendImpl):
        (WebCore::IDBObjectStoreBackendImpl::createIndex):
        (WebCore::IDBObjectStoreBackendImpl::createIndexInternal):
        (WebCore::IDBObjectStoreBackendImpl::removeIndex):
        (WebCore::IDBObjectStoreBackendImpl::removeIndexInternal):
        * storage/IDBObjectStoreBackendImpl.h:
        (WebCore::IDBObjectStoreBackendImpl::create):
        (WebCore::IDBObjectStoreBackendImpl::id):
        (WebCore::IDBObjectStoreBackendImpl::setId):
        (WebCore::IDBObjectStoreBackendImpl::autoIncrement):
        * storage/IDBObjectStoreBackendInterface.h:
        * storage/IDBTransactionBackendImpl.cpp:
        (WebCore::IDBTransactionBackendImpl::IDBTransactionBackendImpl):
        (WebCore::IDBTransactionBackendImpl::objectStore):
        (WebCore::IDBTransactionBackendImpl::scheduleTask):
        (WebCore::IDBTransactionBackendImpl::abort):
        (WebCore::IDBTransactionBackendImpl::didCompleteTaskEvents):
        (WebCore::IDBTransactionBackendImpl::run):
        (WebCore::IDBTransactionBackendImpl::taskTimerFired):
        (WebCore::IDBTransactionBackendImpl::taskEventTimerFired):
        * storage/IDBTransactionBackendImpl.h:

2010-10-05  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        WAI-ARIA 'marquee' role live region uses aria-live="polite", should use aria-live="off"
        https://bugs.webkit.org/show_bug.cgi?id=47185

        Test: platform/mac/accessibility/aria-liveregion-marquee-default.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::ariaLiveRegionStatus):

2010-10-05  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Interior scrollbars do not draw their background properly
        https://bugs.webkit.org/show_bug.cgi?id=47096

        Correct the method that the GTK+ theme drawing code uses to
        draw scrolled window backgrounds. Now it uses gtk_paint_shadow,
        the same as the actual code from GTK+.

        No new tests as this is very hard to write tests for. The bug only
        manifests on some GTK+ themes and we have no test harness mechanism
        for testing rendering with non-default GTK+ themes.

        * platform/gtk/ScrollbarThemeGtk.cpp:
        (WebCore::ScrollbarThemeGtk::paintScrollbarBackground): No longer
        initialize the widget state, as it's unused by the callee.
        (WebCore::ScrollbarThemeGtk::paint): Remove an inaccurate comment.
        * platform/gtk/gtk2drawing.c:
        (moz_gtk_scrolled_window_paint): Paint scrolled window backgrounds
        with gtk_paint_shadow instead of gtk_paint_box.

2010-10-05  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Kent Tamura.

        [BREWMP] Use PlatformRefPtr instead of OwnPtr in FileSystem
        https://bugs.webkit.org/show_bug.cgi?id=47025

        PlatformRefPtr is a better choice here because all Brew MP instances are
        reference counted.

        * platform/brew/FileSystemBrew.cpp:
        (WebCore::getFileSize):
        (WebCore::fileExists):
        (WebCore::deleteFile):
        (WebCore::deleteEmptyDirectory):
        (WebCore::canonicalPath):
        (WebCore::makeAllDirectories):
        (WebCore::openTemporaryFile):

2010-10-05  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] Complex text rendering does not render custom fonts
        https://bugs.webkit.org/show_bug.cgi?id=41091

        For fonts that do not have a FontConfig pattern (including custom
        fonts), fall back to the simple text rendering path. This is a work-
        -around for not supporting Pango rendering with non-FontConfig fonts.

        Test: platform/gtk/fonts/font-face-with-complex-text.html

        * platform/graphics/gtk/FontGtk.cpp:
        (WebCore::Font::drawComplexText): Fall back to the simple path for custom fonts.
        (WebCore::Font::floatWidthForComplexText): Ditto.
        (WebCore::Font::offsetForPositionForComplexText): Ditto.
        (WebCore::Font::selectionRectForComplexText): Ditto.

2010-10-05  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Kent Tamura.

        [BREWMP] Use PlatformRefPtr in getDisplayInfo
        https://bugs.webkit.org/show_bug.cgi?id=47023

        Use PlatformRefPtr to release IBitmap* automatically.

        * platform/brew/ScreenBrew.cpp:
        (WebCore::getDisplayInfo):

2010-10-05  Kristian Monsen  <kristianm@google.com>

        Reviewed by Steve Block.

        Including JavaScriptCore/config.h from WebCore/config.h
        instead of from WebCorePrefix.h.
        https://bugs.webkit.org/show_bug.cgi?id=47179

        No new tests, just changing where files are included.

        * WebCorePrefix.h:
        * config.h:

2010-10-05  Jakob Petsovits  <jpetsovits@rim.com>

        Reviewed by Andreas Kling.

        [Qt] Make build work with QT_NO_CURSOR
        https://bugs.webkit.org/show_bug.cgi?id=46097

        Add a missing include.

        * platform/qt/QWebPageClient.h:

2010-10-05  Jakob Petsovits  <jpetsovits@rim.com>

        Reviewed by Andreas Kling.

        [Qt] Make build work with QT_NO_CURSOR
        https://bugs.webkit.org/show_bug.cgi?id=46097

        createCustomCursor() is a static function and not used
        in that file if QT_NO_CURSOR is defined, so rather than
        making it return 0, it should not exist altogether.

        * platform/qt/CursorQt.cpp:
        (WebCore::createCustomCursor):

2010-10-05  Adam Roben  <aroben@apple.com>

        Windows linker warning fix

        * WebCore.vcproj/WebCore.vcproj: Exclude JSDOMTokenList.cpp from the
        build, since it is already being compiled via DerivedSources.cpp. Also
        let VS reorder some files.

2010-10-05  Kimmo Kinnunen  <kimmo.t.kinnunen@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Web process crash when pressing modifiers in input field
        https://bugs.webkit.org/show_bug.cgi?id=44935

        Fix null pointer dereference by not using
        PlatformKeyboardEvent::m_qtEvent. This member is not set when
        event comes from WebKit2.  Unix: Add ASSERTs to plugin related
        code. These will fail if WebKit2 is used with plugins, unless code
        is not fixed before.  Symbian: Add ASSERT to code which uses
        qtEvent(). It will fail when WebKit2 is enabled for Symbian, if
        code is not fixed before.

        * platform/PlatformKeyboardEvent.h:
        * platform/qt/PlatformKeyboardEventQt.cpp:
        (WebCore::isVirtualKeyCodeRepresentingCharacter): Added.
        (WebCore::PlatformKeyboardEvent::disambiguateKeyDownEvent): Avoid using m_qtEvent.
        (WebCore::PlatformKeyboardEvent::nativeModifiers): Added. Use ASSERT as a reminder.
        (WebCore::PlatformKeyboardEvent::nativeScanCode): Added. Use ASSERT as a reminder.
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::setXKeyEventSpecificFields):
        * plugins/symbian/PluginViewSymbian.cpp:
        (WebCore::PluginView::handleKeyboardEvent): Add ASSERT as a reminder.

2010-10-05  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Csaba Osztrogonác.

        Add ENABLE(ACCELERATED_2D_CANVAS) guard to LoopBlinnLocalTriangulator.cpp
        https://bugs.webkit.org/show_bug.cgi?id=47115

        LoopBlinnLocalTriangulator.cpp depends on LoopBlinnMathUtils.cpp which is guarded by
        ENABLE(ACCELERATED_2D_CANVAS).

        * platform/graphics/gpu/LoopBlinnLocalTriangulator.cpp:

2010-10-05  Satish Sampath  <satish@chromium.org>

        Reviewed by Kent Tamura.

        Added event onwebkitspeechchange to invoke on new speech input results.
        https://bugs.webkit.org/show_bug.cgi?id=47127

        * dom/EventNames.h: Added webkitspeechchange event name.
        * html/HTMLAttributeNames.in: Added onwebkitspeechchange attribute name.
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::parseMappedAttribute): Handle new attribute set.
        (WebCore::HTMLInputElement::dispatchWebkitSpeechChangeEvent): Invoke the event handler.
        * html/HTMLInputElement.h:
        * html/HTMLInputElement.idl: Added attribute to IDL.
        * rendering/TextControlInnerElements.cpp:
        (WebCore::InputFieldSpeechButtonElement::setRecognitionResult): Invoke new event handler instead of onChange

2010-10-05  Satish Sampath  <satish@chromium.org>

        Reviewed by Jeremy Orlow.

        Rename @webkitspeech to @x-webkit-speech to follow HTML5 convention
        https://bugs.webkit.org/show_bug.cgi?id=46873

        The @webkitspeech attribute is renamed to @x-webkit-speech per the HTML5 spec for extension
        attributes. The DOM attribute in IDL was renamed to 'webkitSpeech' as well. But the generated
        code for the attribute did not match the generated code for the IDL, so I modified
        dom/make_names.pl to generate the appropriate name for such extension attributes.

        * bindings/generic/RuntimeEnabledFeatures.h: Rename flag accessor to match IDL attribute name.
        (WebCore::RuntimeEnabledFeatures::webkitSpeechEnabled):
        * dom/make_names.pl: Additions to generate names for x-webkit-xxxx attributes that match the
        generated code from IDL and remember the original names including the x- prefix when writing
        out the cpp files.
        * html/HTMLAttributeNames.in: Rename @webkitspeech to @x-webkit-speech
        * html/HTMLInputElement.idl: Rename @webkitspeech to @webkitSpeech

2010-10-04  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: [Chromium][Extension API] provide tab id of inspected tab in extension API
        https://bugs.webkit.org/show_bug.cgi?id=47080

        * inspector/front-end/ExtensionServer.js: Added support for platform-specific extensions API.
        (WebInspector.ExtensionServer.prototype._buildExtensionAPIInjectedScript):

2010-10-05  Sanjeev Radhakrishnan  <sanjeevr@chromium.org>

        Reviewed by Darin Fisher.

        Fixed implementation of pluginWidgetFromDocument to search for the "embed" element rather than just use the first child.
        https://bugs.webkit.org/show_bug.cgi?id=47129

        * html/PluginDocument.cpp:
        (WebCore::PluginDocumentParser::pluginWidgetFromDocument):

2010-10-05  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Add BiquadDSPKernel files
        https://bugs.webkit.org/show_bug.cgi?id=46528

        No new tests since audio API is not yet implemented.

        * webaudio/BiquadDSPKernel.cpp: Added.
        (WebCore::BiquadDSPKernel::process):
        * webaudio/BiquadDSPKernel.h: Added.
        (WebCore::BiquadDSPKernel::BiquadDSPKernel):
        (WebCore::BiquadDSPKernel::reset):
        (WebCore::BiquadDSPKernel::biquadProcessor):

2010-10-05  Chris Rogers  <crogers@google.com>

        Reviewed by James Robinson.

        Fix AudioContext to use new HRTFDatabaseLoader API
        https://bugs.webkit.org/show_bug.cgi?id=46858

        No new tests since audio API is not yet implemented.

        * webaudio/AudioContext.cpp:
        (WebCore::AudioContext::AudioContext):
        (WebCore::AudioContext::isRunnable):
        * webaudio/AudioContext.h:
        * webaudio/AudioContext.idl:

2010-10-05  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Add AudioPannerNode files
        https://bugs.webkit.org/show_bug.cgi?id=46505

        No new tests since audio API is not yet implemented.

        * webaudio/AudioPannerNode.cpp: Added.
        (WebCore::fixNANs):
        (WebCore::AudioPannerNode::AudioPannerNode):
        (WebCore::AudioPannerNode::~AudioPannerNode):
        (WebCore::AudioPannerNode::pullInputs):
        (WebCore::AudioPannerNode::process):
        (WebCore::AudioPannerNode::reset):
        (WebCore::AudioPannerNode::initialize):
        (WebCore::AudioPannerNode::uninitialize):
        (WebCore::AudioPannerNode::listener):
        (WebCore::AudioPannerNode::setPanningModel):
        (WebCore::AudioPannerNode::getAzimuthElevation):
        (WebCore::AudioPannerNode::dopplerRate):
        (WebCore::AudioPannerNode::distanceConeGain):
        (WebCore::AudioPannerNode::notifyAudioSourcesConnectedToNode):
        * webaudio/AudioPannerNode.h: Added.
        (WebCore::AudioPannerNode::create):
        (WebCore::AudioPannerNode::panningModel):
        (WebCore::AudioPannerNode::position):
        (WebCore::AudioPannerNode::setPosition):
        (WebCore::AudioPannerNode::orientation):
        (WebCore::AudioPannerNode::setOrientation):
        (WebCore::AudioPannerNode::velocity):
        (WebCore::AudioPannerNode::setVelocity):
        (WebCore::AudioPannerNode::distanceModel):
        (WebCore::AudioPannerNode::setDistanceModel):
        (WebCore::AudioPannerNode::refDistance):
        (WebCore::AudioPannerNode::setRefDistance):
        (WebCore::AudioPannerNode::maxDistance):
        (WebCore::AudioPannerNode::setMaxDistance):
        (WebCore::AudioPannerNode::rolloffFactor):
        (WebCore::AudioPannerNode::setRolloffFactor):
        (WebCore::AudioPannerNode::coneInnerAngle):
        (WebCore::AudioPannerNode::setConeInnerAngle):
        (WebCore::AudioPannerNode::coneOuterAngle):
        (WebCore::AudioPannerNode::setConeOuterAngle):
        (WebCore::AudioPannerNode::coneOuterGain):
        (WebCore::AudioPannerNode::setConeOuterGain):
        (WebCore::AudioPannerNode::distanceGain):
        (WebCore::AudioPannerNode::coneGain):
        * webaudio/AudioPannerNode.idl: Added.

2010-10-04  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        [Cairo] Port drawTiledShadow to the new ContextShadow
        https://bugs.webkit.org/show_bug.cgi?id=45902

        Ported the drawTiledShadow function to the ContextShadow, it
        renders shadows for rects faster than the simple blurring using
        tiling of a smaller rect. We will remove the old function in a
        next patch when starting to use ContextShadows for cairo
        rendering.

        * platform/graphics/ContextShadow.h:
        * platform/graphics/cairo/ContextShadowCairo.cpp:
        (WebCore::ContextShadow::drawRectShadowWithoutTiling):
        (WebCore::ContextShadow::drawRectShadow):

2010-10-05  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Add BiquadProcessor files
        https://bugs.webkit.org/show_bug.cgi?id=46527

        No new tests since audio API is not yet implemented.

        * webaudio/BiquadProcessor.cpp: Added.
        (WebCore::BiquadProcessor::BiquadProcessor):
        (WebCore::BiquadProcessor::~BiquadProcessor):
        (WebCore::BiquadProcessor::createKernel):
        (WebCore::BiquadProcessor::process):
        * webaudio/BiquadProcessor.h: Added.
        (WebCore::BiquadProcessor::filterCoefficientsDirty):
        (WebCore::BiquadProcessor::parameter1):
        (WebCore::BiquadProcessor::parameter2):
        (WebCore::BiquadProcessor::parameter3):
        (WebCore::BiquadProcessor::type):

2010-10-05  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Add EqualPowerPanner files
        https://bugs.webkit.org/show_bug.cgi?id=45077

        No new tests since audio API is not yet implemented.

        * platform/audio/EqualPowerPanner.cpp: Added.
        (WebCore::EqualPowerPanner::EqualPowerPanner):
        (WebCore::EqualPowerPanner::pan):
        * platform/audio/EqualPowerPanner.h: Added.
        (WebCore::EqualPowerPanner::reset):

2010-10-05  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Add HighPass2FilterNode files
        https://bugs.webkit.org/show_bug.cgi?id=46533

        No new tests since audio API is not yet implemented.

        * webaudio/HighPass2FilterNode.cpp: Added.
        (WebCore::HighPass2FilterNode::HighPass2FilterNode):
        * webaudio/HighPass2FilterNode.h: Added.
        (WebCore::HighPass2FilterNode::create):
        (WebCore::HighPass2FilterNode::cutoff):
        (WebCore::HighPass2FilterNode::resonance):
        (WebCore::HighPass2FilterNode::biquadProcessor):
        * webaudio/HighPass2FilterNode.idl: Added.

2010-10-05  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Add LowPass2FilterNode files
        https://bugs.webkit.org/show_bug.cgi?id=46532

        No new tests since audio API is not yet implemented.

        * webaudio/LowPass2FilterNode.cpp: Added.
        (WebCore::LowPass2FilterNode::LowPass2FilterNode):
        * webaudio/LowPass2FilterNode.h: Added.
        (WebCore::LowPass2FilterNode::create):
        (WebCore::LowPass2FilterNode::cutoff):
        (WebCore::LowPass2FilterNode::resonance):
        (WebCore::LowPass2FilterNode::biquadProcessor):
        * webaudio/LowPass2FilterNode.idl: Added.

2010-10-04  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Kent Tamura.

        Fixed compilation problem added in commit 69082. The interface of
        the function has two parameters with the same name.

        * rendering/RenderBlock.h:

2010-10-04  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Add AudioUtilities files
        https://bugs.webkit.org/show_bug.cgi?id=47011

        No new tests since audio API is not yet implemented.

        * platform/audio/AudioUtilities.cpp: Added.
        (WebCore::AudioUtilities::decibelsToLinear):
        (WebCore::AudioUtilities::linearToDecibels):
        (WebCore::AudioUtilities::discreteTimeConstantForSampleRate):
        * platform/audio/AudioUtilities.h: Added.

2010-10-04  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

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

        Convert addOverhangingFloats and addIntrudingFloats to be block-flow-aware.
        
        Also clean up how floats are placed to use a bit instead of the magic -1 value on top().

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::layoutBlockChild):
        (WebCore::RenderBlock::insertFloatingObject):
        (WebCore::RenderBlock::removeFloatingObject):
        (WebCore::RenderBlock::removeFloatingObjectsBelow):
        (WebCore::RenderBlock::positionNewFloats):
        (WebCore::RenderBlock::markLinesDirtyInBlockRange):
        (WebCore::RenderBlock::clearFloats):
        (WebCore::RenderBlock::addOverhangingFloats):
        (WebCore::RenderBlock::addIntrudingFloats):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::FloatingObject::FloatingObject):
        (WebCore::RenderBlock::FloatingObject::isPlaced):
        (WebCore::RenderBlock::FloatingObject::setIsPlaced):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::determineStartPosition):

2010-10-04  Nico Weber  <thakis@chromium.org>

        Reviewed by Kenneth Russell.

        Fix broken C++ in PODInterval and PODIntervalTree
        https://bugs.webkit.org/show_bug.cgi?id=47063

        See http://clang.llvm.org/compatibility.html#dep_lookup . Since
        valueToString needs to work with non-class types, it needs to be
        declared before it's used. And since it needs to handle many types, it
        needs to be a template function, for which clients will need to
        provide specializations for the types they care about. Partial template
        specialization is only supported for structs, so wrap the function in
        a struct, too.

        * platform/graphics/gpu/PODInterval.h:
        (WebCore::PODInterval::toString):
        * platform/graphics/gpu/PODIntervalTree.h:
        (WebCore::PODIntervalTree::checkInvariantsFromNode):
        * platform/graphics/gpu/PODRedBlackTree.h:
        (WebCore::PODRedBlackTree::dumpFromNode):

2010-10-04  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Antonio Gomes.

        Spatial Navigation: Add support for <input type="radio">
        https://bugs.webkit.org/show_bug.cgi?id=46993

        When using Spatial Navigation, every radio button should be focusable and 
        users should be able to navigate from one button to the next without moving the selection. 

        Tests: fast/events/spatial-navigation/snav-radio-group.html
               fast/events/spatial-navigation/snav-radio.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::isKeyboardFocusable):
        Every radio button should be keyboard focusable, if using Spatial Navigation.
        (WebCore::HTMLInputElement::defaultEventHandler):
        Disable the algorithm for selecting the next radio button within a group, if using Spatial Navigation.

2010-10-04  Renata Hodovan  <reni@inf.u-szeged.hu>

        Reviewed by Andreas Kling.

        SVGFEGaussianBlurElement doesn't support dynamic invalidation, when attributes change.
        https://bugs.webkit.org/show_bug.cgi?id=47074
        The patch also implements the simple setStdDeviation method.

        Tests: svg/dynamic-updates/SVGFEGaussianBlurElement-dom-in-attr.html
               svg/dynamic-updates/SVGFEGaussianBlurElement-dom-stdDeviation-attr.html
               svg/dynamic-updates/SVGFEGaussianBlurElement-dom-stdDeviation-call.html
               svg/dynamic-updates/SVGFEGaussianBlurElement-svgdom-in-prop.html

        * svg/SVGFEGaussianBlurElement.cpp:
        (WebCore::SVGFEGaussianBlurElement::setStdDeviation):
        (WebCore::SVGFEGaussianBlurElement::svgAttributeChanged):
        * svg/SVGFEGaussianBlurElement.h:

2010-10-04  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Darin Adler.

        Add Base64DecodePolicy option at base64Decode()
        https://bugs.webkit.org/show_bug.cgi?id=41510

        Add an option for ignoring characters in base64 data.
        This is necessary for decoding data urls.

        Also add an overload to decode WebCore::String directly.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::atob):
        * page/Page.cpp:
        (WebCore::Page::userStyleSheetLocationChanged):
        * platform/text/Base64.cpp:
        (WebCore::base64Encode):
        (WebCore::base64Decode):
        (WebCore::base64DecodeInternal):
        * platform/text/Base64.h:
        (WebCore::):

2010-10-04  Ryuan Choi  <bunhere@gmail.com>

        Unreviewed build fix.

        [WML] Build fix for r68854
        https://bugs.webkit.org/show_bug.cgi?id=47043

        Include HTMLParserIdioms.h.

        No features added, so no new tests.

        * wml/WMLAElement.cpp:
        * wml/WMLImageLoader.cpp:

2010-10-04  Ryuan Choi  <ryuan.choi@samsung.com>

        Unreviewed build fix.

        [CMAKE] Build fix for r68901
        https://bugs.webkit.org/show_bug.cgi?id=47042

        Move plugins/PluginPackage.cpp

        No features added, so no new tests.

        * CMakeLists.txt:

2010-10-04  Eric Uhrhane  <ericu@chromium.org>

        Reviewed by David Levin.

        Hook FileEntry::createWriter to DOMFileSystem::createWriter
        https://bugs.webkit.org/show_bug.cgi?id=46908

        No new tests--still waiting for the first complete implementation.

        * fileapi/FileEntry.cpp:
        (WebCore::FileEntry::createWriter):

2010-10-04  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Antonio Gomes.

        Spatial Navigation: select element does not release focus with Spatial Navigation
        https://bugs.webkit.org/show_bug.cgi?id=46896

        When using Spatial Navigation, once a select element is focused, you cannot use arrow keys
        to navigate out of the select element. That is because select element currently uses the
        arrow keys to change the selected element.
        Change the behavior of select element so it does not change selection, if Spatial Navigation
        is on.

        This patch is addressing the case where Spatial Navigation is used 
        in a mobile device, and the flag ENABLE_NO_LISTBOX_RENDERING is on.
        In the future we can add support for the case where the flag is off, and
        the user needs to traverse the select element inline.

        Tests: fast/events/spatial-navigation/snav-multiple-select.html
               fast/events/spatial-navigation/snav-single-select.html

        * dom/SelectElement.cpp:
        (WebCore::SelectElement::menuListDefaultEventHandler):

2010-10-04  Sriram Neelakandan  <sriram.neelakandan@gmail.com>

        Reviewed by Andreas Kling.

        [Qt] QNetworkReplyHandler forces buffered output for FormData with files
        https://bugs.webkit.org/show_bug.cgi?id=46259

        No new tests. Existing form submit tests should cover this change.

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::FormDataIODevice::FormDataIODevice):
        (WebCore::FormDataIODevice::computeSize):
         Add computeSize() for computing form device size
        (WebCore::QNetworkReplyHandler::start):
         Call computeSize(), fill Content-Length and prevent UploadData buffering
        * platform/network/qt/QNetworkReplyHandler.h:
        (WebCore::FormDataIODevice::getFormDataSize):

2010-10-04  Chang Shu  <chang.shu@nokia.com>

        Reviewed by Antonio Gomes.

        Fixed the typo that searches the wrong direction in the no-focus-node case.
        As a result, after page is loaded, pressing key "arrowdown" will bring the
        focus to the 1st element instead of the last element.
        https://bugs.webkit.org/show_bug.cgi?id=46901

        Test: fast/events/spatial-navigation/snav-1st-stop.html

        * page/FocusController.cpp:
        (WebCore::FocusController::advanceFocusDirectionally):

2010-10-04  Simon Fraser  <simon.fraser@apple.com>

        No review.
        
        Touch cf/SocketStreamHandle.h and add an #ifdef to qt/SocketStreamHandle.h
        to fail at compile time if Mac includes that header.

        * platform/network/cf/SocketStreamHandle.h:
        * platform/network/qt/SocketStreamHandle.h:

2010-10-04  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=47136
        WebSocket tests are crashing

        The Mac xcode project was finding qt/SocketStreamHandle.h because of
        an inadvertent change in r68951. Thus the header and implementation didn't match,
        and memory corruption ensued.
        
        * WebCore.xcodeproj/project.pbxproj:

2010-10-04  Chris Marrin  <cmarrin@apple.com>

        Reviewed by James Robinson.

        Move SharedGraphicsContext3D from ChromeClient to Page
        https://bugs.webkit.org/show_bug.cgi?id=47113

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::CanvasRenderingContext2D):
        * page/ChromeClient.h:
        * page/Page.cpp:
        (WebCore::Page::sharedGraphicsContext3D):
        * page/Page.h:
        * platform/graphics/gpu/SharedGraphicsContext3D.cpp:
        (WebCore::SharedGraphicsContext3D::create):
        * platform/graphics/gpu/SharedGraphicsContext3D.h:

2010-10-04  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Nate Chapin.

        Implement IndexedDB's oncomplete and ontimeout.
        https://bugs.webkit.org/show_bug.cgi?id=47106

        Add ontimeout and oncomplete to IDBTransaction and plumb
        them.  Test this behavior in the existing IDBTransaction-basics
        test.

        * WebCore.gypi:
        * storage/IDBTransaction.cpp:
        (WebCore::IDBTransaction::IDBTransaction):
        (WebCore::IDBTransaction::mode):
        (WebCore::IDBTransaction::objectStore):
        (WebCore::IDBTransaction::abort):
        (WebCore::IDBTransaction::onAbort):
        (WebCore::IDBTransaction::onComplete):
        (WebCore::IDBTransaction::onTimeout):
        (WebCore::IDBTransaction::stop):
        (WebCore::IDBTransaction::onAbortTimerFired):
        (WebCore::IDBTransaction::onCompleteTimerFired):
        (WebCore::IDBTransaction::onTimeoutTimerFired):
        * storage/IDBTransaction.h:
        * storage/IDBTransactionBackendImpl.cpp:
        (WebCore::IDBTransactionBackendImpl::IDBTransactionBackendImpl):
        (WebCore::IDBTransactionBackendImpl::commit):
        * storage/IDBTransactionCallbacks.h:

2010-10-04  Enrica Casucci  <enrica@apple.com>

        Reviewed by Darin Adler.

        Crash at WebCore::nextCandidate + 27
        https://bugs.webkit.org/show_bug.cgi?id=47118
        <rdar://problem/7282934>

        When we canonicalize a Position to create a VisiblePosition, the position
        is passed by reference. In canonicalPosition we call updateLayoutIgnorePendingStylesheets
        that can produce a lot of side effects, including changing the selection.
        This becomes a serious problem whne the position passed as reference is one of
        the selection endpoints.
        
        Test: editing/selection/focus-crash.html

        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::canonicalPosition):

2010-10-04  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=37812
        Assertion failure when appcache/fail-on-update.html is run twice in a row

        Test: http/tests/appcache/fail-on-update-2.html

        For some reason, I can't reproduce this assertion failure with ToT, but the fixes I made
        previously are still good, and covered by the new test.

        * loader/appcache/ApplicationCacheGroup.cpp: (WebCore::ApplicationCacheGroup::selectCache):
        Handle the case when the cache is already obsolete by the time cache selection occurs.

        * loader/appcache/ApplicationCacheHost.cpp: (WebCore::ApplicationCacheHost::failedLoadingMainResource):
        It's not true that loading from appcache always succeeds - it can be aborted.

        * loader/appcache/ApplicationCacheStorage.cpp: (WebCore::ApplicationCacheStorage::store):
        Calling ensureOriginRecord(group->origin()) can change lastInsertRowID!

2010-10-04  Erik Arvidsson  <arv@chromium.org>

        Reviewed by James Robinson.

        https://bugs.webkit.org/show_bug.cgi?id=47122
        Crash in classList when class attribute is empty.

        Tests: fast/dom/HTMLElement/class-list.html

        * html/DOMTokenList.cpp:
        (WebCore::DOMTokenList::length):
        (WebCore::DOMTokenList::containsInternal):
        (WebCore::DOMTokenList::classNames):

2010-10-04  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        Use isHTMLSpace in more places, and optimize it
        https://bugs.webkit.org/show_bug.cgi?id=47103

        * css/CSSParser.cpp:
        (WebCore::parseColorInt): Use isHTMLSpace instead of a separate isCSSWhitespace function.
        (WebCore::parseAlphaValue): Ditto.
        (WebCore::CSSParser::text): Ditto.

        * dom/SpaceSplitString.h: Removed isClassWhitespace.

        * dom/SpaceSplitString.cpp:
        (WebCore::SpaceSplitStringData::createVector): Use isHTMLSpace instead of isClassWhitespace.
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::classAttributeChanged): Ditto.
        * html/DOMTokenList.cpp:
        (WebCore::validateToken): Ditto.
        (WebCore::DOMTokenList::removeInternal): Ditto.

        * html/parser/HTMLParserIdioms.h: Added histogram data an changed so that non-spaces take
        only a single branch and plain old spaces take only two branches.

2010-10-04  Justin Schuh  <jschuh@chromium.org>

        Reviewed by James Robinson.

        HTMLMediaElement delayed load should fire asynchronously
        https://bugs.webkit.org/show_bug.cgi?id=45765

        Test: media/remove-from-document-before-load.html

        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::decrementLoadEventDelayCount):
        (WebCore::Document::loadEventDelayTimerFired):
        * dom/Document.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement):
        (WebCore::HTMLMediaElement::asyncEventTimerFired):
        (WebCore::HTMLMediaElement::setShouldDelayLoadEvent):
        * html/HTMLMediaElement.h:

2010-10-04  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        ResourceHandle's public/protected/private sections are fragmented
        https://bugs.webkit.org/show_bug.cgi?id=47038

        Minor cleanup.

        * platform/network/ResourceHandle.h:

2010-10-04  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=43506
        <rdar://problem/8289284> foreign-iframe-main.html occasionally crashes (during the next test,
        idempotent-update.html)

        Application cache doesn't use ResourceLoader machinery (for better or worse), so we need to
        abort update process explicitly.

        Note that in principle, update could piggyback on any other existing frame - or even run
        frameless - but currently, it's tied to the first frame that requested update.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::stopLoading):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::stopLoadingInFrame):
        * loader/appcache/ApplicationCacheGroup.h:
        * loader/appcache/ApplicationCacheHost.cpp:
        (WebCore::ApplicationCacheHost::~ApplicationCacheHost):
        (WebCore::ApplicationCacheHost::stopLoadingInFrame):
        * loader/appcache/ApplicationCacheHost.h:

2010-10-04  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Rename RedirectScheduler to NavigationScheduler
        https://bugs.webkit.org/show_bug.cgi?id=47037

        This class schedules more than just redirects.  In fact, it schedules
        most kinds of navigations.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/generic/BindingDOMWindow.h:
        (WebCore::::createWindow):
        (WebCore::::open):
        * bindings/generic/BindingFrame.h:
        (WebCore::::navigateIfAllowed):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::setLocation):
        (WebCore::createWindow):
        (WebCore::JSDOMWindow::open):
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::setLocation):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::reload):
        * bindings/v8/custom/V8LocationCustom.cpp:
        (WebCore::V8Location::reloadCallback):
        * dom/Document.cpp:
        (WebCore::Document::implicitClose):
        (WebCore::Document::processHttpEquiv):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::setResourceTrackingEnabled):
        (WebCore::InspectorController::reloadPage):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::setDefersLoading):
        (WebCore::FrameLoader::submitForm):
        (WebCore::FrameLoader::stopLoading):
        (WebCore::FrameLoader::didOpenURL):
        (WebCore::FrameLoader::didExplicitOpen):
        (WebCore::FrameLoader::cancelAndClear):
        (WebCore::FrameLoader::clear):
        (WebCore::FrameLoader::receivedFirstData):
        (WebCore::FrameLoader::checkCompleted):
        (WebCore::FrameLoader::provisionalLoadStarted):
        (WebCore::FrameLoader::completed):
        (WebCore::FrameLoader::prepareForCachedPageRestore):
        * loader/FrameLoader.h:
        * loader/NavigationScheduler.cpp: Added.
        (WebCore::ScheduledNavigation::ScheduledNavigation):
        (WebCore::ScheduledNavigation::~ScheduledNavigation):
        (WebCore::ScheduledNavigation::shouldStartTimer):
        (WebCore::ScheduledNavigation::didStartTimer):
        (WebCore::ScheduledNavigation::didStopTimer):
        (WebCore::ScheduledNavigation::delay):
        (WebCore::ScheduledNavigation::lockHistory):
        (WebCore::ScheduledNavigation::lockBackForwardList):
        (WebCore::ScheduledNavigation::wasDuringLoad):
        (WebCore::ScheduledNavigation::isLocationChange):
        (WebCore::ScheduledNavigation::wasUserGesture):
        (WebCore::ScheduledURLNavigation::ScheduledURLNavigation):
        (WebCore::ScheduledURLNavigation::fire):
        (WebCore::ScheduledURLNavigation::didStartTimer):
        (WebCore::ScheduledURLNavigation::didStopTimer):
        (WebCore::ScheduledURLNavigation::url):
        (WebCore::ScheduledURLNavigation::referrer):
        (WebCore::ScheduledRedirect::ScheduledRedirect):
        (WebCore::ScheduledRedirect::shouldStartTimer):
        (WebCore::ScheduledLocationChange::ScheduledLocationChange):
        (WebCore::ScheduledRefresh::ScheduledRefresh):
        (WebCore::ScheduledRefresh::fire):
        (WebCore::ScheduledHistoryNavigation::ScheduledHistoryNavigation):
        (WebCore::ScheduledHistoryNavigation::fire):
        (WebCore::ScheduledFormSubmission::ScheduledFormSubmission):
        (WebCore::ScheduledFormSubmission::fire):
        (WebCore::ScheduledFormSubmission::didStartTimer):
        (WebCore::ScheduledFormSubmission::didStopTimer):
        (WebCore::NavigationScheduler::NavigationScheduler):
        (WebCore::NavigationScheduler::~NavigationScheduler):
        (WebCore::NavigationScheduler::redirectScheduledDuringLoad):
        (WebCore::NavigationScheduler::locationChangePending):
        (WebCore::NavigationScheduler::clear):
        (WebCore::NavigationScheduler::scheduleRedirect):
        (WebCore::NavigationScheduler::mustLockBackForwardList):
        (WebCore::NavigationScheduler::scheduleLocationChange):
        (WebCore::NavigationScheduler::scheduleFormSubmission):
        (WebCore::NavigationScheduler::scheduleRefresh):
        (WebCore::NavigationScheduler::scheduleHistoryNavigation):
        (WebCore::NavigationScheduler::timerFired):
        (WebCore::NavigationScheduler::schedule):
        (WebCore::NavigationScheduler::startTimer):
        (WebCore::NavigationScheduler::cancel):
        * loader/NavigationScheduler.h: Added.
        * loader/RedirectScheduler.cpp: Removed.
        * loader/RedirectScheduler.h: Removed.
        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::loadOrRedirectSubframe):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::selectCache):
        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        * page/Frame.h:
        (WebCore::Frame::navigationScheduler):
        * page/History.cpp:
        (WebCore::History::back):
        (WebCore::History::forward):
        (WebCore::History::go):
        * page/XSSAuditor.cpp:
        (WebCore::XSSAuditor::findInRequest):

2010-10-04  Adam Barth  <abarth@webkit.org>

        Reviewed by Sam Weinig.

        Remove ENABLE_SANDBOX
        https://bugs.webkit.org/show_bug.cgi?id=47032

        I'm not sure there's a reason for this to be behind a compile flag
        anymore.

        * Configurations/FeatureDefines.xcconfig:
        * GNUmakefile.am:
        * features.pri:
        * html/HTMLIFrameElement.cpp:
        (WebCore::parseSandboxAttribute):
        (WebCore::HTMLIFrameElement::parseMappedAttribute):

2010-10-04  Huahui Wu  <mediadependent@gmail.com>

        Reviewed by Darin Adler.

        Fix a compiler error for ANDROID introduced by bug 45221.
        https://bugs.webkit.org/show_bug.cgi?id=47095

        It's a small fix for a compiler error, so there is no new test.

        * platform/android/PlatformTouchEventAndroid.cpp:
        (WebCore::PlatformTouchEvent::PlatformTouchEvent):

2010-10-04  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        AX: doAXRangeForLine does not work
        https://bugs.webkit.org/show_bug.cgi?id=47101

        Asking for NSAccessibilityRangeForLine was returning a null range for any line number > 0.
        The code was using a SelectionController to extend to the next line. Rather than change the implementation
        of that core functionality, it is cleaner to use endOfLine to find the end of the line.

        Test: platform/mac/accessibility/range-for-line-textarea.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::doAXRangeForLine):

2010-10-04  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed, build fix for r68951.

        Add stub implementation for ProxyServer logic.

        * WebCore.vcproj/WebCore.vcproj: Add new WinCairo file.
        * WebCore/platform/network/curl/ProxyServerCurl.cpp: Added

2010-10-04  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=47035
        Application cache selection algorithm should only be invoked after navigation

        Tests: http/tests/appcache/document-write-html-element-2.html
               http/tests/appcache/document-write-html-element.html
               http/tests/appcache/insert-html-element-with-manifest-2.html
               http/tests/appcache/insert-html-element-with-manifest.html

        * dom/DocumentParser.cpp: (WebCore::DocumentParser::DocumentParser):
        * dom/DocumentParser.h:
        (WebCore::DocumentParser::setDocumentWasLoadedAsPartOfNavigation):
        (WebCore::DocumentParser::documentWasLoadedAsPartOfNavigation):
        Track whether the document being parsed is being loaded as part of navigation.

        * html/HTMLHtmlElement.cpp: (WebCore::HTMLHtmlElement::insertedByParser): Only run the
        cache selection algorithm if the document is being loaded as part of navigation. We don't 
        want to switch associated appcache is someone document.writes <html manifest=...>.

        * html/HTMLHtmlElement.h: We need to differentiate between parsing and DOM manipulation, so
        this code can't be in HTMLHtmlElement::insertedIntoDocument().

        * dom/XMLDocumentParserLibxml2.cpp: (WebCore::XMLDocumentParser::startElementNs):
        * dom/XMLDocumentParserQt.cpp: (WebCore::XMLDocumentParser::parseStartElement):
        * html/ImageDocument.cpp: (WebCore::ImageDocument::createDocumentStructure):
        * html/MediaDocument.cpp: (WebCore::MediaDocumentParser::createDocumentStructure):
        * html/PluginDocument.cpp: (WebCore::PluginDocumentParser::createDocumentStructure):
        * html/parser/HTMLConstructionSite.cpp: (WebCore::HTMLConstructionSite::insertHTMLHtmlStartTagBeforeHTML):
        Check for manifest attribute in cases specified by HTML5.

        * html/parser/HTMLConstructionSite.h: Removed unused insertHTMLHtmlElement().

        * loader/DocumentWriter.cpp: (WebCore::DocumentWriter::setDocumentWasLoadedAsPartOfNavigation):
        * loader/DocumentWriter.h:
        Forward this call to DocumentParser, since DocumentWriter is supposed to encapsulate it.

        * loader/FrameLoader.cpp: (WebCore::FrameLoader::receivedFirstData): Receiving data from
        loader means being loaded as part of navigation. This notion is used in HTML5 without a rigorous
        definition that I could find - this seems to be a meaningful formalization.

2010-10-04  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

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

        Convert clearFloats() to be block-flow-aware.  Helpers that it calls have not been patched though.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::clearFloats):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::logicalTopForFloat):
        (WebCore::RenderBlock::logicalLeftForFloat):
        (WebCore::RenderBlock::logicalWidthForFloat):

2010-10-04  Diego Gonzalez  <diegohcg@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Hook up DeviceOrientation data for Qt support
        https://bugs.webkit.org/show_bug.cgi?id=47052

        Get DeviceOrientation necessary data via Qt mobility library
        using a provider class.

        * WebCore.pro:

2010-10-01  Victoria Kirst  <vrk@google.com>

        Reviewed by James Robinson.

        Fixing crash when audio media player is destructed
        https://bugs.webkit.org/show_bug.cgi?id=47020

        Adds assert for LayerRenderer in destructor.

        * platform/graphics/chromium/VideoLayerChromium.cpp:
        (WebCore::VideoLayerChromium::~VideoLayerChromium):

2010-10-04  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: do not show breakpoint in front-end if it was not set in v8
        https://bugs.webkit.org/show_bug.cgi?id=46749

        * bindings/v8/DebuggerScript.js:
        ():

2010-10-04  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        [cairo] Context shadow modifies the data of the surface without
        flushing and marking as dirty
        https://bugs.webkit.org/show_bug.cgi?id=47079

        Added the cairo_surface_flush and cairo_surface_mark_dirty before
        and after modifying the image pixels directly.

        * platform/graphics/cairo/ContextShadowCairo.cpp:
        (WebCore::ContextShadow::endShadowLayer):

2010-10-04  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Xan Lopez.

        Crashed caused by missing OwnPtrCairo include, for more
        information check the issue in the bug 46268.

        * platform/graphics/cairo/CairoUtilities.cpp:

2010-10-04  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        [cairo] Move some cairo functions to the CairoUtilities
        https://bugs.webkit.org/show_bug.cgi?id=47076

        Moved some cairo functions to the CairoUtilities so we can use
        them outside GraphicsContextCairo.

        * platform/graphics/cairo/CairoUtilities.cpp:
        (WebCore::appendPathToCairoContext):
        (WebCore::setPathOnCairoContext):
        (WebCore::appendWebCorePathToCairoContext):
        (WebCore::toCairoOperator):
        (WebCore::drawPatternToCairoContext):
        * platform/graphics/cairo/CairoUtilities.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        * platform/graphics/cairo/ImageCairo.cpp:
        (WebCore::Image::drawPattern):

2010-10-04  podivilov@chromium.org  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: implement pausing on event listeners (back-end part)
        https://bugs.webkit.org/show_bug.cgi?id=46624

        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::setPauseOnNextStatement):
        * bindings/js/ScriptDebugServer.h:
        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::setPauseOnNextStatement):
        * bindings/v8/ScriptDebugServer.h:
        * dom/Node.cpp:
        (WebCore::Node::dispatchGenericEvent):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::didCommitLoad):
        (WebCore::InspectorController::setNativeBreakpoint):
        (WebCore::InspectorController::removeNativeBreakpoint):
        (WebCore::InspectorController::shouldBreakOnEvent):
        (WebCore::InspectorController::shouldBreakOnXMLHttpRequest):
        * inspector/InspectorController.h:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::~InspectorDebuggerAgent):
        (WebCore::InspectorDebuggerAgent::schedulePauseOnNextStatement):
        (WebCore::InspectorDebuggerAgent::cancelPauseOnNextStatement):
        (WebCore::InspectorDebuggerAgent::pause):
        (WebCore::InspectorDebuggerAgent::didContinue):
        (WebCore::InspectorDebuggerAgent::breakProgram):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorInstrumentation.cpp:
        (WebCore::eventHasListeners):
        (WebCore::InspectorInstrumentation::instrumentWillDispatchEventImpl):
        (WebCore::InspectorInstrumentation::instrumentDidDispatchEventImpl):
        (WebCore::InspectorInstrumentation::instrumentWillSendXMLHttpRequestImpl):
        * inspector/InspectorInstrumentation.h:
        (WebCore::InspectorInstrumentation::instrumentWillDispatchEvent):
        (WebCore::InspectorInstrumentation::instrumentDidDispatchEvent):
        (WebCore::InspectorInstrumentation::instrumentWillSendXMLHttpRequest):
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::InspectorTimelineAgent):
        * inspector/InspectorTimelineAgent.h:
        (WebCore::InspectorTimelineAgent::id):
        * inspector/front-end/CallStackSidebarPane.js:

2010-10-04  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: add total bar to the network panel.
        https://bugs.webkit.org/show_bug.cgi?id=47081

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.createDividerElement):
        * inspector/front-end/DataGrid.js:
        (WebInspector.DataGrid.prototype.removeChild):
        (WebInspector.DataGrid.prototype.sortNodes):
        (WebInspector.DataGrid.prototype._clickInHeaderCell):
        (WebInspector.DataGrid.prototype.markColumnAsSortedBy):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel):
        (WebInspector.NetworkPanel.prototype.resize):
        (WebInspector.NetworkPanel.prototype._positionSummaryBar):
        (WebInspector.NetworkPanel.prototype._createTimelineGrid):
        (WebInspector.NetworkPanel.prototype._createSortingFunctions):
        (WebInspector.NetworkPanel.prototype._sortItems):
        (WebInspector.NetworkPanel.prototype._sortByTimeline):
        (WebInspector.NetworkPanel.prototype._createFilterStatusBarItems):
        (WebInspector.NetworkPanel.prototype._createSummaryBar):
        (WebInspector.NetworkPanel.prototype._updateSummaryBar):
        (WebInspector.NetworkPanel.prototype._updateFilter):
        (WebInspector.NetworkPanel.prototype.show):
        (WebInspector.NetworkPanel.prototype.refresh):
        (WebInspector.NetworkPanel.prototype.reset):
        (WebInspector.NetworkDataGridNode.SizeComparator):
        (WebInspector.NetworkDataGridNode.ResourcePropertyComparator):
        (WebInspector.NetworkTotalGridNode):
        (WebInspector.NetworkTotalGridNode.prototype.createCells):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.createFilterPanel):
        * inspector/front-end/inspector.css:
        (.scope-bar-divider):
        * inspector/front-end/networkPanel.css:
        (.network-timeline-grid):
        (.network-summary-bar):
        (.network-summary-bar-bottom):
        (.data-grid td .network-summary-bar):

2010-09-28  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        Viewport data change notifications
        https://bugs.webkit.org/show_bug.cgi?id=46755

        Regarding viewport meta tags, what matters for browser developers is to know when the viewport data has
        changed and its current value. Viewport data belongs to the document, but it is useful to keep the current
        viewport data in Page as a reference, to be able to send notifications only when the current viewport
        has changed.

        * dom/Document.cpp:
        (WebCore::Document::processViewport):
        (WebCore::Document::setInPageCache):
        * dom/ViewportArguments.h:
        (WebCore::ViewportArguments::operator==):
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::HTMLBodyElement):
        * page/Chrome.cpp:
        (WebCore::Chrome::viewportDataChanged):
        * page/Chrome.h:
        * page/ChromeClient.h:
        (WebCore::ChromeClient::viewportDataChanged):
        * page/Page.cpp:
        (WebCore::Page::updateViewportArguments):
        * page/Page.h:
        (WebCore::Page::viewportArguments):

2010-10-03  Kent Tamura  <tkent@chromium.org>

        Unreviewed, build fix for r68996.

        * html/BaseDateAndTimeInputType.cpp: Includes <wtf/MathExtras.h> for isfinite().
        * html/MonthInputType.cpp: ditto.
        * html/NumberInputType.cpp: ditto.
        * html/RangeInputType.cpp: ditto.

2010-10-03  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        Refactor HTMLInputElement: Move parseToDouble() and
        parseToDateComponents() to InputType.
        https://bugs.webkit.org/show_bug.cgi?id=46965

        Introduce BaseDateAndTimeInputType, which is a super class of
        date, datetime, datetime-local, month, time, and week types.

        No new tests. Just a refactoring.

        * Android.mk: Add BaseDateAndTimeInputType.
        * CMakeLists.txt: ditto.
        * GNUmakefile.am: ditto.
        * WebCore.gypi: ditto.
        * WebCore.pro: ditto.
        * WebCore.vcproj/WebCore.vcproj: ditto.
        * WebCore.xcodeproj/project.pbxproj: ditto.
        * html/BaseDateAndTimeInputType.cpp: Added.
        (WebCore::BaseDateAndTimeInputType::parseToDouble):
        (WebCore::BaseDateAndTimeInputType::parseToDateComponents):
        * html/BaseDateAndTimeInputType.h: Added.
        (WebCore::BaseDateAndTimeInputType::BaseDateAndTimeInputType):
        * html/DateInputType.cpp:
        (WebCore::DateInputType::parseToDateComponentsInternal):
        * html/DateInputType.h:
        (WebCore::DateInputType::DateInputType):
        * html/DateTimeInputType.cpp:
        (WebCore::DateTimeInputType::parseToDateComponentsInternal):
        * html/DateTimeInputType.h:
        (WebCore::DateTimeInputType::DateTimeInputType):
        * html/DateTimeLocalInputType.cpp:
        (WebCore::DateTimeLocalInputType::parseToDateComponentsInternal):
        * html/DateTimeLocalInputType.h:
        (WebCore::DateTimeLocalInputType::DateTimeLocalInputType):
        * html/HTMLInputElement.cpp: Replace parseToD* calls with m_inputType->parseToD*.
        (WebCore::HTMLInputElement::typeMismatch):
        (WebCore::HTMLInputElement::rangeUnderflow):
        (WebCore::HTMLInputElement::rangeOverflow):
        (WebCore::HTMLInputElement::minimum):
        (WebCore::HTMLInputElement::maximum):
        (WebCore::HTMLInputElement::stepBase):
        (WebCore::HTMLInputElement::stepMismatch):
        (WebCore::HTMLInputElement::applyStep):
        (WebCore::HTMLInputElement::valueAsDate):
        (WebCore::HTMLInputElement::valueAsNumber):
        (WebCore::HTMLInputElement::handleKeyEventForRange):
        (WebCore::HTMLInputElement::stepUpFromRenderer):
        * html/HTMLInputElement.h:
        * html/InputType.cpp:
        (WebCore::InputType::parseToDouble):
        (WebCore::InputType::parseToDateComponents):
        * html/InputType.h:
        * html/MonthInputType.cpp:
        (WebCore::MonthInputType::parseToDouble):
        (WebCore::MonthInputType::parseToDateComponentsInternal):
        * html/MonthInputType.h:
        (WebCore::MonthInputType::MonthInputType):
        * html/NumberInputType.cpp:
        (WebCore::NumberInputType::parseToDouble):
        * html/NumberInputType.h:
        * html/RangeInputType.cpp:
        (WebCore::RangeInputType::parseToDouble):
        * html/RangeInputType.h:
        * html/TimeInputType.cpp:
        (WebCore::TimeInputType::parseToDateComponentsInternal):
        * html/TimeInputType.h:
        (WebCore::TimeInputType::TimeInputType):
        * html/WeekInputType.cpp:
        (WebCore::WeekInputType::parseToDateComponentsInternal):
        * html/WeekInputType.h:
        (WebCore::WeekInputType::WeekInputType):

2010-10-03  Adam Barth  <abarth@webkit.org>

        Reviewed by Holger Freyther.

        ASSERT(m_state = Open); is bad news bears
        https://bugs.webkit.org/show_bug.cgi?id=47057

        Added by ap (review by darin) in http://trac.webkit.org/changeset/50951
        Too bad the compiler doesn't catch these errors.  I don't believe this
        is possible to test.

        * platform/network/cf/SocketStreamHandleCFNet.cpp:
        (WebCore::SocketStreamHandle::writeStreamCallback):

2010-10-03  Adam Barth  <abarth@webkit.org>

        Reviewed by Holger Freyther.

        All the WebSocket tests crash
        https://bugs.webkit.org/show_bug.cgi?id=47056

        More code that tries to hold onto temporaries with references.

        * websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::didOpen):

2010-10-03  Adam Barth  <abarth@webkit.org>

        Reviewed by Holger Freyther.

        All the WebSocket tests crash
        https://bugs.webkit.org/show_bug.cgi?id=47055

        This code attempts to hold onto temporary objects using references.
        That doesn't work in C++. Instead, we need to actually store the
        objects somewhere.

        * bindings/js/JSWebSocketCustom.cpp:
        (WebCore::JSWebSocketConstructor::constructJSWebSocket):

2010-10-02  Diego Gonzalez  <diegohcg@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Provide Qt support for DeviceMotion/Orientation clients
        https://bugs.webkit.org/show_bug.cgi?id=47051

        Add Qt DeviceMotion/Orientation dummy clients in build system.

        * WebCore.pro:

2010-10-01  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Rewrite SVG text layout code
        https://bugs.webkit.org/show_bug.cgi?id=45532

        Modernize SVG text layout engine, split the layout process into three phases, so that each results can be cached (which will be done in a follow-up patch).

        Phase #1) - SVGTextLayoutAttributesBuilder
        ------------------------------------------

        Parse x/y/dx/dy/rotate values of the <text> subtree (<text x="30 40">A<tspan>B<tspan x="50">C</tspan></tspan></text>)
        This is done by SVGTextLayoutAttributesBuilder. It builds a SVGTextLayoutAttributes object for each RenderSVGInlineText renderer, and stores it there.
        Phase #1 is started from RenderSVGText::layout(), before RenderBlockLineLayout is laying out the inline children, and thus before the InlineBox tree is created.

        Now we know which character has an associated absolute x or y position, denoting the start of a new text chunk. Whenever we encounter a new text chunk
        RenderBlockLineLayout should create a new SVGInlineTextBox. This is very important, as BiDi reordering shouldn't happen across text chunks, as well as ligature detection.

        The text chunk concept is now merged right into the InlineBox tree, so we don't need to hack around the lack of that, as done for the previous years.

        Phase #2) - SVGTextLayoutEngine
        ------------------------------------------

        RenderSVGText::layout() calls RenderBlock::layoutInlineChildren() right after phase #1 ends. The InlineBox tree is created. During that process findNextLineBreak()
        decides how to split up the text into InlineTextBoxes. It has already been patched, to ask RenderSVGInlineText::characterStartsNewTextChunk(int position), whether the
        current character should go in a new SVGInlineTextBox or not. This requires that phase #1 already stored these information in the RenderSVGInlineText objects.

        For each <text> object a SVGRootInlineBox is created (in constructLine()) and all child boxes are added. After that SVGRootInlineBox::computePerCharacterLayoutInformation()
        is called (unlike HTML text, which splits the vertical & horizontal layout in two phases, it's just one single phase for SVG). This function invokes SVGTextLayoutEngine
        and starts phase #2 of the layout process.

        SVGTextLayoutEngine lays out the content of each SVGInlineTextBox either on a line or a path. It contains all the logic handling, alignment-baseline, dominant-baseline,
        letter-spacing, word-spacing, kerning, glyph-orientation-(horizontal|vertical), rotation, etc. etc.

        As result it generates a set of SVGTextFragment objects which are stored in each SVGInlineTextBox. Each SVGTextFragment is a portion of text that can be rendered/measured
        at once. Some examples to illustrate what's going on:

        <text x="20">ABCD</text>:
        - SVGInlineTextBox
          - SVGTextFragment, start 0 length 4, "ABCD" (x=20)

        <text x="20 100">ABCD</text>:
        - SVGInlineTextBox
          - SVGTextFragment, start 0 length 1, "A" (x=20)
        - SVGInlineTextBox
          - SVGTextFragment, start 0 length 1, "B" (x=100)
          - SVGTextFragment, start 1 length 2, "CD" (x=100 + advance_of_last)

        <text><textPath xlink:href="#somePath">ABCD</textPath></text>:
        - SVGInlineTextBox
          - SVGTextFragment, start 0 length 1, "A" (rotated!)
          - SVGTextFragment, start 1 length 1, "B" (rotated!)
          - SVGTextFragment, start 2 length 1, "C" (rotated!)
          - SVGTextFragment, start 3 length 1, "D" (rotated!)

        <text x="0 50 100">A<tspan>B</tspan>C</text>
        - SVGInlineTextBox
          - SVGTextFragment, start 0 length 1, "A" (x=0)
        - SVGInlineFlowBox
          - SVGInlineTextBox
            - SVGTextFragment, start 0 length 1, "B" (x=50)
        - SVGInlineTextBox
          - SVGTextFragment, start 0 length 1, "C" (x=100)

        When painting text SVGInlineTextBox just walks its fragments and paints them. Text selection works the same.
        All text measurements (width/height etc.) have already been done in phase #2 and aren't required anymore while painting/selecting.
        This is one of the main benefits of the new text layout engine, painting & selection is cheap now, compared to the layout process.

        We're now doing phase #1 everytime RenderSVGText::layout() is called. This is not necessary, we only have to recompute these information
        if the x/y/dx/dy or rotate list of an element in the <text> subtree changes or the text content itself -> this will be done in a follow-up patch.
        It's likely that we'll also find ways to skip phase #2 in certain situations.

        Phase #3) - SVGTextChunkBuilder
        ------------------------------------------

        After phase #2 finished, we can post-process the text fragments. Certain operations have to be applied on a "per chunk" basis.
        text-anchor should be applied to individual text chunks, as well as textLength corrections (lengthAdjust="spacing" / lengthAdjust="spacingAndGlyphs").

        SVGTextChunkBuilder just walks the SVGInlineTextBox, and collects all boxes belonging to a certain chunk. For each of the chunks all fragments
        are post-processed. For instance for text-anchor="middle", all x positions of all fragments are shifted by -fragmentWidth/2 (for horizonal text).

        After phase #1 - #3 finished, SVGRootInlineBox::computePerCharacterLayoutInformation() utilizies the stored SVGTextFragments to lay out all child
        boxes in the InlineBox tree (setWidth/Height, etc.), the size and position of the SVGRootInlineBox and it's parent RenderSVGText object.

        This should give interessted readers a good summary of how the new text layout engine works.
        See LayoutTests/ChangeLog for more details on test progression.

        Tests: svg/custom/text-rotation.svg
               svg/custom/text-x-dy-lists.svg

        * Android.mk: Add SVGTextLayoutEngine.* / SVGTextChunkBuilder.* to build. Remove SVGCharacterData.* / SVGTextChunkLayoutInfo.* / SVGTextLayoutUtilities.* from build.
        * CMakeLists.txt: Ditto.
        * GNUmakefile.am: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * rendering/InlineBox.h:
        (WebCore::InlineBox::isSVGInlineFlowBox): Add helper function to identify SVGInlineFlowBoxes. The variants for SVGInlineTextBox etc. already exist.
        * rendering/InlineTextBox.h: Devirtualize selectionStartEnd, SVG is no longer overriding it.
        * rendering/RenderSVGAllInOne.cpp: removes
        * rendering/RenderText.cpp:
        (WebCore::RenderText::setTextInternal): Remove SVG specific hacks, moved to RenderSVGInlineText.
        * rendering/SVGCharacterData.cpp: Removed.
        * rendering/SVGCharacterData.h: Removed.
        * rendering/SVGCharacterLayoutInfo.cpp: Removed.
        * rendering/SVGCharacterLayoutInfo.h: Removed.
        * rendering/SVGRenderTreeAsText.cpp: Hack DRT output to be somewhat compatible with the current output, the plan is to change it completly after this patch.
        (WebCore::writeRenderSVGTextBox):
        (WebCore::writeSVGInlineTextBox):
        * rendering/SVGTextChunkLayoutInfo.cpp: Removed.
        * rendering/SVGTextChunkLayoutInfo.h: Removed.
        * rendering/SVGTextLayoutUtilities.cpp: Removed.
        * rendering/SVGTextLayoutUtilities.h: Removed.
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::diff): Only return immediately if SVGRenderStyle::diff produced StyleDifferenceLayout, it it's sth. else be sure to ask RenderStyle itself what to do.
        * rendering/style/SVGRenderStyle.h:
        (WebCore::SVGRenderStyle::isVerticalWritingMode): New helper method, moved from SVGTextLayoutUtilities.
        * rendering/svg/RenderSVGInlineText.cpp:
        (WebCore::applySVGWhitespaceRules): Moved from RenderText into a SVG specific place.
        (WebCore::RenderSVGInlineText::RenderSVGInlineText): Use applySVGWhitespaceRules on the incoming text.
        (WebCore::RenderSVGInlineText::styleDidChange): Only apply SVG white space rules, when using xml:space="preserve", otherwhise the constructor already handled it.
        (WebCore::RenderSVGInlineText::characterStartsNewTextChunk): Create text chunks for absolute y values as well, SVG 1.1 2nd Edition demands that.
        (WebCore::RenderSVGInlineText::positionForPoint): New function operating on all SVGInlineTextBoxes and their SVGTextFragments.
        * rendering/svg/RenderSVGInlineText.h:
        (WebCore::RenderSVGInlineText::layoutAttributes): Stores the layout attributes generated by SVGTextLayoutAttributesBuilder.
        (WebCore::toRenderSVGInlineText): New helper methods for casting.
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::layout): Add comment, that SVGTextLayoutAttributesBuilder is just phase one of the layout process.
        (WebCore::RenderSVGText::positionForPoint): Simplified implementation for SVGs needs.
        * rendering/svg/RenderSVGText.h:
        * rendering/svg/SVGInlineFlowBox.cpp:
        (WebCore::SVGInlineFlowBox::paintSelectionBackground): Seperated selection background drawing from actual text rendering, to make sure selection is always in background for SVG.
        (WebCore::SVGInlineFlowBox::paint): Call computetextMatchMarkerRectForRenderer, before painting.
        (WebCore::SVGInlineFlowBox::computeTextMatchMarkerRectForRenderer): New method.
        * rendering/svg/SVGInlineFlowBox.h:
        (WebCore::SVGInlineFlowBox::isSVGInlineFlowBox):
        * rendering/svg/SVGInlineTextBox.cpp: Completly rewritten, operates on SVGTextFragments, produced by the SVGTextLayoutEngine. Whole new concept, compared to the old hack.
        * rendering/svg/SVGInlineTextBox.h:
        (WebCore::SVGInlineTextBox::clearTextFragments): Only used by SVGTextLayoutEngine, to clean up previously computed fragments.
        (WebCore::SVGInlineTextBox::textFragments): Offers access to the fragments in the box.
        (WebCore::SVGInlineTextBox::startsNewTextChunk): Does this box start a new text chunk?
        (WebCore::SVGInlineTextBox::setStartsNewTextChunk): SVGTextLayoutEngine marks this box, if it starts a new text chunk.
        * rendering/svg/SVGRootInlineBox.cpp: Remove old code regarding text chunk parts.
        (WebCore::SVGRootInlineBox::paint): Selection is now painted before text, to assure it's really in the background.
        (WebCore::SVGRootInlineBox::computePerCharacterLayoutInformation): Use new SVGTextLayoutEngine.
        (WebCore::SVGRootInlineBox::layoutCharactersInTextBoxes): Feed SVGTextLayoutEngine with SVGInlineTextBoxes, detect the begin/end of path layouts.
        (WebCore::SVGRootInlineBox::layoutChildBoxes): Use new isSVGInlineTextBox() helper method.
        (WebCore::SVGRootInlineBox::closestLeafChildForPosition): Simplified version for SVG.
        * rendering/svg/SVGRootInlineBox.h: Remove access to text chunks, they're now longer stored in the SVGRootInlineBox.
        * rendering/svg/SVGTextChunk.cpp: s/SVGTextChunkNew/SVGTextChunk/
        * rendering/svg/SVGTextChunk.h:
        * rendering/svg/SVGTextChunkBuilder.cpp: Added.
        * rendering/svg/SVGTextChunkBuilder.h: Added.
        * rendering/svg/SVGTextLayoutAttributes.cpp: Constify dump() method.
        * rendering/svg/SVGTextLayoutAttributes.h:
        (WebCore::SVGTextLayoutAttributes::textMetricsValues):
        * rendering/svg/SVGTextLayoutAttributesBuilder.cpp: Rewritten, consume less memory, while building the layout attributes.
        * rendering/svg/SVGTextLayoutAttributesBuilder.h:
        * rendering/svg/SVGTextLayoutEngine.cpp: Added.
        * rendering/svg/SVGTextLayoutEngine.h: Added.
        * rendering/svg/SVGTextQuery.cpp: Rewritten to deal with the new SVGTextFragment/SVGTextLayoutAttributes logic.
        * rendering/svg/SVGTextQuery.h:

2010-10-02  Alpha Lam  <hclam@chromium.org>

        Build fix. Not reviewed.

        An adhoc fix for a crash found by reliability bot. This will make the
        reliability bot happy. A proper fix is pending commit.

        * platform/graphics/chromium/VideoLayerChromium.cpp:
        (WebCore::VideoLayerChromium::~VideoLayerChromium):

2010-10-01  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        FormatBlockCommand and IndentOutdentCommand should use the same code to iterate paragraphs
        https://bugs.webkit.org/show_bug.cgi?id=46840

        Added ApplyBlockElementCommand, which is an abstract class inherited by FormatBlockCommand
        and IndentOutdentCommand.  It is intended to be inherited by InsertListCommand as well.

        ApplyBlockElementCommand's doApply verifies the current selection and exits early
        if it's invalid or orphaned or if the current selection is outside editable region.
        It then calls formatSelection to apply the block element after which doApply restores the selection.
        formatSelection iterates through paragraphs and calls formatParagraph, a pure virtual function
        implemented by FormatBlockCommand and IndentOutdentCommand, on each paragraph.

        No new tests are added since this is a refactoring.

        * Android.mk: Added ApplyBlockElementCommand.cpp.
        * CMakeLists.txt: Ditto.
        * GNUmakefile.am: Added ApplyBlockElementCommand.cpp and ApplyBlockElementCommand.h.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * editing/ApplyBlockElementCommand.cpp: Added.
        (WebCore::countParagraphs): Moved from IndentOutdentCommand.cpp
        (WebCore::ApplyBlockElementCommand::ApplyBlockElementCommand): Added.
        (WebCore::ApplyBlockElementCommand::doApply): Moved from IndentOutdentCommand::doApply.
        (WebCore::ApplyBlockElementCommand::formatSelection): Moved from IndentOutdentCommand::indentRegion.
        (WebCore::ApplyBlockElementCommand::createBlockElement): Added.
        (WebCore::ApplyBlockElementCommand::splitTextNodes): Moved from IndentOutdentCommand::splitTextNodes.
        * editing/ApplyBlockElementCommand.h: Added.
        * editing/EditingAllInOne.cpp:
        * editing/EditorCommand.cpp:
        (WebCore::executeFormatBlock):
        * editing/FormatBlockCommand.cpp: Removed doApply.
        (WebCore::FormatBlockCommand::FormatBlockCommand): Calls ApplyBlockElementCommand's constructor.
        (WebCore::FormatBlockCommand::formatParagraph): Renamed from doApplyForSingleParagraph.
        * editing/FormatBlockCommand.h: FormatBlockCommand inherits from ApplyBlockElementCommand.
        (WebCore::FormatBlockCommand::create): Uses QualifiedName for the tag name instead of AtomicString.
        * editing/IndentOutdentCommand.cpp: Removed doApply, indentIntoBlockquote, and splitTextNodes.
        (WebCore::IndentOutdentCommand::IndentOutdentCommand): Calls ApplyBlockElementCommand's constructor.
        (WebCore::IndentOutdentCommand::indentIntoBlockquote): The code to nullify targetBlockquote
        when the next paragraph is in a different table cell is moved to ApplyBlockElementCommand::formatSelection.
        (WebCore::IndentOutdentCommand::formatSelection): Added. Calls outdentRegion when outdenting.
        (WebCore::IndentOutdentCommand::formatParagraph): Added. Calls tryIndentingAsListItem and indentIntoBlockquote.
        * editing/IndentOutdentCommand.h: IndentOutdentCommand inherits from ApplyBlockElementCommand.

2010-10-01  Mark Rowe  <mrowe@apple.com>

        Build fix.

        Clear the executable bit from a number of source files.

        * page/Frame.cpp:
        * platform/graphics/win/MediaPlayerPrivateFullscreenWindow.cpp:
        * platform/graphics/win/WKCACFLayerRenderer.cpp:
        * platform/graphics/win/WKCACFLayerRenderer.h:
        * platform/network/ResourceRawHeaders.h:
        * rendering/RenderLayerCompositor.cpp:
        * rendering/RenderLayerCompositor.h:

2010-10-01  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Adam Barth.

        [GTK] r68923 broke some plugin tests
        https://bugs.webkit.org/show_bug.cgi?id=47040

        No longer pass focus and blur events to plugins when the "old" DOM Level
        2 DOMFocusIn/DOMFocusOut events occur. r68923 made a change which means
        that the DOM Level 3 version is always fired for this event. 

        No new tests, as this should cause the failing tests to pass.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::handleEvent): No longer pass focus and blur events to
        plugins when DOMFocusIn / DOMFocusOut events occur.

2010-10-01  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Plug-ins should have access to the private browsing state.
        https://bugs.webkit.org/show_bug.cgi?id=47031
        <rdar://problem/8505405>

        * page/Page.cpp:
        (WebCore::Page::privateBrowsingStateChanged):
        When iterating over all widgets, also look for PluginViewBase classes and invoke their 
        privateBrowsingStateChange member function.

        * plugins/PluginViewBase.h:
        (WebCore::PluginViewBase::privateBrowsingStateChanged):
        Add function.

2010-10-01  Brian Weinstein  <bweinstein@apple.com>

        Build Fix for Windows.

        * WebCore.vcproj/WebCore.vcproj: Don't have an empty post-build step, use
            WebCoreCommon.vsprops to handle post-build step.
        * WebCore.vcproj/WebCoreCommon.vsprops: Set the post-build step to delete 
             $(WebKitOutputDir)/buildfailed.

2010-10-01  Ragner Magalhaes  <ragner.magalhaes@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Segmentation fault during zoom out
        https://bugs.webkit.org/show_bug.cgi?id=46984

        * platform/qt/QtMobileWebStyle.cpp:
        (QtMobileWebStyle::drawChecker): Adjust checkerSize to be greater than or equals to middle.

2010-10-01  Anders Carlsson  <andersca@apple.com>

        Another Qt build fix attempt.

        * WebCore.pro:

2010-10-01  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=47021
        
        Patch the floatBottom function and its friends.  Rename them and consolidate them to be block-flow-aware.

        Nothing testable yet, since most of the float code is still unpatched.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::layoutBlockChildren):
        (WebCore::RenderBlock::layoutBlockChild):
        (WebCore::RenderBlock::positionNewFloats):
        (WebCore::RenderBlock::newLine):
        (WebCore::RenderBlock::nextFloatLogicalBottomBelow):
        (WebCore::RenderBlock::lowestFloatLogicalBottom):
        (WebCore::RenderBlock::clearFloats):
        (WebCore::RenderBlock::addOverhangingFloats):
        (WebCore::RenderBlock::getClearDelta):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::logicalBottomForFloat):
        (WebCore::RenderBlock::hasOverhangingFloats):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::fitBelowFloats):

2010-10-01  Anders Carlsson  <andersca@apple.com>

        Fix typo.

        * platform/network/qt/ProxyServerQt.cpp:
        (WebCore::proxyServersForURL):

2010-10-01  Anders Carlsson  <andersca@apple.com>

        Add Qt ProxyServer stub.

        * WebCore.pro:
        * platform/network/qt/ProxyServerQt.cpp: Added.
        (WebCore::proxyServersForURL):

2010-10-01  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Add proxy server query function proxyServersForURL and change the Mac plug-in code to use it
        https://bugs.webkit.org/show_bug.cgi?id=47022
        <rdar://problem/8504712>

        * WebCore.exp.in:
        Export proxyServersForURL and toString.

        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        Add new files.

        * platform/network/ProxyServer.cpp: Added.
        (WebCore::appendProxyServerString):
        (WebCore::toString):
        New function that converts a vector of ProxyServers into a PAC style string.

        * platform/network/ProxyServer.h: Added.
        (WebCore::ProxyServer::ProxyServer):
        (WebCore::ProxyServer::type):
        (WebCore::ProxyServer::hostName):
        (WebCore::ProxyServer::port):
        Add ProxyServer class.

        * platform/network/cf/ProxyServerCFNet.cpp: Added.
        (WebCore::proxyServersForURL):
        (WebCore::addProxyServersForURL):
        Query CFNetwork for the proxy servers given a URL.

2010-09-30  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        texImage2D fails on 16-bit-per-channel images
        https://bugs.webkit.org/show_bug.cgi?id=46947

        * platform/graphics/GraphicsContext3D.cpp: Handling 16-bit-per-channel source formats.
        (WebCore::convertColor16To8):
        (WebCore::doPacking):
        * platform/graphics/GraphicsContext3D.h: Ditto.
        * platform/graphics/cg/GraphicsContext3DCG.cpp: Ditto.
        (WebCore::GraphicsContext3D::getImageData):

2010-10-01  Eric Uhrhane  <ericu@chromium.org>

        Reviewed by Nate Chapin.

        Add v8 binding helpers to make FileWriter be an EventTarget.
        https://bugs.webkit.org/show_bug.cgi?id=46910

        No new tests; still waiting for the first complete implementation.

        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::convertEventTargetToV8Object):

2010-10-01  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=47015
        
        Change FloatingObject to store its dimensions as a rect.
        This will make it easier for logical access for block-flow later on if
        top/bottom is no different from left/width.  This change also simplifies
        calling code a bit in places.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addOverflowFromFloats):
        (WebCore::RenderBlock::repaintOverhangingFloats):
        (WebCore::RenderBlock::paintFloats):
        (WebCore::RenderBlock::fillSelectionGaps):
        (WebCore::RenderBlock::insertFloatingObject):
        (WebCore::RenderBlock::removeFloatingObject):
        (WebCore::RenderBlock::removeFloatingObjectsBelow):
        (WebCore::RenderBlock::positionNewFloats):
        (WebCore::RenderBlock::positionNewFloatOnLine):
        (WebCore::RenderBlock::logicalLeftOffsetForLine):
        (WebCore::RenderBlock::logicalRightOffsetForLine):
        (WebCore::RenderBlock::nextFloatBottomBelow):
        (WebCore::RenderBlock::floatBottom):
        (WebCore::RenderBlock::lowestPosition):
        (WebCore::RenderBlock::rightmostPosition):
        (WebCore::RenderBlock::leftmostPosition):
        (WebCore::RenderBlock::leftBottom):
        (WebCore::RenderBlock::rightBottom):
        (WebCore::RenderBlock::clearFloats):
        (WebCore::RenderBlock::addOverhangingFloats):
        (WebCore::RenderBlock::addIntrudingFloats):
        (WebCore::RenderBlock::hitTestFloats):
        (WebCore::RenderBlock::adjustForBorderFit):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::FloatingObject::FloatingObject):
        (WebCore::RenderBlock::FloatingObject::left):
        (WebCore::RenderBlock::FloatingObject::right):
        (WebCore::RenderBlock::FloatingObject::top):
        (WebCore::RenderBlock::FloatingObject::bottom):
        (WebCore::RenderBlock::FloatingObject::width):
        (WebCore::RenderBlock::FloatingObject::height):
        (WebCore::RenderBlock::FloatingObject::setLeft):
        (WebCore::RenderBlock::FloatingObject::setTop):
        (WebCore::RenderBlock::FloatingObject::setWidth):
        (WebCore::RenderBlock::FloatingObject::setHeight):
        (WebCore::RenderBlock::FloatingObject::frameRect):
        (WebCore::RenderBlock::FloatingObject::setFrameRect):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutInlineChildren):
        (WebCore::RenderBlock::matchedEndLine):

2010-10-01  Enrica Casucci  <enrica@apple.com>

        Reviewed by Darin Adler.

        DOMFocusIn/DOMFocusOut return focusin/focusout Event.type
        https://bugs.webkit.org/show_bug.cgi?id=42580
        <rdar://problem/8107311>
        
        This change removes the aliased type machinery from the Event class.
        We now fire the event with the new name and the oldname.
        
        Tests: Modified fast/events/focusinout.html to check the event
        type.

        * dom/Document.cpp:
        (WebCore::Document::setFocusedNode):
        * dom/Event.cpp: Removed aliasedType and hasAliasedType.
        * dom/Event.h: Removed aliasedType and hasAliasedType.
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::fireEventListeners): Removed aliasedType related code.

2010-10-01  David Hyatt  <hyatt@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=46642, make replaced elements work with block-flow.  This patch changes
        all of the computeReplacedLogicalWidth and comuteReplacedLogicalHeight functions (and their helpers) to use logical width
        and logical height instead.

        Added fast/blockflow/block-level-images.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeLogicalWidth):
        (WebCore::RenderBox::computeLogicalHeight):
        (WebCore::RenderBox::computeReplacedLogicalWidth):
        (WebCore::RenderBox::computeReplacedLogicalWidthUsing):
        (WebCore::RenderBox::computeReplacedLogicalHeight):
        (WebCore::RenderBox::computeReplacedLogicalHeightUsing):
        (WebCore::RenderBox::computePositionedLogicalWidthReplaced):
        (WebCore::RenderBox::computePositionedLogicalHeightReplaced):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::intrinsicLogicalWidth):
        (WebCore::RenderBox::intrinsicLogicalHeight):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::isLogicalWidthSpecified):
        (WebCore::RenderImage::isLogicalHeightSpecified):
        (WebCore::RenderImage::computeReplacedLogicalWidth):
        (WebCore::RenderImage::computeReplacedLogicalHeight):
        (WebCore::RenderImage::calcAspectRatioLogicalWidth):
        (WebCore::RenderImage::calcAspectRatioLogicalHeight):
        * rendering/RenderImage.h:
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::layout):
        (WebCore::RenderReplaced::computeReplacedLogicalWidth):
        (WebCore::RenderReplaced::computeReplacedLogicalHeight):
        (WebCore::RenderReplaced::calcAspectRatioLogicalWidth):
        (WebCore::RenderReplaced::calcAspectRatioLogicalHeight):
        (WebCore::RenderReplaced::computePreferredLogicalWidths):
        * rendering/RenderReplaced.h:
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::computePreferredLogicalWidths):
        (WebCore::RenderSVGRoot::computeReplacedLogicalWidth):
        (WebCore::RenderSVGRoot::computeReplacedLogicalHeight):
        * rendering/RenderSVGRoot.h:
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::computeReplacedLogicalWidth):
        (WebCore::RenderVideo::computeReplacedLogicalHeight):
        * rendering/RenderVideo.h:

2010-10-01  Nate Chapin  <japhet@chromium.org>

        Reviewed by Darin Adler.

        Remove unused Request::buffer() and Request::m_buffer.

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

        * loader/Request.h:

2010-10-01  Dan Bernstein  <mitz@apple.com>

        Reviewed by Adele Peterson.

        <rdar://problem/7563219> Null dereference when dragging an element with generated content
        https://bugs.webkit.org/show_bug.cgi?id=47005

        Test: fast/css-generated-content/drag-state.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::updateDragState): Null-check node().

2010-10-01  Robert Hogan  <robert@webkit.org>

        Reviewed by Adam Barth.

        [Qt] Fix http/tests/loading/redirect-methods.html

        Document our redirection behaviour too.

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

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

2010-10-01  Adam Roben  <aroben@apple.com>

        Copy forwarding headers and Inspector JS files as part of
        WebCoreGenerated.vcproj

        WebCoreGenerated.vcproj runs on every build, while WebCore.vcproj only
        runs when a .h or .cpp file changes. By moving the copying to
        WebCoreGenerated, it will happen even when someone only changes a JS
        file (as happened in r68887).

        Fixes <http://webkit.org/b/46988> <rdar://problem/8502489> REGRESSION
        (r68887): Web Inspector: inspector/extensions*.html are failing on
        Windows

        Reviewed by Anders Carlsson.

        * WebCore.vcproj/WebCore.vcproj: Moved invocation of
        copyForwardingHeaders and copyInspectorFiles from here...
        * WebCore.vcproj/WebCoreGenerated.vcproj: ...to here.

2010-09-30  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        Implement queryCommandState('justifyFull')
        https://bugs.webkit.org/show_bug.cgi?id=46954

        Implemented queryCommandState('justifyFull').
        New tests are added to editing/style/inline-style-container.html

        * editing/ApplyStyleCommand.cpp:
        (WebCore::getTextAlignment): Added support for CSSValueJustify.
        * editing/EditorCommand.cpp:
        (WebCore::stateJustifyFull): Added.
        (WebCore::createCommandMap): Added stateJustifyFull.

2010-10-01  Jia Pu  <jpu@apple.com>

        Reviewed by Darin Adler.

        Autocorrection shouldn't prompt the same correction after user has edited previous correction.
        https://bugs.webkit.org/show_bug.cgi?id=46839
        <rdar://problem/8476963>

        * editing/Editor.cpp:
        (WebCore::Editor::respondToChangedSelection): Remove "CorrectionIndicator" marker instead of
          "Replacement" marker. Since the former controls whether we draw autocorrection underline,
          and the latter is used to prevent autocorrection from being applied again on already auto-
          corrected word. So the "Replacement" shouldn't be removed.

2010-10-01  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Anders Carlsson.

        [CMake] Add handling for ENABLE(NETSCAPE_PLUGIN_API)
        https://bugs.webkit.org/show_bug.cgi?id=46309

        * CMakeLists.txt:
        * CMakeListsEfl.txt:

2010-10-01  David Hyatt  <hyatt@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=46996, patch the functions dealing with the bottom of the block to
        be block-flow-aware.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::setCollapsedBottomMargin):
        (WebCore::RenderBlock::handleAfterSideOfBlock):

2010-10-01  Pratik Solanki  <psolanki@apple.com>

        Reviewed by Geoffrey Garen.
        Specify ALWAYS_INLINE at function declaration not function definition
        https://bugs.webkit.org/show_bug.cgi?id=46960

        For functions defined with ALWAYS_INLINE, add the attribute to the declaration as well.

        * css/CSSStyleSelector.h:
        * rendering/InlineIterator.h:
        * rendering/style/RenderStyle.h:

2010-10-01  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=46995, make direction propagate up to the viewport from the root element.

        Added fast/css/rtl-to-viewport.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::styleForDocument):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleDidChange):

2010-10-01  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=44406
        <rdar://problem/8310921> Application Cache crash when a fallback document has a manifest URL

        Test: http/tests/appcache/foreign-fallback.html

        * loader/appcache/ApplicationCacheGroup.cpp: (WebCore::ApplicationCacheGroup::selectCache):
        Changed ApplicationCacheResource lookup to find fallback resources correctly.

2010-10-01  Kwang Yul Seo  <skyul@company100.net>

        Unreviewed, Brew MP build fix.

        * platform/brew/ClipboardBrew.cpp:
        (WebCore::ClipboardBrew::ClipboardBrew):

2010-10-01  Rafael Antognolli  <antognolli@profusion.mobi>

        Unreviewed build fix.

        [CMAKE] Build fix for r68878
        https://bugs.webkit.org/show_bug.cgi?id=46985

        Fix name of files added to CMakeLists.txt:
        SVGTextLayoutBaseline.cpp -> SVGTextLayoutEngineBaseline.cpp
        SVGTextLayoutSpacing.cpp -> SVGTextLayoutEngineSpacing.cpp

        No features added, so no new tests.

        * CMakeLists.txt:

2010-10-01  Ragner Magalhaes  <ragner.magalhaes@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] New buttons style for Qt Mobile theme
        https://bugs.webkit.org/show_bug.cgi?id=46920

        Rename Maemo5Webstyle to QtMobileWebStyle since it implements the style for all Qt mobile platform.
        Adjust new Qt mobile style for buttons, radios, checks and combos.

        * WebCore.pro:
        * css/themeQtMobile.css: Adjust gradient color for buttons and combos.
        (select):
        (select:active):
        * platform/qt/QtMobileWebStyle.cpp: Renamed from platform/qt/Maemo5Webstyle.cpp to match name scheme.
        (QtMobileWebStyle::QtMobileWebStyle):
        (drawRectangularControlBackground):
        (QtMobileWebStyle::drawChecker):
        (QtMobileWebStyle::findChecker):
        (QtMobileWebStyle::drawRadio): Adjust gradient color for RadioButton.
        (QtMobileWebStyle::findRadio):
        (QtMobileWebStyle::drawControl): Adjust gradient color for CheckBox.
        (QtMobileWebStyle::drawMultipleComboButton):
        (QtMobileWebStyle::drawSimpleComboButton): Adjust ComboBox arrow.
        (QtMobileWebStyle::getButtonImageSize):
        (QtMobileWebStyle::findComboButton):
        (QtMobileWebStyle::drawComplexControl):
        * platform/qt/QtMobileWebStyle.h: Renamed from platform/qt/Maemo5Webstyle.h to match name scheme.
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::RenderThemeQt):

2010-10-01  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [Extensions API] expose page load events timings
        Added webInspector.resources.getPageTimings()
        
        https://bugs.webkit.org/show_bug.cgi?id=45954

        * inspector/front-end/ExtensionAPI.js:
        (WebInspector.injectedExtensionAPI.Resources.prototype):
        (WebInspector.injectedExtensionAPI.Resources.prototype.getPageTimings):
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer):
        (WebInspector.ExtensionServer.prototype._onGetPageTimings):
        * inspector/front-end/HAREntry.js: Return page event timings as -1 if start or event time unknown.
        (WebInspector.HARLog.prototype._buildPages):
        (WebInspector.HARLog.prototype.buildMainResourceTimings):
        (WebInspector.HARLog.prototype._convertResource):
        (WebInspector.HARLog.prototype._pageEventTime):

2010-10-01  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Roben.

        [WIN] Add GDIExtras
        https://bugs.webkit.org/show_bug.cgi?id=46974

        Some, but not all WinCE environments have support for AlphaBlend().
        Add this files to check for AlphaBlend (and SoftLink) on WinCE.
        On WinNT alphaBlendIfSupported() inlines AlphaBlend and returns true.

        * platform/graphics/win/GDIExtras.cpp: Added.
        (WebCore::AlphaBlendPointer):
        * platform/graphics/win/GDIExtras.h: Added.
        (WebCore::hasAlphaBlendSupport):
        (WebCore::alphaBlendIfSupported):

2010-10-01  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Roben.

        [WINCE] Use alphaBlendIfSupported in GraphicsContext
        https://bugs.webkit.org/show_bug.cgi?id=46979

        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        (WebCore::GraphicsContextPlatformPrivate::paintBackTransparentLayerBitmap):

2010-10-01  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Add two new helper files for the new SVGTextLayoutEngine
        https://bugs.webkit.org/show_bug.cgi?id=46972

        Refactor code from SVGTextLayoutUtilities into two seperated classes.
        SVGTextLayoutUtilities will be removed, as soon as the main clss SVGTextLayoutEngine lands and gets used.

        Doesn't affect any functionality yet, as the new classes are not used so far.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/svg/SVGTextFragment.h:
        * rendering/svg/SVGTextLayoutEngineBaseline.cpp: Added.
        (WebCore::SVGTextLayoutEngineBaseline::SVGTextLayoutEngineBaseline):
        (WebCore::SVGTextLayoutEngineBaseline::calculateBaselineShift):
        (WebCore::SVGTextLayoutEngineBaseline::dominantBaselineToAlignmentBaseline):
        (WebCore::SVGTextLayoutEngineBaseline::calculateAlignmentBaselineShift):
        (WebCore::SVGTextLayoutEngineBaseline::calculateGlyphOrientationAngle):
        (WebCore::glyphOrientationIsMultiplyOf180Degrees):
        (WebCore::SVGTextLayoutEngineBaseline::calculateGlyphAdvanceAndOrientation):
        * rendering/svg/SVGTextLayoutEngineBaseline.h: Added.
        * rendering/svg/SVGTextLayoutEngineSpacing.cpp: Added.
        (WebCore::SVGTextLayoutEngineSpacing::SVGTextLayoutEngineSpacing):
        (WebCore::SVGTextLayoutEngineSpacing::calculateSVGKerning):
        (WebCore::SVGTextLayoutEngineSpacing::calculateCSSKerningAndSpacing):
        * rendering/svg/SVGTextLayoutEngineSpacing.h: Added.

2010-10-01  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Andreas Kling.

        Rename SVGTextLayoutBuilder to SVGTextLayoutAttributesBuilder
        https://bugs.webkit.org/show_bug.cgi?id=46971

        Doesn't affect any functionality, just moves files around.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/svg/RenderSVGText.cpp:
        (WebCore::RenderSVGText::layout): Adopt to renaming.
        * rendering/svg/SVGTextLayoutAttributesBuilder.cpp: Copied from rendering/svg/SVGTextLayoutBuilder.cpp.
        * rendering/svg/SVGTextLayoutAttributesBuilder.h: Copied from rendering/svg/SVGTextLayoutBuilder.h.
        * rendering/svg/SVGTextLayoutBuilder.cpp: Removed.
        * rendering/svg/SVGTextLayoutBuilder.h: Removed.

2010-10-01  MORITA Hajime  <morrita@google.com>

        Unreviewed build fix.

        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::PlatformContextSkia):

2010-10-01  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Andreas Kling.

        Move SVG text related renderers into rendering/svg/
        https://bugs.webkit.org/show_bug.cgi?id=46969

        Doesn't affect any functionality, just moves files around.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderSVGAllInOne.cpp:
        * rendering/RenderSVGInline.cpp: Removed.
        * rendering/RenderSVGInline.h: Removed.
        * rendering/RenderSVGInlineText.cpp: Removed.
        * rendering/RenderSVGInlineText.h: Removed.
        * rendering/RenderSVGTSpan.cpp: Removed.
        * rendering/RenderSVGTSpan.h: Removed.
        * rendering/RenderSVGText.cpp: Removed.
        * rendering/RenderSVGText.h: Removed.
        * rendering/RenderSVGTextPath.cpp: Removed.
        * rendering/RenderSVGTextPath.h: Removed.
        * rendering/SVGInlineFlowBox.cpp: Removed.
        * rendering/SVGInlineFlowBox.h: Removed.
        * rendering/SVGInlineTextBox.cpp: Removed.
        * rendering/SVGInlineTextBox.h: Removed.
        * rendering/SVGRootInlineBox.cpp: Removed.
        * rendering/SVGRootInlineBox.h: Removed.
        * rendering/SVGTextQuery.cpp: Removed.
        * rendering/SVGTextQuery.h: Removed.
        * rendering/svg/RenderSVGInline.cpp: Copied from rendering/RenderSVGInline.cpp.
        * rendering/svg/RenderSVGInline.h: Copied from rendering/RenderSVGInline.h.
        * rendering/svg/RenderSVGInlineText.cpp: Copied from rendering/RenderSVGInlineText.cpp.
        * rendering/svg/RenderSVGInlineText.h: Copied from rendering/RenderSVGInlineText.h.
        * rendering/svg/RenderSVGTSpan.cpp: Copied from rendering/RenderSVGTSpan.cpp.
        * rendering/svg/RenderSVGTSpan.h: Copied from rendering/RenderSVGTSpan.h.
        * rendering/svg/RenderSVGText.cpp: Copied from rendering/RenderSVGText.cpp.
        * rendering/svg/RenderSVGText.h: Copied from rendering/RenderSVGText.h.
        * rendering/svg/RenderSVGTextPath.cpp: Copied from rendering/RenderSVGTextPath.cpp.
        * rendering/svg/RenderSVGTextPath.h: Copied from rendering/RenderSVGTextPath.h.
        * rendering/svg/SVGInlineFlowBox.cpp: Copied from rendering/SVGInlineFlowBox.cpp.
        * rendering/svg/SVGInlineFlowBox.h: Copied from rendering/SVGInlineFlowBox.h.
        * rendering/svg/SVGInlineTextBox.cpp: Copied from rendering/SVGInlineTextBox.cpp.
        * rendering/svg/SVGInlineTextBox.h: Copied from rendering/SVGInlineTextBox.h.
        * rendering/svg/SVGRootInlineBox.cpp: Copied from rendering/SVGRootInlineBox.cpp.
        * rendering/svg/SVGRootInlineBox.h: Copied from rendering/SVGRootInlineBox.h.
        * rendering/svg/SVGTextQuery.cpp: Copied from rendering/SVGTextQuery.cpp.
        * rendering/svg/SVGTextQuery.h: Copied from rendering/SVGTextQuery.h.

2010-10-01  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Add SVGTextMetrics/SVGTextFragment/SVGTextChunk primitives used by the new layout engine
        https://bugs.webkit.org/show_bug.cgi?id=46964

        The new SVG text layout engine will use these new classes.
        1) SVGTextMetrics is used to measure either single glyphs (which may span multiple characters, when ligatures are defined) or a range of characters.
           
           -> In "single glyph" mode, it returns the width/height of the glyph, the length of the glyph (> 1, when ligatures are used) and a "Glyph" object
              describing the glyph (name of glyph, when used together with SVG Fonts and the unicode string the glyph describes).
           -> In "range of characters" mode, it returns the width/height of the range, and its length.

           All measurements are done using the regular Font::floatWidth() methods, this class just encapsulates its usage for the SVG text layout engine.

        2) SVGTextFragment describes a fragment of text, living in a SVGInlineTextBox, which can be measured/rendered in one shot.
           It contains all necessary information to render the fragment (x/y/width/height, offset into characters() buffer for the first char of the fragment,
           length, and an arbitary transformation, holding information about rotations/scale/glyph-orientation etc.)

           In future the SVGTextLayoutEngine will generate SVGTextFragment objects for each SVGInlineTextBox. When painting no more measurements have to
           be performed as SVGTextFragment contains all necessary information to render text / select text etc.

        3) SVGTextChunk describes a SVG text chunk, which may span multiple text boxes (and in turn text fragments).

           Quotes from SVG spec:
           Each absolute position adjustment defines a new "text chunk". Absolute position adjustments impact text layout in the following ways:
            * Ligatures only occur when a set of characters which might map to a ligature are all in the same text chunk.
            * Each text chunk represents a separate block of text for alignment due to "text-anchor" property values.
            * Reordering of characters due to bidirectionality only occurs within a text chunk. Reordering does not happen across text chunks.

            An absolute position adjustment occurs in the following circumstances:
            * At the start of a <text> element
            * At the start of each <textPath> element
            * For each character within a <text>, <tspan>, <tref> and <altGlyph> element which has an "x" or "y" attribute value assigned to it explicitly

            After the line-layout finishes, each "text chunk" is altered according to the textLength and text-anchor processing rules
            (eg. for text-anchor="middle" moving the whole text chunk by -fragmentWidth/2, for horizontal text).

            SVGTextChunk is just a simple helper class, that encapsulates measuring/altering a text chunk.

        Doesn't affect any tests, as these classes aren't used so far.

        * Android.mk: Add SVGTextMetrics.*, SVGTextFragment.h, SVGTextChunk.* to build.
        * CMakeLists.txt: Ditto.
        * GNUmakefile.am: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * rendering/svg/SVGTextChunk.cpp: Added.
        * rendering/svg/SVGTextChunk.h: Added.
        * rendering/svg/SVGTextFragment.h: Added.
        * rendering/svg/SVGTextMetrics.cpp: Added.
        * rendering/svg/SVGTextMetrics.h: Added.

2010-10-01  Vincent Scheib  <scheib@chromium.org>

        Reviewed by James Robinson.

        REGRESSION: Lots of fast canvas updates fail to completely render
        https://bugs.webkit.org/show_bug.cgi?id=46319

        Test: fast/repaint/canvas-putImageData.html

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

2010-10-01  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Add helper methods to cast between renderers & SVGTextContent/PositioningElement
        https://bugs.webkit.org/show_bug.cgi?id=46963

        Doesn't affect any tests.

        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::elementFromRenderer):
        * svg/SVGTextContentElement.h:
        * svg/SVGTextPositioningElement.cpp:
        (WebCore::SVGTextPositioningElement::elementFromRenderer):
        * svg/SVGTextPositioningElement.h:

2010-09-30  MORITA Hajime  <morrita@google.com>

        Reviewed by James Robinson.

        [Chromium] build fails unless ACCELERATED_2D_CANVAS defined
        https://bugs.webkit.org/show_bug.cgi?id=46955
        
        Added ifdef guard around SharedGraphicsContext3D.

        No new tests. just a build fix.

        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::~PlatformContextSkia):
        (WebCore::PlatformContextSkia::setSharedGraphicsContext3D):
        (WebCore::PlatformContextSkia::uploadSoftwareToHardware):
        (WebCore::PlatformContextSkia::readbackHardwareToSoftware):
        * platform/graphics/skia/PlatformContextSkia.h:
        (WebCore::PlatformContextSkia::gpuCanvas):

2010-09-30  Kent Tamura  <tkent@chromium.org>

        Reviewed by Chris Fleizach.

        [Windows] Implement <input type=number> UI
        https://bugs.webkit.org/show_bug.cgi?id=38381

        Implement theme drawing for inner-spin-button.
        No new tests. Existing tests for type=number will cover this change.

        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::RenderThemeWin):
         Handle m_spinButtonTheme.
        (WebCore::RenderThemeWin::spinButtonTheme): ditto.
        (WebCore::RenderThemeWin::close): ditto.
        (WebCore::RenderThemeWin::determineClassicState):
         Add ControlSubPart parameter, and add support for InnerSpinButtonPart.
        (WebCore::RenderThemeWin::determineSpinButtonState): Added.
        (WebCore::RenderThemeWin::getClassicThemeData):
         Add ControlSubPart parameter, and handle InnerSpinButtonPart.
        (WebCore::RenderThemeWin::getThemeData): ditto.
        (WebCore::RenderThemeWin::adjustInnerSpinButtonStyle):
         Set SM_CXVSCROLL value to the width.
        (WebCore::RenderThemeWin::paintInnerSpinButton):
         Call drawControl() for the upper part and the lower part.
        * rendering/RenderThemeWin.h:

2010-09-30  Kent Tamura  <tkent@chromium.org>

        Unreviewed, Windows build fix for r68854

        * WebCore.vcproj/copyForwardingHeaders.cmd:
          Copy WebCore/html/parser/*.h.

2010-09-30  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Dan Bernstein.

        While updating :before and :after content, make sure that the generated
        container is allowed to add the child type.
        https://bugs.webkit.org/show_bug.cgi?id=46106

        Test: fast/css-generated-content/text-before-table-col-crash.html

        * rendering/RenderObjectChildList.cpp:
        (WebCore::RenderObjectChildList::updateBeforeAfterContent):

2010-09-30  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Daniel Bates.

        [GTK] Crash on testatk.c unittest because of a call to ASSERT_NOT_REACHED
        https://bugs.webkit.org/show_bug.cgi?id=46886

        Removed call to ASSERT_NOT_REACHED() from listMarkerSuffix().

        So far, this assertion made sense because it was not possible that
        a call to listMarkerSuffix() happened when the style of the list
        item was one of the following: Asterisks, Circle, Discm Footnotes,
        NoneListStyle or Square (it's easy to figure this out by checking
        the functions where listMarkerSuffix() was called).

        However, since revision 68415 (about bug 45381), there's a new
        place where listMarkerSuffix() is being called (the suffix()
        public method), regardless of the style of the item being or not
        one of those pointed out, so the aforementioned assertion in
        listMarkerSuffix() would no longer be correct, as now it's ok to
        reach those cases in the switch statement.

        * rendering/RenderListMarker.cpp:
        (WebCore::listMarkerSuffix): Removed call to ASSERT_NOT_REACHED().

2010-09-30  Beth Dakin  <bdakin@apple.com>

        Reviewed by Adele Peterson.

        https://bugs.webkit.org/show_bug.cgi?id=46948 Crash with all-
        whitespace separators for mfenced

        Check the size of characters instead of separators in case all the 
        separators were whitespace.

        * mathml/RenderMathMLFenced.cpp:
        (WebCore::RenderMathMLFenced::updateFromElement):

2010-09-30  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Remove remaining calls to deprecatedParseURL
        https://bugs.webkit.org/show_bug.cgi?id=26599

        Test: fast/replaced/object-param-spaces.html

        * css/CSSHelper.cpp: Removed.
        * css/CSSHelper.h: Removed deprecatedParseURL.

        * html/parser/HTMLParserIdioms.cpp:
        (WebCore::stripLeadingAndTrailingHTMLSpaces):
        Fixed bug where the function would turn the null string into the empty string.
        Fixed bug where the function would not strip all trailing spaces.

        * html/parser/CSSPreloadScanner.cpp:
        (WebCore::CSSPreloadScanner::CSSPreloadScanner): Initialize m_state
        instead of calling the reset function.
        (WebCore::CSSPreloadScanner::scan): Tweaked coding style.
        (WebCore::CSSPreloadScanner::tokenize): Use isHTMLSpace instead of
        an identical local function named isWhitespace.
        (WebCore::parseCSSStringOrURL): Added. This function does what
        deprecatedParseURL did before, and this is the only place in WebKit
        that needs it. The code implements the rules for a string or URL
        token. The real CSS parser does this with flex and the code to hook
        flex up to yacc, so the function is not needed there.
        (WebCore::CSSPreloadScanner::emitRule): Streamlined the code a bit
        and mae it call parseCSSStringOrURL.

        * bindings/generic/BindingSecurity.h:
        (WebCore::::allowSettingFrameSrcToJavascriptUrl):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::allowSettingSrcToJavascriptURL):
        * bindings/js/JSHTMLFrameElementCustom.cpp:
        (WebCore::allowSettingJavascriptURL):
        * bindings/objc/DOM.mm:
        (-[DOMElement _getURLAttribute:]):
        * bindings/objc/DOMHTML.mm:
        (-[DOMHTMLDocument _createDocumentFragmentWithMarkupString:baseURLString:]):
        * dom/Document.cpp:
        (WebCore::Document::processBaseElement):
        * dom/Element.cpp:
        (WebCore::isAttributeToRemove):
        (WebCore::Element::getURLAttribute):
        (WebCore::Element::getNonEmptyURLAttribute):
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::defaultEventHandler):
        (WebCore::HTMLAnchorElement::parseMappedAttribute):
        (WebCore::HTMLAnchorElement::href):
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::parseMappedAttribute):
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::parseMappedAttribute):
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::parseMappedAttribute):
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::parseMappedAttribute):
        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::sourceURI):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::parseMappedAttribute):
        * html/HTMLMediaElement.cpp:
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::parseMappedAttribute):
        (WebCore::HTMLObjectElement::parametersForPlugin):
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::parseMappedAttribute):
        * html/HTMLTablePartElement.cpp:
        (WebCore::HTMLTablePartElement::parseMappedAttribute):
        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::HTMLNames::PreloadTask::setUrlToLoad):
        * loader/FormSubmission.cpp:
        (WebCore::FormSubmission::Attributes::parseAction):
        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::ClipboardChromium::declareAndWriteDragImage):
        * platform/chromium/PasteboardChromium.cpp:
        (WebCore::Pasteboard::writeImage):
        * platform/qt/ClipboardQt.cpp:
        (WebCore::ClipboardQt::declareAndWriteDragImage):
        * platform/win/ClipboardWin.cpp:
        (WebCore::ClipboardWin::declareAndWriteDragImage):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::absoluteImageURL):
        (WebCore::HitTestResult::absoluteMediaURL):
        (WebCore::HitTestResult::absoluteLinkURL):
        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::defaultEventHandler):
        * svg/SVGImageLoader.cpp:
        (WebCore::SVGImageLoader::sourceURI):
        * wml/WMLAElement.cpp:
        (WebCore::WMLAElement::defaultEventHandler):
        * wml/WMLImageLoader.cpp:
        (WebCore::WMLImageLoader::sourceURI):
        Call stripLeadingAndTrailingHTMLSpaces instead of deprecatedParseURL.

        * WebCore.exp.in: Updated.

        * Android.mk: Removed CSSHelper.cpp.
        * CMakeLists.txt: Ditto.
        * GNUmakefile.am: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * bindings/js/JSAttrCustom.cpp:
        * bindings/js/JSElementCustom.cpp:
        * bindings/v8/custom/V8ElementCustom.cpp:
        * bindings/v8/custom/V8LocationCustom.cpp:
        * css/CSSParser.cpp:
        * html/HTMLMediaElement.cpp:
        * html/HTMLVideoElement.cpp:
        * loader/ImageLoader.cpp:
        * rendering/style/RenderStyle.h:
        Removed unneeded include of CSSHelper.h.

2010-09-30  Alexey Marinichev  <amarinichev@chromium.org>

        Reviewed by Chris Marrin.

        Add GetGraphicsResetStatusARB entry point from ARB_robustness
        extension to GraphicsContext3D
        https://bugs.webkit.org/show_bug.cgi?id=46850

        Added stubs for GraphicsContext3D::getGraphicsResetStatusARB for
        Mac and QT.

        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp:
        (WebCore::GraphicsContext3D::getGraphicsResetStatusARB):
        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3D::getGraphicsResetStatusARB):

2010-09-30  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=46938
        
        Rewrite margin collapsing to be block-flow-aware.  Eliminate a bunch of the margin functions on RenderBox in favor of a single
        master function for grabbing all the margin values for a child: marginValuesForChild on RenderBlock.  Introduce a new
        MarginValues struct to make returning the collection of 4 margin values easy.
    
        fast/blockflow/inline-direction-positioning.html progresses to have the correct results.
        Added fast/blockflow/margin-collapse.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::MarginInfo::MarginInfo):
        (WebCore::RenderBlock::adjustPositionedBlock):
        (WebCore::RenderBlock::collapseMargins):
        (WebCore::RenderBlock::clearFloatsIfNeeded):
        (WebCore::RenderBlock::setCollapsedBottomMargin):
        (WebCore::RenderBlock::layoutBlockChild):
        (WebCore::RenderBlock::setMaxMarginBeforeValues):
        (WebCore::RenderBlock::setMaxMarginAfterValues):
        (WebCore::RenderBlock::marginValuesForChild):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::MarginValues::MarginValues):
        (WebCore::RenderBlock::MarginValues::positiveMarginBefore):
        (WebCore::RenderBlock::MarginValues::negativeMarginBefore):
        (WebCore::RenderBlock::MarginValues::positiveMarginAfter):
        (WebCore::RenderBlock::MarginValues::negativeMarginAfter):
        (WebCore::RenderBlock::MarginValues::setPositiveMarginBefore):
        (WebCore::RenderBlock::MarginValues::setNegativeMarginBefore):
        (WebCore::RenderBlock::MarginValues::setPositiveMarginAfter):
        (WebCore::RenderBlock::MarginValues::setNegativeMarginAfter):
        (WebCore::RenderBlock::maxPositiveMarginBefore):
        (WebCore::RenderBlock::maxNegativeMarginBefore):
        (WebCore::RenderBlock::maxPositiveMarginAfter):
        (WebCore::RenderBlock::maxNegativeMarginAfter):
        (WebCore::RenderBlock::initMaxMarginValues):
        (WebCore::RenderBlock::collapsedMarginBefore):
        (WebCore::RenderBlock::collapsedMarginAfter):
        (WebCore::RenderBlock::MarginInfo::clearMargin):
        (WebCore::RenderBlock::MarginInfo::setPositiveMargin):
        (WebCore::RenderBlock::MarginInfo::setNegativeMargin):
        (WebCore::RenderBlock::MarginInfo::setPositiveMarginIfLarger):
        (WebCore::RenderBlock::MarginInfo::setNegativeMarginIfLarger):
        (WebCore::RenderBlock::MarginInfo::setMargin):
        (WebCore::RenderBlock::MarginInfo::positiveMargin):
        (WebCore::RenderBlock::MarginInfo::negativeMargin):
        (WebCore::RenderBlock::MarginInfo::margin):
        (WebCore::RenderBlock::RenderBlockRareData::RenderBlockRareData):
        (WebCore::RenderBlock::RenderBlockRareData::positiveMarginBeforeDefault):
        (WebCore::RenderBlock::RenderBlockRareData::negativeMarginBeforeDefault):
        (WebCore::RenderBlock::RenderBlockRareData::positiveMarginAfterDefault):
        (WebCore::RenderBlock::RenderBlockRareData::negativeMarginAfterDefault):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::collapsedMarginBefore):
        (WebCore::RenderBox::collapsedMarginAfter):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):

2010-09-30  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Roben.

        [WINCE] Fix InternetGetCookie in CookieJarWin.cpp
        https://bugs.webkit.org/show_bug.cgi?id=46929

        If the InternetGetCookie fails the output size won't be set.
        Set the default size to 0, so we always get the correct size
        and check the return value of InternetGetCookie.

        * platform/network/win/CookieJarWin.cpp:
        (WebCore::cookies):

2010-09-30  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Roben.

        [WINCE] Use OwnPtr for HBRUSH and HPEN in GraphicsContext
        https://bugs.webkit.org/show_bug.cgi?id=46881

        Also add some missing SelectObject calls.

        * platform/graphics/wince/GraphicsContextWinCE.cpp:
        (WebCore::createPen):
        (WebCore::createBrush):
        (WebCore::GraphicsContext::drawRect):
        (WebCore::GraphicsContext::drawLine):
        (WebCore::GraphicsContext::drawEllipse):
        (WebCore::GraphicsContext::strokeArc):
        (WebCore::GraphicsContext::drawConvexPolygon):
        (WebCore::GraphicsContext::strokeRect):
        (WebCore::GraphicsContext::fillRoundedRect):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):

2010-09-30  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein and Darin Adler.

        WebCore uses the main thread to process sleep notifications
        https://bugs.webkit.org/show_bug.cgi?id=46935
        <rdar://problem/8495374>

        Rewrite the old WebCorePowerNotifier to use IOKit directly. 
        
        On Snow Leopard, set up power notifications to arrive on a dispatch queue,
        so that we can handle them quickly even if the main thread is hung.

        (Tiger and Leopard will still get the old behavior).

        * WebCore.xcodeproj/project.pbxproj:
        Link with IOKit.

        * platform/mac/SharedTimerMac.mm:
        (WebCore::PowerObserver::PowerObserver):
        Initialize the IOKit machinery.

        (WebCore::PowerObserver::~PowerObserver):
        Tear down the IOKit notifications.

        (WebCore::PowerObserver::didReceiveSystemPowerNotification):
        Acknowledge the event immediately and then call the shared timer functions. On Snow Leopard, we
        make sure to call the shared timer functions on the main thread.
    
2010-09-30  James Simonsen  <simonjam@chromium.org>

        Reviewed by Adam Barth.

        [Web Timing] Make requestEnd equal to start of response
        https://bugs.webkit.org/show_bug.cgi?id=46302

        * page/Timing.cpp:
        (WebCore::Timing::requestEnd):

2010-09-30  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        fast/canvas/webgl/draw-elements-out-of-bounds.html is crashing on Snow Leopard
        https://bugs.webkit.org/show_bug.cgi?id=46870

        * platform/graphics/ANGLEWebKitBridge.cpp:
        (WebCore::ANGLEWebKitBridge::~ANGLEWebKitBridge): Remove ShFinalize().

2010-09-30  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Tony Chang.

        WebKit nests font element when applying different font styles
        https://bugs.webkit.org/show_bug.cgi?id=45568

        The bug was caused by fixRangeAndApplyInlineStyle's not including fully selected ancestors,
        and addInlineStyleIfNeeded's always surrounding the contents by new elements as supposed to
        adding font attributes or style attribute.

        Fixed the bug by extending the node range in fixRangeAndApplyInlineStyle and finding
        the appropriate container node to add attributes in addInlineStyleIfNeeded.
        addInlineStyleIfNeeded now tires to add font and style attributes to the inner most font and
        span elements respectively.

        Also added an early exit check to removeStyleFromRunBeforeApplyingStyle so that WebKit does not
        modify the contents when the entire contents already have the desired style.

        Test: editing/style/inline-style-container.html

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::fixRangeAndApplyInlineStyle):
        (WebCore::ApplyStyleCommand::removeStyleFromRunBeforeApplyingStyle):
        (WebCore::ApplyStyleCommand::removeInlineStyleFromElement):
        (WebCore::ApplyStyleCommand::addInlineStyleIfNeeded):

2010-09-30  Jarred Nicholls  <jarred@sencha.com>

        Reviewed by Darin Adler.

        Removed unnecessary calls to ceil() on an int
        Removing the call fixes MSVC build errors
        https://bugs.webkit.org/show_bug.cgi?id=46931

        * platform/graphics/ContextShadow.cpp:
        (WebCore::ContextShadow::calculateLayerBoundingRect):

2010-09-30  David Hyatt  <hyatt@apple.com>

        Reviewed by Beth Dakin.

        https://bugs.webkit.org/show_bug.cgi?id=46932
        
        Get fast/blockflow/root-lr-basic.html results to be correct by patching a few more
        height() calls to be logicalHeight().

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::collapseMargins):
        (WebCore::RenderBlock::handleAfterSideOfBlock):

2010-09-30  Cris Neckar  <cdn@chromium.org>

        Reviewed by Darin Adler.

        Added check to test for removed counter node when calling findPlaceForCounter() in updateCounters().
        Added refcounting to counternodes in countermaps.
        https://bugs.webkit.org/show_bug.cgi?id=46387

        Test: fast/css/counters/counter-traverse-table-cell.html

        * rendering/CounterNode.cpp:
        (WebCore::CounterNode::create):
        * rendering/CounterNode.h:
        * rendering/RenderCounter.cpp:
        (WebCore::makeCounterNode):
        (WebCore::destroyCounterNodeWithoutMapRemoval):
        (WebCore::RenderCounter::destroyCounterNodes):
        (WebCore::RenderCounter::destroyCounterNode):
        (WebCore::updateCounters):

2010-09-30  David Hyatt  <hyatt@apple.com>

        Reviewed by Beth Dakin.

        https://bugs.webkit.org/show_bug.cgi?id=46928
        
        Add isLeftToRightDirection() to RenderStyle and change callers that did direction() == LTR and direction() == RTL to use this instead.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::isLeftPage):
        (WebCore::CSSStyleSelector::applyProperty):
        * editing/Editor.cpp:
        (WebCore::Editor::hasBidiSelection):
        * editing/VisiblePosition.cpp:
        (WebCore::VisiblePosition::leftVisuallyDistinctCandidate):
        (WebCore::VisiblePosition::rightVisuallyDistinctCandidate):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawTextInternal):
        * rendering/InlineBox.h:
        (WebCore::InlineBox::isLeftToRightDirection):
        (WebCore::InlineBox::caretLeftmostOffset):
        (WebCore::InlineBox::caretRightmostOffset):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::determineSpacingForFlowBoxes):
        (WebCore::InlineFlowBox::placeBoxesInInlineDirection):
        (WebCore::InlineFlowBox::paintTextDecorations):
        * rendering/InlineIterator.h:
        (WebCore::InlineIterator::direction):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::selectionRect):
        (WebCore::InlineTextBox::placeEllipsisBox):
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::paintSelection):
        (WebCore::InlineTextBox::paintCompositionBackground):
        (WebCore::InlineTextBox::paintDecoration):
        (WebCore::InlineTextBox::paintSpellingOrGrammarMarker):
        (WebCore::InlineTextBox::paintTextMatchMarker):
        (WebCore::InlineTextBox::computeRectForReplacementMarker):
        (WebCore::InlineTextBox::textPos):
        (WebCore::InlineTextBox::offsetForPosition):
        (WebCore::InlineTextBox::positionForOffset):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::adjustPositionedBlock):
        (WebCore::RenderBlock::determineLogicalLeftPositionForChild):
        (WebCore::RenderBlock::paintColumnRules):
        (WebCore::RenderBlock::paintColumnContents):
        (WebCore::RenderBlock::getHorizontalSelectionGapInfo):
        (WebCore::RenderBlock::logicalLeftOffsetForLine):
        (WebCore::RenderBlock::logicalRightOffsetForLine):
        (WebCore::RenderBlock::rightmostPosition):
        (WebCore::RenderBlock::leftmostPosition):
        (WebCore::RenderBlock::columnRectAt):
        (WebCore::RenderBlock::layoutColumns):
        (WebCore::getBorderPaddingMargin):
        (WebCore::RenderBlock::localCaretRect):
        (WebCore::RenderBlock::marginStartForChild):
        (WebCore::RenderBlock::marginEndForChild):
        (WebCore::RenderBlock::setMarginStartForChild):
        (WebCore::RenderBlock::setMarginEndForChild):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::getBorderPaddingMargin):
        (WebCore::RenderBlock::constructLine):
        (WebCore::RenderBlock::computeInlineDirectionPositionsForLine):
        (WebCore::RenderBlock::determineStartPosition):
        (WebCore::RenderBlock::skipTrailingWhitespace):
        (WebCore::RenderBlock::skipLeadingWhitespace):
        (WebCore::RenderBlock::findNextLineBreak):
        (WebCore::RenderBlock::checkLinesForTextOverflow):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::marginStart):
        (WebCore::RenderBox::marginEnd):
        (WebCore::RenderBox::setMarginStart):
        (WebCore::RenderBox::setMarginEnd):
        (WebCore::RenderBox::scrollWidth):
        (WebCore::RenderBox::computeInlineDirectionMargins):
        (WebCore::RenderBox::containingBlockWidthForPositioned):
        (WebCore::RenderBox::computePositionedLogicalWidthUsing):
        (WebCore::RenderBox::computePositionedLogicalWidthReplaced):
        (WebCore::RenderBox::localCaretRect):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::relativePositionOffsetX):
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::layoutLegend):
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::paintObject):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::FlexBoxIterator::FlexBoxIterator):
        (WebCore::RenderFlexibleBox::layoutHorizontalBox):
        (WebCore::RenderFlexibleBox::layoutVerticalBox):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::computeScrollDimensions):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::paintItemForeground):
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::positionListMarker):
        (WebCore::RenderListItem::markerTextWithSuffix):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::paint):
        (WebCore::RenderListMarker::updateMargins):
        (WebCore::RenderListMarker::suffix):
        * rendering/RenderMarquee.cpp:
        (WebCore::RenderMarquee::computePosition):
        * rendering/RenderMeter.cpp:
        (WebCore::RenderMeter::valuePartRect):
        * rendering/RenderProgress.cpp:
        (WebCore::RenderProgress::valuePartRect):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::calcBorderLeft):
        (WebCore::RenderTable::calcBorderRight):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::clippedOverflowRectForRepaint):
        (WebCore::RenderTableCell::borderHalfLeft):
        (WebCore::RenderTableCell::borderHalfRight):
        (WebCore::RenderTableCell::collectBorderStyles):
        (WebCore::RenderTableCell::paintCollapsedBorder):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::layoutRows):
        (WebCore::RenderTableSection::recalcOuterBorder):
        (WebCore::RenderTableSection::paintObject):
        (WebCore::RenderTableSection::nodeAtPoint):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::localCaretRect):
        (WebCore::RenderText::positionLineBox):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::forwardEvent):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::levelIndicatorFor):
        (WebCore::RenderThemeMac::paintProgressBar):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeTextRun):
        * rendering/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::measureCharacter):
        (WebCore::SVGInlineTextBox::buildLayoutInformation):
        * rendering/SVGRenderTreeAsText.cpp:
        (WebCore::writeSVGInlineTextBox):
        * rendering/SVGTextLayoutUtilities.cpp:
        (WebCore::svgTextRunForInlineTextBox):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::borderStartWidth):
        (WebCore::RenderStyle::borderEndWidth):
        (WebCore::RenderStyle::marginStart):
        (WebCore::RenderStyle::marginEnd):
        (WebCore::RenderStyle::marginStartUsing):
        (WebCore::RenderStyle::marginEndUsing):
        (WebCore::RenderStyle::paddingStart):
        (WebCore::RenderStyle::paddingEnd):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::isLeftToRightDirection):
        * wml/WMLTableElement.cpp:
        (WebCore::WMLTableElement::alignCells):

2010-09-30  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=46923
        
        Make determineLogicalLeftPositionForChild block-flow-aware.  Rewrite the function so that there aren't
        completely separate LTR/RTL cases.

        Added fast/blockflow/inline-direction-positioning.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::determineLogicalLeftPositionForChild):
        (WebCore::RenderBlock::setLogicalLeftForChild):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::logicalWidthForChild):
        (WebCore::RenderBlock::logicalRightOffsetForContent):
        (WebCore::RenderBlock::logicalLeftOffsetForContent):

2010-09-29  Adam Roben  <aroben@apple.com>

        Fix color media queries on Windows

        Fixes <http://webkit.org/b/42973> <rdar://problem/8234072> (color:8)
        media query does not evaluate to true for 32bpp displays on Windows

        Test: fast/media/color-does-not-include-alpha.html

        Reviewed by Darin Adler.

        * platform/win/PlatformScreenWin.cpp:
        (WebCore::screenDepthPerComponent): Use screenDepth instead of trying
        to interpret DEVMODE directly, since screenDepth knows how to correct
        for video drivers that return 32 instead of 24.

2010-09-29  Adam Roben  <aroben@apple.com>

        Make sure screen.colorDepth/screen.pixelDepth don't include the bits
        used for alpha

        Fixes <http://webkit.org/b/42972> <rdar://problem/8234071>
        screen.colorDepth and screen.pixelDepth return 32 on Windows, but
        should return 24 (according to CSSOM View and Firefox)

        Reviewed by Darin Adler.

        * platform/win/PlatformScreenWin.cpp:
        (WebCore::screenDepth): If Windows says there are 32 bits per pixel,
        return 24 instead, as 32 includes the alpha component but this
        function is supposed to ignore the alpha component.

2010-09-30  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by Tony Chang.

        [chromium] Refactor ChromiumDataObject to use getters/setters.
        https://bugs.webkit.org/show_bug.cgi?id=46559

        This is an intermediate step to converting ChromiumDataObject to use
        callbacks to the browser to retrieve data.

        This is covered by existing tests.

        * editing/chromium/EditorChromium.cpp:
        (WebCore::Editor::newGeneralClipboard):
        * page/chromium/EventHandlerChromium.cpp:
        (WebCore::EventHandler::createDraggingClipboard):
        * platform/chromium/ChromiumDataObject.cpp:
        (WebCore::ChromiumDataObject::clearData):
        (WebCore::ChromiumDataObject::clearAll):
        (WebCore::ChromiumDataObject::clearAllExceptFiles):
        (WebCore::ChromiumDataObject::hasData):
        (WebCore::ChromiumDataObject::types):
        (WebCore::ChromiumDataObject::getData):
        (WebCore::ChromiumDataObject::setData):
        (WebCore::ChromiumDataObject::ChromiumDataObject):
        * platform/chromium/ChromiumDataObject.h:
        (WebCore::ChromiumDataObject::create):
        (WebCore::ChromiumDataObject::urlTitle):
        (WebCore::ChromiumDataObject::setUrlTitle):
        (WebCore::ChromiumDataObject::htmlBaseUrl):
        (WebCore::ChromiumDataObject::setHtmlBaseUrl):
        (WebCore::ChromiumDataObject::containsFilenames):
        (WebCore::ChromiumDataObject::filenames):
        (WebCore::ChromiumDataObject::setFilenames):
        (WebCore::ChromiumDataObject::fileExtension):
        (WebCore::ChromiumDataObject::setFileExtension):
        (WebCore::ChromiumDataObject::fileContentFilename):
        (WebCore::ChromiumDataObject::setFileContentFilename):
        (WebCore::ChromiumDataObject::fileContent):
        (WebCore::ChromiumDataObject::setFileContent):
        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::normalizeType):
        (WebCore::ClipboardChromium::clearData):
        (WebCore::ClipboardChromium::clearAllData):
        (WebCore::ClipboardChromium::getData):
        (WebCore::ClipboardChromium::setData):
        (WebCore::ClipboardChromium::types):
        (WebCore::ClipboardChromium::files):
        (WebCore::writeImageToDataObject):
        (WebCore::ClipboardChromium::declareAndWriteDragImage):
        (WebCore::ClipboardChromium::writeURL):
        (WebCore::ClipboardChromium::writeRange):
        (WebCore::ClipboardChromium::writePlainText):
        * platform/chromium/ClipboardChromiumWin.cpp:
        (WebCore::ClipboardChromium::validateFileName):
        * platform/chromium/ClipboardMimeTypes.cpp:
        * platform/chromium/ClipboardMimeTypes.h:
        * platform/chromium/DragDataChromium.cpp:
        (WebCore::containsHTML):
        (WebCore::DragData::containsURL):
        (WebCore::DragData::asURL):
        (WebCore::DragData::containsFiles):
        (WebCore::DragData::asFilenames):
        (WebCore::DragData::containsPlainText):
        (WebCore::DragData::asPlainText):
        (WebCore::DragData::canSmartReplace):
        (WebCore::DragData::asFragment):
        * platform/chromium/ReadableDataObject.cpp:
        (WebCore::ReadableDataObject::getURL):
        (WebCore::ReadableDataObject::getHTML):
        * platform/chromium/WritableDataObject.cpp:
        (WebCore::WritableDataObject::clearData):
        (WebCore::WritableDataObject::setData):
        (WebCore::WritableDataObject::setURL):
        (WebCore::WritableDataObject::setHTML):

2010-09-30  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Make 2D accelerated canvas rendering build on Mac
        https://bugs.webkit.org/show_bug.cgi?id=46007

        Add accelerated 2D rendering files to Mac build, fix build errors,
        add ifdefs to compile only when the ACCELERATED_2D_CANVAS flag is
        enabled, and add a skeleton of the mac specific file so it builds.

        DrawingBufferMac.mm, the Mac specific file does nothing right now
        other than initialize and create a layer. The rest will be added
        when I do the actual implementation. 

        The most significant change was to SharedGraphicsContext3D, which
        had a static local OwnPtr in one of the methods. This was causing
        the exit time destructor warning. Getting rid of the OwnPtr fixed
        the problem. Since the pointer that was being wrapped was to a
        static object that would never get destroyed, the OwnPtr was not
        necessary.

        I also added the ACCELERATED_2D_CANVAS flag to build-webkit
        and FeatureDefines.xcconfig for WebCore, WebKit and JavaScriptCore.
        But right now the flag is off by default.

        * Configurations/FeatureDefines.xcconfig:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/gpu/DrawingBuffer.cpp:
        * platform/graphics/gpu/DrawingBuffer.h:
        (WebCore::DrawingBuffer::WillPublishCallback::~WillPublishCallback):
        * platform/graphics/gpu/LoopBlinnClassifier.cpp:
        * platform/graphics/gpu/LoopBlinnMathUtils.cpp:
        * platform/graphics/gpu/LoopBlinnTextureCoords.cpp:
        * platform/graphics/gpu/Shader.cpp:
        * platform/graphics/gpu/SharedGraphicsContext3D.cpp:
        (WebCore::SharedGraphicsContext3D::allContexts):
        * platform/graphics/gpu/SolidFillShader.cpp:
        * platform/graphics/gpu/TexShader.cpp:
        * platform/graphics/gpu/Texture.cpp:
        * platform/graphics/gpu/Texture.h:
        * platform/graphics/gpu/TilingData.cpp:
        * platform/graphics/gpu/mac: Added.
        * platform/graphics/gpu/mac/DrawingBufferMac.mm: Added.
        (WebCore::DrawingBuffer::DrawingBuffer):
        (WebCore::DrawingBuffer::~DrawingBuffer):
        (WebCore::DrawingBuffer::reset):
        (WebCore::DrawingBuffer::platformLayer):

2010-09-30  Renata Hodovan  <reni@inf.u-szeged.hu>

        Reviewed by Dirk Schulze.

        SVGFECompositeElement doesn't support dynamic invalidation, when attributes change.
        https://bugs.webkit.org/show_bug.cgi?id=46902

        Tests: svg/dynamic-updates/SVGFECompositeElement-dom-in-attr.html
               svg/dynamic-updates/SVGFECompositeElement-dom-in2-attr.html
               svg/dynamic-updates/SVGFECompositeElement-dom-k1-attr.html
               svg/dynamic-updates/SVGFECompositeElement-dom-k2-attr.html
               svg/dynamic-updates/SVGFECompositeElement-dom-k3-attr.html
               svg/dynamic-updates/SVGFECompositeElement-dom-k4-attr.html
               svg/dynamic-updates/SVGFECompositeElement-dom-operator-attr.html
               svg/dynamic-updates/SVGFECompositeElement-svgdom-in-prop.html
               svg/dynamic-updates/SVGFECompositeElement-svgdom-in2-prop.html
               svg/dynamic-updates/SVGFECompositeElement-svgdom-k1-prop.html
               svg/dynamic-updates/SVGFECompositeElement-svgdom-k2-prop.html
               svg/dynamic-updates/SVGFECompositeElement-svgdom-k3-prop.html
               svg/dynamic-updates/SVGFECompositeElement-svgdom-k4-prop.html
               svg/dynamic-updates/SVGFECompositeElement-svgdom-operator-prop.html

        * svg/SVGFECompositeElement.cpp:
        (WebCore::SVGFECompositeElement::svgAttributeChanged):
        * svg/SVGFECompositeElement.h:

2010-09-29  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Steve Block.

        Finished IDBTransaction for IndexedDB
        https://bugs.webkit.org/show_bug.cgi?id=46823

        Switch the rest of IndexedDB to use transactions.
        Implement most of setVersion.
        Add IDBTransactions to IDBAny, IDBCursor, IDBRequest, etc.
        Switch to using the standard cross thread task stuff.
        Make everything threadsafe so it works with cross thread copy
            (will be useful in the future).
        Fix some subtle bugs in transactions.
        
        Various bits of clean up (when I couldn't resist).

        * bindings/js/JSIDBAnyCustom.cpp:
        (WebCore::toJS):
        * bindings/v8/IDBBindingUtilities.cpp:
        (WebCore::LocalContext::LocalContext):
        (WebCore::LocalContext::~LocalContext):
        (WebCore::createIDBKeyFromSerializedValueAndKeyPath):
        * bindings/v8/SerializedScriptValue.cpp:
        (WebCore::SerializedScriptValue::release):
        (WebCore::SerializedScriptValue::SerializedScriptValue):
        * bindings/v8/SerializedScriptValue.h:
        * bindings/v8/custom/V8IDBAnyCustom.cpp:
        (WebCore::toV8):
        * platform/CrossThreadCopier.cpp:
        * storage/IDBAny.cpp:
        (WebCore::IDBAny::idbFactory):
        (WebCore::IDBAny::idbTransaction):
        (WebCore::IDBAny::set):
        * storage/IDBAny.h:
        * storage/IDBCallbacks.h:
        * storage/IDBCursor.cpp:
        (WebCore::IDBCursor::IDBCursor):
        (WebCore::IDBCursor::update):
        (WebCore::IDBCursor::continueFunction):
        (WebCore::IDBCursor::remove):
        * storage/IDBCursor.h:
        (WebCore::IDBCursor::create):
        * storage/IDBCursorBackendImpl.cpp:
        (WebCore::IDBCursorBackendImpl::IDBCursorBackendImpl):
        (WebCore::IDBCursorBackendImpl::update):
        (WebCore::IDBCursorBackendImpl::updateInternal):
        (WebCore::IDBCursorBackendImpl::continueFunction):
        (WebCore::IDBCursorBackendImpl::continueFunctionInternal):
        (WebCore::IDBCursorBackendImpl::remove):
        (WebCore::IDBCursorBackendImpl::removeInternal):
        * storage/IDBCursorBackendImpl.h:
        (WebCore::IDBCursorBackendImpl::create):
        * storage/IDBDatabase.cpp:
        (WebCore::IDBDatabase::setSetVersionTransaction):
        (WebCore::IDBDatabase::createObjectStore):
        (WebCore::IDBDatabase::removeObjectStore):
        (WebCore::IDBDatabase::setVersion):
        (WebCore::IDBDatabase::close):
        * storage/IDBDatabase.h:
        * storage/IDBDatabase.idl:
        * storage/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::createObjectStore):
        (WebCore::IDBDatabaseBackendImpl::createObjectStoreInternal):
        (WebCore::IDBDatabaseBackendImpl::removeObjectStore):
        (WebCore::IDBDatabaseBackendImpl::removeObjectStoreInternal):
        (WebCore::IDBDatabaseBackendImpl::setVersion):
        (WebCore::IDBDatabaseBackendImpl::setVersionInternal):
        (WebCore::IDBDatabaseBackendImpl::close):
        * storage/IDBDatabaseBackendImpl.h:
        * storage/IDBDatabaseBackendInterface.h:
        * storage/IDBFactory.cpp:
        (WebCore::IDBFactory::open):
        * storage/IDBIndex.cpp:
        (WebCore::IDBIndex::IDBIndex):
        (WebCore::IDBIndex::openObjectCursor):
        (WebCore::IDBIndex::openCursor):
        (WebCore::IDBIndex::getObject):
        (WebCore::IDBIndex::get):
        * storage/IDBIndex.h:
        (WebCore::IDBIndex::create):
        * storage/IDBIndexBackendImpl.cpp:
        (WebCore::IDBIndexBackendImpl::openCursorInternal):
        (WebCore::IDBIndexBackendImpl::openObjectCursor):
        (WebCore::IDBIndexBackendImpl::openCursor):
        (WebCore::IDBIndexBackendImpl::getInternal):
        (WebCore::IDBIndexBackendImpl::getObject):
        (WebCore::IDBIndexBackendImpl::get):
        * storage/IDBIndexBackendImpl.h:
        * storage/IDBIndexBackendInterface.h:
        * storage/IDBKey.cpp:
        (WebCore::IDBKey::IDBKey):
        * storage/IDBKey.h:
        * storage/IDBKeyRange.h:
        * storage/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::IDBObjectStore):
        (WebCore::IDBObjectStore::add):
        (WebCore::IDBObjectStore::put):
        (WebCore::IDBObjectStore::remove):
        (WebCore::IDBObjectStore::createIndex):
        (WebCore::IDBObjectStore::index):
        (WebCore::IDBObjectStore::removeIndex):
        (WebCore::IDBObjectStore::openCursor):
        * storage/IDBObjectStore.idl:
        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::get):
        (WebCore::IDBObjectStoreBackendImpl::getInternal):
        (WebCore::IDBObjectStoreBackendImpl::put):
        (WebCore::IDBObjectStoreBackendImpl::putInternal):
        (WebCore::IDBObjectStoreBackendImpl::remove):
        (WebCore::IDBObjectStoreBackendImpl::removeInternal):
        (WebCore::IDBObjectStoreBackendImpl::createIndex):
        (WebCore::IDBObjectStoreBackendImpl::createIndexInternal):
        (WebCore::IDBObjectStoreBackendImpl::removeIndex):
        (WebCore::IDBObjectStoreBackendImpl::removeIndexInternal):
        (WebCore::IDBObjectStoreBackendImpl::openCursor):
        (WebCore::IDBObjectStoreBackendImpl::openCursorInternal):
        * storage/IDBObjectStoreBackendImpl.h:
        * storage/IDBObjectStoreBackendInterface.h:
        * storage/IDBRequest.cpp:
        (WebCore::IDBRequest::IDBRequest):
        (WebCore::IDBRequest::resetReadyState):
        (WebCore::IDBRequest::onSuccess):
        (WebCore::IDBRequest::timerFired):
        * storage/IDBRequest.h:
        (WebCore::IDBRequest::create):
        * storage/IDBTransactionBackendImpl.cpp:
        (WebCore::IDBTransactionBackendImpl::IDBTransactionBackendImpl):
        (WebCore::IDBTransactionBackendImpl::scheduleTask):
        (WebCore::IDBTransactionBackendImpl::didCompleteTaskEvents):
        (WebCore::IDBTransactionBackendImpl::run):
        (WebCore::IDBTransactionBackendImpl::start):
        (WebCore::IDBTransactionBackendImpl::commit):
        (WebCore::IDBTransactionBackendImpl::timerFired):
        * storage/IDBTransactionBackendImpl.h:

2010-09-30  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Martin Robinson.

        [Gtk] build still broken since r68521
        https://bugs.webkit.org/show_bug.cgi?id=46795

        makevalues.pl and makeprop.pl generate 3 files in one run.
        Double or triple target is incorrect, because on a multicore
        machine make processes targets in parallel.

        Setting a->b->c dependencies for 3 generated files guarantees
        that make doesn't execute the recipe of the rule more than one.

        * GNUmakefile.am: Dependencies and missing headers added.

2010-09-30  Andrey Kosyakov  <caseq@chromium.org>

        Unreviewed build fix (marked ResourceRawHeaders.h as private)

        * WebCore.xcodeproj/project.pbxproj:

2010-09-29  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: display headers actually used by network stack in Resources tab
        https://bugs.webkit.org/show_bug.cgi?id=46092

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::willSendRequest): enable raw headers reporting if front-end is visible.
        * inspector/InspectorResource.cpp:
        (WebCore::InspectorResource::updateResponse):
        * platform/network/ResourceRawHeaders.h: Added.
        * platform/network/ResourceRequestBase.h: Added flag to enable raw headers reporting.
        (WebCore::ResourceRequestBase::reportRawHeaders):
        (WebCore::ResourceRequestBase::setReportRawHeaders):
        (WebCore::ResourceRequestBase::ResourceRequestBase):
        * platform/network/ResourceResponseBase.cpp: Added support for raw headers.
        (WebCore::ResourceResponseBase::resourceRawHeaders):
        (WebCore::ResourceResponseBase::setResourceRawHeaders):
        * platform/network/ResourceResponseBase.h:

2010-09-29  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: display headers actually used by network stack in Resources tab
        https://bugs.webkit.org/show_bug.cgi?id=46092

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::willSendRequest): enable raw headers reporting if front-end is visible.
        * inspector/InspectorResource.cpp:
        (WebCore::InspectorResource::updateResponse):
        * platform/network/ResourceRawHeaders.h: Added.
        * platform/network/ResourceRequestBase.h: Added flag to enable raw headers reporting.
        (WebCore::ResourceRequestBase::reportRawHeaders):
        (WebCore::ResourceRequestBase::setReportRawHeaders):
        (WebCore::ResourceRequestBase::ResourceRequestBase):
        * platform/network/ResourceResponseBase.cpp: Added support for raw headers.
        (WebCore::ResourceResponseBase::resourceRawHeaders):
        (WebCore::ResourceResponseBase::setResourceRawHeaders):
        * platform/network/ResourceResponseBase.h:

2010-09-30  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] V8 port: Unbreak build

        Add missing <wtf/text/CString.h> include.

        * loader/PingLoader.cpp:

2010-09-29  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: assign the resource loading finish time which was obtained from the network stack
        as the end time for the corresponding event in Timeline.
        See related change for Resources panel https://bugs.webkit.org/show_bug.cgi?id=45664

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

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::didFinishLoading):
        (WebCore::InspectorController::didFailLoading):
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::didFinishLoadingResource):
        * inspector/InspectorTimelineAgent.h:

2010-09-29  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: implement sorting by timeline in network panel + filtering.
        https://bugs.webkit.org/show_bug.cgi?id=45657

        A number of drive-by fixes, sorting by timeline added,
        0-based timeline for duration added, filters added,
        more love for detailed view + nice headers.

        * English.lproj/localizedStrings.js:
        * inspector/front-end/DataGrid.js:
        (WebInspector.DataGrid):
        (WebInspector.DataGrid.prototype.markColumnAsSortedBy):
        (WebInspector.DataGrid.prototype.headerTableHeader):
        * inspector/front-end/NetworkPanel.js:
        (WebInspector.NetworkPanel):
        (WebInspector.NetworkPanel.prototype.get statusBarItems):
        (WebInspector.NetworkPanel.prototype._createTable):
        (WebInspector.NetworkPanel.prototype._makeHeaderInnerHTML):
        (WebInspector.NetworkPanel.prototype._createSortingFunctions):
        (WebInspector.NetworkPanel.prototype._sortByTimeline):
        (WebInspector.NetworkPanel.prototype._sortItems):
        (WebInspector.NetworkPanel.prototype._createFilterPanel):
        (WebInspector.NetworkPanel.prototype._showCategory):
        (WebInspector.NetworkPanel.prototype._hideCategory):
        (WebInspector.NetworkPanel.prototype._updateFilter):
        (WebInspector.NetworkPanel.prototype._filter):
        (WebInspector.NetworkPanel.prototype._updateDividersIfNeeded):
        (WebInspector.NetworkPanel.prototype.reset):
        (WebInspector.NetworkPanel.prototype._setLargerResources):
        (WebInspector.NetworkDataGridNode.prototype.createCells):
        (WebInspector.NetworkDataGridNode.prototype._createDivInTD):
        (WebInspector.NetworkDataGridNode.prototype._refreshURLCell):
        (WebInspector.NetworkDataGridNode.prototype._refreshStatusCell):
        (WebInspector.NetworkDataGridNode.prototype._appendSubtitle):
        (WebInspector.NetworkDataGridNode.SizeComparator):
        (WebInspector.NetworkDataGridNode.ResourcePropertyComparator):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel):
        (WebInspector.ProfilesPanel.prototype.updateMainViewWidth):
        * inspector/front-end/StoragePanel.js:
        (WebInspector.StoragePanel):
        * inspector/front-end/TimelineGrid.js:
        (WebInspector.TimelineGrid.prototype.updateDividers):
        * inspector/front-end/TimelineOverviewPane.js:
        (WebInspector.TimelineOverviewPane):
        (WebInspector.TimelineOverviewPane.prototype.updateMainViewWidth):
        * inspector/front-end/inspector.css:
        (.data-grid th.sort-ascending > div::after):
        (.data-grid th.sort-descending > div::after):
        (.status-bar-items):
        * inspector/front-end/networkPanel.css:
        (.network.panel .data-grid td):
        (.network.panel .data-grid th):
        (.network.panel .data-grid.small th):
        (.network.panel .data-grid .data-container):
        (.network.panel .data-grid.small .data-container):
        (.network.panel .data-grid select):
        (.network.panel .data-grid td.time-column):
        (.network-cell-subtitle):
        (.network-header-subtitle):
        (.network-event-divider):
        (.network.panel .network-timeline-grid.small .network-event-divider):
        (.network.panel .resources-dividers-label-bar):
        (.network.panel .network-timeline-grid.small .resources-dividers-label-bar):
        (.network.panel .resources-divider-label):
        (.network.panel .resources-dividers-label-bar .resources-divider):
        (.network.panel .network-timeline-grid.small .resources-dividers-label-bar .resources-divider):
        (.network.panel .resources-divider.first .resources-divider-label):
        (.network.panel .resources-dividers-label-bar .resources-divider.first):
        (#network-filter):
        (.data-grid table.data tr.revealed.network-category-websockets, .data-grid table.data tr.revealed.network-category-other):
        (.data-grid.filter-all table.data tr.revealed.network-category-other, .data-grid.filter-other table.data tr.revealed.network-category-other):

2010-09-30  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Ensure we always report a valid size for the video

        Some QtMultimedia-backends require a paint before even giving us
        a size, so we start out by using the default video size, and then
        update it once QtMultimedia starts feeding us valid sizes.

        * platform/graphics/qt/MediaPlayerPrivateQt.cpp:
        (WebCore::MediaPlayerPrivateQt::MediaPlayerPrivateQt):
        (WebCore::MediaPlayerPrivateQt::nativeSizeChanged):
        (WebCore::MediaPlayerPrivateQt::setSize):
        (WebCore::MediaPlayerPrivateQt::naturalSize):
        * platform/graphics/qt/MediaPlayerPrivateQt.h:

2010-09-30  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Andreas Kling.

        RenderSVGTextPath lacks isSVGTextPath() method
        https://bugs.webkit.org/show_bug.cgi?id=46888

        Make RenderSVGTextPath objects easily detectable, using a isSVGTextPath() method, like all other SVG renderers have.

        * rendering/RenderObject.h:
        (WebCore::RenderObject::isSVGTextPath): Return false.
        * rendering/RenderSVGTextPath.h: Changed indentation of whole file.
        (WebCore::RenderSVGTextPath::isSVGTextPath): Return true.
        (WebCore::RenderSVGTextPath::renderName):
        (WebCore::toRenderSVGTextPath): Add helper casting methods.

2010-09-30  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        AffineTransform should expose methods calculating the x/y scale factors
        https://bugs.webkit.org/show_bug.cgi?id=46887

        Expose methods calculating the x/y scale factors for an AffineTransform. 

        * platform/graphics/transforms/AffineTransform.cpp:
        (WebCore::affineTransformDecompose): Move xScale / yScale calculations in their own functions.
        (WebCore::AffineTransform::xScale):
        (WebCore::AffineTransform::yScale):
        * platform/graphics/transforms/AffineTransform.h:

2010-09-30  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Ensure that the media player backend does not leave any resources around

        * platform/graphics/qt/MediaPlayerPrivateQt.cpp:
        (WebCore::MediaPlayerPrivateQt::~MediaPlayerPrivateQt):

2010-09-30  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        Minor cleanup of MediaPlayerPrivateQt

        * platform/graphics/qt/MediaPlayerPrivateQt.cpp:
        (WebCore::MediaPlayerPrivateQt::MediaPlayerPrivateQt):
        (WebCore::MediaPlayerPrivateQt::currentTime):
        (WebCore::MediaPlayerPrivateQt::positionChanged):
        (WebCore::MediaPlayerPrivateQt::paint):

2010-09-30  Jochen Eisinger  <jochen@chromium.org>

        Reviewed by Jeremy Orlow.

        Mark unused parameters as such.
        https://bugs.webkit.org/show_bug.cgi?id=46880

        * inspector/InspectorDOMAgent.cpp:
        * page/Geolocation.cpp:
        (WebCore::Geolocation::clearWatch):

2010-09-29  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: extract Inspector Instrumentation API as a class.
        https://bugs.webkit.org/show_bug.cgi?id=46614

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::send):
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::V8XMLHttpRequest::sendCallback):
        * dom/CharacterData.cpp:
        (WebCore::CharacterData::dispatchModifiedEvent):
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::insertBefore):
        (WebCore::ContainerNode::parserInsertBefore):
        (WebCore::ContainerNode::replaceChild):
        (WebCore::ContainerNode::appendChild):
        (WebCore::ContainerNode::parserAddChild):
        (WebCore::notifyChildInserted):
        (WebCore::dispatchChildRemovalEvents):
        * dom/Element.cpp:
        (WebCore::Element::setAttribute):
        (WebCore::Element::removeAttribute):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::~InspectorController):
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::disconnectFrontend):
        (WebCore::InspectorController::instrumentWillSendXMLHttpRequest):
        * inspector/InspectorController.h:
        * inspector/InspectorInstrumentation.cpp: Added.
        (WebCore::InspectorInstrumentation::willInsertDOMNodeImpl):
        (WebCore::InspectorInstrumentation::didInsertDOMNodeImpl):
        (WebCore::InspectorInstrumentation::willRemoveDOMNodeImpl):
        (WebCore::InspectorInstrumentation::didRemoveDOMNodeImpl):
        (WebCore::InspectorInstrumentation::willModifyDOMAttrImpl):
        (WebCore::InspectorInstrumentation::didModifyDOMAttrImpl):
        (WebCore::InspectorInstrumentation::characterDataModifiedImpl):
        (WebCore::InspectorInstrumentation::instrumentWillSendXMLHttpRequestImpl):
        * inspector/InspectorInstrumentation.h: Added.
        (WebCore::InspectorInstrumentation::frontendCreated):
        (WebCore::InspectorInstrumentation::frontendDeleted):
        (WebCore::InspectorInstrumentation::hasFrontends):
        (WebCore::InspectorInstrumentation::willInsertDOMNode):
        (WebCore::InspectorInstrumentation::didInsertDOMNode):
        (WebCore::InspectorInstrumentation::willRemoveDOMNode):
        (WebCore::InspectorInstrumentation::willModifyDOMAttr):
        (WebCore::InspectorInstrumentation::didModifyDOMAttr):
        (WebCore::InspectorInstrumentation::characterDataModified):
        (WebCore::InspectorInstrumentation::instrumentWillSendXMLHttpRequest):
        (WebCore::InspectorInstrumentation::inspectorControllerForScriptExecutionContext):
        (WebCore::InspectorInstrumentation::inspectorControllerForDocument):
        (WebCore::InspectorInstrumentation::inspectorControllerForPage):
        * workers/SharedWorker.cpp:

2010-09-30  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Darin Adler.

        Build fix: Add ENABLE(INSPECTOR) guard
        https://bugs.webkit.org/show_bug.cgi?id=46852

        Page does not have inspectorController() when ENABLE(INSPECTOR) is 0.

        * inspector/InspectorController.h:
        (WebCore::InspectorController::inspectorControllerForDocument):

2010-09-30  Michael Nordman  <michaeln@google.com>

        Reviewed by David Levin.

        Make it possible to copy platform specific data members of ResourceRequest and ResourceResponse
        across threads and to compare platform specific data members of ResourceRequest.
        - Added two instance methods to the platform specific subclasses: doPlatformAdopt and doPlatformCopyData.
        - Also added a "shadowable" static method for platformCompare to ResourceRequestBase, a similar method
          is already present on ResourceResponseBase.
        - Converted the cross thread structs defined in ResourceRequest/ResponseBase.h to base
          classes and extended those base classes in the platform specific headers to provide a place
          to hold additional fields.
        - Used this mechanism to have the chromium port's data members make the hop.
        https://bugs.webkit.org/show_bug.cgi?id=46430

        No new tests. Just plumbing.

        * WebCore.exp.in: removed the symbol for the now inlined == operator
        * WebCore.gypi: added chromium/ResourceResponse.cpp
        * platform/network/ResourceRequestBase.cpp:
        (WebCore::ResourceRequestBase::adopt):
        (WebCore::ResourceRequestBase::copyData):
        (WebCore::ResourceRequestBase::compare):
        * platform/network/ResourceRequestBase.h:
        (WebCore::ResourceRequestBase::platformCompare):
        (WebCore::operator==):
        (WebCore::operator!=):
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::asResourceResponse):
        (WebCore::ResourceResponseBase::adopt):
        (WebCore::ResourceResponseBase::copyData):
        * platform/network/ResourceResponseBase.h:
        * platform/network/android/ResourceRequest.h:
        (WebCore::ResourceRequest::doPlatformCopyData):
        (WebCore::ResourceRequest::doPlatformAdopt):
        * platform/network/android/ResourceResponse.h:
        (WebCore::ResourceResponse::doPlatformCopyData):
        (WebCore::ResourceResponse::doPlatformAdopt):
        * platform/network/cf/ResourceRequest.h:
        (WebCore::ResourceRequest::doPlatformCopyData):
        (WebCore::ResourceRequest::doPlatformAdopt):
        * platform/network/cf/ResourceResponse.h:
        (WebCore::ResourceResponse::doPlatformCopyData):
        (WebCore::ResourceResponse::doPlatformAdopt):
        * platform/network/chromium/ResourceRequest.cpp:
        (WebCore::ResourceRequest::doPlatformCopyData):
        (WebCore::ResourceRequest::doPlatformAdopt):
        * platform/network/chromium/ResourceRequest.h:
        * platform/network/chromium/ResourceResponse.cpp: Added.
        (WebCore::ResourceResponse::doPlatformCopyData):
        (WebCore::ResourceResponse::doPlatformAdopt):
        * platform/network/chromium/ResourceResponse.h:
        * platform/network/curl/ResourceRequest.h:
        (WebCore::ResourceRequest::doPlatformCopyData):
        (WebCore::ResourceRequest::doPlatformAdopt):
        * platform/network/curl/ResourceResponse.h:
        (WebCore::ResourceResponse::doPlatformCopyData):
        (WebCore::ResourceResponse::doPlatformAdopt):
        * platform/network/mac/ResourceRequest.h:
        (WebCore::ResourceRequest::doPlatformCopyData):
        (WebCore::ResourceRequest::doPlatformAdopt):
        * platform/network/mac/ResourceResponse.h:
        (WebCore::ResourceResponse::doPlatformCopyData):
        (WebCore::ResourceResponse::doPlatformAdopt):
        * platform/network/qt/ResourceRequest.h:
        (WebCore::ResourceRequest::doPlatformCopyData):
        (WebCore::ResourceRequest::doPlatformAdopt):
        * platform/network/qt/ResourceResponse.h:
        (WebCore::ResourceResponse::doPlatformCopyData):
        (WebCore::ResourceResponse::doPlatformAdopt):
        * platform/network/soup/ResourceRequest.h:
        (WebCore::ResourceRequest::doPlatformCopyData):
        (WebCore::ResourceRequest::doPlatformAdopt):
        * platform/network/soup/ResourceResponse.h:
        (WebCore::ResourceResponse::doUpdateResourceResponse):
        (WebCore::ResourceResponse::doPlatformCopyData):
        (WebCore::ResourceResponse::doPlatformAdopt):

2010-09-29  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Put default initialize() and uninitialize() methods in AudioNode
        https://bugs.webkit.org/show_bug.cgi?id=46767

        No new tests since audio API is not yet implemented.

        * webaudio/AudioNode.cpp:
        (WebCore::AudioNode::initialize):
        (WebCore::AudioNode::uninitialize):
        * webaudio/AudioNode.h:

2010-09-29  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        Refactor HTMLInputElement: Make DeprecatedInputType private.
        https://bugs.webkit.org/show_bug.cgi?id=46791

        No new tests because this doesn't change any behavior.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::createTypeMap):
        * html/HTMLInputElement.h:
         Move DeprecatedInputType, deprecatedInputType() and
         parseToDateComponents() to the private section, make
         createTypeMap() a member function of HTMLInputElement.
        (WebCore::HTMLInputElement::deprecatedInputType):

2010-09-29  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Darin Fisher.

        REGRESSION: page reload on back button after history.pushState with appearing/disappearing iframes
        https://bugs.webkit.org/show_bug.cgi?id=46324
        
        Revert same document check to the way it was before r66238 for history
        entries created by pushState or fragment changes. Logic fror determining
        if same document navigation should be used is moved to HistoryItem.

        Tests: fast/history/same-document-iframes-changing-fragment.html
               fast/history/same-document-iframes-changing-pushstate.html

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::shouldDoSameDocumentNavigationTo):
        (WebCore::HistoryItem::hasSameDocumentTree):
        (WebCore::HistoryItem::hasSameFrames):
        * history/HistoryItem.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadItem):

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

2010-09-29  MORITA Hajime  <morrita@google.com>

        Unreviewed build fix.
        
        WebCore::ESpeak causes missing symbol with no ENABLE_SVG
        https://bugs.webkit.org/show_bug.cgi?id=46865

        Moves ESpeak related function definitions outside ENABLE_SVG block.

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator ESpeak):
        (WebCore::CSSPrimitiveValue::operator EVectorEffect):

2010-09-29  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Add AudioChannelSplitter files
        https://bugs.webkit.org/show_bug.cgi?id=46290

        No new tests since audio API is not yet implemented.

        * webaudio/AudioChannelSplitter.cpp: Added.
        (WebCore::AudioChannelSplitter::AudioChannelSplitter):
        (WebCore::AudioChannelSplitter::process):
        (WebCore::AudioChannelSplitter::reset):
        * webaudio/AudioChannelSplitter.h: Added.
        (WebCore::AudioChannelSplitter::create):
        * webaudio/AudioChannelSplitter.idl: Added.

2010-09-29  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by David Levin.

        Fix DirectoryReader's behavior to trigger only one EntriesCallback per readEntries
        https://bugs.webkit.org/show_bug.cgi?id=46563

        Test: fast/filesystem/read-directory.html

        * fileapi/DOMFileSystem.cpp:
        (WebCore::DOMFileSystem::readDirectory): Changed to take DirectoryReader
        as a parameter.
        * fileapi/DOMFileSystem.h:
        (WebCore::DOMFileSystem::scheduleCallback): Added.
        * fileapi/DirectoryReader.cpp:
        (WebCore::DirectoryReader::DirectoryReader): Added initializer for
        m_hasMore flag.
        (WebCore::DirectoryReader::readEntries): Changed to schedule
        EntriesCallback with an empty array if m_hasMore flag is set false.
        * fileapi/DirectoryReader.h:
        (WebCore::DirectoryReader::filesystem): Added.
        (WebCore::DirectoryReader::setHasMore): Added.
        * fileapi/FileSystemCallbacks.cpp:
        (WebCore::EntriesCallbacks::create):
        (WebCore::EntriesCallbacks::EntriesCallbacks): Changed to take
        DirectoryReader as a parameter.
        (WebCore::EntriesCallbacks::didReadDirectoryEntry):
        (WebCore::EntriesCallbacks::didReadDirectoryEntries): Changed 1) not to
        trigger the second callback when hasMore is false, and 2) to update
        the DirectoryReader's m_hasMore flag.
        * fileapi/FileSystemCallbacks.h:

2010-09-29  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Add AudioGainNode files
        https://bugs.webkit.org/show_bug.cgi?id=46286

        No new tests since audio API is not yet implemented.

        * webaudio/AudioGainNode.cpp: Added.
        (WebCore::AudioGainNode::AudioGainNode):
        (WebCore::AudioGainNode::process):
        (WebCore::AudioGainNode::reset):
        (WebCore::AudioGainNode::checkNumberOfChannelsForInput):
        * webaudio/AudioGainNode.h: Added.
        (WebCore::AudioGainNode::create):
        (WebCore::AudioGainNode::gain):
        * webaudio/AudioGainNode.idl: Added.

2010-09-29  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Add AudioChannelMerger files
        https://bugs.webkit.org/show_bug.cgi?id=46291

        No new tests since audio API is not yet implemented.

        * webaudio/AudioChannelMerger.cpp: Added.
        (WebCore::AudioChannelMerger::AudioChannelMerger):
        (WebCore::AudioChannelMerger::process):
        (WebCore::AudioChannelMerger::reset):
        * webaudio/AudioChannelMerger.h: Added.
        (WebCore::AudioChannelMerger::create):
        * webaudio/AudioChannelMerger.idl: Added.

2010-09-29  Chris Fleizach  <cfleizach@apple.com>

        No review. Missed file for patch.

        AX: implement CSS3 Speech "speak"
        https://bugs.webkit.org/show_bug.cgi?id=46827

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):

2010-09-29  Enrica Casucci  <enrica@apple.com>

        Reviewed by Darin Adler.

        Crash at lineBreakExistsAtPosition + 125
        <rdar://problem/7028809> 
        https://bugs.webkit.org/show_bug.cgi?id=46770
        
        lineBreakExistsAtPosition is called from InsertTextCommand::input,
        where we compute the downstream position of the endingSelection().
        Downstream can return the original position, that comes from a VisibleSelection
        but there is no guarantee that its renderer is still there. Everywhere we dereference
        a renderer we check if it's null.
        
        There is no regression test.
        
        * editing/htmlediting.cpp:
        (WebCore::lineBreakExistsAtPosition): Added check that the renderer is not null
        before dereferencing it.

2010-09-29  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Add additional checks to StringBuilder.
        <rdar://problem/7761248>

        * platform/text/StringBuilder.cpp:
        (WebCore::checkAppend):
        (WebCore::StringBuilder::append):
        (WebCore::StringBuilder::toString):
        (WebCore::StringBuilder::clear):
        (WebCore::StringBuilder::length):
        * platform/text/StringBuilder.h:
        (WebCore::StringBuilder::StringBuilder):
        (WebCore::StringBuilder::setNonNull):
        (WebCore::StringBuilder::isNull):

2010-09-29  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        plugins/npruntime/invoke-failure.html fails in WebKit2 due to slightly different exception being thrown
        https://bugs.webkit.org/show_bug.cgi?id=46715
        <rdar://problem/8485909>

        Remove exclamation points from exceptions.

        * bindings/v8/V8NPObject.cpp:
        (WebCore::npObjectInvokeImpl):
        * bridge/c/c_instance.cpp:
        (JSC::Bindings::CInstance::invokeMethod):
        (JSC::Bindings::CInstance::invokeDefaultMethod):
        (JSC::Bindings::CInstance::invokeConstruct):

2010-09-29  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Add additional check to Text::wholeText.
        <rdar://problem/8304795>

        * dom/Text.cpp:
        (WebCore::Text::wholeText):

2010-09-29  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Brady Eidson.

        REGRESSION (r66129): Loading full-frame .swf file crashes with flash blocker extension enabled
        <https://bugs.webkit.org/show_bug.cgi?id=46773>
        <rdar://problem/8390975>
        
        After r66129, start scripts were run on plugin documents, and cancelling the load of a plugin
        document could cause Safari to crash.
        
        If a plugin load on an initial document is cancelled, we cancel the main resource load (where the
        main resource is the plugin), and if the load is restarted and allowed, we don't go through the manual
        loading path like we do on the initial load of a plugin in a plugin document.

        Tests: plugins/plugin-document-load-prevented-userscript.html
               plugins/plugin-document-willSendRequest-null.html

        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::updateWidget): If the plugin load was cancelled, and this is in a
            plugin document, call a function on PluginDocument that cancels the main resource load, and
            sets a plugin document flag.
        * html/PluginDocument.cpp:
        (WebCore::PluginDocumentParser::appendBytes): Null check the widget's renderer, because it could be
            null if the load was cancelled.
        (WebCore::PluginDocument::PluginDocument): Initialize the new variable.
        (WebCore::PluginDocument::cancelManualPluginLoad): Cancel the main resource load of the plugin document
            (which is a plugin in the case of a plugin document).
        * html/PluginDocument.h:
        (WebCore::PluginDocument::shouldLoadPluginManually): Returns whether or not we should load the plugin
            manually.
        (WebCore::PluginDocument::setShouldLoadPluginManually): Set whether or not we should load the plugin
            manually.
        (WebCore::toPluginDocument):
        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::loadPlugin): Check if we should load the plugin manually according to the plugin
            document.

2010-09-29  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=46844, make estimateLogicalTopPosition
        block-flow-aware.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::estimateLogicalTopPosition):
        (WebCore::RenderBlock::collapsedMarginBeforeForChild):
        (WebCore::RenderBlock::collapsedMarginAfterForChild):
        * rendering/RenderBlock.h:

2010-09-29  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Minor cleanup to AudioContext
        https://bugs.webkit.org/show_bug.cgi?id=46843

        No new tests since audio API is not yet implemented

        * webaudio/AudioContext.cpp:
        (WebCore::AudioContext::lock):
        (WebCore::AudioContext::handleDeferredFinishDerefs):

2010-09-29  MORITA Hajime  <morrita@google.com>

        Reviewed by Eric Seidel.

        Assertion failed when accessing -webkit-margin-top-collapse via computed style.
        https://bugs.webkit.org/show_bug.cgi?id=46798
        
        There was a switch statement which missed enum entries in getPropertyCSSValue().
        This change added these entries to prevent the leak.
        It also added extra case statements to encourage the compiler's help.

        Test: fast/css/getComputedStyle/margin-top-bottom-collapse-alias.html

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

2010-09-29  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Limit number of AudioNode deletions per render quantum in AudioContext
        https://bugs.webkit.org/show_bug.cgi?id=46834

        No new tests since audio API is not yet implemented.

        * webaudio/AudioContext.cpp:
        (WebCore::AudioContext::handlePostRenderTasks):
        (WebCore::AudioContext::deleteMarkedNodes):

2010-09-29  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=46838
        
        Get rid of the marginXXXUsing/setMarginXXXUsing methods on RenderBox.  I'm inverting the way these are called
        and putting the methods on RenderBlock instead.  The methods can be named better this way and the getters
        can operate on RenderBoxModelObjects instead of just RenderBoxes.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlockChild):
        (WebCore::RenderBlock::marginBeforeForChild):
        (WebCore::RenderBlock::marginAfterForChild):
        (WebCore::RenderBlock::marginStartForChild):
        (WebCore::RenderBlock::marginEndForChild):
        (WebCore::RenderBlock::setMarginStartForChild):
        (WebCore::RenderBlock::setMarginEndForChild):
        (WebCore::RenderBlock::setMarginBeforeForChild):
        (WebCore::RenderBlock::setMarginAfterForChild):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::logicalHeightForChild):
        (WebCore::RenderBlock::logicalTopForChild):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::marginBefore):
        (WebCore::RenderBox::marginAfter):
        (WebCore::RenderBox::marginStart):
        (WebCore::RenderBox::marginEnd):
        (WebCore::RenderBox::setMarginStart):
        (WebCore::RenderBox::setMarginEnd):
        (WebCore::RenderBox::setMarginBefore):
        (WebCore::RenderBox::setMarginAfter):
        (WebCore::RenderBox::computeLogicalWidth):
        (WebCore::RenderBox::computeInlineDirectionMargins):
        (WebCore::RenderBox::computeBlockDirectionMargins):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::setMarginTop):
        (WebCore::RenderBox::setMarginBottom):
        (WebCore::RenderBox::setMarginLeft):
        (WebCore::RenderBox::setMarginRight):

2010-09-29  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        Removed input type site-specific quirk for mail.google.com
        https://bugs.webkit.org/show_bug.cgi?id=46836

        * bindings/js/JSHTMLInputElementCustom.cpp:
        (WebCore::needsGmailQuirk): Removed.
        (WebCore::JSHTMLInputElement::type): Removed this custom getter. 
        * html/HTMLInputElement.idl: Removed the JSCCustomGetter custom attribute
        from the type attribute.

2010-09-29  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Simon Fraser.

        CRASH at WebCore::HTMLSourceElement::scheduleErrorEvent
        https://bugs.webkit.org/show_bug.cgi?id=46777

        It should not be possible to get to be in the LoadingFromSourceElement
        state with a null current source node. This was a possible scenario
        where the current source node was cleared but the load state was not
        cleared as well. Tried and could not create a test case for this.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::userCancelledLoad): clear the load state because we also clear the current source node.

2010-09-29  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=46835, patch a few more height/logicalHeights.  Rename stretchesToViewHeight.

        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutInlineChildren):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeLogicalHeight):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::stretchesToViewport):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::relativePositionOffsetY):

2010-09-29  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        AX: implement CSS3 Speech "speak"
        https://bugs.webkit.org/show_bug.cgi?id=46827

        Support the "speak" style as defined in
        http://www.w3.org/TR/css3-speech/#speak

        This puts all the pieces in place for a platform to support this ability, but there's no platform implementation yet.

        Test: platform/mac/accessibility/css-speech-speak.html

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::speakProperty):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::speakProperty):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator ESpeak):
        * css/CSSPropertyNames.in:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * css/CSSValueKeywords.in:
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::speak):
        (WebCore::InheritedFlags::setSpeak):
        (WebCore::InheritedFlags::initialSpeak):
        * rendering/style/RenderStyleConstants.h:
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData):
        (WebCore::StyleRareInheritedData::operator==):
        * rendering/style/StyleRareInheritedData.h:

2010-09-29  João Paulo Rechi Vita  <jprvita@profusion.mobi>

        Reviewed by Antonio Gomes.

        [Curl] Fix unused and unitialized warnings.
        https://bugs.webkit.org/show_bug.cgi?id=46831

        No new tests since no new funcionality has been added.

        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::allowsAnyHTTPSCertificateHosts):
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::ResourceHandleManager):
        (WebCore::handleLocalReceiveResponse):
        (WebCore::ResourceHandleManager::downloadTimerCallback):
        (WebCore::ResourceHandleManager::initializeHandle):

2010-09-29  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=46824
        
        Convert layoutBlockChild (but not the functions it calls) to be block-flow-aware.

        fast/blockflow/root-lr.html progresses as a result of this change.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::estimateLogicalTopPosition):
        (WebCore::RenderBlock::determineLogicalLeftPositionForChild):
        (WebCore::RenderBlock::setLogicalTopForChild):
        (WebCore::RenderBlock::layoutBlockChild):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::logicalHeightForChild):
        (WebCore::RenderBlock::logicalTopForChild):
        * rendering/RenderBox.h:

2010-09-29  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Antonio Gomes.

        queryCommandValue "formatBlock" always returns false
        https://bugs.webkit.org/show_bug.cgi?id=21305

        Implemented queryCommandValue('formatBlock'). We match the Firefox's behavior exactly
        because Firefox and Internet Explorer support the same set of elements
        (address, h1, h2, h3, h4, h5, h6, and p) and Firefox's behavior is more compatible with Opera.
        See the bug for the detailed discussion.

        WebKit's implementation returns the local name of the lowest common ancestor
        of the selection with the tag name address, h1, h2, h3, h4, h5, h6, or p.
        It returns "" when there is no such an ancestor or there is no selection.

        Test: editing/execCommand/query-format-block.html

        * editing/Editor.cpp:
        (WebCore::isElementForFormatBlockCommand):
        (WebCore::Editor::elementForFormatBlockCommand):
        * editing/Editor.h:
        * editing/EditorCommand.cpp:
        (WebCore::valueFormatBlock):
        (WebCore::createCommandMap):

2010-09-29  Matt Perry  <mpcomplete@chromium.org>

        Reviewed by Darin Fisher.

        Remove obsolete registerExtension variants from chromium port.
        https://bugs.webkit.org/show_bug.cgi?id=46683

        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::createNewContext):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::registeredExtensionWithV8):
        (WebCore::V8Proxy::registerExtension):
        * bindings/v8/V8Proxy.h:

2010-09-29  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Chris Fleizach.

        [GTK] editing/selection/selection-modify-crash.html crashes when run in Xvfb
        https://bugs.webkit.org/show_bug.cgi?id=46822

        When parentObjectUnignored returns null in objectAndOffsetUnignored consider that
        a failure case. Handle this failure appropriately at all call sites.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (webkit_accessible_text_get_caret_offset): Handle the failure of objectAndOffsetUnignored.
        (objectAndOffsetUnignored): Always check the return value of parentObjectUnignored and
        return 0 to indicate failure when that happens.
        * editing/gtk/SelectionControllerGtk.cpp:
        (WebCore::SelectionController::notifyAccessibilityForSelectionChange): Handle the failure
        case of objectAndOffsetUnignored.

2010-09-29  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r68657.
        http://trac.webkit.org/changeset/68657
        https://bugs.webkit.org/show_bug.cgi?id=46820

        reason "Breaks win debug build" (Requested by podivilov on
        #webkit).

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::send):
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::V8XMLHttpRequest::sendCallback):
        * dom/CharacterData.cpp:
        (WebCore::CharacterData::dispatchModifiedEvent):
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::insertBefore):
        (WebCore::ContainerNode::parserInsertBefore):
        (WebCore::ContainerNode::replaceChild):
        (WebCore::ContainerNode::appendChild):
        (WebCore::ContainerNode::parserAddChild):
        (WebCore::notifyChildInserted):
        (WebCore::dispatchChildRemovalEvents):
        * dom/Element.cpp:
        (WebCore::Element::setAttribute):
        (WebCore::Element::removeAttribute):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::~InspectorController):
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::disconnectFrontend):
        (WebCore::InspectorController::willInsertDOMNodeImpl):
        (WebCore::InspectorController::didInsertDOMNodeImpl):
        (WebCore::InspectorController::willRemoveDOMNodeImpl):
        (WebCore::InspectorController::didRemoveDOMNodeImpl):
        (WebCore::InspectorController::willModifyDOMAttrImpl):
        (WebCore::InspectorController::didModifyDOMAttrImpl):
        (WebCore::InspectorController::characterDataModifiedImpl):
        (WebCore::InspectorController::instrumentWillSendXMLHttpRequestImpl):
        * inspector/InspectorController.h:
        (WebCore::InspectorController::willInsertDOMNode):
        (WebCore::InspectorController::didInsertDOMNode):
        (WebCore::InspectorController::willRemoveDOMNode):
        (WebCore::InspectorController::willModifyDOMAttr):
        (WebCore::InspectorController::didModifyDOMAttr):
        (WebCore::InspectorController::characterDataModified):
        (WebCore::InspectorController::instrumentWillSendXMLHttpRequest):
        (WebCore::InspectorController::inspectorControllerForScriptExecutionContext):
        (WebCore::InspectorController::inspectorControllerForNode):
        (WebCore::InspectorController::inspectorControllerForDocument):
        * inspector/InspectorInstrumentation.cpp: Removed.
        * inspector/InspectorInstrumentation.h: Removed.
        * workers/SharedWorker.cpp:

2010-09-29  Xiaomei Ji  <xji@chromium.org>

        Reviewed by David Levin.

        Performance improvement for FontLinux.
        https://bugs.webkit.org/show_bug.cgi?id=46374

        Reduce new/delete operations by storing the maximum capacity of the glyph
        array and use that value in subsequent HB_ShapeItem calls. (Note that a
        call to HB_ShapeItem may reduce the value of m_item.num_glyphs below the
        capacity.)

        Also be consistent with zero'ing the glyph arrays before calling 
        HB_ShapeItem.

        There is no functionality changes so no new tests are added.
 
        * platform/graphics/chromium/FontLinux.cpp:
        (WebCore::TextRunWalker::createGlyphArrays):
        (WebCore::TextRunWalker::resetGlyphArrays):
        (WebCore::TextRunWalker::shapeGlyphs):

2010-09-29  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: extract Inspector Instrumentation API as a class.
        https://bugs.webkit.org/show_bug.cgi?id=46614

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::send):
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::V8XMLHttpRequest::sendCallback):
        * dom/CharacterData.cpp:
        (WebCore::CharacterData::dispatchModifiedEvent):
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::insertBefore):
        (WebCore::ContainerNode::parserInsertBefore):
        (WebCore::ContainerNode::replaceChild):
        (WebCore::ContainerNode::appendChild):
        (WebCore::ContainerNode::parserAddChild):
        (WebCore::notifyChildInserted):
        (WebCore::dispatchChildRemovalEvents):
        * dom/Element.cpp:
        (WebCore::Element::setAttribute):
        (WebCore::Element::removeAttribute):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::~InspectorController):
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::disconnectFrontend):
        (WebCore::InspectorController::instrumentWillSendXMLHttpRequest):
        * inspector/InspectorController.h:
        * inspector/InspectorInstrumentation.cpp: Added.
        (WebCore::InspectorInstrumentation::willInsertDOMNodeImpl):
        (WebCore::InspectorInstrumentation::didInsertDOMNodeImpl):
        (WebCore::InspectorInstrumentation::willRemoveDOMNodeImpl):
        (WebCore::InspectorInstrumentation::didRemoveDOMNodeImpl):
        (WebCore::InspectorInstrumentation::willModifyDOMAttrImpl):
        (WebCore::InspectorInstrumentation::didModifyDOMAttrImpl):
        (WebCore::InspectorInstrumentation::characterDataModifiedImpl):
        (WebCore::InspectorInstrumentation::instrumentWillSendXMLHttpRequestImpl):
        * inspector/InspectorInstrumentation.h: Added.
        (WebCore::InspectorInstrumentation::frontendCreated):
        (WebCore::InspectorInstrumentation::frontendDeleted):
        (WebCore::InspectorInstrumentation::hasFrontends):
        (WebCore::InspectorInstrumentation::willInsertDOMNode):
        (WebCore::InspectorInstrumentation::didInsertDOMNode):
        (WebCore::InspectorInstrumentation::willRemoveDOMNode):
        (WebCore::InspectorInstrumentation::willModifyDOMAttr):
        (WebCore::InspectorInstrumentation::didModifyDOMAttr):
        (WebCore::InspectorInstrumentation::characterDataModified):
        (WebCore::InspectorInstrumentation::instrumentWillSendXMLHttpRequest):
        (WebCore::InspectorInstrumentation::inspectorControllerForScriptExecutionContext):
        (WebCore::InspectorInstrumentation::inspectorControllerForDocument):
        (WebCore::InspectorInstrumentation::inspectorControllerForPage):

2010-09-29  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=46786, convert layoutBlockChild (but not any functions it calls)
        to be block-flow-aware.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::handleAfterSideOfBlock):
        (WebCore::RenderBlock::layoutBlockChildren):
        * rendering/RenderBlock.h:
        * rendering/RenderBox.h:
        (WebCore::RenderBox::scrollbarLogicalHeight):

2010-09-29  João Paulo Rechi Vita  <jprvita@profusion.mobi>

        Reviewed by Antonio Gomes.

        [EFL] General small fixes.
        https://bugs.webkit.org/show_bug.cgi?id=46813

        This commit spots a comparison between signed and unsigned integer
        expressions, a missing return and a never-called function.

        No new tests since no new funcionality has been added.

        * platform/efl/SharedBufferEfl.cpp:
        (WebCore::SharedBuffer::createWithContentsOfFile):

2010-09-29  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        build still broken since r68521
        https://bugs.webkit.org/show_bug.cgi?id=46795

        Call make-values.pl once only. It seems calling it multiple times
        in the same build produces a wrong CSSValueKeywordsHash.h which
        has a duplicate declaration of its valueList variable. The double
        call is triggered by the double targets in the Makefile rules and
        makevalues.pl generates one of them, which screws up the build. A
        more proper fix should be done with the advices on
        http://www.cmcrossroads.com/cm-basics/12905-rules-with-multiple-outputs-in-gnu-make

        * GNUmakefile.am:

2010-09-29  João Paulo Rechi Vita  <jprvita@profusion.mobi>

        Unreviewed build fix.

        Fix CMake build for ENABLE_PROGRESS_TAG.
        https://bugs.webkit.org/show_bug.cgi?id=46808

        No new tests since it's a build fix.

        * CMakeLists.txt:

2010-09-29  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        [v8] Use generic mechanism to report exceptions in V8CustomVoidCallback
        https://bugs.webkit.org/show_bug.cgi?id=46803

        No new tests. It's covered by existing tests under LayoutTests/storage

        * bindings/v8/custom/V8CustomVoidCallback.cpp:
        (WebCore::invokeCallback):

2010-09-29  Satish Sampath  <satish@chromium.org>

        Reviewed by Jeremy Orlow.

        Rename the input element's @speech attribute to @webkitspeech since it is still experimental.
        https://bugs.webkit.org/show_bug.cgi?id=46799

        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::webkitspeechEnabled): Rename the runtime feature flag getter.
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        * css/CSSValueKeywords.in: Rename the css style name.
        * css/html.css: Rename the css style name.
        (input::-webkit-input-speech-button):
        * html/HTMLAttributeNames.in: Rename the @speech attribute.
        * html/HTMLInputElement.cpp: Update code using the attribute.
        (WebCore::HTMLInputElement::parseMappedAttribute):
        (WebCore::HTMLInputElement::isSpeechEnabled):
        * html/HTMLInputElement.idl: Rename the @speech attribute.

2010-09-29  MORITA Hajime  <morrita@google.com>

        [Chromium] failed to build without ACCELERATED_COMPOSITING
        https://bugs.webkit.org/show_bug.cgi?id=46793

        Moved constant definitions from inside ACCELERATED_COMPOSITING to
        outside of the condition.
        
        * WebCore.gypi:
        * platform/graphics/chromium/VideoFrameChromium.cpp: Added just for defining constants.
        * platform/graphics/chromium/VideoLayerChromium.cpp:

2010-09-28  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: [Resources panel] Need more visible "at a glance".
        https://bugs.webkit.org/show_bug.cgi?id=45657

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/DataGrid.js:
        (WebInspector.DataGrid):
        (WebInspector.DataGrid.prototype.updateWidths):
        (WebInspector.DataGrid.prototype.sortNodes):
        (WebInspector.DataGrid.prototype._resizerDragging):
        (WebInspector.DataGrid.prototype._endResizerDragging):
        (WebInspector.DataGridNode.prototype.selectable.true.get element):
        (WebInspector.DataGridNode.prototype.createCells):
        (WebInspector.DataGridNode.prototype.refresh):
        * inspector/front-end/Images/networkIcon.png: Copied from WebCore/inspector/front-end/Images/resourcesIcon.png.
        * inspector/front-end/NetworkPanel.js: Added.
        * inspector/front-end/Settings.js:
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.css:
        (.toolbar-item.network .toolbar-icon):
        (.data-grid .data-container):
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        (WebInspector._createPanels):
        (WebInspector.updateResource):
        * inspector/front-end/networkPanel.css: Added.

2010-09-28  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: move pauseOnExceptionState under control of InspectorState
        It is Inspector Protocol cleanup activity.
        The actual state of this flag can be obtained as a return value of setPauseOnExceptionState command
        or as a value in InspectorState object.

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

        * inspector/Inspector.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::getInspectorState):
        (WebCore::InspectorController::populateScriptObjects):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::setPauseOnExceptionsState):
        (WebCore::InspectorDebuggerAgent::pauseOnExceptionsState):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._togglePauseOnExceptions):
        * inspector/front-end/inspector.js:
        (WebInspector.doLoadedDone.populateInspectorState):
        (WebInspector.doLoadedDone):
        (WebInspector.reportProtocolError):

2010-09-28  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Martin Robinson.

        check USE(GSTREAMER) instead of ENABLE(VIDEO) in gstreamer/ files
        https://bugs.webkit.org/show_bug.cgi?id=46717

        Guard the gstreamer/ files with USE(GSTREAMER), which is more
        explicit than ENABLE(VIDEO).

        * GNUmakefile.am: Define WTF_USE_GSTREAMER only if GStreamer
        support is enabled.
        * platform/graphics/gstreamer/DataSourceGStreamer.cpp:
        * platform/graphics/gstreamer/DataSourceGStreamer.h:
        * platform/graphics/gstreamer/GOwnPtrGStreamer.cpp:
        * platform/graphics/gstreamer/GOwnPtrGStreamer.h:
        * platform/graphics/gstreamer/GStreamerGWorld.cpp:
        * platform/graphics/gstreamer/GStreamerGWorld.h:
        * platform/graphics/gstreamer/ImageGStreamer.h:
        * platform/graphics/gstreamer/ImageGStreamerCG.mm:
        * platform/graphics/gstreamer/ImageGStreamerCairo.cpp:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        * platform/graphics/gstreamer/PlatformVideoWindow.h:
        * platform/graphics/gstreamer/PlatformVideoWindowEfl.cpp:
        * platform/graphics/gstreamer/PlatformVideoWindowGtk.cpp:
        * platform/graphics/gstreamer/VideoSinkGStreamer.cpp:
        * platform/graphics/gstreamer/VideoSinkGStreamer.h:
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.h:

2010-09-28  Kent Tamura  <tkent@chromium.org>

        Unreviewed, windows build fix for r68629.

        * WebCore.vcproj/WebCore.vcproj: Add TimeInputType.{cpp,h}

2010-09-28  Johnny Ding  <jnd@chromium.org>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=41292
        Pass the right popupAllowed flag to current execution frame,
        so WebKit can get right gesture status for popups initiated
        from plugins.
        This also makes v8 binding's ScriptController::processingUserGesture
        match what jsc version.

        Test: plugins/plugin-initiate-popup-window.html

        * bindings/v8/NPV8Object.cpp:
        (_NPN_EvaluateHelper):
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::ScriptController):
        (WebCore::ScriptController::processingUserGesture):
        * bindings/v8/ScriptController.h:
        (WebCore::ScriptController::setAllowPopupsFromPlugin):
        (WebCore::ScriptController::allowPopupsFromPlugin):

2010-09-28  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Refactor HTMLInputElement: Introducing InputType class and classes
        for each input element types.
        https://bugs.webkit.org/show_bug.cgi?id=45872

        No new tests because this doesn't change any behavior.

        * Android.mk: Add new files.
        * CMakeLists.txt: ditto.
        * GNUmakefile.am: ditto.
        * WebCore.gypi: ditto.
        * WebCore.pro: ditto.
        * WebCore.vcproj/WebCore.vcproj: ditto.
        * WebCore.xcodeproj/project.pbxproj: ditto.
        * html/BaseTextInputType.cpp: Added.
        (WebCore::BaseTextInputType::isTextType):
        (WebCore::BaseTextInputType::patternMismatch):
        * html/BaseTextInputType.h: Added.
        (WebCore::BaseTextInputType::BaseTextInputType):
        * html/ButtonInputType.cpp: Added.
        (WebCore::ButtonInputType::create):
        (WebCore::ButtonInputType::formControlType):
        * html/ButtonInputType.h: Added.
        (WebCore::ButtonInputType::ButtonInputType):
        * html/CheckboxInputType.cpp: Added.
        (WebCore::CheckboxInputType::create):
        (WebCore::CheckboxInputType::formControlType):
        * html/CheckboxInputType.h: Added.
        (WebCore::CheckboxInputType::CheckboxInputType):
        * html/ColorInputType.cpp: Added.
        (WebCore::ColorInputType::create):
        (WebCore::ColorInputType::formControlType):
        * html/ColorInputType.h: Added.
        (WebCore::ColorInputType::ColorInputType):
        * html/DateInputType.cpp: Added.
        (WebCore::DateInputType::create):
        (WebCore::DateInputType::formControlType):
        * html/DateInputType.h: Added.
        (WebCore::DateInputType::DateInputType):
        * html/DateTimeInputType.cpp: Added.
        (WebCore::DateTimeInputType::create):
        (WebCore::DateTimeInputType::formControlType):
        * html/DateTimeInputType.h: Added.
        (WebCore::DateTimeInputType::DateTimeInputType):
        * html/DateTimeLocalInputType.cpp: Added.
        (WebCore::DateTimeLocalInputType::create):
        (WebCore::DateTimeLocalInputType::formControlType):
        * html/DateTimeLocalInputType.h: Added.
        (WebCore::DateTimeLocalInputType::DateTimeLocalInputType):
        * html/EmailInputType.cpp: Added.
        (WebCore::EmailInputType::create):
        (WebCore::EmailInputType::formControlType):
        * html/EmailInputType.h: Added.
        (WebCore::EmailInputType::EmailInputType):
        * html/FileInputType.cpp: Added.
        (WebCore::FileInputType::create):
        (WebCore::FileInputType::formControlType):
        * html/FileInputType.h: Added.
        (WebCore::FileInputType::FileInputType):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::HTMLInputElement): Initialize m_inputType.
        (WebCore::HTMLInputElement::patternMismatch): Delegate to InputType.
        (WebCore::HTMLInputElement::updateType): Update m_inputType with new type.
        (WebCore::HTMLInputElement::formControlType): Delegate to InputType.
        (WebCore::HTMLInputElement::isTextField): ditto.
        (WebCore::HTMLInputElement::isTextType): ditto.
        * html/HTMLInputElement.h:
        * html/HiddenInputType.cpp: Added.
        (WebCore::HiddenInputType::create):
        (WebCore::HiddenInputType::formControlType):
        * html/HiddenInputType.h: Added.
        (WebCore::HiddenInputType::HiddenInputType):
        * html/ImageInputType.cpp: Added.
        (WebCore::ImageInputType::create):
        (WebCore::ImageInputType::formControlType):
        * html/ImageInputType.h: Added.
        (WebCore::ImageInputType::ImageInputType):
        * html/InputType.cpp: Added.
        (WebCore::createInputTypeFactoryMap):
        (WebCore::InputType::create):
        (WebCore::InputType::createText):
        (WebCore::InputType::~InputType):
        (WebCore::InputType::isTextField):
        (WebCore::InputType::isTextType):
        (WebCore::InputType::patternMismatch):
        (WebCore::InputTypeNames::button):
        (WebCore::InputTypeNames::checkbox):
        (WebCore::InputTypeNames::color):
        (WebCore::InputTypeNames::date):
        (WebCore::InputTypeNames::datetime):
        (WebCore::InputTypeNames::datetimelocal):
        (WebCore::InputTypeNames::email):
        (WebCore::InputTypeNames::file):
        (WebCore::InputTypeNames::hidden):
        (WebCore::InputTypeNames::image):
        (WebCore::InputTypeNames::isindex):
        (WebCore::InputTypeNames::month):
        (WebCore::InputTypeNames::number):
        (WebCore::InputTypeNames::password):
        (WebCore::InputTypeNames::radio):
        (WebCore::InputTypeNames::range):
        (WebCore::InputTypeNames::reset):
        (WebCore::InputTypeNames::search):
        (WebCore::InputTypeNames::submit):
        (WebCore::InputTypeNames::telephone):
        (WebCore::InputTypeNames::text):
        (WebCore::InputTypeNames::time):
        (WebCore::InputTypeNames::url):
        (WebCore::InputTypeNames::week):
        * html/InputType.h: Added.
        (WebCore::InputType::InputType):
        (WebCore::InputType::element):
        * html/IsIndexInputType.cpp: Added.
        (WebCore::IsIndexInputType::create):
        (WebCore::IsIndexInputType::formControlType):
        * html/IsIndexInputType.h: Added.
        (WebCore::IsIndexInputType::IsIndexInputType):
        * html/MonthInputType.cpp: Added.
        (WebCore::MonthInputType::create):
        (WebCore::MonthInputType::formControlType):
        * html/MonthInputType.h: Added.
        (WebCore::MonthInputType::MonthInputType):
        * html/NumberInputType.cpp: Added.
        (WebCore::NumberInputType::create):
        (WebCore::NumberInputType::formControlType):
        * html/NumberInputType.h: Added.
        (WebCore::NumberInputType::NumberInputType):
        * html/PasswordInputType.cpp: Added.
        (WebCore::PasswordInputType::create):
        (WebCore::PasswordInputType::formControlType):
        * html/PasswordInputType.h: Added.
        (WebCore::PasswordInputType::PasswordInputType):
        * html/RadioInputType.cpp: Added.
        (WebCore::RadioInputType::create):
        (WebCore::RadioInputType::formControlType):
        * html/RadioInputType.h: Added.
        (WebCore::RadioInputType::RadioInputType):
        * html/RangeInputType.cpp: Added.
        (WebCore::RangeInputType::create):
        (WebCore::RangeInputType::formControlType):
        * html/RangeInputType.h: Added.
        (WebCore::RangeInputType::RangeInputType):
        * html/ResetInputType.cpp: Added.
        (WebCore::ResetInputType::create):
        (WebCore::ResetInputType::formControlType):
        * html/ResetInputType.h: Added.
        (WebCore::ResetInputType::ResetInputType):
        * html/SearchInputType.cpp: Added.
        (WebCore::SearchInputType::create):
        (WebCore::SearchInputType::formControlType):
        * html/SearchInputType.h: Added.
        (WebCore::SearchInputType::SearchInputType):
        * html/SubmitInputType.cpp: Added.
        (WebCore::SubmitInputType::create):
        (WebCore::SubmitInputType::formControlType):
        * html/SubmitInputType.h: Added.
        (WebCore::SubmitInputType::SubmitInputType):
        * html/TelephoneInputType.cpp: Added.
        (WebCore::TelephoneInputType::create):
        (WebCore::TelephoneInputType::formControlType):
        * html/TelephoneInputType.h: Added.
        (WebCore::TelephoneInputType::TelephoneInputType):
        * html/TextFieldInputType.cpp: Added.
        (WebCore::TextFieldInputType::isTextField):
        * html/TextFieldInputType.h: Added.
        (WebCore::TextFieldInputType::TextFieldInputType):
        * html/TextInputType.cpp: Added.
        (WebCore::TextInputType::create):
        (WebCore::TextInputType::formControlType):
        * html/TextInputType.h: Added.
        (WebCore::TextInputType::TextInputType):
        * html/TimeInputType.cpp: Added.
        (WebCore::TimeInputType::create):
        (WebCore::TimeInputType::formControlType):
        * html/TimeInputType.h: Added.
        (WebCore::TimeInputType::TimeInputType):
        * html/URLInputType.cpp: Added.
        (WebCore::URLInputType::create):
        (WebCore::URLInputType::formControlType):
        * html/URLInputType.h: Added.
        (WebCore::URLInputType::URLInputType):
        * html/WeekInputType.cpp: Added.
        (WebCore::WeekInputType::create):
        (WebCore::WeekInputType::formControlType):
        * html/WeekInputType.h: Added.
        (WebCore::WeekInputType::WeekInputType):

2010-09-28  David Hyatt  <hyatt@apple.com>

        Reviewed by Maciej Stachowiak.

        https://bugs.webkit.org/show_bug.cgi?id=46782, rename the top and bottom margin quirk getters/setters.

        Also do a bit of cleanup for block flow roots.  Make sure they don't try to propagate overhanging floats out
        to ancestors.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::collapseMargins):
        (WebCore::RenderBlock::setCollapsedBottomMargin):
        (WebCore::RenderBlock::addOverhangingFloats):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::RenderObject):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isMarginBeforeQuirk):
        (WebCore::RenderObject::isMarginAfterQuirk):
        (WebCore::RenderObject::setMarginBeforeQuirk):
        (WebCore::RenderObject::setMarginAfterQuirk):

2010-09-28  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=46780
        
        Rename the pos/neg/collapsed margin methods.  Rename all the members of the RenderBlockRareData struct.
        No logical changes.  Just renames.

        * editing/TextIterator.cpp:
        (WebCore::shouldEmitExtraNewlineForNode):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::MarginInfo::MarginInfo):
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::collapseMargins):
        (WebCore::RenderBlock::clearFloatsIfNeeded):
        (WebCore::RenderBlock::estimateVerticalPosition):
        (WebCore::RenderBlock::setCollapsedBottomMargin):
        (WebCore::RenderBlock::layoutBlockChild):
        (WebCore::RenderBlock::paintChildren):
        (WebCore::RenderBlock::lowestPosition):
        (WebCore::RenderBlock::setMaxMarginBeforeValues):
        (WebCore::RenderBlock::setMaxMarginAfterValues):
        (WebCore::RenderBlock::absoluteRects):
        (WebCore::RenderBlock::absoluteQuads):
        (WebCore::RenderBlock::rectWithOutlineForRepaint):
        (WebCore::RenderBlock::addFocusRingRects):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::maxPosMarginBefore):
        (WebCore::RenderBlock::maxNegMarginBefore):
        (WebCore::RenderBlock::maxPosMarginAfter):
        (WebCore::RenderBlock::maxNegMarginAfter):
        (WebCore::RenderBlock::initMaxMarginValues):
        (WebCore::RenderBlock::maxMarginBefore):
        (WebCore::RenderBlock::maxMarginAfter):
        (WebCore::RenderBlock::RenderBlockRareData::RenderBlockRareData):
        (WebCore::RenderBlock::RenderBlockRareData::beforePosDefault):
        (WebCore::RenderBlock::RenderBlockRareData::beforeNegDefault):
        (WebCore::RenderBlock::RenderBlockRareData::afterPosDefault):
        (WebCore::RenderBlock::RenderBlockRareData::afterNegDefault):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeLogicalHeight):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::collapsedMarginBefore):
        (WebCore::RenderBox::collapsedMarginAfter):
        (WebCore::RenderBox::maxMarginBefore):
        (WebCore::RenderBox::maxMarginAfter):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):

2010-09-28  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] wxMSW build fix. Don't use multiple inheritance in PopupMenuWx to avoid debug build
        compiler error about ambiguity over which new override (wx's or FastAllocBase's) to use.

        * platform/wx/PopupMenuWx.cpp:
        (WebCore::PopupMenuEventHandler::PopupMenuEventHandler):
        (WebCore::PopupMenuEventHandler::OnMenuItemSelected):
        (WebCore::PopupMenuWx::PopupMenuWx):
        (WebCore::PopupMenuWx::show):
        * platform/wx/PopupMenuWx.h:

2010-09-28  Xiaomei Ji  <xji@chromium.org>

        Reviewed by NOBODY (revert unsquashed git commits)

        Revert change sets 68583 to 68590, which are un-squashed git-commits: Performance improvement for FontLinux regarding issue 46374.
        https://bugs.webkit.org/show_bug.cgi?id=46374

2010-09-28  Marc-Antoine Ruel  <maruel@chromium.org>

        Reviewed by Tony Chang.

        Split webcore_html off webcore_remaining.

        webcore_remaining is still too large for certain 32 bits toolsets.
        https://bugs.webkit.org/show_bug.cgi?id=46445

        * WebCore.gyp/WebCore.gyp:

2010-09-28  Jia Pu  <jpu@apple.com>

        Reviewed by Dan Bernstein.

        Delete and forward delete shouldn't start autocorrection panel timer.
        https://bugs.webkit.org/show_bug.cgi?id=46679
        <rdar://problem/8463917>

        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::markMisspellingsAfterTyping): Only start correction panel timer
          when the editing command is InsertText.
        (WebCore::TypingCommand::typingAddedToOpenCommand): Add an argument to pass in command type.

        * editing/TypingCommand.h: Add an argument to typingAddedToOpenCommand().

2010-09-28  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Dimitri Glazkov.

        No back/forward list entry added when submitting a form via an onclick handler inside a frame
        https://bugs.webkit.org/show_bug.cgi?id=44140
        
        Lock the back/forward list for JavaScript form submissions inside frames
        only if they're not in response to user gestures.

        Tests: fast/history/form-submit-in-frame-via-onclick.html
               fast/history/form-submit-in-frame.html

        * loader/RedirectScheduler.cpp:
        (WebCore::RedirectScheduler::scheduleFormSubmission):

2010-09-28  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

        Fix typo in previous checkin.

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

2010-09-28  Nat Duca  <nduca@chromium.org>

        Reviewed by James Robinson.

        [chromium] invalidateRootLayerRect needs to schedule compositor
        https://bugs.webkit.org/show_bug.cgi?id=46219

        Update comments on LayerChromium commit/display functions to clarify
        their limitations. Remove unused dirtying logic from 
        LayerRendererChromium.

        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::setNeedsCommit):
        (WebCore::LayerChromium::setNeedsDisplay):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::LayerRendererChromium):
        (WebCore::LayerRendererChromium::present):
        * platform/graphics/chromium/LayerRendererChromium.h:

2010-09-28  Jenn Braithwaite  <jennb@chromium.org>

        Reviewed by Dmitry Titov.

        Added oldPage param to FrameLoaderClient::didTransferChildFrameToNewDocument.
        https://bugs.webkit.org/show_bug.cgi?id=46663

        No new tests. API addition only. Will be used in separate patch.

        * loader/EmptyClients.h:
        (WebCore::EmptyFrameLoaderClient::didTransferChildFrameToNewDocument):
        * loader/FrameLoaderClient.h:
        * page/Frame.cpp:
        (WebCore::Frame::transferChildFrameToNewDocument):
        Pass former page to didTransferChildFrameToNewDocument.

2010-09-28  W. James MacLean  <wjmaclean@chromium.org>

        Reviewed by James Robinson.

        Scaled Resized images are blurred when sent to Skia
        https://bugs.webkit.org/show_bug.cgi?id=42370

        This patch modifies ImageSkia.cpp to fix the calculation of resampled
        bitmap sizes so as to include the transform matrix of the canvas.

        Test: svg/custom/image-rescale.svg

        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::computeResamplingMode):
        (WebCore::drawResampledBitmap):

2010-09-28  James Robinson  <jamesr@chromium.org>

        [chromium] Decrease warning level on chromium linux temporarily. This is causing failures on some bots

        * WebCore.gyp/WebCore.gyp:

2010-09-27  James Robinson  <jamesr@chromium.org>

        Reviewed by Tony Chang.

        [chromium] Increase warning level for chromium linux build
        https://bugs.webkit.org/show_bug.cgi?id=46687

        This sets the chromium_code gyp variable to 1 for the chromium
        linux WebCore build and fixes the warnings that exposes.  This
        matches the chromium mac build's compiler settings more closely
        and should cut down on the number of patches that break mac but
        compile cleaning on linux.

        * WebCore.gyp/WebCore.gyp:
        * platform/chromium/ScrollbarThemeChromiumLinux.cpp:
        (WebCore::ScrollbarThemeChromiumLinux::paintButton):
        * platform/graphics/chromium/FontLinux.cpp:
        (WebCore::TextRunWalker::nextScriptRun):
        (WebCore::TextRunWalker::getTextRun):
        (WebCore::TextRunWalker::getNormalizedTextRun):
        (WebCore::TextRunWalker::setGlyphXPositions):
        (WebCore::glyphIndexForXPositionInScriptRun):
        (WebCore::Font::offsetForPositionForComplexText):
        (WebCore::Font::selectionRectForComplexText):
        * platform/graphics/chromium/HarfbuzzSkia.cpp:
        (WebCore::getOutlinePoint):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::updateRootLayerTextureRect):
        * platform/graphics/gpu/Texture.cpp:
        (WebCore::copySubRect):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::readbackHardwareToSoftware):
        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::setSize):
        * platform/image-decoders/gif/GIFImageDecoder.h:

2010-09-28  Stephen White  <senorblanco@chromium.org>

        Reviewed by Csaba Osztrogonác.

        Fix for r68521 to build on VS2008/Release.

        * html/DocTypeStrings.gperf:
        Don't emit "#include <string.h>" here, since we're inside a namespace.
        * make-hash-tools.pl:
        Emit #include <string.h> manually where required.
        * platform/ColorData.gperf:
        Don't emit "#include <string.h>" here, since we're inside a namespace.

2010-09-28  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

        Right now we have two properties named margin-top-collapse and margin-after-collapse.  They are proprietary and only used by Safari RSS.

        I am adding margin-before-collapse and margin-after-collapse and just aliasing the old properties to the new ones.
        This way we have some names that are directionally independent.

        Note that these properties aren't like other directional properties.  They are about what to do with the before side and after side of
        your block's margins when collapsing with adjacent blocks.  The meaning of before/after depend on the block-flow directionality
        of the containing block.

        Computed style tests all changed and the remove-shorthand.html test covers manipulation of the shorthand.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSPropertyLonghand.cpp:
        (WebCore::initShorthandMap):
        * css/CSSPropertyNames.in:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::MarginInfo::MarginInfo):
        (WebCore::RenderBlock::isSelfCollapsingBlock):
        (WebCore::RenderBlock::collapseMargins):
        (WebCore::RenderBlock::layoutBlockChild):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::diff):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::marginBeforeCollapse):
        (WebCore::InheritedFlags::marginAfterCollapse):
        (WebCore::InheritedFlags::setMarginBeforeCollapse):
        (WebCore::InheritedFlags::setMarginAfterCollapse):
        (WebCore::InheritedFlags::initialMarginBeforeCollapse):
        (WebCore::InheritedFlags::initialMarginAfterCollapse):
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        * rendering/style/StyleRareNonInheritedData.h:

2010-09-28  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [Cairo] FreeType fonts should obey FontConfig hinting/anti-aliasing settings
        https://bugs.webkit.org/show_bug.cgi?id=46740

        When creating a font from a FontConfig pattern, use the FontConfig pattern's
        hinting and anti-aliasing settings. This follows the Chromium Linux approach
        of having FontConfig settings take precedence over GTK+ settings, as GTK+
        settings cannot be configured per-font and per-font-size.

        Test: platform/gtk/fonts/fontconfig-aliasing-settings.html

        * platform/graphics/cairo/FontPlatformDataFreeType.cpp:
        (WebCore::convertFontConfigSubpixelOrder): Added this helper which converts
        the FontConfig subpixel order into the cairo equivalent.
        (WebCore::convertFontConfigHintStyle): Added this helper which converts the
        FontConfig hint style into the cairo equivalent.
        (WebCore::setCairoFontOptionsFromFontConfigPattern): Added this helper which
        reads the font rendering settings from a pattern and translates them into the
        appropriate cairo_font_options_t settings.
        (WebCore::FontPlatformData::FontPlatformData): When creating a font from a
        FontConfig pattern use setCairoFontOptionsFromFontConfigPattern to get the
        appropriate rendering options for the font.

2010-09-28  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler and Dave Hyatt.

        Vertical scroll bar on apple.com is too short with WebKit2
        <rdar://problem/8379230>
        https://bugs.webkit.org/show_bug.cgi?id=46739

        Adds a function to recalculate the scrollbars to take advantage of
        a changed window re-sizer rect.

        * WebCore.exp.in:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::windowResizerRectChanged):
        * platform/ScrollView.h:

2010-09-28  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=46750
        
        Rename the MarginInfo members and functions to be block-flow independent.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::MarginInfo::MarginInfo):
        (WebCore::RenderBlock::adjustPositionedBlock):
        (WebCore::RenderBlock::adjustFloatingBlock):
        (WebCore::RenderBlock::collapseMargins):
        (WebCore::RenderBlock::clearFloatsIfNeeded):
        (WebCore::RenderBlock::estimateVerticalPosition):
        (WebCore::RenderBlock::setCollapsedBottomMargin):
        (WebCore::RenderBlock::handleBottomOfBlock):
        (WebCore::RenderBlock::layoutBlockChild):
        (WebCore::RenderBlock::applyAfterBreak):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::MarginInfo::setAtBeforeSideOfBlock):
        (WebCore::RenderBlock::MarginInfo::setAtAfterSideOfBlock):
        (WebCore::RenderBlock::MarginInfo::setMarginBeforeQuirk):
        (WebCore::RenderBlock::MarginInfo::setMarginAfterQuirk):
        (WebCore::RenderBlock::MarginInfo::setDeterminedMarginBeforeQuirk):
        (WebCore::RenderBlock::MarginInfo::atBeforeSideOfBlock):
        (WebCore::RenderBlock::MarginInfo::canCollapseWithMarginBefore):
        (WebCore::RenderBlock::MarginInfo::canCollapseWithMarginAfter):
        (WebCore::RenderBlock::MarginInfo::canCollapseMarginBeforeWithChildren):
        (WebCore::RenderBlock::MarginInfo::canCollapseMarginAfterWithChildren):
        (WebCore::RenderBlock::MarginInfo::determinedMarginBeforeQuirk):
        (WebCore::RenderBlock::MarginInfo::marginBeforeQuirk):
        (WebCore::RenderBlock::MarginInfo::marginAfterQuirk):

2010-09-28  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        Improved the handling of soft hyphens in Copy and Find operations, addressing the following
        bugs:

        <rdar://problem/7938878> Soft hyphenation and the clipboard
        https://bugs.webkit.org/show_bug.cgi?id=11154

        window.getSelection().toString() breaks soft hyphen &shy;
        https://bugs.webkit.org/show_bug.cgi?id=26774

        <rdar://problem/5640505> soft hyphen breaks search function
        https://bugs.webkit.org/show_bug.cgi?id=16675

        Test: fast/text/find-soft-hyphen.html

        Changed line layout code to not skip over soft hyphens but rather include them in the text
        boxes. Changed font code to render the soft hyphen character as a zero width space, so that
        the former change will not affect rendering of soft hyphens in the middle of the line. Also
        changed line layout code to mark text boxes where hyphenation occurred due to a soft hyphen
        as hyphenated, so that the hyphen string specified in CSS will be appended to them.

        Not omitting the soft hyphens from the text boxes makes the text iterator emit them, which
        solves the Copy and plain-text conversion issues. Previously, the iterator would emit a space
        to account for non-rendered characters between adjacent boxes, which was wrong in this case.

        To make Find work, soft hyphens are folded into 0, which is ignorable in the collation used
        for Find.

        * editing/TextIterator.cpp:
        (WebCore::foldQuoteMarkOrSoftHyphen): Renamed foldQuoteMark() to this and added folding of
        soft hyphen to 0.
        (WebCore::foldQuoteMarksAndSoftHyphens): Renamed foldQuoteMarks() to thid and added folding
        of soft hyphen to 0.
        (WebCore::SearchBuffer::SearchBuffer): Updated for renames.
        (WebCore::SearchBuffer::append): Ditto.
        * platform/graphics/Font.h:
        (WebCore::Font::treatAsSpace): Replaced number literal with name.
        (WebCore::Font::treatAsZeroWidthSpace): Added softHyphen.
        * platform/graphics/GlyphPageTreeNode.cpp:
        (WebCore::GlyphPageTreeNode::initializePage): Get the zero width space glyph for soft hyphen.
        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::ComplexTextController::collectComplexTextRuns): Removed special handling that made
        a trailing soft hyphen render as hyphen-minus. All soft hyphens are now rendered as zero width
        spaces, and where a line break actually occurs at a soft hyphen, rendering code appends the
        CSS-specified hyphenate character to the text run that is passed to us here.
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::chopMidpointsAt): Removed this function, which was only used for skipping over soft
        hyphens.
        (WebCore::checkMidpoints): Removed code related to skipping over soft hyphens.
        (WebCore::RenderBlock::findNextLineBreak): Removed code to skip over soft hyphens. Ignore
        a line break opportunity at a soft hyphen if the style specifies 'hyphens: none'. Set
        'hyphenated' to true if a line break occurs at a soft hyphen.
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::hyphenString): Changed the assertion to allow querying for the hyphen
        string for 'hyphens: manual'.

2010-09-28  Martin Robinson  <mrobinson@igalia.com>

        More GTK+ build fixes after r68521.

        * GNUmakefile.am: Added proper dependency tracking for some
        new autogenerated files.

2010-09-28  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Text drawing taints GraphicsContext's QPainter::pen()
        https://bugs.webkit.org/show_bug.cgi?id=46744

        Test: fast/canvas/canvas-style-intact-after-text.html

        * platform/graphics/qt/FontQt.cpp:
        (WebCore::drawTextCommon): Make sure the QPainter's pen is
        restored after filling and/or stroking text.

2010-09-28  Jia Pu  <jpu@apple.com>

        Reviewed by Dan Bernstein.

        Autocorrection panel is shown at incorrect location when WebView is scrolled.
        https://bugs.webkit.org/show_bug.cgi?id=46531
        <rdar://problem/8455376>

        * dom/Range.h: Make getBorderAndTextQuads() public so that it can be used by Editor.
        * editing/Editor.cpp:
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges): Replaced call to textQuads()
          with getBorderAndTextQuads().

2010-09-28  Andrei Popescu  <andreip@google.com>

        Reviewed by Jeremy Orlow.

        IDBRequest should not have a method called abort.
        https://bugs.webkit.org/show_bug.cgi?id=46720

        IDBRequest::abort() was dropped from the spec following discussion in
        http://www.w3.org/Bugs/Public/show_bug.cgi?id=10165

        * storage/IDBRequest.cpp:
        (WebCore::IDBRequest::IDBRequest):
        (WebCore::IDBRequest::~IDBRequest):
        (WebCore::IDBRequest::resetReadyState):
        (WebCore::IDBRequest::timerFired):
        (WebCore::IDBRequest::scheduleEvent):
        * storage/IDBRequest.h:
        * storage/IDBRequest.idl:

2010-09-28  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        CrashTracer: 1,382 crashes in Safari at com.apple.WebCore: WebCore::VisiblePosition::canonicalPosition + 78
        https://bugs.webkit.org/show_bug.cgi?id=45927

        AXTextMarkers store pointers to Nodes without any retain or reference. If a Node is deallocated and then
        a client tries to use a text marker that references that node, it leads to this crash.

        The AXObjectCache instance now keeps a HashSet of Node's being used. When a node becomes deallocated, it removes itself
        from the HashSet. When creating a VisiblePosition from an AXTextMarker, the cache can then check if the node is valid
        before proceeding.

        Test: platform/mac/accessibility/crash-invalid-text-marker-node.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::visiblePositionForTextMarkerData):
        (WebCore::AXObjectCache::textMarkerDataForVisiblePosition):
            Modify to check whether a node is valid before proceeeding.
        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::setNodeInUse):
        (WebCore::AXObjectCache::removeNodeForUse):
        (WebCore::AXObjectCache::isNodeInUse):
            Methods for managing whether a node is in use by text markers.
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (textMarkerForVisiblePosition):
        (-[AccessibilityObjectWrapper textMarkerForVisiblePosition:]):
        (visiblePositionForTextMarker):
        (-[AccessibilityObjectWrapper visiblePositionForTextMarker:]):
        (visiblePositionForStartOfTextMarkerRange):
        (visiblePositionForEndOfTextMarkerRange):
        (-[AccessibilityObjectWrapper doAXAttributedStringForTextMarkerRange:]):
        (textMarkerRangeFromVisiblePositions):
        (-[AccessibilityObjectWrapper textMarkerRangeFromVisiblePositions:endPosition:]):
        (-[AccessibilityObjectWrapper visiblePositionRangeForTextMarkerRange:]):
        (-[AccessibilityObjectWrapper textMarkerRangeForSelection]):
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):
        (-[AccessibilityObjectWrapper doAXAttributedStringForRange:]):
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):
             Change these calls so that the axObjectCache() can be passed in to create the visible position.
        * dom/Document.cpp:
        (WebCore::Document::axObjectCacheExists):
        * dom/Document.h:
        * dom/Node.cpp:
        (WebCore::Node::~Node):
             If accessibility is enabled, inform the axObjectCache() that this node is disappearing.

2010-09-28  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Add AudioDestinationNode files
        https://bugs.webkit.org/show_bug.cgi?id=45009

        No new tests since audio API is not yet implemented.

        * webaudio/AudioDestinationNode.cpp: Added.
        (WebCore::AudioDestinationNode::AudioDestinationNode):
        (WebCore::AudioDestinationNode::~AudioDestinationNode):
        (WebCore::AudioDestinationNode::initialize):
        (WebCore::AudioDestinationNode::uninitialize):
        (WebCore::AudioDestinationNode::provideInput):
        * webaudio/AudioDestinationNode.h: Added.
        (WebCore::AudioDestinationNode::create):
        (WebCore::AudioDestinationNode::process):
        (WebCore::AudioDestinationNode::reset):
        (WebCore::AudioDestinationNode::currentTime):
        (WebCore::AudioDestinationNode::sampleRate):
        (WebCore::AudioDestinationNode::numberOfChannels):
        * webaudio/AudioDestinationNode.idl: Added.

2010-09-28  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        audio engine: audio output classes
        https://bugs.webkit.org/show_bug.cgi?id=34716

        No new tests since audio API is not yet implemented.

        * platform/audio/AudioDestination.h: Added.
        (WebCore::AudioDestination::~AudioDestination):
        * platform/audio/mac/AudioDestinationMac.cpp: Added.
        (WebCore::AudioDestination::create):
        (WebCore::AudioDestination::hardwareSampleRate):
        (WebCore::AudioDestinationMac::AudioDestinationMac):
        (WebCore::AudioDestinationMac::~AudioDestinationMac):
        (WebCore::AudioDestinationMac::configure):
        (WebCore::AudioDestinationMac::start):
        (WebCore::AudioDestinationMac::stop):
        (WebCore::AudioDestinationMac::render):
        (WebCore::AudioDestinationMac::inputProc):
        * platform/audio/mac/AudioDestinationMac.h: Added.
        (WebCore::AudioDestinationMac::isPlaying):
        (WebCore::AudioDestinationMac::sampleRate):

2010-09-28  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Add AudioGain files
        https://bugs.webkit.org/show_bug.cgi?id=46285

        No new tests since audio API is not yet implemented.

        * webaudio/AudioGain.h: Added.
        (WebCore::AudioGain::create):
        (WebCore::AudioGain::AudioGain):
        * webaudio/AudioGain.idl: Added.

2010-09-28  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Fix possible illegal float values in AudioParam
        https://bugs.webkit.org/show_bug.cgi?id=46681

        No new tests since audio API is not yet implemented.

        * webaudio/AudioParam.h:
        (WebCore::AudioParam::setValue):

2010-09-28  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Rename member variable in MediaPlayerPrivateQt 

        * platform/graphics/qt/MediaPlayerPrivateQt.cpp:
        * platform/graphics/qt/MediaPlayerPrivateQt.h:

2010-09-28  Andras Becsi  <abecsi@webkit.org>

        [Gtk] Build fix. Remove leftover trailing backslash.

        * GNUmakefile.am:

2010-09-28  Andras Becsi  <abecsi@webkit.org>

        Unreviewed.

        [Gtk] Build fix after r68521

        No new tests needed.

        * GNUmakefile.am:

2010-09-28  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Rename MediaPlayerPrivate to MediaPlayerPrivateQt/Phonon

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

        * platform/graphics/MediaPlayer.cpp:
        * platform/graphics/qt/MediaPlayerPrivateQt.cpp:
        * platform/graphics/qt/MediaPlayerPrivateQt.h:
        * platform/graphics/qt/MediaPlayerPrivatePhonon.cpp:
        * platform/graphics/qt/MediaPlayerPrivatePhonon.h:

2010-09-28  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Csaba Osztrogonác.

        Undefined reference errors when linking due to gperf and inlining.
        webkit.org/b/29244

        EFL CMake changes by Leandro Pereira <leandro@profusion.mobi>

        Refactor gperf code generation and usage to fix the debug build with gcc>4.4.
        Hitherto gperf generated C code, these files were included in multiple C++ files across WebCore
        to access the functionality provided. This resulted in debug build failure with newer gcc versions
        because of a behaviour change of gcc, which disables C style inlining in debug mode.
        The make-hash-tools.pl script lets gperf generate C++ code for all gperf files now, which are compiled
        in their own compilation unit.
        The functionality provided by the generated code is wrapped behind HashTools.h, so there is no need
        for multiple inclusions of generated C files to access these functions.

        No new tests needed.

        * CMakeLists.txt:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.pri:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSParser.cpp:
        * css/makeprop.pl:
        * css/makevalues.pl:
        * html/DocTypeStrings.gperf:
        * html/HTMLDocument.cpp:
        * make-hash-tools.pl:
        * platform/ColorData.gperf:
        * platform/graphics/Color.cpp:

2010-09-28  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Canvas: Crash when setting a font with size in 'ex' units
        https://bugs.webkit.org/show_bug.cgi?id=46538

        update() the style's font after setting the style's font description.
        Needed because CSSPrimitiveValue::computeLengthDouble() later assumes
        that the style's font is properly initialized (for xHeight().)

        Fixes crash on IE test center's canvas-text-font-002 test.

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

2010-09-28  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Remove support for Qt 4.5
        https://bugs.webkit.org/show_bug.cgi?id=46718

        Remove the code for versions of Qt prior to 4.6.

        * WebCore.pro:
        * features.pri:
        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::QNetworkReplyHandler):
        (WebCore::QNetworkReplyHandler::start):
        * platform/network/qt/ResourceRequestQt.cpp:
        (WebCore::ResourceRequest::toNetworkRequest):
        * platform/qt/QWebPageClient.h:

2010-09-28  Kent Tamura  <tkent@chromium.org>

        Unreviewed, run sort-Xcode-project-file

        * WebCore.xcodeproj/project.pbxproj:

2010-09-28  Huahui Wu  <mediadependent@gmail.com>

        Reviewed by Steve Block.

        Add multi-touch for Android.
        https://bugs.webkit.org/show_bug.cgi?id=45221

        The Android touch event used to take one point as the touch point,
        it's now changed to a vector of points to support multi-touch.

        Tests: fast/events/touch/basic-multi-touch-events-limited.html
               fast/events/touch/touch-target-limited.html

        * platform/PlatformTouchEvent.h:
        * platform/PlatformTouchPoint.h:
        * platform/android/PlatformTouchEventAndroid.cpp:
        (WebCore::PlatformTouchEvent::PlatformTouchEvent):
        * platform/android/PlatformTouchPointAndroid.cpp:
        (WebCore::PlatformTouchPoint::PlatformTouchPoint):

2010-09-27  Kent Tamura  <tkent@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Fix assertion failure in a case that the dirty flag of a textarea element is changed
        https://bugs.webkit.org/show_bug.cgi?id=45681

        We need to call setNeedsValidityCheck() after updating m_isDirty.

        Test: fast/forms/textarea-checkValidity-crash.html

        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::setValue):
        (WebCore::HTMLTextAreaElement::setNonDirtyValue):
        (WebCore::HTMLTextAreaElement::setValueCommon):
        * html/HTMLTextAreaElement.h:

2010-09-27  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Dan Bernstein.

        When the block RunIn is destroyed, its line box tree is not deleted. As a result, it
        gets later used during dirtying of inline text boxes step where this deleted parent is
        accessed. The fix is to delete the line box tree before destroying the runin block.

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

        Test: fast/text/dirty-inline-textbox-crash.html

        * rendering/RenderText.cpp:
        (WebCore::RenderText::dirtyLineBoxes):

2010-09-27  Eric Uhrhane  <ericu@chromium.org>

        Reviewed by David Levin.

        Fix event sequencing in FileWriter
        https://bugs.webkit.org/show_bug.cgi?id=46544

        Only set readyState to DONE when we're about to send the last progress
        event associated with an operation.  Make sure all progress events come
        from backend calls, and aren't ever fired synchronously in response to
        user JS method calls.

        No new tests, as none of this is fully implemented yet.

        * fileapi/FileWriter.cpp:
        (WebCore::FileWriter::write):
        (WebCore::FileWriter::truncate):
        (WebCore::FileWriter::abort):
        (WebCore::FileWriter::didWrite):
        (WebCore::FileWriter::didTruncate):
        (WebCore::FileWriter::didFail):

2010-09-27  Chris Rogers  <crogers@google.com>

        Reviewed by James Robinson.

        Add HRTFDatabase files
        https://bugs.webkit.org/show_bug.cgi?id=46233

        No new tests since audio API is not yet implemented.

        * platform/audio/HRTFDatabase.cpp: Added.
        (WebCore::HRTFDatabase::create):
        (WebCore::HRTFDatabase::HRTFDatabase):
        (WebCore::HRTFDatabase::getKernelsFromAzimuthElevation):
        (WebCore::HRTFDatabase::indexFromElevationAngle):
        * platform/audio/HRTFDatabase.h: Added.
        (WebCore::HRTFDatabase::numberOfAzimuths):
        (WebCore::HRTFDatabase::sampleRate):

2010-09-27  Alpha Lam  <hclam@chromium.org>

        Build fix. Not reviewed.

        Move constant definitions to VideoLayerChromium.cpp.
        A proper fix should come later.

        * platform/graphics/chromium/VideoLayerChromium.cpp:

2010-09-23  Antonio Gomes  <agomes@rim.com>

        Reviewed by Kenneth Rohde Christiansen.

        Make Document::nodesFromRect more flexible
        https://bugs.webkit.org/show_bug.cgi?id=46336

        The patch changes the API for the Document::nodesFromRect() method as follows:
        
        from
        - RefPtf<NodeList> nodesFromRect(int x, int y, unsigned horizontalPadding, unsigned verticalPadding, bool ignoreClipping)
        to
        - RefPtf<NodeList> nodesFromRect(int x, int y, unsigned topPadding, unsigned rightPadding, unsigned bottomPadding,
                                         unsigned leftPadding, bool ignoreClipping)

        Previously the method was receiving as parameter horizontal and vertical padding values.
        In practice, the horizontal padding was being used to expand a given center point in both
        right and left directions, while vertical padding was expanding it to the top and bottom directions.

        Although this design makes it possible to improve the touch experience on mobile devices
        (Document::nodesFromRect exposes the rect based hit testing system), empirical experiments
        showed that, specially in capacitive touch screens, users tend to tap below elements. So
        for even more accurate results (which means here the possibility of pleasant tapping experience),
        it makes sense to use a region that is offset more above the touch point, favoring elements
        above the touch point.

        The patch basically implements that, increasing the API flexible and power by making it possible
        to specify different padding values for each direction in a given orientation.

        Changes were made accordingly to the HitTestResult, RenderLayer, RenderImage and RenderLineBoxList
        classes.

        WebCore:

        * WebCore.exp.in:
        * dom/Document.h: API adjustment.
        * dom/Document.idl: Ditto.
        * dom/Document.cpp: API adjustment and method body implementation accordingly.
        (WebCore::Document::nodesFromRect):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::hitTestResultAtPoint): For simplicity, I did not change the signature
            but the way the padding value passed in as parameter is being used to construct a HitTestResult.
        * rendering/HitTestResult.cpp: Changed the rect-based bits from using IntSize (padding) to separated paddings for each direction.
        (WebCore::HitTestResult::HitTestResult): Ditto.
        (WebCore::HitTestResult::operator=): Ditto.
        (WebCore::HitTestResult::rectFromPoint): Ditto.
        * rendering/HitTestResult.h:
        (WebCore::HitTestResult::topPadding): getter for the top padding.
        (WebCore::HitTestResult::rightPadding): getter for the right padding.
        (WebCore::HitTestResult::bottomPadding): getter for the bottom padding.
        (WebCore::HitTestResult::leftPadding): getter for the left padding.
        (WebCore::HitTestResult::rectFromPoint): Added a static method that given a center point and padding values for each direction,
            returns the rect that is going to be used in WebCore's hit testing processing.
        * rendering/RenderImage.cpp: Changed the rect-based bits from using IntSize (padding) to separated paddings for each direction.
        (WebCore::RenderImage::nodeAtPoint): Ditto.
        * rendering/RenderLayer.cpp: Ditto.
        (WebCore::RenderLayer::hitTestLayer): Ditto.
        (WebCore::RenderLayer::hitTestList): Ditto.
        * rendering/RenderLineBoxList.cpp: Ditto.
        (WebCore::RenderLineBoxList::hitTest): Ditto.

2010-09-27  Chris Rogers  <crogers@google.com>

        Reviewed by James Robinson.

        Add HRTFDatabaseLoader files
        https://bugs.webkit.org/show_bug.cgi?id=46234

        No new tests since audio API is not yet implemented.

        * platform/audio/HRTFDatabaseLoader.cpp: Added.
        (WebCore::HRTFDatabaseLoader::createAndLoadAsynchronouslyIfNecessary):
        (WebCore::HRTFDatabaseLoader::HRTFDatabaseLoader):
        (WebCore::HRTFDatabaseLoader::~HRTFDatabaseLoader):
        (WebCore::databaseLoaderEntry):
        (WebCore::HRTFDatabaseLoader::load):
        (WebCore::HRTFDatabaseLoader::loadAsynchronously):
        (WebCore::HRTFDatabaseLoader::isLoaded):
        (WebCore::HRTFDatabaseLoader::defaultHRTFDatabase):
        * platform/audio/HRTFDatabaseLoader.h: Added.
        (WebCore::HRTFDatabaseLoader::database):
        (WebCore::HRTFDatabaseLoader::databaseSampleRate):

2010-09-27  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        queryCommandState with justifyCenter, justifyLeft, and justifyRight always return false
        https://bugs.webkit.org/show_bug.cgi?id=45910

        Implemented queryCommandState for justifyCenter, justifyLeft, and justifyRight commands.
        Added getTextAlignment to convert -webkit-center, -webkit-left, and -webkit-right to
        center, left, and right respectively because they can be treated equally for editing purposes.

        Test: editing/execCommand/query-text-alignment.html

        * editing/ApplyStyleCommand.cpp:
        (WebCore::getTextAlignment): Added.
        (WebCore::getPropertiesNotIn): Uses getTextAlignment.
        * editing/EditorCommand.cpp:
        (WebCore::stateJustifyCenter): Added.
        (WebCore::stateJustifyLeft): Added.
        (WebCore::stateJustifyRight): Added.
        (WebCore::createCommandMap): Refers to stateJustifyCenter, stateJustifyLeft, and stateJustifyRight.

2010-09-27  Alpha Lam  <hclam@chromium.org>

        Unreviewed. Build fix.

        Reorder member declarations and fix other warnings.

        * platform/graphics/chromium/VideoLayerChromium.cpp:
        (WebCore::VideoLayerChromium::VideoLayerChromium):
        (WebCore::VideoLayerChromium::~VideoLayerChromium):
        (WebCore::VideoLayerChromium::updateContents):
        (WebCore::VideoLayerChromium::determineTextureFormat):
        (WebCore::VideoLayerChromium::allocateTexturesIfNeeded):
        * platform/graphics/chromium/VideoLayerChromium.h:

2010-09-27  Kenneth Russell  <kbr@google.com>

        Unreviewed, Qt build fix. Stub out CanvasRenderingContext::checkOrigin(const HTMLVideoElement*)
        on platforms that don't support video after r68460.

        * html/canvas/CanvasRenderingContext.cpp:
        (WebCore::CanvasRenderingContext::checkOrigin):

2010-09-27  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        CrashTracer: 1,803 crashes in Safari at com.apple.WebCore: -[AccessibilityObjectWrapper accessibilityIsIgnored] + 56
        https://bugs.webkit.org/show_bug.cgi?id=46662

        Before calling updateBackingStore(), the wrapper object needs to be retained, lest it be invalidated during
        the updateBackingStore call. This consolidates all calls to updateBackingStore().

        Test: platform/mac/accessibility/removing-textarea-after-edit-crash.html

        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::postPlatformNotification):
            Use an ASSERT here to catch the crash because DRT won't cause AppKit to post notifications.
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper prepareAccessibilityMethod]):
        (-[AccessibilityObjectWrapper accessibilityActionNames]):
        (-[AccessibilityObjectWrapper accessibilityAttributeNames]):
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):
        (-[AccessibilityObjectWrapper accessibilityFocusedUIElement]):
        (-[AccessibilityObjectWrapper accessibilityHitTest:]):
        (-[AccessibilityObjectWrapper accessibilityIsAttributeSettable:]):
        (-[AccessibilityObjectWrapper accessibilityIsIgnored]):
        (-[AccessibilityObjectWrapper accessibilityParameterizedAttributeNames]):
        (-[AccessibilityObjectWrapper accessibilityPerformPressAction]):
        (-[AccessibilityObjectWrapper accessibilityPerformIncrementAction]):
        (-[AccessibilityObjectWrapper accessibilityPerformDecrementAction]):
        (-[AccessibilityObjectWrapper accessibilityPerformAction:]):
        (-[AccessibilityObjectWrapper accessibilitySetValue:forAttribute:]):
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):
        (-[AccessibilityObjectWrapper accessibilityIndexOfChild:]):
        (-[AccessibilityObjectWrapper accessibilityArrayAttributeCount:]):
        (-[AccessibilityObjectWrapper accessibilityArrayAttributeValues:index:maxCount:]):

2010-09-27  Adrienne Walker  <enne@google.com>

        Reviewed by Adam Barth.

        WebGL's readPixels doesn't respect origin-clean flag

        Push CanvasRenderingContext2D checkOrigin logic into base class so it can be shared between different kinds of canvas contexts.
        https://bugs.webkit.org/show_bug.cgi?id=45718

        Test: LayoutTests/http/tests/canvas/webgl/origin-clean-conformance.html

        * html/canvas/CanvasRenderingContext.cpp:
        (WebCore::CanvasRenderingContext::checkOrigin):
        * html/canvas/CanvasRenderingContext.h:
        (WebCore::CanvasRenderingContext::~CanvasRenderingContext):
        (WebCore::CanvasRenderingContext::canvas):
        (WebCore::CanvasRenderingContext::is2d):
        (WebCore::CanvasRenderingContext::is3d):
        (WebCore::CanvasRenderingContext::isAccelerated):
        (WebCore::CanvasRenderingContext::paintRenderingResultsToCanvas):
        (WebCore::CanvasRenderingContext::paintsIntoCanvasBuffer):
        (WebCore::CanvasRenderingContext::platformLayer):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setStrokeStyle):
        (WebCore::CanvasRenderingContext2D::setFillStyle):
        (WebCore::CanvasRenderingContext2D::drawImage):
        (WebCore::CanvasRenderingContext2D::drawImageFromRect):
        * html/canvas/CanvasRenderingContext2D.h:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::readPixels):
        (WebCore::WebGLRenderingContext::texImage2D):
        (WebCore::WebGLRenderingContext::videoFrameToImage):
        (WebCore::WebGLRenderingContext::texSubImage2D):
        * html/canvas/WebGLRenderingContext.h:
        * html/canvas/WebGLRenderingContext.idl:

2010-09-27  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        REGRESSION (r68054): Buttons no longer render at correct sizes
        https://bugs.webkit.org/show_bug.cgi?id=46513

        Test: fast/forms/input-button-sizes.html

        The setUpButtonCell function was running only once, but needed to run every time
        through the button function.

        * platform/mac/ThemeMac.mm:
        (WebCore::leakButtonCell): Added. Separate one-time initialization code.
        (WebCore::setUpButtonCell): Removed the first-time initialization part of this function.
        (WebCore::button): Merged the three functions back into one.

2010-09-27  Victoria Kirst  <vrk@google.com>

        Reviewed by James Robinson.

        Modifies VideoLayerChromium to do YUV to RGB color conversion in the
        GPU. Also adds support for RGBA video frame formats, though this code
        path is currently never run because the video frames are in YV12
        format.
        https://bugs.webkit.org/show_bug.cgi?id=45069

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::initializeSharedObjects):
        (WebCore::LayerRendererChromium::cleanupSharedObjects):
        * platform/graphics/chromium/LayerRendererChromium.h:
        (WebCore::LayerRendererChromium::videoLayerSharedValues):
        * platform/graphics/chromium/VideoLayerChromium.cpp:
        (WebCore::VideoLayerChromium::SharedValues::SharedValues):
        (WebCore::VideoLayerChromium::SharedValues::~SharedValues):
        (WebCore::VideoLayerChromium::VideoLayerChromium):
        (WebCore::VideoLayerChromium::~VideoLayerChromium):
        (WebCore::VideoLayerChromium::updateContents):
        (WebCore::VideoLayerChromium::updateYUVContents):
        (WebCore::VideoLayerChromium::allocateYUVTextures):
        (WebCore::VideoLayerChromium::updateYUVTextures):
        (WebCore::VideoLayerChromium::updateRGBAContents):
        (WebCore::VideoLayerChromium::allocateTexture):
        (WebCore::VideoLayerChromium::updateTexture):
        (WebCore::VideoLayerChromium::updateContentsCompleted):
        (WebCore::VideoLayerChromium::draw):
        (WebCore::VideoLayerChromium::drawYUV):
        (WebCore::VideoLayerChromium::drawRGBA):
        * platform/graphics/chromium/VideoLayerChromium.h:
        (WebCore::VideoLayerChromium::drawsContent):
        (WebCore::VideoLayerChromium::SharedValues::yuvShaderProgram):
        (WebCore::VideoLayerChromium::SharedValues::rgbaShaderProgram):
        (WebCore::VideoLayerChromium::SharedValues::yuvShaderMatrixLocation):
        (WebCore::VideoLayerChromium::SharedValues::rgbaShaderMatrixLocation):
        (WebCore::VideoLayerChromium::SharedValues::yuvWidthScaleFactorLocation):
        (WebCore::VideoLayerChromium::SharedValues::rgbaWidthScaleFactorLocation):
        (WebCore::VideoLayerChromium::SharedValues::yTextureLocation):
        (WebCore::VideoLayerChromium::SharedValues::uTextureLocation):
        (WebCore::VideoLayerChromium::SharedValues::vTextureLocation):
        (WebCore::VideoLayerChromium::SharedValues::yuvAlphaLocation):
        (WebCore::VideoLayerChromium::SharedValues::rgbaTextureLocation):
        (WebCore::VideoLayerChromium::SharedValues::ccMatrixLocation):
        (WebCore::VideoLayerChromium::SharedValues::initialized):

2010-09-27  Peter Kasting  <pkasting@google.com>

        Reviewed by James Robinson.

        ImageDecoderSkia.cpp needs to check for allocator failure when copying
        bitmaps.
        https://bugs.webkit.org/show_bug.cgi?id=46437

        * manual-tests/large-size-image-crash.html: Added.
        * manual-tests/resources/large-size-image-crash.gif: Added.
        * platform/image-decoders/ImageDecoder.cpp:
        (WebCore::RGBA32Buffer::copyBitmapData):
        * platform/image-decoders/ImageDecoder.h:
        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::initFrameBuffer):
        * platform/image-decoders/qt/RGBA32BufferQt.cpp:
        (WebCore::RGBA32Buffer::copyBitmapData):
        * platform/image-decoders/skia/ImageDecoderSkia.cpp:
        (WebCore::RGBA32Buffer::copyBitmapData):

2010-09-27  James Robinson  <jamesr@chromium.org>

        Reviewed by Simon Fraser.

        Revert r63307, it broke repainting dynamically changed SVG content
        https://bugs.webkit.org/show_bug.cgi?id=46499

        This patch reverts r63307 and adds a regression test for what broke.

        Test: fast/repaint/repaint-svg-after-style-change.html

        * rendering/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::layout):
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::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):

2010-09-27  Vangelis Kokkevis  <vangelis@chromium.org>

        Reviewed by James Robinson.

        [chromium] Making LayerChromium's destructor virtual so that the appropriate
        derived class destructors get called when the layer tree is taken down.
        ContentLayerChromium and its derived types (ImageLayerChromium for now) will
        free up the texture allocated for their contents upon destruction. To avoid
        having the LayerRendererChromium destructor getting called before the layers
        are destroyed and thus leaving their textures orphaned, the layers now hold
        a ref counted pointer to the renderer that uses them.
        https://bugs.webkit.org/show_bug.cgi?id=46139

        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::~ContentLayerChromium):
        (WebCore::ContentLayerChromium::setLayerRenderer):
        (WebCore::ContentLayerChromium::cleanupResources):
        * platform/graphics/chromium/ContentLayerChromium.h:
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::setLayerRenderer):
        * platform/graphics/chromium/LayerChromium.h:
        (WebCore::LayerChromium::layerRenderer):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::create):
        (WebCore::LayerRendererChromium::deleteLayerTexture):
        (WebCore::LayerRendererChromium::cleanupSharedObjects):
        * platform/graphics/chromium/LayerRendererChromium.h:

2010-09-27  Erik Arvidsson  <arv@chromium.org>

        Reviewed by Darin Adler.

        Implement HTML 5's HTMLElement.classList property
        https://bugs.webkit.org/show_bug.cgi?id=20709

        This adds a DOMTokenList class that is used for the classList property. DOMTokenList uses a SpaceSplitString for fast
        contains check. In standards mode the existing classNames is used but in quirks mode we use an internal SpaceSplitString
        because classList is always case sensitive.

        Tests: fast/dom/HTMLElement/class-list-gc.html
               fast/dom/HTMLElement/class-list-quirks.html
               fast/dom/HTMLElement/class-list.html
               perf/class-list-remove.html

        * Android.derived.jscbindings.mk:
        * Android.derived.v8bindings.mk:
        * Android.jscbindings.mk:
        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/gobject/GNUmakefile.am:
        * bindings/js/JSElementCustom.cpp:
        (WebCore::JSElement::markChildren): Make sure that we keep the wrapper while the element is alive.
        * bindings/scripts/CodeGeneratorJS.pm: DOMTokenList has a string indexed getter.
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/custom/V8DOMTokenListCustom.cpp: Added.
        (WebCore::toV8):
        * dom/Element.cpp:
        (WebCore::Element::classList):
        (WebCore::Element::optionalClassList):
        * dom/Element.h:
        * dom/ElementRareData.h: This now has an OwnPtr to a ClassList if the Element::classList is ever called.
        * dom/SpaceSplitString.h:
        (WebCore::SpaceSplitString::isNull):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::classAttributeChanged): Update the classList if it exists.
        * dom/StyledElement.h:
        * html/DOMTokenList.cpp: Added.
        (WebCore::validateToken):
        (WebCore::DOMTokenList::DOMTokenList):
        (WebCore::DOMTokenList::ref):
        (WebCore::DOMTokenList::deref):
        (WebCore::DOMTokenList::length):
        (WebCore::DOMTokenList::item):
        (WebCore::DOMTokenList::contains):
        (WebCore::DOMTokenList::containsInternal): The internal methods do no validation of the token.
        (WebCore::DOMTokenList::add):
        (WebCore::DOMTokenList::addInternal):
        (WebCore::DOMTokenList::remove):
        (WebCore::DOMTokenList::removeInternal):
        (WebCore::DOMTokenList::toggle):
        (WebCore::DOMTokenList::toString):
        (WebCore::DOMTokenList::reset):
        (WebCore::DOMTokenList::classNames):
        * html/DOMTokenList.h: Added.
        (WebCore::DOMTokenList::create):
        (WebCore::DOMTokenList::element):
        * html/DOMTokenList.idl: Added.
        * html/HTMLElement.idl:
        * page/DOMWindow.cpp:
        * page/DOMWindow.idl:

2010-09-27  Kenneth Russell  <kbr@google.com>

        Reviewed by James Robinson.

        Add local triangulation of cubic curve control points
        https://bugs.webkit.org/show_bug.cgi?id=45252

        (Re-landing; I neglected to actually add the new files in
        http://trac.webkit.org/changeset/68045 .)

        Adding a localized triangulation algorithm which takes as input
        the four control points of a cubic curve segment and provides both
        triangles as well as the ability to walk the interior edges. The
        latter will be used later to fill the interior of shapes bounded
        by these cubic curves, quadratic curves and line segments.

        * platform/graphics/gpu/LoopBlinnLocalTriangulator.cpp: Added.
        (WebCore::LoopBlinnLocalTriangulator::Triangle::contains):
        (WebCore::LoopBlinnLocalTriangulator::Triangle::nextVertex):
        (WebCore::LoopBlinnLocalTriangulator::Triangle::indexForVertex):
        (WebCore::LoopBlinnLocalTriangulator::Triangle::makeCounterClockwise):
        (WebCore::LoopBlinnLocalTriangulator::LoopBlinnLocalTriangulator):
        (WebCore::LoopBlinnLocalTriangulator::reset):
        (WebCore::LoopBlinnLocalTriangulator::triangulate):
        (WebCore::LoopBlinnLocalTriangulator::triangulateHelper):
        (WebCore::LoopBlinnLocalTriangulator::addTriangle):
        (WebCore::LoopBlinnLocalTriangulator::addInteriorVertex):
        (WebCore::LoopBlinnLocalTriangulator::isSharedEdge):
        * platform/graphics/gpu/LoopBlinnLocalTriangulator.h: Added.
        (WebCore::LoopBlinnLocalTriangulator::Vertex::Vertex):
        (WebCore::LoopBlinnLocalTriangulator::Vertex::xyCoordinates):
        (WebCore::LoopBlinnLocalTriangulator::Vertex::klmCoordinates):
        (WebCore::LoopBlinnLocalTriangulator::Vertex::set):
        (WebCore::LoopBlinnLocalTriangulator::Vertex::end):
        (WebCore::LoopBlinnLocalTriangulator::Vertex::setEnd):
        (WebCore::LoopBlinnLocalTriangulator::Vertex::marked):
        (WebCore::LoopBlinnLocalTriangulator::Vertex::setMarked):
        (WebCore::LoopBlinnLocalTriangulator::Vertex::interior):
        (WebCore::LoopBlinnLocalTriangulator::Vertex::setInterior):
        (WebCore::LoopBlinnLocalTriangulator::Vertex::resetFlags):
        (WebCore::LoopBlinnLocalTriangulator::Triangle::Triangle):
        (WebCore::LoopBlinnLocalTriangulator::Triangle::getVertex):
        (WebCore::LoopBlinnLocalTriangulator::Triangle::setVertices):
        (WebCore::LoopBlinnLocalTriangulator::getVertex):
        (WebCore::LoopBlinnLocalTriangulator::numberOfTriangles):
        (WebCore::LoopBlinnLocalTriangulator::getTriangle):
        (WebCore::LoopBlinnLocalTriangulator::numberOfInteriorVertices):
        (WebCore::LoopBlinnLocalTriangulator::getInteriorVertex):

2010-09-27  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Add AudioNode files
        https://bugs.webkit.org/show_bug.cgi?id=45571

        No new tests since audio API is not yet implemented.

        * webaudio/AudioNode.cpp: Added.
        (WebCore::AudioNode::AudioNode):
        (WebCore::AudioNode::~AudioNode):
        (WebCore::AudioNode::setType):
        (WebCore::AudioNode::lazyInitialize):
        (WebCore::AudioNode::addInput):
        (WebCore::AudioNode::addOutput):
        (WebCore::AudioNode::input):
        (WebCore::AudioNode::output):
        (WebCore::AudioNode::connect):
        (WebCore::AudioNode::disconnect):
        (WebCore::AudioNode::processIfNecessary):
        (WebCore::AudioNode::pullInputs):
        (WebCore::AudioNode::ref):
        (WebCore::AudioNode::deref):
        (WebCore::AudioNode::finishDeref):
        (WebCore::AudioNode::printNodeCounts):
        * webaudio/AudioNode.h: Added.
        (WebCore::AudioNode::context):
        (WebCore::AudioNode::type):
        (WebCore::AudioNode::isInitialized):
        (WebCore::AudioNode::numberOfInputs):
        (WebCore::AudioNode::numberOfOutputs):
        (WebCore::AudioNode::sampleRate):
        (WebCore::AudioNode::checkNumberOfChannelsForInput):
        * webaudio/AudioNode.idl: Added.

2010-09-27  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

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

        Patch RenderView's layout and computeLogicalWidth/Height methods to be block-flow-aware.

        Added fast/root-lr-basic.html

        * rendering/RenderView.cpp:
        (WebCore::RenderView::computeLogicalHeight):
        (WebCore::RenderView::computeLogicalWidth):
        (WebCore::RenderView::layout):
        * rendering/RenderView.h:
        (WebCore::RenderView::viewLogicalWidth):
        (WebCore::RenderView::viewLogicalHeight):

2010-09-24  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        Hook up ANGLE with chromium --in-process-webgl port
        https://bugs.webkit.org/show_bug.cgi?id=44309

        * platform/graphics/GraphicsContext3D.h: Move Angle stuff inside MAC only section.

2010-09-27  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

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

        Patch the width/height/x/y calls in layoutBlock() to be their logical equivalents instead.

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

2010-09-27  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=46649, fix failing layout tests.

        The implementation of setting the before/after margins was wrong and poking the wrong margin values.
        
        Once I made them set the correct values, it revealed that one of the new block flow tests wasn't
        actually working.  In order to fix it, I had to make the block direction margin computation actually
        use the containing block's block-flow in order to return the right answer.  This involved cleaning
        up computeBlockDirectionMargins to be more like computeInlineDirectionMargins.
        
        fast/css/logical-property-resolution.html also caught the bug.  Its results are now correct.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::adjustPositionedBlock):
        (WebCore::RenderBlock::determineHorizontalPosition):
        (WebCore::RenderBlock::layoutBlockChild):
        (WebCore::RenderBlock::insertFloatingObject):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::setMarginBeforeUsing):
        (WebCore::RenderBox::setMarginAfterUsing):
        (WebCore::RenderBox::computeLogicalWidth):
        (WebCore::RenderBox::computeInlineDirectionMargins):
        (WebCore::RenderBox::computeLogicalHeight):
        (WebCore::RenderBox::computeBlockDirectionMargins):
        * rendering/RenderBox.h:
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutHorizontalBox):
        (WebCore::RenderFlexibleBox::layoutVerticalBox):
        * rendering/RenderObject.h:
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::computeLogicalWidth):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::layout):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::marginBeforeUsing):
        (WebCore::RenderStyle::marginAfterUsing):
        * rendering/style/RenderStyle.h:

2010-09-14  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        Textures and renderbuffers should be detached first before deletion if they are attached to framebuffers
        https://bugs.webkit.org/show_bug.cgi?id=43942

        Test: fast/canvas/webgl/object-deletion-behaviour.html

        * html/canvas/WebGLBuffer.cpp:
        (WebCore::WebGLBuffer::deleteObjectImpl): Delete the object only once.
        * html/canvas/WebGLFramebuffer.cpp: Use RefPtr for attachment WebGLObjects.
        (WebCore::WebGLFramebuffer::WebGLFramebuffer):
        (WebCore::WebGLFramebuffer::removeAttachment): Remove an attachment data ref.
        (WebCore::WebGLFramebuffer::onAttachedObjectChange):
        (WebCore::WebGLFramebuffer::getColorBufferFormat):
        (WebCore::WebGLFramebuffer::deleteObjectImpl):
        (WebCore::WebGLFramebuffer::initializeRenderbuffers):
        * html/canvas/WebGLFramebuffer.h: Declare removeAttachment().
        * html/canvas/WebGLObject.cpp:
        (WebCore::WebGLObject::setObject): Make it protected and can only be called when initializing.
        * html/canvas/WebGLObject.h:
        (WebCore::WebGLObject::onDetached): Fix a bug.
        (WebCore::WebGLObject::isDeleted): Expose the delete flag.
        * html/canvas/WebGLProgram.cpp:
        (WebCore::WebGLProgram::deleteObjectImpl): Detach shaders when deleting a program.
        * html/canvas/WebGLRenderbuffer.cpp:
        (WebCore::WebGLRenderbuffer::deleteObjectImpl): Delete the object only once.
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::deleteFramebuffer): Bind to internal fbo when deleting the currently-bound fbo.
        (WebCore::WebGLRenderingContext::deleteRenderbuffer): Remove renderbuffer from currently-bound fbo upon deletion.
        (WebCore::WebGLRenderingContext::deleteTexture): Remove texture from currently-bound fbo upon deletion.
        (WebCore::WebGLRenderingContext::useProgram): Fix a condition.
        * html/canvas/WebGLShader.cpp:
        (WebCore::WebGLShader::deleteObjectImpl): Delete the object only once.
        * html/canvas/WebGLTexture.cpp:
        (WebCore::WebGLTexture::deleteObjectImpl): Ditto.

2010-09-27  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Antonio Gomes.

        stateStyle (@EditorCommand.cpp) should ask EditingBehavior for platform specific behavior
        https://bugs.webkit.org/show_bug.cgi?id=41989

        queryCommandState returns true even when in the mixed state
        https://bugs.webkit.org/show_bug.cgi?id=46382

        Fixed stateStyle so that it calls selectionStartHasStyle when shouldToggleStyleBasedOnStartOfSelection
        is true (Mac platforms) and calls selectionHasStyle otherwise (non-Mac platforms).

        Also fixed queryCommandState so that it only returns true when the state is TrueTriState
        as supposed to returning true whenever the state is not FalseTriState. New behavior matches that of
        other browsers such as Firefox and Internet Explorer.

        * dom/Document.cpp:
        (WebCore::Document::queryCommandState):
        * editing/EditorCommand.cpp:
        (WebCore::executeToggleStyle):
        (WebCore::stateStyle):

2010-09-27  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=46647, add getters/setters for the logical position of a box.

        Also made all of the logicalWidth/Height getters/setters inline for performance.

        * rendering/RenderBox.cpp:
        * rendering/RenderBox.h:
        (WebCore::RenderBox::logicalLeft):
        (WebCore::RenderBox::logicalTop):
        (WebCore::RenderBox::logicalWidth):
        (WebCore::RenderBox::logicalHeight):
        (WebCore::RenderBox::setLogicalLeft):
        (WebCore::RenderBox::setLogicalTop):
        (WebCore::RenderBox::setLogicalWidth):
        (WebCore::RenderBox::setLogicalHeight):
        (WebCore::RenderBox::setLogicalLocation):

2010-09-27  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=46639, make computeLogicalHeight block-flow-aware.
        
        This patch does the following:
            (1) Makes computeLogicalHeight block-flow-aware (patching all helper functions as needed to make this work).
            (2) Makes block flow roots (blocks whose parent has a different block-flow directionality) establish new block formatting contexts.
            (This causes them to not collapse their margins with their children and to avoid floats). 
            (3) Patch all occurrences of setHeight in block and line layout to setLogicalHeight so that height doesn't get incorrectly
            overwritten for lr/rl block-flow.  This is necessary to write tests that examine the width/height of the blocks.
        
        Added multiple new tests in fast/blockflow.
        fast/css/logical-property-resolution gives the correct results now.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::MarginInfo::MarginInfo):
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::expandsToEncloseOverhangingFloats):
        (WebCore::RenderBlock::adjustFloatingBlock):
        (WebCore::RenderBlock::collapseMargins):
        (WebCore::RenderBlock::clearFloatsIfNeeded):
        (WebCore::RenderBlock::determineHorizontalPosition):
        (WebCore::RenderBlock::handleBottomOfBlock):
        (WebCore::RenderBlock::layoutBlockChildren):
        (WebCore::RenderBlock::layoutBlockChild):
        (WebCore::RenderBlock::positionNewFloatOnLine):
        (WebCore::RenderBlock::newLine):
        (WebCore::RenderBlock::logicalLeftOffsetForLine):
        (WebCore::RenderBlock::logicalRightOffsetForContent):
        (WebCore::RenderBlock::logicalRightOffsetForLine):
        (WebCore::RenderBlock::getClearDelta):
        (WebCore::RenderBlock::layoutColumns):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::computeBlockDirectionPositionsForLine):
        (WebCore::RenderBlock::layoutInlineChildren):
        (WebCore::RenderBlock::determineStartPosition):
        (WebCore::RenderBlock::fitBelowFloats):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::marginBefore):
        (WebCore::RenderBox::marginBeforeUsing):
        (WebCore::RenderBox::marginAfter):
        (WebCore::RenderBox::marginAfterUsing):
        (WebCore::RenderBox::setMarginBefore):
        (WebCore::RenderBox::setMarginAfter):
        (WebCore::RenderBox::setMarginBeforeUsing):
        (WebCore::RenderBox::setMarginAfterUsing):
        (WebCore::RenderBox::computeLogicalHeight):
        (WebCore::RenderBox::computeLogicalHeightUsing):
        (WebCore::RenderBox::computePercentageLogicalHeight):
        (WebCore::RenderBox::computeReplacedHeightUsing):
        (WebCore::RenderBox::availableLogicalHeight):
        (WebCore::RenderBox::availableLogicalHeightUsing):
        (WebCore::RenderBox::computeBlockDirectionMargins):
        (WebCore::RenderBox::avoidsFloats):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::contentLogicalWidth):
        (WebCore::RenderBox::contentLogicalHeight):
        (WebCore::RenderBox::stretchesToViewHeight):
        (WebCore::RenderBox::availableLogicalWidth):
        (WebCore::RenderBox::availableWidth):
        (WebCore::RenderBox::availableHeight):
        (WebCore::RenderBox::isBlockFlowRoot):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::computeLogicalWidth):

2010-09-27  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Chris Fleizach.

        [Gtk] Adjust atk_text_get_text_at_offset to account for bullets/numbers in list items
        https://bugs.webkit.org/show_bug.cgi?id=45381

        Ensure list markers are consistently used in the Atk wrapper.

        This patch does two things (both needed to fix the bug): It
        improves the way list items markers are exposed through the Atk
        Wrapper (by exposing the exact text in the marker, including the
        marker suffix, if any) and makes sure the marker is consistently
        considered and treated in those methods of the AtkText interface
        that would need it (like atk_text_get_character_count or
        atk_text_get_run_attributes, for instance).

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (textForObject):
           Append/prepend list marker when needed.
        (webkit_accessible_text_get_text):
           Use the new function markerTextWithSuffix() to expose a more
           accurate value.
        (accessibilityObjectLength):
           Consider list items marker to return the length of an object,
           if needed. Also, added some extra checks.
        (webkit_accessible_text_get_character_count):
           Just delegate on accessibilityObjectLength, to make it
           cleaner and more consistent.

        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::markerTextWithSuffix):
           New public function to return a single string with the
           marker associated to the item and its suffix, considering
           text direction (LTR or RTL).
        * rendering/RenderListItem.h:
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::suffix):
           New public function to return a String with the suffix
           associated to the marker.
        * rendering/RenderListMarker.h:

2010-09-27  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r68389.
        http://trac.webkit.org/changeset/68389
        https://bugs.webkit.org/show_bug.cgi?id=46637

        test_shell is crashing on chromium Win (Requested by loislo on
        #webkit).

        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::InspectorTimelineAgent):
        (WebCore::InspectorTimelineAgent::pushGCEventRecords):
        (WebCore::InspectorTimelineAgent::didGC):
        (WebCore::InspectorTimelineAgent::~InspectorTimelineAgent):
        (WebCore::InspectorTimelineAgent::willCallFunction):
        (WebCore::InspectorTimelineAgent::didCallFunction):
        (WebCore::InspectorTimelineAgent::willDispatchEvent):
        (WebCore::InspectorTimelineAgent::didDispatchEvent):
        (WebCore::InspectorTimelineAgent::willLayout):
        (WebCore::InspectorTimelineAgent::didLayout):
        (WebCore::InspectorTimelineAgent::willRecalculateStyle):
        (WebCore::InspectorTimelineAgent::didRecalculateStyle):
        (WebCore::InspectorTimelineAgent::willPaint):
        (WebCore::InspectorTimelineAgent::didPaint):
        (WebCore::InspectorTimelineAgent::willWriteHTML):
        (WebCore::InspectorTimelineAgent::didWriteHTML):
        (WebCore::InspectorTimelineAgent::didInstallTimer):
        (WebCore::InspectorTimelineAgent::didRemoveTimer):
        (WebCore::InspectorTimelineAgent::willFireTimer):
        (WebCore::InspectorTimelineAgent::didFireTimer):
        (WebCore::InspectorTimelineAgent::willChangeXHRReadyState):
        (WebCore::InspectorTimelineAgent::didChangeXHRReadyState):
        (WebCore::InspectorTimelineAgent::willLoadXHR):
        (WebCore::InspectorTimelineAgent::didLoadXHR):
        (WebCore::InspectorTimelineAgent::willEvaluateScript):
        (WebCore::InspectorTimelineAgent::didEvaluateScript):
        (WebCore::InspectorTimelineAgent::didScheduleResourceRequest):
        (WebCore::InspectorTimelineAgent::willSendResourceRequest):
        (WebCore::InspectorTimelineAgent::willReceiveResourceData):
        (WebCore::InspectorTimelineAgent::didReceiveResourceData):
        (WebCore::InspectorTimelineAgent::willReceiveResourceResponse):
        (WebCore::InspectorTimelineAgent::didReceiveResourceResponse):
        (WebCore::InspectorTimelineAgent::didFinishLoadingResource):
        (WebCore::InspectorTimelineAgent::didMarkTimeline):
        (WebCore::InspectorTimelineAgent::didMarkDOMContentEvent):
        (WebCore::InspectorTimelineAgent::didMarkLoadEvent):
        (WebCore::InspectorTimelineAgent::reset):
        (WebCore::InspectorTimelineAgent::resetFrontendProxyObject):
        (WebCore::InspectorTimelineAgent::addRecordToTimeline):
        (WebCore::InspectorTimelineAgent::setHeapSizeStatistic):
        (WebCore::InspectorTimelineAgent::didCompleteCurrentRecord):
        (WebCore::InspectorTimelineAgent::pushCurrentRecord):
        * inspector/InspectorTimelineAgent.h:
        (WebCore::InspectorTimelineAgent::TimelineRecordEntry::TimelineRecordEntry):
        (WebCore::InspectorTimelineAgent::GCEvent::GCEvent):

2010-09-27  Kinuko Yasuda  <kinuko@google.com>

        Reviewed by Adam Barth.

        [Cleanup] Add create method to FileSystemCallbacks to get rid of naked new's
        https://bugs.webkit.org/show_bug.cgi?id=46561

        Also cleanup the callbacks layering to pass AsyncFileSystemCallbacks
        object to LocalFileSystem::requestFileSystem (rather than
        FileSystemCallback and ErrorCallback) so that all the callbacks class
        we pass from WebCore to WebKit/chromium/src will be
        AsyncFileSystemCallbacks.

        No new tests; this patch is only for cleanup and there should be no functionality changes.

        * fileapi/DOMFileSystem.cpp:
        (WebCore::DOMFileSystem::getMetadata):
        (WebCore::DOMFileSystem::move):
        (WebCore::DOMFileSystem::copy):
        (WebCore::DOMFileSystem::remove):
        (WebCore::DOMFileSystem::getParent):
        (WebCore::DOMFileSystem::getFile):
        (WebCore::DOMFileSystem::getDirectory):
        (WebCore::DOMFileSystem::createWriter):
        (WebCore::DOMFileSystem::readDirectory):
        * fileapi/FileSystemCallbacks.cpp:
        (WebCore::EntryCallbacks::create): Added.
        (WebCore::EntriesCallbacks::create): Added.
        (WebCore::FileSystemCallbacks::create): Added.
        (WebCore::MetadataCallbacks::create): Added.
        (WebCore::FileWriterCallbacks::create): Added.
        (WebCore::VoidCallbacks::create): Added.
        * fileapi/FileSystemCallbacks.h:
        * fileapi/LocalFileSystem.cpp:
        (WebCore::openFileSystem):
        (WebCore::LocalFileSystem::requestFileSystem): Changed to take
        AsyncFileSystemCallbacks as (a) callback argument(s).
        * fileapi/LocalFileSystem.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::requestFileSystem): Made a corresponding change
        to LocalFileSystem::requestFileSystem.
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::requestFileSystem): Made a corresponding change
        to LocalFileSystem::requestFileSystem.

2010-09-27  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Dave Hyatt.

        Fix memory safety issue during positioning list marker as a result of assuming 
        that list item's parent can always be casted to a RenderBox. The display of the parent
        can be manipluated using css as Inline which causes a bad cast.

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

        Test: fast/lists/parent-box-not-box-crash.html

        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::positionListMarker):
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::layout):

2010-09-19  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] Wrong font instantiated from an unknown font family
        https://bugs.webkit.org/show_bug.cgi?id=36548

        When FontConfig returns a match for a particular family name, ensure that
        the family name matches the configured alias for the original pattern. This
        should prevent selecting FontConfig fallbacks in situations where the next
        font on the CSS fallback list should be used. This requires moving all FontConfig
        matching logic into FontCacheFreeType and out of FontPlatformDataFreeType.
        It should be there anyway.

        Test: platform/gtk/fonts/font-family-fallback.html

        * platform/graphics/cairo/FontCacheFreeType.cpp:
        (WebCore::FontCache::platformInit): Simply call FcInit here instead of
        deferring to FontPlatformData.
        (WebCore::FontCache::getLastResortFallbackFont): The last resort font should
        be a fallback font or else the new FontConfig logic may result in null font data
        if it cannot find an appropriate match.
        (WebCore::getFamilyNameStringFromFontDescriptionAndFamily): Added. Helper function
        which converts WebCore fallback names into ones that FontConfig understands.
        (WebCore::isFallbackFontAllowed): Added. Helper function that allows FontConfig
        fallbacks to be used when generic family names are specified.
        (WebCore::FontCache::createFontPlatformData): Move all FontConfig matching logic here
        and prevent against the situation where FontConfig returns a different family name
        than we asked for.
        * platform/graphics/cairo/FontCustomPlatformData.cpp: Updated FontPlatformData constructor.
        * platform/graphics/cairo/FontPlatformDataFreeType.cpp: Update the constructor to
        take the FcPattern returned and the original FontDescription. We no longer need the other
        arguments, because the selection is now done by FontCacheFreeType.
        (WebCore::FontPlatformData::FontPlatformData): Remove the FontConfig selection logic from
        this code.
        * platform/graphics/cairo/FontPlatformDataFreeType.h: Updated method definitions.
        * platform/graphics/cairo/GlyphPageTreeNodeCairo.cpp: Fixed includes.
        * platform/graphics/cairo/PlatformRefPtrCairo.cpp: Added a PlatformRefPtr specialization
        for cairo_font_face_t.
        (WTF::refPlatformPtr): Added.
        (WTF::derefPlatformPtr): Added.
        * platform/graphics/cairo/PlatformRefPtrCairo.h: Updated method definitons.
        * platform/graphics/cairo/SimpleFontDataCairo.cpp:
        (WebCore::SimpleFontData::smallCapsFontData): Fixed FontPlatformData constructor.

2010-09-27  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Doesn't build with gtk+ 2.14
        https://bugs.webkit.org/show_bug.cgi?id=46565

        Fixed the build for GTK+ 2.14 by adding backward compatible
        a backward-compatible function for gtk_menu_item_get_label and a
        utility function to create a blank mouse cursor. Those functions
        are used in the fullscreen video controller and in the DRT
        EventSender.

        * platform/gtk/GtkVersioning.c:
        (gdk_window_get_root_coords):
        (blankCursor):
        (gtk_menu_item_get_label):
        * platform/gtk/GtkVersioning.h:

2010-09-23  Stephen White  <senorblanco@chromium.org>

        Reviewed by James Robinson.

        [CHROMIUM] Fix for canvas clearRect() with clipping active, when
        --enable-accelerated-2d-canvas is on.
        https://bugs.webkit.org/show_bug.cgi?id=46412

        Covered by layout test http://philip.html5.org/tests/canvas/suite/tests/2d.clearRect.clip.html.

        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::clearRect):
        Check if a clip is active during clipRect(), and force to software
        if so.  Force a readback in this case, since clearRect() is not
        compatible with mixed-mode rendering.
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::canvasClipApplied):
        * platform/graphics/skia/PlatformContextSkia.h:
        Implement accessor to check if a clip is active.

2010-09-14  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        drawElements with count=0 and offset = 0 should not generate GL error or crash
        https://bugs.webkit.org/show_bug.cgi?id=45769

        * html/canvas/WebGLRenderingContext.cpp: Deal with count=0 case.
        (WebCore::WebGLRenderingContext::validateIndexArrayConservative):
        (WebCore::WebGLRenderingContext::validateIndexArrayPrecise):
        (WebCore::WebGLRenderingContext::drawElements):

2010-09-16  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        Fold getString into getParameter and implement new queries
        https://bugs.webkit.org/show_bug.cgi?id=40321

        Test: fast/canvas/webgl/gl-getstring.html

        * html/canvas/WebGLRenderingContext.cpp: Merge getString enums into getParameter.
        (WebCore::WebGLRenderingContext::getParameter):
        * html/canvas/WebGLRenderingContext.h: Remove getString.
        * html/canvas/WebGLRenderingContext.idl: Remove getString.

2010-09-24  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        gl-teximage fails on chrome mac bot
        https://bugs.webkit.org/show_bug.cgi?id=45332

        Add support for alpha first pixel formats.

        * platform/graphics/GraphicsContext3D.cpp:
        (WebCore::doPacking):
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/cg/GraphicsContext3DCG.cpp:
        (WebCore::GraphicsContext3D::getImageData):

2010-09-17  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: implement go-to-line feature
        https://bugs.webkit.org/show_bug.cgi?id=45166

        * English.lproj/localizedStrings.js:
        * inspector/front-end/GoToLineDialog.js: Added.
        (WebInspector.GoToLineDialog):
        (WebInspector.GoToLineDialog.show):
        (WebInspector.GoToLineDialog.prototype._hide):
        (WebInspector.GoToLineDialog.prototype._onKeyDown):
        (WebInspector.GoToLineDialog.prototype._onBlur):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._registerShortcuts):
        (WebInspector.ScriptsPanel.prototype.jumpToPreviousSearchResult):
        (WebInspector.ScriptsPanel.prototype.showGoToLineDialog):
        * inspector/front-end/goToLineDialog.css: Added.
        (.go-to-line-dialog):
        * inspector/front-end/inspector.html:

2010-09-24  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: add XHR breakpoints sidebar pane to front-end
        https://bugs.webkit.org/show_bug.cgi?id=46483

        * English.lproj/localizedStrings.js:
        * WebCore.gypi:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::instrumentWillSendXMLHttpRequestImpl):
        * inspector/InspectorTimelineAgent.h:
        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager):
        (WebInspector.BreakpointManager.prototype._setBreakpointOnBackend):
        (WebInspector.BreakpointManager.prototype.createXHRBreakpoint):
        (WebInspector.BreakpointManager.prototype._xhrBreakpointRemoved):
        (WebInspector.Breakpoint.prototype.compareTo):
        (WebInspector.XHRBreakpoint):
        (WebInspector.XHRBreakpoint.prototype.get enabled):
        (WebInspector.XHRBreakpoint.prototype.set enabled):
        (WebInspector.XHRBreakpoint.prototype.get url):
        (WebInspector.XHRBreakpoint.prototype.formatLabel):
        (WebInspector.XHRBreakpoint.prototype.compareTo):
        (WebInspector.XHRBreakpoint.prototype.remove):
        (WebInspector.XHRBreakpoint.prototype._setOnBackend.didSet):
        (WebInspector.XHRBreakpoint.prototype._setOnBackend):
        (WebInspector.XHRBreakpoint.prototype._removeFromBackend):
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.XHRBreakpointsSidebarPane):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._showEditBreakpointDialog):
        (WebInspector.XHRBreakpointsSidebarPane.prototype._hideEditBreakpointDialog):
        (WebInspector.BreakpointItem.prototype.compareTo):
        (WebInspector.BreakpointItem.prototype._checkboxClicked):
        (WebInspector.BreakpointItem.prototype._enableChanged):
        (WebInspector.BreakpointItem.prototype._breakpointClicked):
        (WebInspector.XHRBreakpointItem):
        * inspector/front-end/CallStackSidebarPane.js:
        (WebInspector.CallStackSidebarPane.prototype.updateStatus.formatters.s):
        (WebInspector.CallStackSidebarPane.prototype.updateStatus.append):
        (WebInspector.CallStackSidebarPane.prototype.updateStatus):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMBreakpoint.prototype.compareTo):
        * inspector/front-end/Images/paneAddButtons.png: Added.
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype.reset):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.css:
        (.pane > .title > button.add):
        (.pane > .title > button.add:hover):
        (.pane > .title > button.add:active):
        (.pane > .body .breakpoint-condition):
        * inspector/front-end/inspector.js:
        (WebInspector.createXHRBreakpointsSidebarPane.breakpointAdded):
        (WebInspector.createXHRBreakpointsSidebarPane):

2010-09-27  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Merge AbstractTimelinePanel into ResourcesPanel.
        https://bugs.webkit.org/show_bug.cgi?id=46612

        I am refactoring resources panel and would like to merge abstract
        one back in since it is not use anywhere else.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/AbstractTimelinePanel.js: Removed.
        * inspector/front-end/ResourceCategory.js:
        (WebInspector.ResourceCategory):
        (WebInspector.ResourceCategory.prototype.toString):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel):
        (WebInspector.ResourcesPanel.prototype.get items):
        (WebInspector.ResourcesPanel.prototype.createInterface):
        (WebInspector.ResourcesPanel.prototype.createFilterPanel.createFilterElement):
        (WebInspector.ResourcesPanel.prototype.createFilterPanel):
        (WebInspector.ResourcesPanel.prototype.showCategory):
        (WebInspector.ResourcesPanel.prototype.hideCategory):
        (WebInspector.ResourcesPanel.prototype.filter):
        (WebInspector.ResourcesPanel.prototype._updateFilter):
        (WebInspector.ResourcesPanel.prototype._updateDividersLabelBarPosition):
        (WebInspector.ResourcesPanel.prototype.get needsRefresh):
        (WebInspector.ResourcesPanel.prototype.set needsRefresh):
        (WebInspector.ResourcesPanel.prototype.refreshIfNeeded):
        (WebInspector.ResourcesPanel.prototype.resize):
        (WebInspector.ResourcesPanel.prototype.invalidateAllItems):
        (WebInspector.ResourcesPanel.prototype.get calculator):
        (WebInspector.ResourcesPanel.prototype.set calculator):
        (WebInspector.ResourcesPanel.prototype.addItem):
        (WebInspector.ResourcesPanel.prototype.removeItem):
        (WebInspector.ResourcesPanel.prototype.refreshItem):
        (WebInspector.ResourcesPanel.prototype.revealAndSelectItem):
        (WebInspector.ResourcesPanel.prototype.sortItems):
        (WebInspector.ResourcesPanel.prototype.adjustScrollPosition):
        (WebInspector.ResourcesPanel.prototype.addEventDivider):
        (WebInspector.ResourcesPanel.prototype.hideEventDividers):
        (WebInspector.ResourcesPanel.prototype.showEventDividers):
        (WebInspector.ResourcesPanel.prototype.show):
        (WebInspector.ResourcesPanel.prototype.refresh):
        (WebInspector.ResourcesPanel.prototype.reset):
        (WebInspector.ResourcesPanel.prototype.updateGraphDividersIfNeeded):
        (WebInspector.ResourcesPanel.prototype.updateMainViewWidth):
        (WebInspector.ResourceBaseCalculator):
        (WebInspector.ResourceBaseCalculator.prototype.computeSummaryValues):
        (WebInspector.ResourceBaseCalculator.prototype.computeBarGraphPercentages):
        (WebInspector.ResourceBaseCalculator.prototype.computeBarGraphLabels):
        (WebInspector.ResourceBaseCalculator.prototype.get boundarySpan):
        (WebInspector.ResourceBaseCalculator.prototype.updateBoundaries):
        (WebInspector.ResourceBaseCalculator.prototype.reset):
        (WebInspector.ResourceBaseCalculator.prototype._value):
        (WebInspector.ResourceBaseCalculator.prototype.formatValue):
        (WebInspector.ResourceTimeCalculator):
        (WebInspector.ResourceTransferSizeCalculator):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

2010-09-27  Ragner Magalhaes  <ragner.magalhaes@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] New input style for Qt Mobile theme
        https://bugs.webkit.org/show_bug.cgi?id=46461

        Rename themeQtMaemo5.css to themeQtMobile.css since it is the theme for all Qt mobile platform.
        Adjust new input style.

        * WebCore.pri:
        * css/themeQtMobile.css: Renamed from css/themeQtMaemo5.css
        (select):
        (select:disabled):
        (select:active):
        (select:active:disabled):
        (textarea):
        (textarea:disabled):
        (textarea:active):
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::extraDefaultStyleSheet): Renamed themeQtMaemo5UserAgentStyleSheet to themeQtMobileUserAgentStyleSheet to match renamed file.

2010-09-27  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Antonio Gomes.

        [Qt] Enable local rendering of NPAPI plugins on Maemo6.

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

        * WebCore.pro:
        * bridge/npapi.h:
        * plugins/PluginView.cpp:
        (WebCore::PluginView::setValue):
        (WebCore::PluginView::PluginView):
        * plugins/PluginView.h:
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::updatePluginWidget):
        (WebCore::PluginView::paint):
        (WebCore::PluginView::platformGetValueStatic):

2010-09-27  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: divide InspectorTimelineAgent into two parts.

        We have an idea to split InspectorTimelineAgent into two parts.
        The first part is an instrumentation API which can be used for DOM breakpoints too.
        The other is the real Timeline agent which do a transformation of raw data into timeline data.

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

        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent2::TimelineRecordEntry::TimelineRecordEntry):
        (WebCore::InspectorTimelineAgent2::GCEvent::GCEvent):
        (WebCore::InspectorTimelineAgent2::InspectorTimelineAgent2):
        (WebCore::InspectorTimelineAgent2::~InspectorTimelineAgent2):
        (WebCore::InspectorTimelineAgent2::didGC):
        (WebCore::InspectorTimelineAgent2::addRecordToTimeline):
        (WebCore::InspectorTimelineAgent2::setHeapSizeStatistic):
        (WebCore::InspectorTimelineAgent2::startNewRecord):
        (WebCore::InspectorTimelineAgent2::completeCurrentRecord):
        (WebCore::InspectorTimelineAgent2::asyncRecord):
        (WebCore::InspectorTimelineAgent2::atomicRecord):
        (WebCore::InspectorTimelineAgent2::getTopRecordData):
        (WebCore::InspectorTimelineAgent2::reset):
        (WebCore::InspectorTimelineAgent2::resetFrontendProxyObject):
        (WebCore::InspectorTimelineAgent2::pushGCEventRecords):
        (WebCore::InspectorTimelineAgent::InspectorTimelineAgent):
        (WebCore::InspectorTimelineAgent::~InspectorTimelineAgent):
        (WebCore::InspectorTimelineAgent::reset):
        (WebCore::InspectorTimelineAgent::willCallFunction):
        (WebCore::InspectorTimelineAgent::didCallFunction):
        (WebCore::InspectorTimelineAgent::willDispatchEvent):
        (WebCore::InspectorTimelineAgent::didDispatchEvent):
        (WebCore::InspectorTimelineAgent::willLayout):
        (WebCore::InspectorTimelineAgent::didLayout):
        (WebCore::InspectorTimelineAgent::willRecalculateStyle):
        (WebCore::InspectorTimelineAgent::didRecalculateStyle):
        (WebCore::InspectorTimelineAgent::willPaint):
        (WebCore::InspectorTimelineAgent::didPaint):
        (WebCore::InspectorTimelineAgent::willWriteHTML):
        (WebCore::InspectorTimelineAgent::didWriteHTML):
        (WebCore::InspectorTimelineAgent::didInstallTimer):
        (WebCore::InspectorTimelineAgent::didRemoveTimer):
        (WebCore::InspectorTimelineAgent::willFireTimer):
        (WebCore::InspectorTimelineAgent::didFireTimer):
        (WebCore::InspectorTimelineAgent::willChangeXHRReadyState):
        (WebCore::InspectorTimelineAgent::didChangeXHRReadyState):
        (WebCore::InspectorTimelineAgent::willLoadXHR):
        (WebCore::InspectorTimelineAgent::didLoadXHR):
        (WebCore::InspectorTimelineAgent::willEvaluateScript):
        (WebCore::InspectorTimelineAgent::didEvaluateScript):
        (WebCore::InspectorTimelineAgent::didScheduleResourceRequest):
        (WebCore::InspectorTimelineAgent::willSendResourceRequest):
        (WebCore::InspectorTimelineAgent::willReceiveResourceData):
        (WebCore::InspectorTimelineAgent::didReceiveResourceData):
        (WebCore::InspectorTimelineAgent::willReceiveResourceResponse):
        (WebCore::InspectorTimelineAgent::didReceiveResourceResponse):
        (WebCore::InspectorTimelineAgent::didFinishLoadingResource):
        (WebCore::InspectorTimelineAgent::didMarkTimeline):
        (WebCore::InspectorTimelineAgent::didMarkDOMContentEvent):
        (WebCore::InspectorTimelineAgent::didMarkLoadEvent):
        (WebCore::InspectorTimelineAgent::resetFrontendProxyObject):
        * inspector/InspectorTimelineAgent.h:

2010-09-27  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Sam Weinig.

        Implement CSSStyleRule::setSelectorText()

        This involves removing the "selectorText" "setter raises(DOMException)" clause from the IDL files,
        since the setter no longer raises the exception, as per http://dev.w3.org/csswg/cssom/#dom-cssstylerule-selectortext
        https://bugs.webkit.org/show_bug.cgi?id=46487

        Test: fast/css/css-set-selector-text.html

        * css/CSSPageRule.idl:
        * css/CSSStyleRule.cpp:
        (WebCore::CSSStyleRule::setSelectorText):
        * css/CSSStyleRule.h:
        * css/CSSStyleRule.idl:

2010-09-27  Zoltan Herczeg  <zherczeg@webkit.org>

        Reviewed by Dirk Schulze.

        Filter builder should be able to follow the filter object dependencies
        https://bugs.webkit.org/show_bug.cgi?id=45812

        To propagate the changes of a primitive object, a data structure
        is needed which stores the dependent primitive objects. (Those
        who use the resulting image.) This data structure is implemented
        as a hash map, which contains primitive object and set of primitive
        objects <key,value> pairs. The hash map is able to follow the
        dynamic topology changes.

        * rendering/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::buildPrimitives):
        * rendering/RenderSVGResourceFilterPrimitive.h:
        (WebCore::RenderSVGResourceFilterPrimitive::renderName):
        (WebCore::RenderSVGResourceFilterPrimitive::isSVGResourceFilterPrimitive):
        * svg/graphics/filters/SVGFilterBuilder.cpp:
        (WebCore::SVGFilterBuilder::SVGFilterBuilder):
        (WebCore::SVGFilterBuilder::appendEffectToEffectReferences):
        (WebCore::SVGFilterBuilder::clearEffects):
        * svg/graphics/filters/SVGFilterBuilder.h:
        (WebCore::SVGFilterBuilder::getEffectReferences):
        (WebCore::SVGFilterBuilder::addBuiltinEffects):

2010-09-27  Andreas Kling  <andreas.kling@nokia.com>

        Rubber-stamped by Kenneth Rohde Christiansen.

        [Qt] 32-bit Flash crashes on repeated SetWindow calls
        https://bugs.webkit.org/show_bug.cgi?id=46616

        Re-enable PluginQuirkDontCallSetWindowMoreThanOnce for Qt on x86 Unix.

        We incorrectly thought this was fixed in Flash 10, but it turns out it
        was just never broken on 64-bit.

        * plugins/PluginPackage.cpp:
        (WebCore::PluginPackage::determineQuirks):

2010-09-27  İsmail Dönmez  <ismail@namtrac.org>

        Reviewed by Andreas Kling.

        Add PluginView::setJavaScriptPaused(bool) stub for WinCE.

        * platform/qt/TemporaryLinkStubsQt.cpp:
        (PluginView::setJavaScriptPaused):

2010-09-27  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Reviewed by Dirk Schulze.

        Bug 46607 -  [WML] Fix a build break when WML is enabled

        Fix a build break when WML is enabled.

        * wml/WMLElement.cpp: Include HTMLParserIdioms.h
        (WebCore::WMLElement::parseMappedAttribute): Add additional parameter to invoke parseHTMLInteger() function. 

2010-09-26  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Barth.

        Remove dead code and fix header includes in ResourceHandleWin
        https://bugs.webkit.org/show_bug.cgi?id=46479

        Also add missing member varibale from r68167.

        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/win/ResourceHandleWin.cpp:
        (WebCore::ResourceHandleInternal::~ResourceHandleInternal):
        (WebCore::ResourceHandle::~ResourceHandle):
        (WebCore::ResourceHandle::onRequestComplete):
        * platform/network/win/ResourceHandleWin.h: Removed.

2010-09-26  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Barth.

        Add WTF::StringHasher::createBlobHash
        https://bugs.webkit.org/show_bug.cgi?id=46514

        Add this function for hashing FormElementKey and QualifiedNameComponents.

        * dom/Document.cpp:
        (WebCore::FormElementKeyHash::hash):
        * dom/QualifiedName.h:
        (WebCore::hashComponents):
        (WebCore::QualifiedNameHash::hash):

2010-09-26  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

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

        Convert the implementation of computeLogicalWidth to work with block-flow.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::determineHorizontalPosition):
        Patched to call the new computeMarginsInContainingBlockInlineDirection.  Eventually determineHorizontalPosition will
        be placing children along the inline direction of the containing block, and those children may have mismatched
        block flows.  The new computeMarginsInContainingBlockInlineDirection function is designed to handle that.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::marginStart):
        (WebCore::RenderBox::marginStartUsing):
        (WebCore::RenderBox::marginEnd):
        (WebCore::RenderBox::marginEndUsing):
        (WebCore::RenderBox::setMarginStart):
        (WebCore::RenderBox::setMarginEnd):
        (WebCore::RenderBox::setMarginStartUsing):
        (WebCore::RenderBox::setMarginEndUsing):
        Helpers that allow for marginStart/End access and that also allow for marginStart/End to be computed based off another
        element's block-flow and direction (typically the containing block).
        
        (WebCore::RenderBox::computeBorderBoxLogicalWidth):
        (WebCore::RenderBox::computeBorderBoxLogicalHeight):
        (WebCore::RenderBox::computeContentBoxLogicalWidth):
        (WebCore::RenderBox::computeContentBoxLogicalHeight):
        Patched to use logical border/padding widths and heights.

        (WebCore::RenderBox::perpendicularContainingBlockLogicalHeight):
        A function for returning the available logical height of a perpendicular containing block.  If a child has vertical
        text for example and its block-flow is "lr", its available logical width is determined by the logical
        height of the containing block when that containing block is perpendicular, e.g. "tb".
        
        (WebCore::RenderBox::computeLogicalWidth):
        (WebCore::RenderBox::computeLogicalWidthUsing):
        Patched to be block-flow-aware and to use logical width values everywhere.
    
        (WebCore::RenderBox::sizesToIntrinsicLogicalWidth):
        Patched to use logical widths.
        
        (WebCore::RenderBox::computeMarginsInContainingBlockInlineDirection):
        A new function that is directionally abstract and that can handle the computation of margins in the containing
        block's inline direction.  This function is written such that a perpendicular child block flow can still be 
        pushed to the center, left or right in the containing block's inline direction.
        
        (WebCore::RenderBox::computePositionedLogicalWidth):
        This function is still largely unpatched.  A future patch will address positioend elements.
        
        * rendering/RenderBox.h:
        (WebCore::RenderBox::stretchesToMinIntrinsicLogicalWidth):
        * rendering/RenderFieldset.h:
        (WebCore::RenderFieldset::stretchesToMinIntrinsicLogicalWidth):
        Renames.
        
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::computeLogicalWidth):
        Renames, but not converted yet. Tables will happen in a future patch.
        
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::marginStartUsing):
        (WebCore::RenderStyle::marginEndUsing):
        * rendering/style/RenderStyle.h:
        Added helpers for accessing marginStart and End using another style's direction and block flow (typically will
        be the containing block's).

        fast/block/basic/016.html changed, since centering now always awards the extra pixel for odd widths to the end margin
        instead of the right margin.  This is a progression.
        
        fast/css/logical-property-values.html is now reporting garbage results, which is expected now that some of the core layout
        functions have been patched.

        Horizontal block flows are untestable still, since the normal layout process incorrectly blows away any computed height values.

2010-09-26  Antonio Gomes  <agomes@rim.comg>

        Reviewed by Kenneth Rohde Christiansen.

        DRT/Mac nodesFromRect support

        [Mac][DRT] Implement LayoutTestController::nodesFromRect
        https://bugs.webkit.org/show_bug.cgi?id=46580

        Symbol files updated.

        * WebCore.exp.in: Added symbols to Document::nodesFromRect and bits of JSDocument now
        needed in WebKit/mac.
        * WebCore.xcodeproj/project.pbxproj: Set both JSDocument.h and JSNodeList as private headers
        now that they are referred in WebKit/mac.

2010-09-26  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        Implement location.origin and HTMLAnchorElement.origin
        https://bugs.webkit.org/show_bug.cgi?id=46558

        These attributes are part of my proposed URL API:
        https://docs.google.com/document/edit?id=1r_VTFKApVOaNIkocrg0z-t7lZgzisTuGTXkdzAk4gLU&hl=en

        Hixie thought we should implement as much of this API as makes sense on
        Location and HTMLAnchorElement as well.  I'm starting with the origin
        attribute, because that seems like the biggest bang for the buck.

        Tests: fast/dom/anchor-origin.html
               http/tests/misc/location-origin.html

        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::origin):
        * html/HTMLAnchorElement.h:
        * html/HTMLAnchorElement.idl:
        * page/Location.cpp:
        (WebCore::Location::origin):
        * page/Location.h:
        * page/Location.idl:

2010-09-26  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r68343.
        http://trac.webkit.org/changeset/68343
        https://bugs.webkit.org/show_bug.cgi?id=46581

        broke GTK+ (Requested by kling on #webkit).

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

2010-09-25  Antonio Gomes  <agomes@rim.com>

        Reviewed by Kenneth Christiansen and Andreas Kling.

        document.nodesFromRect() needs to be removed from Document.idl
        https://bugs.webkit.org/show_bug.cgi?id=46492

        As discussed with Sam Weinig on IRC, it was decided to removed
        nodesFromRect() from the Document.idl, and that way, not exposing
        it to Web content.

        Reason: there is no plan to make it standard at the moment, and at the
        very least, the method should had been originally added with the "webkit"
        prefix, which was not the case.

        * dom/Document.idl:

2010-09-26  Renata Hodovan  <reni@inf.u-szeged.hu>

        Reviewed by Dirk Schulze.

        SVGFEBlendElement doesn't support dynamic invalidation, when attributes change.
        https://bugs.webkit.org/show_bug.cgi?id=46464

        Tests: svg/dynamic-updates/SVGFEBlendElement-dom-in-attr.html
               svg/dynamic-updates/SVGFEBlendElement-dom-in2-attr.html
               svg/dynamic-updates/SVGFEBlendElement-dom-mode-attr.html
               svg/dynamic-updates/SVGFEBlendElement-svgdom-in-prop.html
               svg/dynamic-updates/SVGFEBlendElement-svgdom-in2-prop.html
               svg/dynamic-updates/SVGFEBlendElement-svgdom-mode-prop.html

        * svg/SVGFEBlendElement.cpp:
        (WebCore::SVGFEBlendElement::svgAttributeChanged):
        * svg/SVGFEBlendElement.h:

2010-09-26  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Dan Bernstein.

        Canvas: Crash when setting a font with size in 'ex' units
        https://bugs.webkit.org/show_bug.cgi?id=46538

        update() the style's font after setting the style's font description.
        Needed because CSSPrimitiveValue::computeLengthDouble() later assumes
        that the style's font is properly initialized (for xHeight().)

        Fixes crash on IE test center's canvas-text-font-002 test.

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

2010-09-26  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        [BREWMP] Don't pass PassOwnPtr in makeAllDirectories
        https://bugs.webkit.org/show_bug.cgi?id=42058

        Change makeAllDirectories to take a raw FileMgr pointer
        because it is not safe to pass PassOwnPtr recursively.

        * platform/brew/FileSystemBrew.cpp:
        (WebCore::makeAllDirectories):

2010-09-26  Robert Hogan  <robert@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] fix http/tests/uri/escaped-entity.html

        Replace invalid encodings with the appropriate escaped entity.

        See also http://bugreports.qt.nokia.com/browse/QTBUG-13412

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

        * platform/text/qt/TextCodecQt.cpp:
        (WebCore::TextCodecQt::encode):

2010-09-25  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Nikolas Zimmermann.

        Fix the macro to bail out after setting the SVG style to 'initial'. Check that color is
        SVGColor before calling colorFromSVGColorCSSValue which makes sure we don't set invalid
        color. Also, doing the static cast in the caller and keeping the function
        colorFromSVGColorCSSValue clean to accept only take SVGColor objects.
        
        https://bugs.webkit.org/show_bug.cgi?id=46471

        Test: svg/css/invalid-color-crash.svg

        * css/SVGCSSStyleSelector.cpp:
        (WebCore::colorFromSVGColorCSSValue):
        (WebCore::CSSStyleSelector::applySVGProperty):

2010-09-25  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Tony Chang.

        FormatBlockCommand's modifyRange and doApply should be merged
        https://bugs.webkit.org/show_bug.cgi?id=46504

        Isolated the code in doApply to insert and remove lists for single paragraph into doApplyForSingleParagraph.
        Merged the code in modifyRange into doApply and cleaned up.

        No new tests are added since this is a cleanup.

        * editing/FormatBlockCommand.cpp:
        (WebCore::FormatBlockCommand::doApply): Merged with modifyRange; calls doApplyForSingleParagraph.
        (WebCore::FormatBlockCommand::doApplyForSingleParagraph): Added.
        * editing/FormatBlockCommand.h:

2010-09-25  Dan Bernstein  <mitz@apple.com>

        Reviewed by John Sullivan.

        <rdar://problem/8478160> Null deref in InlineBox::height()
        https://bugs.webkit.org/show_bug.cgi?id=45344

        Test: fast/css/first-line-parent-style-different.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::firstLineStyleSlowCase): Set the pseudo style bit on the RenderStyle
        which is going to supply the first-line style rather than on this object’s RenderStyle. The
        styles may differ.

2010-09-25  Dan Bernstein  <mitz@apple.com>

        Reviewed by John Sullivan.

        <rdar://problem/8478182> Make canHyphenate() return false for unsupported locales

        No change in functionality, hence no new test.

        * platform/text/cf/HyphenationCF.cpp:
        (WebCore::::createValueForKey): Return 0 if hyphenation is not available for the locale.
        (WebCore::cfLocaleCache): Moved the definition of the cache from lastHyphenLocation() to
        this new getter to allow canHyphenate() to share it.
        (WebCore::canHyphenate): Now returns true only if hyphenation is available.
        (WebCore::lastHyphenLocation): Added an assertion.

2010-09-25  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] GraphicsContext::setLineDash() should scale dashOffset to penWidth
        https://bugs.webkit.org/show_bug.cgi?id=46548

        Fixes incorrect rendering of <http://www.carto.net/svg/samples/animated_bustrack.shtml>

        This is covered by existing layout tests which need to be rebaselined.

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

2010-09-24  Sam Weinig  <sam@webkit.org>

        Rubber-stamped by Dan Bernstein.

        Fix accidental increase in the size of InlineBox by using a bit
        field to indicate that a bool should only take up 1 bit.

        * rendering/InlineBox.h:

2010-09-24  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Sam Weinig.

        Accelerated transitions do not suspend/resume properly.
        https://bugs.webkit.org/show_bug.cgi?id=43792
        
        (1) Fix regression from r68233, where if an animation affected two
        properties, only one would animate. The testcase tests this.
        
        (2) Fix a flash at the end of an animation or transition that has been
        paused and resumed. The flash occurred because we used CAAnimation's
        timeOffset when resuming to push the start of the animation into
        the past. However, timeOffset does not play nicely with fill modes,
        causing a single frame of animation with the element in its unanimated state.
        
        Fixed this by offsetting the beginTime into the past, rather than setting
        timeOffset. Normally we submit animations with beginTime == 0, and rely
        on CA assigning a beginTime when the animation is committed. This beginTime
        is then passed to AnimationController to sync hardware and software animations.
        However, since the code now assigns beginTimes in the past (on resume),
        we now have to denote whether we've done this, and send an appropriate
        timestamp back to AnimationController.
        
        (3) Finally, the patch removes PropertyAnimationPair and just uses LayerPropertyAnimation
        instead. This is just cleanup.

        Test: animations/opacity-transform-animation.html

        * platform/graphics/mac/GraphicsLayerCA.h: Remove PropertyAnimationPair,
        and change AnimationsMap to store a vector of LayerPropertyAnimation.
        New method, animationDidStart(), is called from the -animationDidStart: callback.
        
        * platform/graphics/mac/GraphicsLayerCA.mm:
        (-[WebAnimationDelegate animationDidStart:]): Just call m_graphicsLayer->animationDidStart()
        now.
        (WebCore::animationIdentifier): We need to pass in the property, to fix (1)
        (WebCore::GraphicsLayerCA::moveOrCopyAnimationsForProperty): Copy the WebKitAnimationBeginTimeSet
        value, if present.
        (WebCore::GraphicsLayerCA::animationDidStart): Call notifyAnimationStarted() on the client,
        after testing if we set a non-zero beginTime on this particular animation.
        (WebCore::GraphicsLayerCA::updateLayerAnimations): Change to use LayerPropertyAnimation.
        (WebCore::GraphicsLayerCA::setCAAnimationOnLayer): Set value for WebKitAnimationBeginTimeSetKey
        if we have a non-zero timeOffset. Make animationID an NSString, to avoid several conversions.
        (WebCore::GraphicsLayerCA::removeCAAnimationFromLayer):  Make animationID an NSString, to
        avoid several conversions.
        (WebCore::copyAnimationProperties): Copy WebKitAnimationBeginTimeSetKey if present.
        (WebCore::GraphicsLayerCA::pauseCAAnimationOnLayer): Make animationID an NSString, to avoid
        several conversions.

2010-09-24  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        SVG: Avoid calling pow() in genericParseNumber() unless necessary
        https://bugs.webkit.org/show_bug.cgi?id=46537

        0.4% speedup on <http://themaninblue.com/experiment/AnimationBenchmark/svg/>

        * svg/SVGParserUtilities.cpp:
        (WebCore::genericParseNumber): Only call pow() when we have an exponent.

2010-09-24  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] opening local files on win32
        https://bugs.webkit.org/show_bug.cgi?id=31066

        This is tested by changes to the testmimehandling API test.

        * platform/network/soup/ResourceHandleSoup.cpp: Properly convert the GContentType
        of a file into a mime type. This is important for non-Unix platforms.

2010-09-24  Pawel Hajdan  <phajdan.jr@chromium.org>

        Reviewed by Dumitru Daniliuc.

        Move the implementation of chromium_vfs to webkit for POSIX.
        This allows us to link Chrome with system-provided SQLite on Linux.
        See also http://code.google.com/p/chromium/issues/detail?id=22208.
        https://bugs.webkit.org/show_bug.cgi?id=45416

        No new tests.

        * platform/sql/chromium/SQLiteFileSystemChromiumPosix.cpp:
        (sqliteErrorFromPosixError):
        (releaseLockInfo):
        (releaseOpenInfo):
        (findLockInfo):
        (chromiumCheckReservedLock):
        (rangeLock):
        (chromiumLock):
        (closePendingFds):
        (chromiumUnlock):
        (chromiumCloseNoLock):
        (chromiumClose):
        (chromiumCheckReservedLockNoop):
        (chromiumLockNoop):
        (chromiumUnlockNoop):
        (seekAndRead):
        (chromiumRead):
        (seekAndWrite):
        (chromiumWrite):
        (syncWrapper):
        (chromiumSync):
        (chromiumTruncate):
        (chromiumFileSize):
        (chromiumFileControl):
        (chromiumSectorSize):
        (chromiumDeviceCharacteristics):
        (fillInChromiumFile):
        (findReusableFd):
        (chromiumOpen):
        (chromiumDelete):
        (chromiumAccess):
        (chromiumFullPathname):
        (chromiumDlOpen):
        (chromiumDlError):
        (chromiumDlSym):
        (chromiumDlClose):
        (chromiumRandomness):
        (chromiumSleep):
        (chromiumCurrentTime):
        (chromiumGetLastError):
        (WebCore::SQLiteFileSystem::registerSQLiteVFS):

2010-09-24  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Dirk Schulze.

        SVG: Make SVGLength's stringToLengthType() stricter and faster
        https://bugs.webkit.org/show_bug.cgi?id=46066

        Only accept unit names immediately following the numeric value.
        This behavior matches Gecko.

        Also, using String::endsWith("foo") caused a temporary WTF::String to be created.
        Avoid this by comparing characters directly.

        10.5% speedup on <http://data.xeoh.net/svg.benchmark/>

        Test: svg/custom/invalid-length-units.html

        * svg/SVGLength.cpp:
        (WebCore::stringToLengthType):
        (WebCore::SVGLength::setValueAsString):

2010-09-24  Luiz Agostini  <luiz.agostini@openbossa.org>
        Reviewed by Kenneth Rohde Christiansen.

        Keep viewport information in Document
        https://bugs.webkit.org/show_bug.cgi?id=46385

        The viewport meta data (layout viewport, scale) needs to be set again when bringing
        back a page from the page cache. As the viewport metadata is only retrieved while parsing
        the document, we need to store it in the Document class.

        Test: fast/viewport/viewport-128.html

        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::processViewport):
        (WebCore::Document::setInPageCache):
        * dom/Document.h:
        (WebCore::Document::viewportArguments):
        
2010-09-24  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=46496, rename containingBlockWidthForContent to
        containingBlockLogicalWidthForContent.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::localCaretRect):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::containingBlockLogicalWidthForContent):
        (WebCore::RenderBox::computeLogicalWidth):
        (WebCore::RenderBox::computeReplacedWidthUsing):
        * rendering/RenderBox.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::relativePositionOffsetX):
        (WebCore::RenderBoxModelObject::containingBlockLogicalWidthForContent):
        * rendering/RenderBoxModelObject.h:

2010-09-24  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=46489, rename the lineWidth and left/RightOffset methods
        to reflect that they will be logical.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::determineHorizontalPosition):
        (WebCore::RenderBlock::leftSelectionOffset):
        (WebCore::RenderBlock::rightSelectionOffset):
        (WebCore::RenderBlock::positionNewFloats):
        (WebCore::RenderBlock::logicalLeftOffsetForContent):
        (WebCore::RenderBlock::logicalLeftOffsetForLine):
        (WebCore::RenderBlock::logicalRightOffsetForContent):
        (WebCore::RenderBlock::logicalRightOffsetForLine):
        (WebCore::RenderBlock::availableLogicalWidthForLine):
        (WebCore::RenderBlock::getClearDelta):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::logicalRightOffsetForLine):
        (WebCore::RenderBlock::logicalLeftOffsetForLine):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::computeInlineDirectionPositionsForLine):
        (WebCore::RenderBlock::layoutInlineChildren):
        (WebCore::RenderBlock::skipTrailingWhitespace):
        (WebCore::RenderBlock::skipLeadingWhitespace):
        (WebCore::RenderBlock::fitBelowFloats):
        (WebCore::RenderBlock::findNextLineBreak):
        (WebCore::RenderBlock::checkLinesForTextOverflow):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::containingBlockWidthForContent):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::applyLineClamp):
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::positionListMarker):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::computeLogicalWidth):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::selectionTop):

2010-09-24  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Simon Fraser.

        Comply with spec by generalizing container on which transforms can be applied.
        https://bugs.webkit.org/show_bug.cgi?id=46485

        Already covered by existing tests.

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

2010-09-24  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=46482, rename the various prefWidth functions to use
        preferredLogicalWidth.

        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::recalcColumn):
        (WebCore::AutoTableLayout::computePreferredLogicalWidths):
        (WebCore::AutoTableLayout::calcEffectiveWidth):
        * rendering/AutoTableLayout.h:
        * rendering/FixedTableLayout.cpp:
        (WebCore::FixedTableLayout::calcWidthArray):
        (WebCore::FixedTableLayout::computePreferredLogicalWidths):
        * rendering/FixedTableLayout.h:
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlockChildren):
        (WebCore::RenderBlock::layoutPositionedObjects):
        (WebCore::RenderBlock::getClearDelta):
        (WebCore::RenderBlock::computePreferredLogicalWidths):
        (WebCore::RenderBlock::computeInlinePreferredLogicalWidths):
        (WebCore::RenderBlock::computeBlockPreferredLogicalWidths):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::dirtyLineBoxesForRenderer):
        (WebCore::RenderBlock::layoutInlineChildren):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::RenderBox):
        (WebCore::RenderBox::minPreferredLogicalWidth):
        (WebCore::RenderBox::maxPreferredLogicalWidth):
        (WebCore::RenderBox::computeLogicalWidth):
        (WebCore::RenderBox::computeLogicalWidthUsing):
        (WebCore::RenderBox::computePositionedLogicalWidth):
        (WebCore::RenderBox::computePositionedLogicalWidthUsing):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::computePreferredLogicalWidths):
        * rendering/RenderCounter.cpp:
        (WebCore::RenderCounter::computePreferredLogicalWidths):
        * rendering/RenderCounter.h:
        * rendering/RenderDataGrid.cpp:
        (WebCore::RenderDataGrid::computePreferredLogicalWidths):
        * rendering/RenderDataGrid.h:
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::computePreferredLogicalWidths):
        * rendering/RenderFieldset.h:
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::computePreferredLogicalWidths):
        * rendering/RenderFileUploadControl.h:
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::calcHorizontalPrefWidths):
        (WebCore::RenderFlexibleBox::calcVerticalPrefWidths):
        (WebCore::RenderFlexibleBox::computePreferredLogicalWidths):
        (WebCore::RenderFlexibleBox::allowedChildFlex):
        * rendering/RenderFlexibleBox.h:
        * rendering/RenderFrameBase.cpp:
        (WebCore::RenderFrameBase::layoutWithFlattening):
        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::canvasSizeChanged):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::imageChanged):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::computePreferredLogicalWidths):
        * rendering/RenderListBox.h:
        * rendering/RenderListItem.cpp:
        (WebCore::RenderListItem::updateMarkerLocation):
        (WebCore::RenderListItem::computePreferredLogicalWidths):
        * rendering/RenderListItem.h:
        * rendering/RenderListMarker.cpp:
        (WebCore::RenderListMarker::layout):
        (WebCore::RenderListMarker::computePreferredLogicalWidths):
        (WebCore::RenderListMarker::updateMargins):
        * rendering/RenderListMarker.h:
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::computePreferredLogicalWidths):
        * rendering/RenderMenuList.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::RenderObject):
        (WebCore::RenderObject::setPreferredLogicalWidthsDirty):
        (WebCore::RenderObject::invalidateContainerPreferredLogicalWidths):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::preferredLogicalWidthsDirty):
        (WebCore::RenderObject::setNeedsLayoutAndPrefWidthsRecalc):
        (WebCore::RenderObject::minPreferredLogicalWidth):
        (WebCore::RenderObject::maxPreferredLogicalWidth):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::computePreferredLogicalWidths):
        * rendering/RenderReplaced.h:
        * rendering/RenderReplica.cpp:
        (WebCore::RenderReplica::computePreferredLogicalWidths):
        * rendering/RenderReplica.h:
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::computePreferredLogicalWidths):
        * rendering/RenderSVGRoot.h:
        * rendering/RenderScrollbarPart.cpp:
        (WebCore::RenderScrollbarPart::computePreferredLogicalWidths):
        * rendering/RenderScrollbarPart.h:
        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::computePreferredLogicalWidths):
        * rendering/RenderSlider.h:
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::computeLogicalWidth):
        (WebCore::RenderTable::computePreferredLogicalWidths):
        * rendering/RenderTable.h:
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::computePreferredLogicalWidths):
        * rendering/RenderTableCell.h:
        * rendering/RenderTableCol.cpp:
        (WebCore::RenderTableCol::computePreferredLogicalWidths):
        * rendering/RenderTableCol.h:
        * rendering/RenderText.cpp:
        (WebCore::RenderText::trimmedPrefWidths):
        (WebCore::RenderText::minPreferredLogicalWidth):
        (WebCore::RenderText::maxPreferredLogicalWidth):
        (WebCore::RenderText::computePreferredLogicalWidths):
        (WebCore::RenderText::width):
        * rendering/RenderText.h:
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::computePreferredLogicalWidths):
        * rendering/RenderTextControl.h:
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::preferredContentWidth):
        (WebCore::RenderTextControlSingleLine::preferredDecorationWidthRight):
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::updateIntrinsicSize):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::RenderView):
        (WebCore::RenderView::computePreferredLogicalWidths):
        (WebCore::RenderView::layout):
        * rendering/RenderView.h:
        * rendering/TableLayout.h:

2010-09-24  Jian Li  <jianli@chromium.org>

        Reviewed by Alexey Proskuryakov.

        DOMWindow::revokeBlobURL erroneously uses ParsedURLString.
        https://bugs.webkit.org/show_bug.cgi?id=46434

        Test: fast/files/revoke-blob-url.html

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::revokeBlobURL):

2010-09-24  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=46474
        
        Patch computeWidthUsing to be block-flow-aware.  Rename the WidthType enum to LogicalWidthType.  Make computeLogicalWidthUsing
        query the style for logical width properties instead of width properties.
        
        fast/css/logical-property-resolution.html now fails and gives bad results.  This is expected.  It will become correct
        again as more layout code gets patched.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeLogicalWidth):
        (WebCore::RenderBox::computeLogicalWidthUsing):
        (WebCore::RenderBox::sizesToIntrinsicWidth):
        * rendering/RenderBox.h:

2010-09-24  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Clicking "Select All" in audits panel has no effect when the checkbox is unchecked
        Only add category event listeners to real categories, not to "Select All"
        https://bugs.webkit.org/show_bug.cgi?id=46467

        * inspector/front-end/AuditLauncherView.js:
        (WebInspector.AuditLauncherView.prototype._createCategoryElement):

2010-09-24  Hans Wennborg  <hans@chromium.org>

        Reviewed by Steve Block.

        Remove unnecessary casts in DeviceOrientation V8 bindings
        https://bugs.webkit.org/show_bug.cgi?id=46466

        Remove unnecessary casts of v8::Value::NumberValue() to double from
        the custom v8 bindings code for DeviceOrientation/Motion.

        No new tests: just cleanup, no new functionality.

        * bindings/v8/custom/V8DeviceMotionEventCustom.cpp:
        (WebCore::V8DeviceMotionEvent::initDeviceMotionEventCallback):
        * bindings/v8/custom/V8DeviceOrientationEventCustom.cpp:
        (WebCore::V8DeviceOrientationEvent::initDeviceOrientationEventCallback):

2010-09-24  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: move searchingForNode flag in InspectorController under control of InspectorCookies.

        Four functions from Inspector IDL go away.
        Searching for node feature of Inspector keeps alive even after navigation.

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

        * inspector/Inspector.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::updateInspectorStateCookie):
        (WebCore::InspectorController::restoreInspectorStateFromCookie):
        (WebCore::InspectorController::setSearchingForNode):
        (WebCore::InspectorController::populateScriptObjects):
        * inspector/InspectorController.h:
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.hide):
        (WebInspector.ElementsPanel.prototype.updateFocusedNode):
        (WebInspector.ElementsPanel.prototype._setSearchingForNode):
        (WebInspector.ElementsPanel.prototype.setSearchingForNode):
        (WebInspector.ElementsPanel.prototype.toggleSearchingForNode):
        * inspector/front-end/inspector.js:
        (WebInspector._updateFocusedNode):

2010-09-24  Andrei Popescu  <andreip@google.com>

        Reviewed by Jeremy Orlow.

        IDBTransactionCoordinator incorrectly assumes that aborted transactions must have been started or running.
        https://bugs.webkit.org/show_bug.cgi?id=46459

        No new tests, storage/indexeddb/transaction-basics.html covers this.

        Also fixes http://code.google.com/p/chromium/issues/detail?id=56732

        * storage/IDBTransactionCoordinator.cpp:
        (WebCore::IDBTransactionCoordinator::didFinishTransaction):

2010-09-24  Hans Wennborg  <hans@chromium.org>

        Reviewed by Steve Block.

        Update DeviceMotionEvent to spec
        https://bugs.webkit.org/show_bug.cgi?id=46344

        The spec has changed: the DeviceMotionEvent attributes accelerationX,
        accelerationY, etc. have been baked into an 'acceleration' attribute
        which returns an object with x, y, and z values. Likewise for the
        rotation rate. The 'accelerationIncludingGravity' attribute is new.

        * WebCore.exp.in:
        The DeviceMotionData::create member function has changed. Also export
        create functions for DeviceMotionData::Acceleration and RotationRate.

        * bindings/js/JSDeviceMotionEventCustom.cpp:
        (WebCore::JSDeviceMotionEvent::acceleration):
        (WebCore::JSDeviceMotionEvent::accelerationIncludingGravity):
        (WebCore::JSDeviceMotionEvent::rotationRate):
        (WebCore::JSDeviceMotionEvent::initDeviceMotionEvent):
        Manually create and return objects with the right attributes for
        acceleration, accelerationIncludingGravity, and rotationRate.
        When creating the DeviceMotionData object in initDeviceMotionEvent,
        accept any input objects that have the right attributes.

        * bindings/v8/custom/V8DeviceMotionEventCustom.cpp:
        (WebCore::V8DeviceMotionEvent::accelerationAccessorGetter):
        (WebCore::V8DeviceMotionEvent::accelerationIncludingGravityAccessorGetter):
        (WebCore::V8DeviceMotionEvent::rotationRateAccessorGetter):
        (WebCore::V8DeviceMotionEvent::initDeviceMotionEventCallback):
        V8 counterpart to the JSC code above.

        * dom/DeviceMotionData.cpp:
        (WebCore::DeviceMotionData::Acceleration::create):
        (WebCore::DeviceMotionData::Acceleration::Acceleration):
        (WebCore::DeviceMotionData::RotationRate::create):
        (WebCore::DeviceMotionData::RotationRate::RotationRate):
        (WebCore::DeviceMotionData::create):
        (WebCore::DeviceMotionData::DeviceMotionData):
        * dom/DeviceMotionData.h:
        (WebCore::DeviceMotionData::Acceleration::canProvideX):
        (WebCore::DeviceMotionData::Acceleration::canProvideY):
        (WebCore::DeviceMotionData::Acceleration::canProvideZ):
        (WebCore::DeviceMotionData::Acceleration::x):
        (WebCore::DeviceMotionData::Acceleration::y):
        (WebCore::DeviceMotionData::Acceleration::z):
        (WebCore::DeviceMotionData::RotationRate::canProvideAlpha):
        (WebCore::DeviceMotionData::RotationRate::canProvideBeta):
        (WebCore::DeviceMotionData::RotationRate::canProvideGamma):
        (WebCore::DeviceMotionData::RotationRate::alpha):
        (WebCore::DeviceMotionData::RotationRate::beta):
        (WebCore::DeviceMotionData::RotationRate::gamma):
        (WebCore::DeviceMotionData::acceleration):
        (WebCore::DeviceMotionData::accelerationIncludingGravity):
        (WebCore::DeviceMotionData::rotationRate):
        Add member classes Acceleration and RotationRate to DeviceMotionData.

        * dom/DeviceMotionEvent.idl:
        Update according to the spec. Acceleration and RotationRate need not
        be backed by native classes.

2010-09-24  Romain Pokrzywka  <romain@kdab.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix the Wince build.

        * WebCore.pro: Apply msvc flags to wince, too.

2010-09-24  Anders Bakken  <agbakken@gmail.com>

        Reviewed by Simon Hausmann.

        [Qt] Enable building Qt/Webkit with debug symbols

        With this patch one can configure with -webkit-debug to build Webkit
        with debug symbols without having to manually edit WebCore.pro.

        * WebCore.pro:

2010-09-24  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Web Sockets are insecure with QtWebKit
        https://bugs.webkit.org/show_bug.cgi?id=44769

        Throw an error when the server certificate is not valid.
        DRT currently does not support secure websocket connection,
        so no new tests. This was tested with the server at 
        http://code.google.com/p/pywebsocket instead.

        * platform/network/qt/SocketStreamHandleQt.cpp:
        (WebCore::SocketStreamHandlePrivate::socketSslErrors):

2010-09-24  Jia Pu  <jpu@apple.com>

        Reviewed by Shinichiro Hamaji.

        Need to remove autocorrection underlines in current line when newline is entered.
        https://bugs.webkit.org/show_bug.cgi?id=45709
        <rdar://problem/8335576>

        This change affects only Mac OSX build.

        * dom/DocumentMarker.h: Added "CorrectionIndicator" to indicate the words on which we need
          to draw autocorrection underline. We cannot use existing "Replacement" for this purpose,
          since it is not meant to be removed once it is added. But we need to remove all autocorrection
          underlines when a line break or paragraph separator is inserted, which is the behavior in
          NSTextView. Hence we need a separate marker value for drawing autocorrection underline.

        * editing/Editor.cpp:
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges): Add "CorrectionIndicator" when
          autocorrection takes place.
        (WebCore::Editor::changeSelectionAfterCommand): Remove "CorrectionIndicator" markers if the
          command results in inserting paragraph separator.

        * rendering/InlineTextBox.cpp:
        (WebCore::textCheckingLineStyleForMarkerType): Use "CorrectionIndicator" marker instead of
          "Replacement" to draw autocorrection underline.
        (WebCore::InlineTextBox::paintDocumentMarkers): Ditto.

2010-09-24  Eric Uhrhane  <ericu@chromium.org>

        Reviewed by David Levin.

        Remove unnecessary parameter from AsyncFileWriterClient::didTruncate
        https://bugs.webkit.org/show_bug.cgi?id=46390

        * fileapi/AsyncFileWriterClient.h:

        Added state to FileWriter to replace the parameter.
        * fileapi/FileWriter.h:
        * fileapi/FileWriter.cpp:
        (WebCore::FileWriter::truncate):
        (WebCore::FileWriter::didTruncate):

2010-09-24  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r68236.
        http://trac.webkit.org/changeset/68236
        https://bugs.webkit.org/show_bug.cgi?id=46449

        compile fix didn't work (Requested by dino___ on #webkit).

        * WebCore.exp.in:
        * bindings/js/JSDeviceMotionEventCustom.cpp:
        (WebCore::JSDeviceMotionEvent::xAcceleration):
        (WebCore::JSDeviceMotionEvent::yAcceleration):
        (WebCore::JSDeviceMotionEvent::zAcceleration):
        (WebCore::JSDeviceMotionEvent::xRotationRate):
        (WebCore::JSDeviceMotionEvent::yRotationRate):
        (WebCore::JSDeviceMotionEvent::zRotationRate):
        (WebCore::JSDeviceMotionEvent::initDeviceMotionEvent):
        * bindings/v8/custom/V8DeviceMotionEventCustom.cpp:
        (WebCore::V8DeviceMotionEvent::xAccelerationAccessorGetter):
        (WebCore::V8DeviceMotionEvent::yAccelerationAccessorGetter):
        (WebCore::V8DeviceMotionEvent::zAccelerationAccessorGetter):
        (WebCore::V8DeviceMotionEvent::xRotationRateAccessorGetter):
        (WebCore::V8DeviceMotionEvent::yRotationRateAccessorGetter):
        (WebCore::V8DeviceMotionEvent::zRotationRateAccessorGetter):
        (WebCore::V8DeviceMotionEvent::initDeviceMotionEventCallback):
        * dom/DeviceMotionData.cpp:
        (WebCore::DeviceMotionData::create):
        (WebCore::DeviceMotionData::DeviceMotionData):
        * dom/DeviceMotionData.h:
        (WebCore::DeviceMotionData::xAcceleration):
        (WebCore::DeviceMotionData::yAcceleration):
        (WebCore::DeviceMotionData::zAcceleration):
        (WebCore::DeviceMotionData::xRotationRate):
        (WebCore::DeviceMotionData::yRotationRate):
        (WebCore::DeviceMotionData::zRotationRate):
        (WebCore::DeviceMotionData::canProvideXAcceleration):
        (WebCore::DeviceMotionData::canProvideYAcceleration):
        (WebCore::DeviceMotionData::canProvideZAcceleration):
        (WebCore::DeviceMotionData::canProvideXRotationRate):
        (WebCore::DeviceMotionData::canProvideYRotationRate):
        (WebCore::DeviceMotionData::canProvideZRotationRate):
        * dom/DeviceMotionEvent.idl:

2010-09-24  Chris Guillory   <chris.guillory@google.com>

        Reviewed by Chris Fleizach.

        Send webkit accessibility notifications to Chromium.
        https://bugs.webkit.org/show_bug.cgi?id=45156

        * WebCore.gypi:
        * accessibility/chromium/AXObjectCacheChromium.cpp:
        (WebCore::AXObjectCache::postPlatformNotification):
        (WebCore::AXObjectCache::handleFocusedUIElementChanged):
        (WebCore::AXObjectCache::handleScrolledToAnchor):
        * dom/Document.cpp:
        (WebCore::Document::implicitClose):
        (WebCore::Document::setFocusedNode):
        * editing/SelectionController.h:
        * page/ChromeClient.h:
        (WebCore::ChromeClient::postAccessibilityNotification):
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):

2010-09-24  David Hyatt  <hyatt@apple.com>

        Reviewed by Maciej Stachowiak.

        https://bugs.webkit.org/show_bug.cgi?id=46454, rename a bunch of the width and height calculation methods.

        calcReplacedWidth -> computeReplacedWidth

        calcHorizontalMargins -> computeInlineDirectionMargins

        calcVerticalMargins -> computeBlockDirectionMargins

        calcWidthUsing -> computeLogicalWidthUsing

        calcHeightUsing -> computeLogicalHeightUsing

        calcReplacedHeight/HeightUsing -> computeReplacedHeight/HeightUsing

        calcAbsoluteHorizontalValues -> computePositionedLogicalWidthUsing

        calcAbsoluteVerticalValues -> computePositionedLogicalHeightUsing

        calcAbsoluteHorizontal -> computePositionedLogicalWIdth

        calcAbsoluteVertical -> computePositionedLogicalHeight

        calcAbsoluteHorizontalReplaced -> computePositionedLogicalWidthReplaced

        calcAbsoluteVerticalReplaced -> computePositionedLogicalHeightReplaced

        calcBorderBoxWidth/Height -> computeBorderBoxLogicalWidth/LogicalHeight

        calcContentBoxWidth/Height -> computeContentBoxLogicalWidth/LogicalHeight

        shouldCalculateSizeAsReplaced -> shouldComputeSizeAsReplaced

        calcPercentageHeight -> computePercentageLogicalHeight

        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::recalcColumn):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::adjustPositionedBlock):
        (WebCore::RenderBlock::determineHorizontalPosition):
        (WebCore::RenderBlock::layoutBlockChild):
        (WebCore::RenderBlock::insertFloatingObject):
        (WebCore::RenderBlock::calcPrefWidths):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeBorderBoxLogicalWidth):
        (WebCore::RenderBox::computeBorderBoxLogicalHeight):
        (WebCore::RenderBox::computeContentBoxLogicalWidth):
        (WebCore::RenderBox::computeContentBoxLogicalHeight):
        (WebCore::RenderBox::computeLogicalWidth):
        (WebCore::RenderBox::computeLogicalWidthUsing):
        (WebCore::RenderBox::computeInlineDirectionMargins):
        (WebCore::RenderBox::computeLogicalHeight):
        (WebCore::RenderBox::computeLogicalHeightUsing):
        (WebCore::RenderBox::computePercentageLogicalHeight):
        (WebCore::RenderBox::computeReplacedWidth):
        (WebCore::RenderBox::computeReplacedWidthUsing):
        (WebCore::RenderBox::computeReplacedHeight):
        (WebCore::RenderBox::computeReplacedHeightUsing):
        (WebCore::RenderBox::availableHeightUsing):
        (WebCore::RenderBox::computeBlockDirectionMargins):
        (WebCore::RenderBox::computePositionedLogicalWidth):
        (WebCore::RenderBox::computePositionedLogicalWidthUsing):
        (WebCore::RenderBox::computePositionedLogicalHeight):
        (WebCore::RenderBox::computePositionedLogicalHeightUsing):
        (WebCore::RenderBox::computePositionedLogicalWidthReplaced):
        (WebCore::RenderBox::computePositionedLogicalHeightReplaced):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::shouldComputeSizeAsReplaced):
        * rendering/RenderDataGrid.cpp:
        (WebCore::RenderDataGrid::calcPrefWidths):
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::calcPrefWidths):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::calcPrefWidths):
        (WebCore::RenderFlexibleBox::layoutHorizontalBox):
        (WebCore::RenderFlexibleBox::layoutVerticalBox):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::computeReplacedWidth):
        (WebCore::RenderImage::computeReplacedHeight):
        (WebCore::RenderImage::calcAspectRatioWidth):
        (WebCore::RenderImage::calcAspectRatioHeight):
        * rendering/RenderImage.h:
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::calcPrefWidths):
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::calcPrefWidths):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::container):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::computeBlockDirectionMargins):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::computeReplacedWidth):
        (WebCore::RenderReplaced::computeReplacedHeight):
        (WebCore::RenderReplaced::calcAspectRatioWidth):
        (WebCore::RenderReplaced::calcAspectRatioHeight):
        (WebCore::RenderReplaced::calcPrefWidths):
        * rendering/RenderReplaced.h:
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::calcPrefWidths):
        (WebCore::RenderSVGRoot::computeReplacedWidth):
        (WebCore::RenderSVGRoot::computeReplacedHeight):
        * rendering/RenderSVGRoot.h:
        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::calcPrefWidths):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::computeLogicalWidth):
        (WebCore::RenderTable::layout):
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::layout):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::calcPrefWidths):
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::computeReplacedWidth):
        (WebCore::RenderVideo::computeReplacedHeight):
        * rendering/RenderVideo.h:

2010-09-23  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=46451
        
        Rename calcWidth to computeLogicalWidth.  Rename calcHeight to computeLogicalHeight.

        * rendering/RenderApplet.cpp:
        (WebCore::RenderApplet::layout):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::insertFloatingObject):
        (WebCore::RenderBlock::getClearDelta):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::computeInlineDirectionPositionsForLine):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::computeLogicalWidth):
        (WebCore::RenderBox::computeLogicalHeight):
        (WebCore::RenderBox::calcPercentageHeight):
        (WebCore::RenderBox::calcReplacedHeightUsing):
        (WebCore::RenderBox::availableHeightUsing):
        (WebCore::RenderBox::calcAbsoluteHorizontal):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::tryLayoutDoingPositionedMovementOnly):
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::layout):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):
        (WebCore::RenderFlexibleBox::layoutHorizontalBox):
        (WebCore::RenderFlexibleBox::layoutVerticalBox):
        * rendering/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::computeLogicalWidth):
        (WebCore::RenderForeignObject::computeLogicalHeight):
        * rendering/RenderForeignObject.h:
        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::canvasSizeChanged):
        * rendering/RenderIFrame.cpp:
        (WebCore::RenderIFrame::computeLogicalHeight):
        (WebCore::RenderIFrame::computeLogicalWidth):
        (WebCore::RenderIFrame::layout):
        * rendering/RenderIFrame.h:
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::imageChanged):
        * rendering/RenderIndicator.cpp:
        (WebCore::RenderIndicator::layout):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::computeLogicalHeight):
        * rendering/RenderListBox.h:
        * rendering/RenderMeter.cpp:
        (WebCore::RenderMeter::computeLogicalWidth):
        (WebCore::RenderMeter::computeLogicalHeight):
        * rendering/RenderMeter.h:
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::layout):
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::layout):
        * rendering/RenderSlider.cpp:
        (WebCore::RenderSlider::layout):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::computeLogicalWidth):
        (WebCore::RenderTable::layout):
        * rendering/RenderTable.h:
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::computeLogicalWidth):
        * rendering/RenderTableCell.h:
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::computeLogicalHeight):
        * rendering/RenderTextControl.h:
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::layout):
        (WebCore::RenderTextControlSingleLine::textBlockWidth):
        (WebCore::RenderTextControlSingleLine::decorationWidthRight):
        (WebCore::RenderTextControlSingleLine::preferredDecorationWidthRight):
        (WebCore::RenderTextControlSingleLine::adjustControlHeightBasedOnLineHeight):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::computeLogicalHeight):
        (WebCore::RenderView::computeLogicalWidth):
        * rendering/RenderView.h:
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::svgAttributeChanged):

2010-09-23  Hans Wennborg  <hans@chromium.org>

        Reviewed by Simon Fraser.

        Update DeviceMotionEvent to spec
        https://bugs.webkit.org/show_bug.cgi?id=46344

        The spec has changed: the DeviceMotionEvent attributes accelerationX,
        accelerationY, etc. have been baked into an 'acceleration' attribute
        which returns an object with x, y, and z values. Likewise for the
        rotation rate. The 'accelerationIncludingGravity' attribute is new.

        * WebCore.exp.in:
        The DeviceMotionData::create member function has changed. Also export
        create functions for DeviceMotionData::Acceleration and RotationRate.

        * bindings/js/JSDeviceMotionEventCustom.cpp:
        (WebCore::JSDeviceMotionEvent::acceleration):
        (WebCore::JSDeviceMotionEvent::accelerationIncludingGravity):
        (WebCore::JSDeviceMotionEvent::rotationRate):
        (WebCore::JSDeviceMotionEvent::initDeviceMotionEvent):
        Manually create and return objects with the right attributes for
        acceleration, accelerationIncludingGravity, and rotationRate.
        When creating the DeviceMotionData object in initDeviceMotionEvent,
        accept any input objects that have the right attributes.

        * bindings/v8/custom/V8DeviceMotionEventCustom.cpp:
        (WebCore::V8DeviceMotionEvent::accelerationAccessorGetter):
        (WebCore::V8DeviceMotionEvent::accelerationIncludingGravityAccessorGetter):
        (WebCore::V8DeviceMotionEvent::rotationRateAccessorGetter):
        (WebCore::V8DeviceMotionEvent::initDeviceMotionEventCallback):
        V8 counterpart to the JSC code above.

        * dom/DeviceMotionData.cpp:
        (WebCore::DeviceMotionData::Acceleration::create):
        (WebCore::DeviceMotionData::Acceleration::Acceleration):
        (WebCore::DeviceMotionData::RotationRate::create):
        (WebCore::DeviceMotionData::RotationRate::RotationRate):
        (WebCore::DeviceMotionData::create):
        (WebCore::DeviceMotionData::DeviceMotionData):
        * dom/DeviceMotionData.h:
        (WebCore::DeviceMotionData::Acceleration::canProvideX):
        (WebCore::DeviceMotionData::Acceleration::canProvideY):
        (WebCore::DeviceMotionData::Acceleration::canProvideZ):
        (WebCore::DeviceMotionData::Acceleration::x):
        (WebCore::DeviceMotionData::Acceleration::y):
        (WebCore::DeviceMotionData::Acceleration::z):
        (WebCore::DeviceMotionData::RotationRate::canProvideAlpha):
        (WebCore::DeviceMotionData::RotationRate::canProvideBeta):
        (WebCore::DeviceMotionData::RotationRate::canProvideGamma):
        (WebCore::DeviceMotionData::RotationRate::alpha):
        (WebCore::DeviceMotionData::RotationRate::beta):
        (WebCore::DeviceMotionData::RotationRate::gamma):
        (WebCore::DeviceMotionData::acceleration):
        (WebCore::DeviceMotionData::accelerationIncludingGravity):
        (WebCore::DeviceMotionData::rotationRate):
        Add member classes Acceleration and RotationRate to DeviceMotionData.

        * dom/DeviceMotionEvent.idl:
        Update according to the spec. Acceleration and RotationRate need not
        be backed by native classes.

2010-09-23  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Accelerated transitions do not suspend/resume properly.
        https://bugs.webkit.org/show_bug.cgi?id=43792
        
        Fix suspending of accelerated transitions.
        
        GraphicsLayer changes unify the handling of transitions and animations
        in GraphicsLayer. Both are now identified by name, so the code
        now refers to "animationName" rather than "keyframesName". Transitions
        use a dummy name which is not a valid keyframe identifier.

        Tests: animations/suspend-transform-animation.html
               transitions/suspend-transform-transition.html

        * page/animation/ImplicitAnimation.h:
        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::pauseAnimation): Call down to the RenderLayerBacking
        to tell it that an accelerated transition was paused.

        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::animationNameForTransition): Create a name
        for the transition of the given property.
        (WebCore::GraphicsLayer::addAnimation): Generalize "keyframe" to "animation" in the parameter names.
        (WebCore::GraphicsLayer::pauseAnimation): ditto
        (WebCore::GraphicsLayer::removeAnimation): ditto

        * platform/graphics/mac/GraphicsLayerCA.h: Parameter renaming, and some method renames for clarity.
        (WebCore::GraphicsLayerCA::animationIsRunning):
        (WebCore::GraphicsLayerCA::LayerPropertyAnimation::LayerPropertyAnimation): struct rename for clarity.

        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::animationIdentifier): the animationName already has the property baked in.
        (WebCore::GraphicsLayerCA::moveOrCopyLayerAnimation): just deals with one animation now.
        (WebCore::GraphicsLayerCA::moveOrCopyAnimationsForProperty): we have to trawl through
        m_runningAnimations to get the identifiers for the animations that need to be copied.
        (WebCore::GraphicsLayerCA::addAnimation): rename parameters.
        (WebCore::GraphicsLayerCA::pauseAnimation): re-ordered methods here. member var renames.
        (WebCore::GraphicsLayerCA::removeAnimation): ditto.
        (WebCore::GraphicsLayerCA::updateLayerAnimations): no need to iterate over m_transitionPropertiesToRemove,
        and no more divergence between transitions and animations.
        (WebCore::GraphicsLayerCA::setCAAnimationOnLayer): renames for clarity.
        (WebCore::GraphicsLayerCA::removeCAAnimationFromLayer): ditto
        (WebCore::GraphicsLayerCA::pauseCAAnimationOnLayer): ditto
        (WebCore::GraphicsLayerCA::createAnimationFromKeyframes): renames
        (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes): renames
        (WebCore::GraphicsLayerCA::suspendAnimations): whitespace.

        * rendering/RenderLayerBacking.h: Group the transition and animation methods together.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::animationPaused): Re-ordered methods for clarity.
        (WebCore::RenderLayerBacking::animationFinished): ditto
        (WebCore::RenderLayerBacking::startTransition): Use animationNameForTransition() to generate
        the animation identifier.
        (WebCore::RenderLayerBacking::transitionPaused): Call pauseAnimation, using animationNameForTransition()
        to generate the animation identifier.
        (WebCore::RenderLayerBacking::transitionFinished): Call removeAnimation, using animationNameForTransition()
        to generate the animation identifier.
        (WebCore::RenderLayerBacking::notifyAnimationStarted): Moved.
        (WebCore::RenderLayerBacking::notifySyncRequired): Moved.

2010-09-23  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

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

        Disallow the setting of block-flow to anything other than "tb" for all table-related display types
        and flexible box display types.  By disallowing block-flow on the subclasses of RenderBlock like tables
        and flexible boxes, we ensure that alterations to the RenderBlock base class won't result in misrenderings
        in tables and flexible boxes that try to specify other block flow values.
 
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::adjustRenderStyle):

2010-09-23  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by David Levin.

        Add Worker support for FileSystem API
        https://bugs.webkit.org/show_bug.cgi?id=45808

        Exposed requestFileSystem and Flags constructor on worker contexts.

        Also changed how to get the base path for Web file systems (in
        non-chromium ports) so that it works for workers too.
        This patch assumes each port calls
        LocalFileSystem::initializeLocalFileSystem() in its initialization
        phase.

        No new tests; tests will be added when we have complete implementation.

        * bindings/generic/RuntimeEnabledFeatures.cpp:
        (WebCore::RuntimeEnabledFeatures::fileSystemEnabled): Changed to
        reflect AsyncFileSystem::isAvailable
        * bindings/generic/RuntimeEnabledFeatures.h: Moved the implementation
        of fileSystemEnabled to .cpp.
        * fileapi/LocalFileSystem.cpp:
        (WebCore::LocalFileSystem::initializeLocalFileSystem): Added.
        (WebCore::LocalFileSystem::localFileSystem): Added.
        (WebCore::LocalFileSystem::fileSystemBasePath): Added.
        * fileapi/LocalFileSystem.h:
        (WebCore::LocalFileSystem::~LocalFileSystem): Removed. (As now it's
        going to be used as a singleton.)
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::requestFileSystem): Changed to use a singleton
        instance of LocalFileSystem.
        * page/SecurityOrigin.h:
        (WebCore::SecurityOrigin::canAccessFileSystem): Added.
        * page/Settings.cpp: Removed fileSystemRootPath method.
        * page/Settings.h: Removed fileSystemRootPath method.
        * platform/AsyncFileSystem.cpp:
        (WebCore::AsyncFileSystem::isAvailable): Added.
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::requestFileSystem): Added to expose
        requestFileSystem method in worker contexts.
        (WebCore::WorkerContext::Observer): Added.
        (WebCore::WorkerContext::registerObserver): Added.
        (WebCore::WorkerContext::unregisterObserver): Added.
        (WebCore::WorkerContext::notifyObserversOfStop): Added.
        * workers/WorkerContext.h:
        * workers/WorkerContext.idl:
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThreadShutdownStartTask::performTask): Modified to
        call workerContext->notifyObserversOfStop to notify worker observers
        of the worker thread termination.

2010-09-23  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Oliver Hunt.

        Lower the default canvas interpolation quality for platforms that use CG
        https://bugs.webkit.org/show_bug.cgi?id=45722

        Lowered the default image interpolation quality for platforms that
        use CG down to low since this is as good as if not better than
        other graphics platforms defaults (being bilinear interpolation).

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::createImageBuffer):
        * html/HTMLCanvasElement.h: Moved in macros for default canvas interp quality.
        * platform/graphics/GraphicsContext.h: Moved out macros for default canvas interp quality. It makes more sense for them to be housed where they're used.

2010-09-23  David Hyatt  <hyatt@apple.com>

        Reviewed by Adele Peterson.

        https://bugs.webkit.org/show_bug.cgi?id=46414, rename line box methods that refer specifically to
        "horizontal" and "vertical."  Replace those terms with "inline direction" and "block direction."

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesInInlineDirection):
        (WebCore::InlineFlowBox::placeBoxesInBlockDirection):
        (WebCore::InlineFlowBox::computeBlockDirectionOverflow):
        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::setInlineDirectionOverflowPositions):
        (WebCore::InlineFlowBox::setBlockDirectionOverflowPositions):
        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::computeInlineDirectionPositionsForLine):
        (WebCore::RenderBlock::computeBlockDirectionPositionsForLine):
        (WebCore::RenderBlock::layoutInlineChildren):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::alignBoxesInBlockDirection):
        * rendering/RootInlineBox.h:

2010-09-23  Andrew Wilson  <atwilson@chromium.org>

        Unreviewed, rolling out r68197.
        http://trac.webkit.org/changeset/68197
        https://bugs.webkit.org/show_bug.cgi?id=46344

        Breaks

        * WebCore.exp.in:
        * bindings/js/JSDeviceMotionEventCustom.cpp:
        (WebCore::JSDeviceMotionEvent::xAcceleration):
        (WebCore::JSDeviceMotionEvent::yAcceleration):
        (WebCore::JSDeviceMotionEvent::zAcceleration):
        (WebCore::JSDeviceMotionEvent::xRotationRate):
        (WebCore::JSDeviceMotionEvent::yRotationRate):
        (WebCore::JSDeviceMotionEvent::zRotationRate):
        (WebCore::JSDeviceMotionEvent::initDeviceMotionEvent):
        * bindings/v8/custom/V8DeviceMotionEventCustom.cpp:
        (WebCore::V8DeviceMotionEvent::xAccelerationAccessorGetter):
        (WebCore::V8DeviceMotionEvent::yAccelerationAccessorGetter):
        (WebCore::V8DeviceMotionEvent::zAccelerationAccessorGetter):
        (WebCore::V8DeviceMotionEvent::xRotationRateAccessorGetter):
        (WebCore::V8DeviceMotionEvent::yRotationRateAccessorGetter):
        (WebCore::V8DeviceMotionEvent::zRotationRateAccessorGetter):
        (WebCore::V8DeviceMotionEvent::initDeviceMotionEventCallback):
        * dom/DeviceMotionData.cpp:
        (WebCore::DeviceMotionData::create):
        (WebCore::DeviceMotionData::DeviceMotionData):
        * dom/DeviceMotionData.h:
        (WebCore::DeviceMotionData::xAcceleration):
        (WebCore::DeviceMotionData::yAcceleration):
        (WebCore::DeviceMotionData::zAcceleration):
        (WebCore::DeviceMotionData::xRotationRate):
        (WebCore::DeviceMotionData::yRotationRate):
        (WebCore::DeviceMotionData::zRotationRate):
        (WebCore::DeviceMotionData::canProvideXAcceleration):
        (WebCore::DeviceMotionData::canProvideYAcceleration):
        (WebCore::DeviceMotionData::canProvideZAcceleration):
        (WebCore::DeviceMotionData::canProvideXRotationRate):
        (WebCore::DeviceMotionData::canProvideYRotationRate):
        (WebCore::DeviceMotionData::canProvideZRotationRate):
        * dom/DeviceMotionEvent.idl:

2010-09-23  David Hyatt  <hyatt@apple.com>

        Reviewed by Adele Peterson.

        https://bugs.webkit.org/show_bug.cgi?id=46403, convert the margin/border/padding accessors
        to be logical.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::getFlowSpacingLogicalWidth):
        (WebCore::InlineFlowBox::placeBoxesHorizontally):
        (WebCore::InlineFlowBox::paintBoxShadow):
        (WebCore::InlineFlowBox::paintBoxDecorations):
        (WebCore::InlineFlowBox::paintTextDecorations):
        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::InlineFlowBox):
        (WebCore::InlineFlowBox::marginBorderPaddingLogicalLeft):
        (WebCore::InlineFlowBox::marginBorderPaddingLogicalRight):
        (WebCore::InlineFlowBox::marginLogicalLeft):
        (WebCore::InlineFlowBox::marginLogicalRight):
        (WebCore::InlineFlowBox::borderLogicalLeft):
        (WebCore::InlineFlowBox::borderLogicalRight):
        (WebCore::InlineFlowBox::paddingLogicalLeft):
        (WebCore::InlineFlowBox::paddingLogicalRight):
        (WebCore::InlineFlowBox::includeLogicalLeftEdge):
        (WebCore::InlineFlowBox::includeLogicalRightEdge):
        (WebCore::InlineFlowBox::setEdges):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::computeHorizontalPositionsForLine):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::containingBlockWidthForPositioned):
        (WebCore::RenderBox::calcAbsoluteHorizontalValues):
        (WebCore::RenderBox::calcAbsoluteHorizontalReplaced):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):

2010-09-23  Jeff Schiller  <jeffschiller@google.com>

        Reviewed by David Hyatt.

        Ensure that SVG documents included by reference (object, iframe, embed) have transparent
        backgrounds (not white).  https://bugs.webkit.org/show_bug.cgi?id=10687

        Test: svg/in-html/by-reference.html

        * dom/Document.cpp:
        (WebCore::Document::hasSVGRootNode):
        * dom/Document.h:
        (WebCore::Document::hasSVGRootNode):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):

2010-09-23  Hans Wennborg  <hans@chromium.org>

        Reviewed by Simon Fraser.

        Update DeviceMotionEvent to spec
        https://bugs.webkit.org/show_bug.cgi?id=46344

        The spec has changed: the DeviceMotionEvent attributes accelerationX,
        accelerationY, etc. have been baked into an 'acceleration' attribute
        which returns an object with x, y, and z values. Likewise for the
        rotation rate. The 'accelerationIncludingGravity' attribute is new.

        * WebCore.exp.in:
        The DeviceMotionData::create member function has changed. Also export
        create functions for DeviceMotionData::Acceleration and RotationRate.

        * bindings/js/JSDeviceMotionEventCustom.cpp:
        (WebCore::JSDeviceMotionEvent::acceleration):
        (WebCore::JSDeviceMotionEvent::accelerationIncludingGravity):
        (WebCore::JSDeviceMotionEvent::rotationRate):
        (WebCore::JSDeviceMotionEvent::initDeviceMotionEvent):
        Manually create and return objects with the right attributes for
        acceleration, accelerationIncludingGravity, and rotationRate.
        When creating the DeviceMotionData object in initDeviceMotionEvent,
        accept any input objects that have the right attributes.

        * bindings/v8/custom/V8DeviceMotionEventCustom.cpp:
        (WebCore::V8DeviceMotionEvent::accelerationAccessorGetter):
        (WebCore::V8DeviceMotionEvent::accelerationIncludingGravityAccessorGetter):
        (WebCore::V8DeviceMotionEvent::rotationRateAccessorGetter):
        (WebCore::V8DeviceMotionEvent::initDeviceMotionEventCallback):
        V8 counterpart to the JSC code above.

        * dom/DeviceMotionData.cpp:
        (WebCore::DeviceMotionData::Acceleration::create):
        (WebCore::DeviceMotionData::Acceleration::Acceleration):
        (WebCore::DeviceMotionData::RotationRate::create):
        (WebCore::DeviceMotionData::RotationRate::RotationRate):
        (WebCore::DeviceMotionData::create):
        (WebCore::DeviceMotionData::DeviceMotionData):
        * dom/DeviceMotionData.h:
        (WebCore::DeviceMotionData::Acceleration::canProvideX):
        (WebCore::DeviceMotionData::Acceleration::canProvideY):
        (WebCore::DeviceMotionData::Acceleration::canProvideZ):
        (WebCore::DeviceMotionData::Acceleration::x):
        (WebCore::DeviceMotionData::Acceleration::y):
        (WebCore::DeviceMotionData::Acceleration::z):
        (WebCore::DeviceMotionData::RotationRate::canProvideAlpha):
        (WebCore::DeviceMotionData::RotationRate::canProvideBeta):
        (WebCore::DeviceMotionData::RotationRate::canProvideGamma):
        (WebCore::DeviceMotionData::RotationRate::alpha):
        (WebCore::DeviceMotionData::RotationRate::beta):
        (WebCore::DeviceMotionData::RotationRate::gamma):
        (WebCore::DeviceMotionData::acceleration):
        (WebCore::DeviceMotionData::accelerationIncludingGravity):
        (WebCore::DeviceMotionData::rotationRate):
        Add member classes Acceleration and RotationRate to DeviceMotionData.

        * dom/DeviceMotionEvent.idl:
        Update according to the spec. Acceleration and RotationRate need not
        be backed by native classes.

2010-09-23  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Roben.

        Set synchronous handle in ResourceHandleWin
        https://bugs.webkit.org/show_bug.cgi?id=46395

        When loading synchronous network resources, we need to use a synchronous internet handle.

        * platform/network/ResourceHandle.h:
        * platform/network/win/ResourceHandleWin.cpp:
        (WebCore::ResourceHandle::loadResourceSynchronously):
        (WebCore::ResourceHandle::setSynchronousInternetHandle):

2010-09-23  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=46326
        Crash when trying to create a NodeIterator rooted at a document-less DocumentType node

        Test: fast/dom/node-iterator-with-doctype-root.html

        * dom/Document.cpp: (WebCore::Document::detachNodeIterator): Added a comment explaining that
        attach/detach may not always be paired.

        * dom/NodeIterator.cpp:
        (WebCore::NodeIterator::NodeIterator): Don't try to register with the document if there is none.
        (WebCore::NodeIterator::~NodeIterator): Ditto.
        (WebCore::NodeIterator::detach): Ditto.
        (WebCore::NodeIterator::updateForNodeRemoval): There should be a document if we're getting a
        notification.

2010-09-23  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Roben.

        Add synchronous loading for local files to ResourceHandleWin
        https://bugs.webkit.org/show_bug.cgi?id=46392

        * platform/network/win/ResourceHandleWin.cpp:
        (WebCore::ResourceHandle::start):

2010-09-23  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Roben.

        Remove (has|set)ReceivedResponse() from public ResourceHandleWin API
        https://bugs.webkit.org/show_bug.cgi?id=46391

        There is no need for this functions to be public, so remove them.

        * platform/network/ResourceHandle.h:
        * platform/network/win/ResourceHandleWin.cpp:
        (WebCore::ResourceHandle::onRequestComplete):

2010-09-23  David Hyatt  <hyatt@apple.com>

        Reviewed by Adele Peterson.

        https://bugs.webkit.org/show_bug.cgi?id=46400
        
        Add logicalLeft/Top getter/setters to line boxes.

        * rendering/InlineBox.h:
        (WebCore::InlineBox::logicalLeft):
        (WebCore::InlineBox::setLogicalLeft):
        (WebCore::InlineBox::logicalTop):
        (WebCore::InlineBox::setLogicalTop):

2010-09-23  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Simon Fraser.

        Reduce minimum DOMTimer interval
        https://bugs.webkit.org/show_bug.cgi?id=45362

        Since the setInterval call is meant to reflect a global change for
        all pages' DOMTimers, it's misleading to have it be a method on a
        given page's settings' object. Thus, this patch changes the call to be static.

        This simple change to using a static call instead of the page's setting's
        method doesn't warrant a test.

        * page/Settings.h: Changed the setInterval call to be static.

2010-09-23  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=46386, give line boxes a vertical bit so that it's easy to know
        the overall direction of the line without having to ask the containing block.

        Also couldn't resist some cleanup.  Tightened up the type of the renderobject passed to RootInlineBox's
        constructor to be a RenderBlock.  Moved all the virtual logical height stuff outside of the SVG ifdef
        since TrailingFloatsRootInlineBox uses it and should work without SVG enabled.

        * rendering/EllipsisBox.h:
        (WebCore::EllipsisBox::EllipsisBox):
        * rendering/InlineBox.h:
        (WebCore::InlineBox::InlineBox):
        (WebCore::InlineBox::isVertical):
        (WebCore::InlineBox::setIsVertical):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::addToLine):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::RootInlineBox):
        (WebCore::RootInlineBox::placeEllipsis):
        * rendering/RootInlineBox.h:
        * rendering/SVGRootInlineBox.h:
        (WebCore::SVGRootInlineBox::SVGRootInlineBox):
        * rendering/TrailingFloatsRootInlineBox.h:
        (WebCore::TrailingFloatsRootInlineBox::TrailingFloatsRootInlineBox):

2010-09-23  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Roben.

        Check for a valid ResourceHandleClient in ResourceHandleWin
        https://bugs.webkit.org/show_bug.cgi?id=46389

        * platform/network/win/ResourceHandleWin.cpp:
        (WebCore::ResourceHandle::onRequestComplete): Add checks to ensure client() is not 0.

2010-09-23  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Roben.

        Fix ResourceHandleWin::cancel() for network resources 
        https://bugs.webkit.org/show_bug.cgi?id=46383

        * platform/network/win/ResourceHandleWin.cpp:
        (WebCore::ResourceHandle::onRequestComplete): Check it requestHandle is not 0.
        (WebCore::ResourceHandle::cancel): Set requestHandle to 0.

2010-09-23  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Roben.

        Add handling for form data and additional HTTP headers in ResourceHandleWin
        https://bugs.webkit.org/show_bug.cgi?id=46369

        * platform/network/win/ResourceHandleWin.cpp:
        (WebCore::ResourceHandle::start):

2010-09-23  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser

        'seeking' event should always fire
        https://bugs.webkit.org/show_bug.cgi?id=45694

        Update seek algorithm to match current spec.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setReadyState): Don't need to fire 'seeking' event here.
        (WebCore::HTMLMediaElement::seek): Always fire 'seeking'. Update comments.
        (WebCore::HTMLMediaElement::finishSeek): Update comments.
        (WebCore::HTMLMediaElement::mediaPlayerTimeChanged): Ditto.

2010-09-23  Eric Uhrhane  <ericu@chromium.org>

        Reviewed by David Levin.

        Rename FileWriterClient to AsyncFileWriterClient.
        https://bugs.webkit.org/show_bug.cgi?id=46325

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * fileapi/AsyncFileWriter.h:
        * fileapi/AsyncFileWriterClient.h: Copied from WebCore/fileapi/FileWriterClient.h.
        * fileapi/FileWriter.h:
        * fileapi/FileWriterClient.h: Removed.
        * platform/AsyncFileSystem.h:

2010-09-23  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=46378, rename width/height on line boxes to logicalWidth/logicalHeight.

        * editing/visible_units.cpp:
        (WebCore::previousLinePosition):
        (WebCore::nextLinePosition):
        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::paint):
        (WebCore::EllipsisBox::paintSelection):
        (WebCore::EllipsisBox::nodeAtPoint):
        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::logicalHeight):
        (WebCore::InlineBox::canAccommodateEllipsis):
        * rendering/InlineBox.h:
        (WebCore::InlineBox::InlineBox):
        (WebCore::InlineBox::hasVirtualLogicalHeight):
        (WebCore::InlineBox::setHasVirtualLogicalHeight):
        (WebCore::InlineBox::virtualLogicalHeight):
        (WebCore::InlineBox::setLogicalWidth):
        (WebCore::InlineBox::logicalWidth):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::placeBoxesHorizontally):
        (WebCore::InlineFlowBox::placeBoxesVertically):
        (WebCore::InlineFlowBox::computeVerticalOverflow):
        (WebCore::InlineFlowBox::nodeAtPoint):
        (WebCore::InlineFlowBox::paintFillLayer):
        (WebCore::InlineFlowBox::paintBoxDecorations):
        (WebCore::InlineFlowBox::paintMask):
        (WebCore::InlineFlowBox::paintTextDecorations):
        (WebCore::InlineFlowBox::placeEllipsisBox):
        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::visibleOverflowRect):
        (WebCore::InlineFlowBox::bottomLayoutOverflow):
        (WebCore::InlineFlowBox::rightLayoutOverflow):
        (WebCore::InlineFlowBox::layoutOverflowRect):
        (WebCore::InlineFlowBox::bottomVisualOverflow):
        (WebCore::InlineFlowBox::rightVisualOverflow):
        (WebCore::InlineFlowBox::visualOverflowRect):
        (WebCore::InlineFlowBox::setHorizontalOverflowPositions):
        (WebCore::InlineFlowBox::setVerticalOverflowPositions):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::selectionRect):
        (WebCore::InlineTextBox::placeEllipsisBox):
        (WebCore::InlineTextBox::nodeAtPoint):
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::paintSelection):
        (WebCore::InlineTextBox::paintCustomHighlight):
        (WebCore::InlineTextBox::paintDecoration):
        (WebCore::InlineTextBox::paintSpellingOrGrammarMarker):
        (WebCore::InlineTextBox::paintTextMatchMarker):
        (WebCore::InlineTextBox::paintCompositionUnderline):
        * rendering/InlineTextBox.h:
        (WebCore::InlineTextBox::calculateBoundaries):
        (WebCore::InlineTextBox::setSpaceAdd):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintEllipsisBoxes):
        (WebCore::RenderBlock::rightmostPosition):
        (WebCore::RenderBlock::adjustForBorderFit):
        (WebCore::RenderBlock::addFocusRingRects):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::computeHorizontalPositionsForLine):
        (WebCore::RenderBlock::checkLinesForTextOverflow):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintCustomHighlight):
        (WebCore::RenderBox::containingBlockWidthForPositioned):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::applyLineClamp):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::absoluteRects):
        (WebCore::RenderInline::absoluteQuads):
        (WebCore::RenderInline::linesBoundingBox):
        (WebCore::RenderInline::addFocusRingRects):
        (WebCore::RenderInline::paintOutline):
        * rendering/RenderSVGInline.cpp:
        (WebCore::RenderSVGInline::createInlineFlowBox):
        (WebCore::RenderSVGInline::absoluteQuads):
        * rendering/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::createTextBox):
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::createRootInlineBox):
        * rendering/RenderText.cpp:
        (WebCore::RenderText::absoluteRects):
        (WebCore::RenderText::absoluteRectsForRange):
        (WebCore::RenderText::absoluteQuadsForRange):
        (WebCore::RenderText::positionForPoint):
        (WebCore::RenderText::localCaretRect):
        (WebCore::RenderText::linesBoundingBox):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::writeTextRun):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::canAccommodateEllipsis):
        (WebCore::RootInlineBox::placeEllipsis):
        (WebCore::RootInlineBox::addHighlightOverflow):
        (WebCore::RootInlineBox::paintCustomHighlight):
        (WebCore::RootInlineBox::fillLineSelectionGap):
        (WebCore::RootInlineBox::closestLeafChildForXPos):
        * rendering/SVGInlineFlowBox.h:
        (WebCore::SVGInlineFlowBox::SVGInlineFlowBox):
        (WebCore::SVGInlineFlowBox::virtualLogicalHeight):
        (WebCore::SVGInlineFlowBox::setLogicalHeight):
        * rendering/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::SVGInlineTextBox):
        * rendering/SVGInlineTextBox.h:
        (WebCore::SVGInlineTextBox::virtualLogicalHeight):
        (WebCore::SVGInlineTextBox::setLogicalHeight):
        (WebCore::SVGInlineTextBox::selectionHeight):
        * rendering/SVGRenderTreeAsText.cpp:
        (WebCore::writeRenderSVGTextBox):
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::layoutChildBoxes):
        (WebCore::SVGRootInlineBox::layoutRootBox):
        * rendering/SVGRootInlineBox.h:
        (WebCore::SVGRootInlineBox::SVGRootInlineBox):
        (WebCore::SVGRootInlineBox::virtualLogicalHeight):
        (WebCore::SVGRootInlineBox::setLogicalHeight):
        * rendering/TrailingFloatsRootInlineBox.h:
        (WebCore::TrailingFloatsRootInlineBox::TrailingFloatsRootInlineBox):
        (WebCore::TrailingFloatsRootInlineBox::virtualLogicalHeight):

2010-09-23  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Oliver Hunt.

        context.drawImage with (source rect's height) = -(input image's native height) draws nothing
        https://bugs.webkit.org/show_bug.cgi?id=46243

        This patch changes canvasrenderingcontext2d's drawImage with an image element to
        normalize the source and dest rects to acheive the desired canvas spec behavior
        of allowing negative widths and heights that don't cause flipping and fix the
        adverse behavior of specifying a source rect height of negative the source image's height

        Tests: canvas/philip/tests/2d.drawImage.negativeSourceHeight.html
               canvas/philip/tests/2d.drawImage.negativeSourceHeight2.html
               canvas/philip/tests/2d.drawImage.negativeSourceHeightAndWidth.html

        * html/canvas/CanvasRenderingContext2D.cpp: Normalize rects in drawImage before calling
        lower level draw calls.

2010-09-23  Renata Hodovan  <reni@inf.u-szeged.hu>

        Reviewed by Dirk Schulze.

        SVGFEMorphologyElement doesn't support dynamic invalidation, when attributes change.
        https://bugs.webkit.org/show_bug.cgi?id=46363
        The patch also implements the simple setRadius method.

        Tests: svg/dynamic-updates/SVGFEMorphologyElement-dom-in-attr.html
               svg/dynamic-updates/SVGFEMorphologyElement-dom-operator-attr.html
               svg/dynamic-updates/SVGFEMorphologyElement-dom-radius-attr.html
               svg/dynamic-updates/SVGFEMorphologyElement-svgdom-in-prop.html
               svg/dynamic-updates/SVGFEMorphologyElement-svgdom-operator-prop.html
               svg/dynamic-updates/SVGFEMorphologyElement-svgdom-radius-call.html

        * svg/SVGFEMorphologyElement.cpp:
        (WebCore::SVGFEMorphologyElement::setRadius):
        (WebCore::SVGFEMorphologyElement::svgAttributeChanged):
        * svg/SVGFEMorphologyElement.h:

2010-09-23  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Roben.

        Add synchronous loading for network resources to ResourceHandleWin
        https://bugs.webkit.org/show_bug.cgi?id=46364

        Use return value of onRequestComplete() to indicate that an additional
        call to it is required for receiving remaining network data.

        * platform/network/ResourceHandle.h:
        * platform/network/win/ResourceHandleWin.cpp:
        (WebCore::ResourceHandle::onRequestComplete):
        (WebCore::ResourceHandle::start):

2010-09-23  Nate Chapin  <japhet@chromium.org>

        Reviewed by Darin Fisher.
        
        Implement <a ping> (disabled by default).
        https://bugs.webkit.org/show_bug.cgi?id=30458
        
        Tests: http/tests/navigation/ping-cross-origin-from-https.html
               http/tests/navigation/ping-cross-origin.html
               http/tests/navigation/ping-same-origin.html

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::defaultEventHandler):
        (WebCore::HTMLAnchorElement::sendPings):
        * html/HTMLAnchorElement.h:
        * html/HTMLAttributeNames.in:
        * loader/PingLoader.cpp:
        (WebCore::PingLoader::sendPing): Set ping-specific headers.
        (WebCore::PingLoader::PingLoader):
        * loader/PingLoader.h:
        (WebCore::PingLoader::timeout): Ensure pings eventually timeout, since
            the normal cancel mechanism can't stop them.
        * page/Settings.cpp:
        * page/Settings.h: Add hyperlinkAuditingEnabled.

2010-09-23  Steve VanDeBogart  <vandebo@chromium.org>

        Reviewed by David Levin.

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

        Use Skia's SkSafeRef/SkSafeUnref functions instead of safeRef/safeUnref.

        * platform/graphics/chromium/FontLinux.cpp:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/chromium/FontPlatformDataLinux.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::~FontPlatformData):
        * platform/graphics/skia/GradientSkia.cpp:
        (WebCore::Gradient::platformDestroy):
        * platform/graphics/skia/PatternSkia.cpp:
        (WebCore::Pattern::platformDestroy):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::State::State):
        (WebCore::PlatformContextSkia::State::~State):
        (WebCore::PlatformContextSkia::drawRect):
        (WebCore::PlatformContextSkia::setStrokeShader):
        (WebCore::PlatformContextSkia::setFillShader):
        (WebCore::PlatformContextSkia::setDashPathEffect):
        * platform/graphics/skia/SkiaFontWin.cpp:
        (WebCore::paintSkiaText):

2010-09-23  Lucas De Marchi  <lucas.demarchi@profusion.mobi>

        Reviewed by Csaba Osztrogonác.

        Fix warnings regarding print format in 64 bits
        https://bugs.webkit.org/show_bug.cgi?id=46357

        Use inttypes.h in order to have portable print formats across 32 and
        64 bits.

        * platform/sql/SQLiteFileSystem.cpp:
        (WebCore::SQLiteFileSystem::getFileNameForNewDatabase):

2010-09-23  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Add AudioContext files
        https://bugs.webkit.org/show_bug.cgi?id=44890

        No new tests since audio API is not yet implemented.

        * webaudio/AudioContext.cpp: Added.
        (WebCore::AudioContext::createAudioRequest):
        (WebCore::AudioContext::create):
        (WebCore::AudioContext::AudioContext):
        (WebCore::AudioContext::~AudioContext):
        (WebCore::AudioContext::lazyInitialize):
        (WebCore::AudioContext::uninitialize):
        (WebCore::AudioContext::isInitialized):
        (WebCore::AudioContext::isRunnable):
        (WebCore::AudioContext::stop):
        (WebCore::AudioContext::document):
        (WebCore::AudioContext::hasDocument):
        (WebCore::AudioContext::refBuffer):
        (WebCore::AudioContext::createBuffer):
        (WebCore::AudioContext::createBufferSource):
        (WebCore::AudioContext::createJavaScriptNode):
        (WebCore::AudioContext::createLowPass2Filter):
        (WebCore::AudioContext::createHighPass2Filter):
        (WebCore::AudioContext::createPanner):
        (WebCore::AudioContext::createConvolver):
        (WebCore::AudioContext::createAnalyser):
        (WebCore::AudioContext::createGainNode):
        (WebCore::AudioContext::createDelayNode):
        (WebCore::AudioContext::createChannelSplitter):
        (WebCore::AudioContext::createChannelMerger):
        (WebCore::AudioContext::notifyNodeFinishedProcessing):
        (WebCore::AudioContext::derefFinishedSourceNodes):
        (WebCore::AudioContext::refNode):
        (WebCore::AudioContext::derefNode):
        (WebCore::AudioContext::derefUnfinishedSourceNodes):
        (WebCore::AudioContext::lock):
        (WebCore::AudioContext::tryLock):
        (WebCore::AudioContext::unlock):
        (WebCore::AudioContext::isAudioThread):
        (WebCore::AudioContext::isGraphOwner):
        (WebCore::AudioContext::addDeferredFinishDeref):
        (WebCore::AudioContext::handlePostRenderTasks):
        (WebCore::AudioContext::handleDeferredFinishDerefs):
        (WebCore::AudioContext::markForDeletion):
        (WebCore::AudioContext::deleteMarkedNodes):
        * webaudio/AudioContext.h: Added.
        (WebCore::AudioContext::destination):
        (WebCore::AudioContext::currentTime):
        (WebCore::AudioContext::sampleRate):
        (WebCore::AudioContext::listener):
        (WebCore::AudioContext::temporaryMonoBus):
        (WebCore::AudioContext::temporaryStereoBus):
        (WebCore::AudioContext::incrementConnectionCount):
        (WebCore::AudioContext::connectionCount):
        (WebCore::AudioContext::setAudioThread):
        (WebCore::AudioContext::audioThread):
        (WebCore::AudioContext::isAudioThreadFinished):
        (WebCore::AudioContext::AutoLocker::AutoLocker):
        (WebCore::AudioContext::AutoLocker::~AutoLocker):
        (WebCore::AudioContext::RefInfo::RefInfo):
        * webaudio/AudioContext.idl: Added.

2010-09-23  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Steve Block.

        IndexedDB shouldn't crash on invalid index names
        https://bugs.webkit.org/show_bug.cgi?id=46362

        For now, return null.  In a later patch, we'll do proper exception raising.

        * storage/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::index):

2010-09-23  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Dave Hyatt.

        Fix the memory safety issue by checking containerObject is a RenderBox
        before doing the transforms.
        https://bugs.webkit.org/show_bug.cgi?id=46365

        Test: compositing/overflow/get-transform-from-non-box-container.html

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

2010-09-23  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=46314.
        
        The RenderView's block-flow should match the root element's block-flow.  When we create (or re-create) the style for the document, take
        the block-flow from the document element's style and use it if it's available.
        
        Also patch styleDidChange so that if the block-flow changes dynamically after we have already made the document style, we'll propagate
        the change back up to the RenderView and have it do a relayout.

        No tests possible yet, since you can't see the document's style anywhere, and block-flow isn't doing anything to affect layout
        yet.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::styleForDocument):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleDidChange):

2010-09-23  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: source frame popups shouldn't disappear when hovered
        https://bugs.webkit.org/show_bug.cgi?id=46358

        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._mouseMove):

2010-09-23  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Chris Fleizach.

        [Regression][Gtk] Left and Right Arrows no longer function when caret browsing is enabled
        https://bugs.webkit.org/show_bug.cgi?id=45375

        Consider caret browsing for Move commands.

        Test: platform/gtk/editing/selection/caret-mode-left-right-arrows.html

        * editing/EditorCommand.cpp:
        (WebCore::createCommandMap): Use "caret browsing aware functions"
        as isEnabled() function for those commands moving the caret
        forward and backward across characters, words, lines or paragraphs,
        not just left and right, as it was the case so far.

2010-09-23  Brad Moore  <bradm@apple.com>

        Reviewed by Dan Bernstein.

        Address a remaining discrepancy in piecewise text measurement
        https://bugs.webkit.org/show_bug.cgi?id=45796

        Don't include always-integral space widths in the floating point accumulator designed
        to minimize precision loss.  This brings whole-string measurement in line with piecewise
        text measurement when dealing with fonts with fractional advances.

        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::advance): Change the associativity of width addition to minimize precision loss.

2010-09-23  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Roben.

        Cleanup network communication code in ResourceHandleWin
        https://bugs.webkit.org/show_bug.cgi?id=46200

        Add logic for request handling directly into ResourceHandle::start and fix style.
        Use Unicode instead of ASCII Windows API functions.

        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/win/ResourceHandleWin.cpp:
        (WebCore::ResourceHandle::onRequestComplete):
        (WebCore::ResourceHandle::start):

2010-09-23  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Andreas Kling.

        Invalid assertion in ScriptCallback
        https://bugs.webkit.org/show_bug.cgi?id=46348

        Removing invalid ASSERT from method ScriptCallback::call().

        * bindings/js/ScriptFunctionCall.cpp:
        (WebCore::ScriptCallback::call):

2010-09-23  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Ariya Hidayat.

        [Cairo] Generalize ContextShadow from the Qt port and use it for shadow code
        https://bugs.webkit.org/show_bug.cgi?id=45599

        Make ContextShadow platform-independent and add a Cairo implementation. This is currently
        disabled for Cairo, but will be enabled in a followup patch with new baselines.

        No new tests as this does not change functionality.

        * GNUmakefile.am: Update source lists.
        * WebCore.pro: Update source lists.
        * platform/graphics/ContextShadow.cpp: Added. A generalized version of Qt's ContextShadow.
        (WebCore::ContextShadow::ContextShadow):
        (WebCore::ContextShadow::clear):
        (WebCore::ContextShadow::blurLayerImage):
        (WebCore::ContextShadow::calculateMinimalLayerRect):
        * platform/graphics/ContextShadow.h: Added.
        (WebCore::ContextShadow::offset):
        * platform/graphics/cairo/CairoUtilities.cpp: Added. 
        (WebCore::setSourceRGBAFromColor): A utility to set the source RGBA on a Cairo surface from a WebCore color.
        * platform/graphics/cairo/CairoUtilities.h: Added.
        * platform/graphics/cairo/ContextShadowCairo.cpp: Added.
        (WebCore::purgeScratchBuffer): Static function to purge the shadow buffer.
        (WebCore::PurgeScratchBufferTimer::fired): Timer callback.
        (WebCore::scheduleScratchBufferPurge): Schedule's a WebCore timer to purge the shadow buffer.
        (WebCore::getScratchBuffer): Create or reuse the scratch buffer.
        (WebCore::ContextShadow::beginShadowLayer): Added.
        (WebCore::ContextShadow::endShadowLayer): Added.
        * platform/graphics/gtk/CairoUtilities.cpp: Removed.
        * platform/graphics/gtk/CairoUtilities.h: Removed.
        * platform/graphics/gtk/GdkCairoUtilities.cpp: Renamed from CairoUtilities.cpp.
        (getCairoSurfacePixel):
        (getGdkPixbufPixel):
        (cairoImageSurfaceToGdkPixbuf):
        * platform/graphics/gtk/GdkCairoUtilities.h: Added.
        * platform/graphics/gtk/ImageBufferGtk.cpp:
        * platform/graphics/gtk/ImageGtk.cpp:
        * platform/graphics/qt/ContextShadow.cpp: Removed.
        * platform/graphics/qt/ContextShadow.h: Removed.
        * platform/graphics/qt/ContextShadowQt.cpp: Added. Adapted from code originally in ContextShadow.cpp.
        (WebCore::ShadowBuffer::ShadowBuffer):
        (WebCore::ShadowBuffer::scratchImage):
        (WebCore::ShadowBuffer::schedulePurge):
        (WebCore::ShadowBuffer::timerEvent):
        (WebCore::ContextShadow::beginShadowLayer):
        (WebCore::ContextShadow::endShadowLayer):
        * platform/graphics/qt/FontQt.cpp:
        (WebCore::drawTextCommon): Updated to reflect new ContextShadow members.
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContextPlatformPrivate::hasShadow): Updated to reflect new ContextShadow members.
        (WebCore::GraphicsContext::strokeArc): Ditto.
        (WebCore::GraphicsContext::drawConvexPolygon): Ditto.
        (WebCore::GraphicsContext::fillPath): Ditto.
        (WebCore::GraphicsContext::strokePath): Ditto.
        (WebCore::GraphicsContext::fillRect): Ditto.
        (WebCore::GraphicsContext::fillRoundedRect): Ditto.
        (WebCore::GraphicsContext::setPlatformShadow): Ditto.

2010-09-23  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Roben.

        Add internetStatusCallback to ResourceHandleWin.
        https://bugs.webkit.org/show_bug.cgi?id=46187

        Add callback for asynchronous network transfer.

        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleInternal.h:
        * platform/network/win/ResourceHandleWin.cpp:
        (WebCore::callOnRedirect):
        (WebCore::callOnRequestComplete):
        (WebCore::ResourceHandle::internetStatusCallback):
        (WebCore::ResourceHandle::onRedirect):

2010-09-23  Andrei Popescu  <andreip@google.com>

        Reviewed by Jeremy Orlow.

        IDBTransactionCoordinator contains a broken assertion.
        https://bugs.webkit.org/show_bug.cgi?id=46356

        Remove the broken assertion.

        * storage/IDBTransactionCoordinator.cpp:
        (WebCore::IDBTransactionCoordinator::processStartedTransactions):

2010-09-23  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: highlight DOM nodes when navigating the DOM with keyboard
        https://bugs.webkit.org/show_bug.cgi?id=46346

        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype.onselect):
        * inspector/front-end/treeoutline.js:
        (TreeOutline.prototype._treeKeyDown):
        (TreeElement.prototype.selectOnMouseDown):
        (TreeElement.prototype.select):

2010-09-23  Andrei Popescu  <andreip@google.com>

        Reviewed by Jeremy Orlow.

        [Chromium] Build broken due to missing include in IDBTransactionBackendImpl.h
        https://bugs.webkit.org/show_bug.cgi?id=46352

        No new tests needed, build fix.

        * storage/IDBTransaction.cpp:
        (WebCore::IDBTransaction::objectStore):
        * storage/IDBTransactionBackendImpl.h:

2010-09-23  Andrei Popescu  <andreip@google.com>

        Reviewed by Jeremy Orlow.

        IDBObjectStore::get should run in a transaction.
        https://bugs.webkit.org/show_bug.cgi?id=44700

        Implements logic for running IDBObjectStore::get() in a transaction.
        Refactors the pending transaction monitor and the transaction coordinator
        to use pointers instead of transaction IDs.
 
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::didLeaveScriptContext):
        * storage/IDBCursorBackendImpl.cpp:
        * storage/IDBDatabase.cpp:
        (WebCore::IDBDatabase::objectStore):
        * storage/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::objectStore):
        * storage/IDBDatabaseBackendImpl.h:
        (WebCore::IDBDatabaseBackendImpl::transactionCoordinator):
        * storage/IDBFactoryBackendImpl.cpp:
        * storage/IDBFactoryBackendImpl.h:
        * storage/IDBFactoryBackendInterface.h:
        * storage/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::IDBObjectStore):
        (WebCore::IDBObjectStore::get):
        * storage/IDBObjectStore.h:
        (WebCore::IDBObjectStore::create):
        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBTask::IDBTask):
        (WebCore::IDBTask::performTask):
        (WebCore::createTask):
        (WebCore::IDBObjectStoreBackendImpl::get):
        (WebCore::IDBObjectStoreBackendImpl::getInternal):
        * storage/IDBObjectStoreBackendImpl.h:
        * storage/IDBObjectStoreBackendInterface.h:
        * storage/IDBPendingTransactionMonitor.cpp:
        (WebCore::IDBPendingTransactionMonitor::addPendingTransaction):
        (WebCore::IDBPendingTransactionMonitor::removePendingTransaction):
        (WebCore::IDBPendingTransactionMonitor::abortPendingTransactions):
        * storage/IDBPendingTransactionMonitor.h:
        * storage/IDBRequest.cpp:
        (WebCore::IDBRequest::IDBRequest):
        (WebCore::IDBRequest::~IDBRequest):
        (WebCore::IDBRequest::onSuccess):
        (WebCore::IDBRequest::timerFired):
        * storage/IDBRequest.h:
        (WebCore::IDBRequest::create):
        * storage/IDBTransaction.cpp:
        (WebCore::IDBTransaction::IDBTransaction):
        (WebCore::IDBTransaction::objectStore):
        * storage/IDBTransactionBackendImpl.cpp:
        (WebCore::IDBTransactionBackendImpl::create):
        (WebCore::IDBTransactionBackendImpl::IDBTransactionBackendImpl):
        (WebCore::IDBTransactionBackendImpl::objectStore):
        (WebCore::IDBTransactionBackendImpl::scheduleTask):
        (WebCore::IDBTransactionBackendImpl::abort):
        (WebCore::IDBTransactionBackendImpl::didCompleteTaskEvents):
        (WebCore::IDBTransactionBackendImpl::run):
        (WebCore::IDBTransactionBackendImpl::start):
        (WebCore::IDBTransactionBackendImpl::commit):
        (WebCore::IDBTransactionBackendImpl::timerFired):
        * storage/IDBTransactionBackendImpl.h:
        (WebCore::IDBTransactionBackendImpl::~IDBTransactionBackendImpl):
        (WebCore::IDBTransactionBackendImpl::isFinished):
        * storage/IDBTransactionBackendInterface.h:
        * storage/IDBTransactionCoordinator.cpp:
        (WebCore::IDBTransactionCoordinator::createTransaction):
        (WebCore::IDBTransactionCoordinator::didStartTransaction):
        (WebCore::IDBTransactionCoordinator::didFinishTransaction):
        (WebCore::IDBTransactionCoordinator::processStartedTransactions):
        * storage/IDBTransactionCoordinator.h:

2010-09-23  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Roben.

        [WINCE] Remove usage of MemoryManager
        https://bugs.webkit.org/show_bug.cgi?id=46206

        MemoryManager does not provide any extra value, so remove it.

        * page/wince/FrameWinCE.cpp:
        (WebCore::imageFromSelection):
        * platform/graphics/wince/PlatformPathWinCE.cpp:
        (WebCore::drawPolygons):

2010-09-23  Darin Adler  <darin@apple.com>

        Reviewed by Chris Fleizach.

        media/video-controls-with-mutation-event-handler.html crashing
        https://bugs.webkit.org/show_bug.cgi?id=46169

        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlInputElement::MediaControlInputElement): Don't take a type argument.
        We can't set the type until after the element is created beacuse of reference counting rules.
        (WebCore::MediaControlMuteButtonElement::MediaControlMuteButtonElement): Don't pass the type.
        (WebCore::MediaControlMuteButtonElement::create): Set the type.
        (WebCore::MediaControlPlayButtonElement::MediaControlPlayButtonElement): More of the same.
        (WebCore::MediaControlPlayButtonElement::create): Ditto.
        (WebCore::MediaControlSeekButtonElement::MediaControlSeekButtonElement): Ditto.
        (WebCore::MediaControlSeekButtonElement::create): Ditto.
        (WebCore::MediaControlRewindButtonElement::MediaControlRewindButtonElement): Ditto.
        (WebCore::MediaControlRewindButtonElement::create): Ditto.
        (WebCore::MediaControlReturnToRealtimeButtonElement::MediaControlReturnToRealtimeButtonElement): Ditto.
        (WebCore::MediaControlReturnToRealtimeButtonElement::create): Ditto.
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::MediaControlToggleClosedCaptionsButtonElement): Ditto.
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::create): Ditto.
        (WebCore::MediaControlTimelineElement::MediaControlTimelineElement): Ditto.
        (WebCore::MediaControlTimelineElement::create): Ditto.
        (WebCore::MediaControlVolumeSliderElement::MediaControlVolumeSliderElement): Ditto.
        (WebCore::MediaControlVolumeSliderElement::create): Ditto.
        (WebCore::MediaControlFullscreenButtonElement::MediaControlFullscreenButtonElement): Ditto.
        (WebCore::MediaControlFullscreenButtonElement::create): Ditto.

        * rendering/MediaControlElements.h: Removed the type argument from the MediaControlInputElement
        constructor.

2010-09-22  Luke Macpherson  <macpherson@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Don't allow empty strings as tokens in xmlhttprequest, as per rfc2616 section 2.2.

        XMLHttpRequest: setRequestHeader() does not throw SYNTAX_ERR exception if the header field name is empty
        https://bugs.webkit.org/show_bug.cgi?id=46151

        Test: http/tests/xmlhttprequest/xmlhttprequest-setrequestheader-no-name.html

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

2010-09-22  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Adam Barth.

        [BREWMP] Enable touch events
        https://bugs.webkit.org/show_bug.cgi?id=46321

        Enable TOUCH_EVENTS by porting PlatformTouchEvent and PlatformTouchPoint.
        Brew MP does not support multi touch, so enable only single touch for now.

        * platform/PlatformTouchEvent.h:
        * platform/PlatformTouchPoint.h:
        * platform/brew/PlatformTouchEventBrew.cpp: Added.
        (WebCore::PlatformTouchEvent::PlatformTouchEvent):
        * platform/brew/PlatformTouchPointBrew.cpp: Added.
        (WebCore::PlatformTouchPoint::PlatformTouchPoint):

2010-09-22  Andy Estes  <aestes@apple.com>

        Reviewed by Darin Adler.

        REGRESSION (r61285): Microsoft Entourage 2008 does not invoke My Day window
        https://bugs.webkit.org/show_bug.cgi?id=46334

        * WebCore.exp.in: Export __ZN7WebCore27applicationIsMicrosoftMyDayEv.
        * platform/mac/RuntimeApplicationChecks.h:
        * platform/mac/RuntimeApplicationChecks.mm:
        (WebCore::applicationIsMicrosoftMyDay): Determine if the embeddding
        application is Microsoft My Day by checking the bundle identifier.

2010-09-22  Andy Estes  <aestes@apple.com>

        Rubber-stamped by Darin Adler.

        Fix a typo and correct an inaccurate phrase in a comment.

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processEndTag):

2010-09-22  Andy Estes  <aestes@apple.com>

        Reviewed by Adam Barth.

        REGRESSION (r61285): <script /> parses differently in HTML5
        https://bugs.webkit.org/show_bug.cgi?id=42909

        If pre-HTML5 parser quirks are enabled, the HTMLTreeBuilder should
        handle self-closing script tags like the old parser did. Specifically,
        "<script />" should be treated as "<script></script>".

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::HTMLDocumentParser): Instantiate
        HTMLTreeBuilder with the value of usePreHTML5ParserQuirks().
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::HTMLTreeBuilder):
        (WebCore::HTMLTreeBuilder::processEndTag): If the tokenizer is not
        currently in DataState, this means that the current end token is fake
        and was created by the tree builder to handle a self-closing script tag.
        Assert that pre-HTML5 quirks are enabled and set the tokenizer's state
        to DataState in this case.
        (WebCore::HTMLTreeBuilder::processStartTagForInHead): If pre-HTML5
        parser quirks are enabled and the script tag is self-closing, create and
        procses a fake script end tag.
        * html/parser/HTMLTreeBuilder.h:
        (WebCore::HTMLTreeBuilder::create):

2010-09-22  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Darin Fisher.

        [Chromium] User style layout tests don't pass on Chromium
        https://bugs.webkit.org/show_bug.cgi?id=46069
        
        Instead of making resetUserStyleCacheInAllFrames be a no-op for
        Chromium, have it be controlled by a UserStyleInjectionTime enum.
        
        Also move the UserStyleSheet::Level enum to be inside
        UserStyleSheetTypes for consistency.

        * WebCore.exp.in:
        * dom/Document.cpp:
        (WebCore::Document::pageGroupUserSheets):
        * page/PageGroup.cpp:
        (WebCore::PageGroup::addUserStyleSheetToWorld):
        * page/PageGroup.h:
        * page/UserStyleSheet.h:
        (WebCore::UserStyleSheet::UserStyleSheet):
        (WebCore::UserStyleSheet::level):
        * page/UserStyleSheetTypes.h:

2010-09-22  Ruben  <chromium@hybridsource.org>

        Reviewed by Tony Chang.

        [chromium] added ifdefs for FreeBSD support
        https://bugs.webkit.org/show_bug.cgi?id=46316

        * bindings/js/JSInspectorFrontendHostCustom.cpp:
        (WebCore::JSInspectorFrontendHost::platform):
        * bindings/v8/custom/V8InspectorFrontendHostCustom.cpp:
        (WebCore::V8InspectorFrontendHost::platformCallback):
        * dom/SelectElement.cpp:
        * loader/CachedFont.cpp:
        * page/EventHandler.cpp:
        * page/chromium/EventHandlerChromium.cpp:
        * platform/Scrollbar.cpp:
        * platform/chromium/ChromiumBridge.h:
        * platform/graphics/chromium/FontPlatformData.h:
        * platform/graphics/skia/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::~FontCustomPlatformData):
        (WebCore::FontCustomPlatformData::fontPlatformData):
        (WebCore::createFontCustomPlatformData):
        * platform/graphics/skia/FontCustomPlatformData.h:

2010-09-22  Rafael Antognolli  <antognolli@profusion.mobi>

        Unreviewed build fix.

        [EFL] Fix build due to latest EFL (Edje) changes.
        https://bugs.webkit.org/show_bug.cgi?id=46317

        Make the change int -> Edje_Load_Error (enum).

        No new functionality, so no new tests.

        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::themePartCacheEntryReset):
        (WebCore::RenderThemeEfl::createEdje):
        (WebCore::RenderThemeEfl::applyPartDescriptions):
        * platform/efl/ScrollbarEfl.cpp:
        (ScrollbarEfl::setParent):

2010-09-22  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        AX: aria-hidden change doesn't update the ax tree
        https://bugs.webkit.org/show_bug.cgi?id=45836

        Test: accessibility/aria-hidden-update.html

        * dom/Element.cpp:
        (WebCore::Element::updateAfterAttributeChanged):

2010-09-22  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Dumitru Daniliuc.

        [FileSystem] Fix Flags handling in DirectoryEntry custom binding code
        https://bugs.webkit.org/show_bug.cgi?id=46028

        Do not use adoptRef to get RefPtr from a raw pointer that is already
        adopted in toNative/toJS.

        Test: fast/filesystem/flags-passing.html

        * bindings/js/JSDirectoryEntryCustom.cpp:
        (WebCore::JSDirectoryEntry::getFile):
        (WebCore::JSDirectoryEntry::getDirectory):
        * bindings/v8/custom/V8DirectoryEntryCustom.cpp:
        (WebCore::V8DirectoryEntry::getDirectoryCallback):
        (WebCore::V8DirectoryEntry::getFileCallback):

2010-09-22  Jia Pu  <jpu@apple.com>

        Reviewed by Dan Bernstein.

        Need to stop autocorrection panel timer when selection changes.
        https://bugs.webkit.org/show_bug.cgi?id=46201
        <rdar://problem/8441042>

        * editing/Editor.cpp:
        (WebCore::Editor::appliedEditing): Stop correction timer after editing.
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges): When text checking is done for
          showing autocorrection panel, we suppress all corrections that are not at the end of
          text checking range. So that we don't replace other words while showing correction panel
          for the last word.
        (WebCore::Editor::stopCorrectionPanelTimer): Stop correction timer.

        * editing/Editor.h: Added stopCorrectionPanelTimer() method.

2010-09-22  Eric Uhrhane  <ericu@chromium.org>

        Reviewed by Dumitru Daniliuc.

        Add Chromium implementation for FileWriter
        https://bugs.webkit.org/show_bug.cgi?id=44361

        No new tests; the implementation's not yet far enough along for that.

        This makes a chain of contruction-and-linking-up for various sorts of
        FileWriter interfaces to call through to Chromium, and for various
        sorts of FileWriterClients to call back, with object ownership always
        pointing towards the Chromium API.  That is, the DOM object owns an
        AsyncFileWriter, which owns its implementation object, and the reverse
        (client) direction is raw pointers.

        File metadata is looked up before the FileWriter is returned, so that
        we know the file exists and can cache its length.

        The WebCore part of this is simple and generic enough to handle
        Chromium, so it should be easy for me to put in a WebCore-only
        implementation next.
        
        * fileapi/AsyncFileWriter.h:
        * fileapi/DOMFileSystem.cpp:
        (WebCore::DOMFileSystem::createWriter):
        * fileapi/DOMFileSystem.h:
        * fileapi/FileSystemCallbacks.cpp:
        (WebCore::FileSystemCallbacksBase::didCreateFileWriter):
        (WebCore::FileWriterCallbacks::FileWriterCallbacks):
        (WebCore::FileWriterCallbacks::didCreateFileWriter):
        * fileapi/FileSystemCallbacks.h:
        * platform/AsyncFileSystem.h:
        * platform/AsyncFileSystemCallbacks.h:

2010-09-22  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=46222
        <rdar://problem/8461701> Document.getElementById() malfunctions if ID was changed via Attr node modification.

        Test: fast/dom/Attr/change-id-via-attr-node-value.html

        * dom/Attr.h:
        * dom/Attr.cpp:
        (WebCore::Attr::setValue): Separated a version callable from WebCore from one avaiable to JS.
        Attr::setValue() can be called from Element::setAttribute(), and we don't want to update
        m_elementsById (or to call attributeChanged()) twice in that case.
        (WebCore::Attr::childrenChanged): If Attr's node children change, id changes.

        * dom/Document.cpp: (WebCore::Document::removeElementById): Added an assertion that we are
        not trying to remove something that isn't there. If we are, we probably failed to update
        m_elementsById earlier.

        * dom/Element.cpp: (WebCore::Element::setAttribute): If the attribute has an Attr node, its
        children should be updated to match attribute value.

2010-09-22  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=46311, lock form controls and replaced elements to vertical block flow.

        Patch form controls that don't use RenderReplaced by hand in html.css.  Patch all RenderReplaced elements
        with an override of setStyle that forces the new style to have a vertical block flow.  We have to do something like
        this to cover the CSS3 content: url(img) method of image replacement.
        
        * css/html.css:
        (input, textarea, keygen, select, button, isindex, meter, progress):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::setStyle):
        * rendering/RenderReplaced.h:

2010-09-22  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=46304
        
        display:inline should become display:inline-block when an object's block flow does not match its parent's block flow.

        Added fast/blockflow/display-mutation.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::styleForElement):
        (WebCore::CSSStyleSelector::pseudoStyleForElement):
        (WebCore::CSSStyleSelector::adjustRenderStyle):
        * css/CSSStyleSelector.h:

2010-09-22 Mario Sanchez Prada <msanchez@igalia.com>

        Reviewed by Martin Robinson.

        [Gtk] object:text-changed events should be emitted for entries and password text
        https://bugs.webkit.org/show_bug.cgi?id=25898

        Implement proper 'text-changed' signal emission for the GTK port

        Call deleteTextFromNode() when needed while removing text nodes.
        Do it even when removeNode() is going to be called afterwards, in
        order to allow accessibility to get properly notified about the
        text being removed alongside with that node.

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

        New function in AXObjectCache to call when text changes in a node.
        Added one new function to allow notifying something changed in a
        text node through the associated RenderObject, making such a
        function dependant on the platform-specific implementation,
        provided through a protected function (provided a proper
        implementation for the GTK port and a dummy one for the others).

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::nodeTextChangeNotification): New
        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::AXTextChange): New enumeration
        (WebCore::AXObjectCache::nodeTextChangeNotification): New
        (WebCore::AXObjectCache::nodeTextChangePlatformNotification): New
        * accessibility/AccessibilityRenderObject.h:
        (WebCore::toAccessibilityRenderObject):
        * accessibility/chromium/AXObjectCacheChromium.cpp:
        (WebCore::AXObjectCache::nodeTextChangePlatformNotification): New
        * accessibility/gtk/AXObjectCacheAtk.cpp:
        (WebCore::emitTextChanged):
        (WebCore::AXObjectCache::nodeTextChangePlatformNotification): New
        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::nodeTextChangePlatformNotification): New
        * accessibility/win/AXObjectCacheWin.cpp:
        (WebCore::AXObjectCache::nodeTextChangePlatformNotification): New

        Notify accessibility when something changes in a text node.
        Call to AXObjectCache::nodeTextChangeNotification() to notify when
        text was inserted/deleted when applying/unapplying a text edition
        command, along with the offset in the original text where the
        change took place and the number of characters that got affected.

        * editing/AppendNodeCommand.cpp:
        (WebCore::sendAXTextChangedIgnoringLineBreaks):
        (WebCore::AppendNodeCommand::doApply):
        (WebCore::AppendNodeCommand::doUnapply):
        * editing/DeleteFromTextNodeCommand.cpp:
        (WebCore::DeleteFromTextNodeCommand::doApply):
        (WebCore::DeleteFromTextNodeCommand::doUnapply):
        * editing/InsertIntoTextNodeCommand.cpp:
        (WebCore::InsertIntoTextNodeCommand::doApply):
        (WebCore::InsertIntoTextNodeCommand::doUnapply):
        * editing/InsertNodeBeforeCommand.cpp:
        (WebCore::InsertNodeBeforeCommand::doApply):
        (WebCore::InsertNodeBeforeCommand::doUnapply):
        (WebCore::DeleteSelectionCommand::handleGeneralDelete):

2010-09-22  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=46298, add logicalWidth/Height getters/setters to RenderBox.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::logicalWidth):
        (WebCore::RenderBox::logicalHeight):
        (WebCore::RenderBox::setLogicalWidth):
        (WebCore::RenderBox::setLogicalHeight):
        * rendering/RenderBox.h:

2010-09-22  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Oliver Hunt.

        Script engine agnostic ScriptCallback class
        https://bugs.webkit.org/show_bug.cgi?id=43216

        Refactoring class ScriptFunctionCall to create a class (ScriptCallback) that
        receives a script function as a ScriptValue and calls that function with provided parameters.

        * bindings/js/ScriptFunctionCall.cpp:
        (WebCore::ScriptCallArgumentHandler::appendArgument):
        (WebCore::ScriptFunctionCall::ScriptFunctionCall):
        (WebCore::ScriptCallback::ScriptCallback):
        (WebCore::ScriptCallback::call):
        * bindings/js/ScriptFunctionCall.h:
        (WebCore::ScriptCallArgumentHandler::ScriptCallArgumentHandler):
        * bindings/v8/ScriptFunctionCall.cpp:
        (WebCore::ScriptCallArgumentHandler::appendArgument):
        (WebCore::ScriptFunctionCall::ScriptFunctionCall):
        (WebCore::ScriptCallback::ScriptCallback):
        (WebCore::ScriptCallback::call):
        * bindings/v8/ScriptFunctionCall.h:
        (WebCore::ScriptCallArgumentHandler::ScriptCallArgumentHandler):

2010-09-22  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed.

        Build fix for invalid assertion after r68059.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::getPropertiesNotIn): Correct assertion target after
        name change.

2010-09-22  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=45957, fix regression in column rules stacking test.

        Rewrite how the pagination bit gets set in RenderLayers, since it was totally broken and not
        accounting for whether or not the columns block was even in the layer's containing block
        hierarchy.

        * rendering/RenderLayer.cpp:
        (WebCore::checkContainingBlockChainForPagination):
        (WebCore::RenderLayer::updatePagination):

2010-09-22  Brent Fulgham  <bfulgham@webkit.org>

        Unreviewed.

        [WinCairo] Build fix for platform/cairo stuff after r67981.

        * WebCore.vcproj/WebCore.vcproj: Add new files needed by all cairo
        ports.

2010-09-22  Erik Arvidsson  <arv@chromium.org>

        Reviewed by Nate Chapin.

        [Chromium] Fix memory model for dataset
        https://bugs.webkit.org/show_bug.cgi?id=46280

        This is covered by existing tests.

        * bindings/v8/custom/V8DOMStringMapCustom.cpp:
        (WebCore::toV8):

2010-09-22  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Dave Hyatt.

        Fix wrong casts for table cell since its parent is not a RenderBlock. Remove
        the redundant destroy call for empty anonymous columns or column span block.
        https://bugs.webkit.org/show_bug.cgi?id=46245

        Tests: fast/table/table-anonymous-block-destroy-crash.html
               fast/table/table-columns-blocks-calc-crash.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::addChildToAnonymousColumnBlocks):
        (WebCore::RenderBlock::columnsBlockForSpanningElement):
        (WebCore::RenderBlock::removeChild):

2010-09-22  Matt Perry  <mpcomplete@chromium.org>

        Reviewed by Darin Fisher.

        Trying to reland a version of r67749:
        Have V8DOMWindowShell ask the embedder whether to run a V8 extension
        in a particular script context.
        https://bugs.webkit.org/show_bug.cgi?id=45721

        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::createNewContext):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::registerExtension):
        * bindings/v8/V8Proxy.h:
        * loader/EmptyClients.h:
        (WebCore::EmptyFrameLoaderClient::allowScriptExtension):
        * loader/FrameLoaderClient.h:

2010-09-22  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        queryCommandState returns false for Underline command when no selection is made
        https://bugs.webkit.org/show_bug.cgi?id=17594

        The bug was caused by selectionComputedStyle's adding -webkit-text-decorations-in-effect property
        to a dummy span used to obtain the computed style when there is a typing style.
        Since this property is for internal use only, the CSS parser always stripped the property.
        As a result, we were always ignoring the text decorations set by the typing style.

        Fixed the bug by making selectionComputedStyle directly merge the computed style of the current
        caret position and the typing style. This also eliminates the need for a dummy span element.
        Due to the merge, the return value of selectionComputedStyle had to be changed to CSSMutableStyleDeclaration
        from CSSComputedStyleDeclaration.

        Test: editing/execCommand/query-text-decoration-with-typing-style.html

        * editing/ApplyStyleCommand.cpp:
        (WebCore::StyleChange::init): Calls getPropertiesNotIn.
        (WebCore::getPropertiesNotIn): Renamed from getPropertiesNotInComputedStyle since it takes
        CSSStyleDeclaration* instead of CSSComputedStyleDeclaration* for the second argument.
        (WebCore::ApplyStyleCommand::removeNonEditingProperties): Extracted from editingStyleAtPosition.
        (WebCore::ApplyStyleCommand::editingStyleAtPosition): Calls removeNonEditingProperties.
        * editing/ApplyStyleCommand.h:
        * editing/Editor.cpp:
        (WebCore::triStateOfStyle): Calls getPropertiesNotIn. Renamed from triStateOfStyleInComputedStyle
        since it no longer takes CSSComputedStyleDeclaration.
        (WebCore::Editor::selectionStartHasStyle): Calls selectionComputedStyle and triStateOfStyle.
        (WebCore::Editor::selectionHasStyle): Ditto.
        (WebCore::Editor::selectionStartCSSPropertyValue): Calls selectionComputedStyle.
        (WebCore::Editor::selectionComputedStyle): See above.
        * editing/Editor.h:
        * editing/EditorCommand.cpp:
        (WebCore::executeToggleStyleInList): Calls selectionComputedStyle.

2010-09-22  Jamey Hicks  <jamey.hicks@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Web Inspector: Remote Web Inspector support for QtWebKit
        https://bugs.webkit.org/show_bug.cgi?id=43988

        Runs a web debug server on port specified by QtTestBrowser
        argument -remote-inspector-port. Property
        _q_webInspectorServerPort of the QWebPage instance will be set
        according to the argument. All pages with that property set will
        be remotely inspectable.

        URL for remote inspection of first QWebPage is
            http://localhost:9222/webkit/inspector/inspector.html?page=1
        where 1 is the number of the QWebPage instance.

        The base URL yields an index page with links to the individual inspectors:
            http://localhost:9222/

        * WebCore.pro

2010-09-21  Darin Adler  <darin@apple.com>

        Reviewed by Anders Carlsson.

        Fix some Objective-C GC problems and use RetainPtr instead of HardRetain/Release
        https://bugs.webkit.org/show_bug.cgi?id=46220

        * WebCore.exp.in: Updated.

        * bindings/objc/ObjCEventListener.h: Use a RetainPtr for m_listener, since that
        will do a CFRetain, which is right for GC rather than an -[NSObject retain],
        which is not.
        * bindings/objc/ObjCEventListener.mm:
        (WebCore::ObjCEventListener::ObjCEventListener): Removed explicit retain.
        (WebCore::ObjCEventListener::~ObjCEventListener): Removed explicit release and
        added get().
        (WebCore::ObjCEventListener::handleEvent): Added get();

        * bridge/objc/objc_instance.mm:
        (ObjcInstance::setGlobalException): Use copy/release instead of
        HardRetain/HardRelease.
        (ObjcInstance::moveGlobalExceptionToExecState): Ditto.

        * platform/Cursor.h: Use RetainPtr for PlatformCursor on Mac.

        * platform/Cursor.cpp:
        (WebCore::Cursor::platformCursor): Moved this to CursorMac for the Mac.

        * platform/Widget.cpp: Removed retain/releasePlatformWidget and made them
        both inlines in the header file.

        * platform/Widget.h: Fixed includes and added an include of RetainPtr.
        Made platformWidget and setPlatformWidget non-inline on the Mac platform.
        Made releasePlatformWidget and retainPlatformWidget empty inline functions
        for non-GTK platforms.

        * platform/graphics/mac/ImageMac.mm: Removed unneeded FoundationExtras.h
        include.

        * platform/mac/ClipboardMac.mm:
        (WebCore::cocoaTypeFromHTMLClipboardType): use RetainPtr for the return type.
        (WebCore::ClipboardMac::clearData): Use RetainPtr.
        (WebCore::ClipboardMac::getData): Ditto.
        (WebCore::ClipboardMac::setData): Ditto.

        * platform/mac/CursorMac.mm:
        (WebCore::createCustomCursor): Use RetainPtr for the return type.
        (WebCore::Cursor::ensurePlatformCursor): Removed all the calls to HardRetain
        since m_platformCursor is now a RetainPtr.
        (WebCore::Cursor::Cursor): Ditto.
        (WebCore::Cursor::operator=): Ditto. Also HardRelease.
        (WebCore::Cursor::~Cursor): Ditto.
        (WebCore::Cursor::platformCursor): Use get here.

        * platform/mac/FoundationExtras.h: Removed all the functions except for
        HardAutorelease. Later we can remove that one too.

        * platform/mac/ThemeMac.mm:
        (WebCore::setUpButtonCell): Changed this function to have a return value.
        Otherwise we end up taking a pointer (actually a reference) to a global
        variable, which does not do the right thing for GC.
        (WebCore::nonDefaultButton): Added.
        (WebCore::defaultButton): Added.
        (WebCore::button): Changed to call two separate functions with two separate
        global variables to avoid the problem with pointers to globals.

        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::~Widget): Removed unneeded call to releasePlatformWidget.
        (WebCore::Widget::platformWidget): Non-inline so we can comipile the header
        plain non-Objective-C C++.
        (WebCore::Widget::setPlatformWidget): Ditto.

        * platform/network/mac/WebCoreURLResponse.mm:
        (mimeTypeFromUTITree): Use RetainPtr for the return type.
        (-[NSURLResponse adjustMIMETypeIfNecessary]): Use RetainPtr.

2010-09-22  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] r68027 caused many crashes on the bots
        https://bugs.webkit.org/show_bug.cgi?id=46268

        Add the appropriate OwnPtrCairo.h include which has the OwnPtr
        specialization for Cairo paths. Without it, we will have memory
        corruption.

        * platform/graphics/cairo/PathCairo.cpp: Add OwnPtrCairo.h include.

2010-09-22  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: implement pausing on XHR
        https://bugs.webkit.org/show_bug.cgi?id=46086

        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::V8XMLHttpRequest::sendCallback):
        * inspector/Inspector.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::setNativeBreakpoint):
        (WebCore::InspectorController::removeNativeBreakpoint):
        (WebCore::InspectorController::willInsertDOMNodeImpl):
        (WebCore::InspectorController::willRemoveDOMNodeImpl):
        (WebCore::InspectorController::willModifyDOMAttrImpl):
        (WebCore::InspectorController::instrumentWillSendXMLHttpRequestImpl):
        * inspector/InspectorController.h:
        (WebCore::InspectorController::instrumentWillSendXMLHttpRequest):
        (WebCore::InspectorController::inspectorControllerForScriptExecutionContext):
        (WebCore::InspectorController::inspectorControllerForNode):
        (WebCore::InspectorController::inspectorControllerForDocument):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::InspectorDebuggerAgent):
        (WebCore::InspectorDebuggerAgent::didPause):
        (WebCore::InspectorDebuggerAgent::breakProgram):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorTimelineAgent.h:
        * inspector/front-end/CallStackSidebarPane.js:
        (WebInspector.CallStackSidebarPane.prototype.updateStatus):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel):
        (WebInspector.ElementsPanel.prototype.reset):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype._populateTagContextMenu):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype.debuggerPaused):
        (WebInspector.ScriptsPanel.prototype.reset):
        * inspector/front-end/Settings.js:
        * xml/XMLHttpRequest.h:
        (WebCore::XMLHttpRequest::url):

2010-09-22  Kenneth Russell  <kbr@google.com>

        Reviewed by James Robinson.

        Add local triangulation of cubic curve control points
        https://bugs.webkit.org/show_bug.cgi?id=45252

        Adding a localized triangulation algorithm which takes as input
        the four control points of a cubic curve segment and provides both
        triangles as well as the ability to walk the interior edges. The
        latter will be used later to fill the interior of shapes bounded
        by these cubic curves, quadratic curves and line segments.

        * platform/graphics/gpu/LoopBlinnLocalTriangulator.cpp: Added.
        (WebCore::LoopBlinnLocalTriangulator::Triangle::contains):
        (WebCore::LoopBlinnLocalTriangulator::Triangle::nextVertex):
        (WebCore::LoopBlinnLocalTriangulator::Triangle::indexForVertex):
        (WebCore::LoopBlinnLocalTriangulator::Triangle::makeCounterClockwise):
        (WebCore::LoopBlinnLocalTriangulator::LoopBlinnLocalTriangulator):
        (WebCore::LoopBlinnLocalTriangulator::reset):
        (WebCore::LoopBlinnLocalTriangulator::triangulate):
        (WebCore::LoopBlinnLocalTriangulator::triangulateHelper):
        (WebCore::LoopBlinnLocalTriangulator::addTriangle):
        (WebCore::LoopBlinnLocalTriangulator::addInteriorVertex):
        (WebCore::LoopBlinnLocalTriangulator::isSharedEdge):
        * platform/graphics/gpu/LoopBlinnLocalTriangulator.h: Added.
        (WebCore::LoopBlinnLocalTriangulator::Vertex::Vertex):
        (WebCore::LoopBlinnLocalTriangulator::Vertex::xyCoordinates):
        (WebCore::LoopBlinnLocalTriangulator::Vertex::klmCoordinates):
        (WebCore::LoopBlinnLocalTriangulator::Vertex::set):
        (WebCore::LoopBlinnLocalTriangulator::Vertex::end):
        (WebCore::LoopBlinnLocalTriangulator::Vertex::setEnd):
        (WebCore::LoopBlinnLocalTriangulator::Vertex::marked):
        (WebCore::LoopBlinnLocalTriangulator::Vertex::setMarked):
        (WebCore::LoopBlinnLocalTriangulator::Vertex::interior):
        (WebCore::LoopBlinnLocalTriangulator::Vertex::setInterior):
        (WebCore::LoopBlinnLocalTriangulator::Vertex::resetFlags):
        (WebCore::LoopBlinnLocalTriangulator::Triangle::Triangle):
        (WebCore::LoopBlinnLocalTriangulator::Triangle::getVertex):
        (WebCore::LoopBlinnLocalTriangulator::Triangle::setVertices):
        (WebCore::LoopBlinnLocalTriangulator::getVertex):
        (WebCore::LoopBlinnLocalTriangulator::numberOfTriangles):
        (WebCore::LoopBlinnLocalTriangulator::getTriangle):
        (WebCore::LoopBlinnLocalTriangulator::numberOfInteriorVertices):
        (WebCore::LoopBlinnLocalTriangulator::getInteriorVertex):

2010-09-22  Lucas De Marchi  <lucas.demarchi@profusion.mobi>

        Unreviewed, EFL build fix.

        * CMakeListsEfl.txt:
        * platform/efl/ClipboardEfl.cpp:
        (WebCore::ClipboardEfl::ClipboardEfl):

2010-09-22  İsmail Dönmez  <ismail@namtrac.org>

        Reviewed by Andreas Kling.

        [Qt] Build fix for WinCE

        Add two missing stubs:
        - privateBrowsingStateChanged(bool)
        - bindingInstance()

        * platform/qt/TemporaryLinkStubsQt.cpp:
        (PluginView::privateBrowsingStateChanged):
        (PluginView::bindingInstance):

2010-09-22  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] FontCustomPlatformData.cpp leaks FT_Faces
        https://bugs.webkit.org/show_bug.cgi?id=16941

        Attach lifetime of the FontCustomPlatformData FT_Face to the resulting cairo_font_face_t.
        This will free the memory associated with the FT_Face once the cairo_font_face_t is 
        destroyed.

        No new tests as functionality should not change.

        * platform/graphics/cairo/FontCustomPlatformData.cpp:
        (WebCore::releaseCustomFontData): Moved this helper method to the top of the file
        and gave it a more descriptive name.
        (WebCore::FontCustomPlatformData::FontCustomPlatformData): Changed the constructor to
        take the FT_Face and the buffer, so to better encapsulate the creation of the cairo
        face.
        (WebCore::FontCustomPlatformData::~FontCustomPlatformData): Added a comment about the
        fate of the FT_Face to the destructor.
        (WebCore::createFontCustomPlatformData): Cleaned up the code here and moved some of the
        logic into the constructor.
        * platform/graphics/cairo/FontCustomPlatformData.h: Updated method definitions.

2010-09-22  Balazs Kelemen  <kb@inf.u-szeged.hu>

        Reviewed by Kenneth Rohde Christiansen.

        PluginStrategy should satisfy the needs of Qt
        https://bugs.webkit.org/show_bug.cgi?id=45857
        No new functionality so no new tests.

        * plugins/PluginData.cpp:
        (WebCore::PluginData::initPlugins):
        * plugins/PluginStrategy.h: Added a |const Page*| argument to getPluginInfo.

2010-09-22  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Elements panel does not reflect changes to the text node values.
        https://bugs.webkit.org/show_bug.cgi?id=46166

        * dom/CharacterData.cpp:
        (WebCore::CharacterData::dispatchModifiedEvent):
        * inspector/Inspector.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::characterDataModifiedImpl):
        * inspector/InspectorController.h:
        (WebCore::InspectorController::characterDataModified):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::characterDataModified):
        * inspector/InspectorDOMAgent.h:
        (WebCore::EventListenerInfo::EventListenerInfo):
        (WebCore::InspectorDOMAgent::create):
        (WebCore::InspectorDOMAgent::cast):
        (WebCore::InspectorDOMAgent::cssStore):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMAgent.prototype._characterDataModified):
        (WebInspector.characterDataModified):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype._characterDataModified):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype._textNodeEditingCommitted):

2010-09-21  Ragner Magalhaes  <ragner.magalhaes@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] On Maemo platform, web style is missing for some inputs
        https://bugs.webkit.org/show_bug.cgi?id=46182

        * css/themeQtMaemo5.css:

2010-09-22  Patrick Gansterer  <paroga@webkit.org>

        Unreviewed.

        [WINCE] Build fix for ResourceHandleWin after r67291.

        * platform/network/win/ResourceHandleWin.cpp:
        (WebCore::ResourceHandle::loadResourceSynchronously): Replace Frame* parameter with NetworkingContext*.

2010-09-22  Chris Guillory   <chris.guillory@google.com>

        Reviewed by Chris Fleizach.

        Crash due to bad cast in AXObjectCacheChromium.cpp.
        https://bugs.webkit.org/show_bug.cgi?id=46237

        * accessibility/chromium/AXObjectCacheChromium.cpp:
        (WebCore::AXObjectCache::postPlatformNotification):
        * page/ChromeClient.h:
        (WebCore::ChromeClient::postAccessibilityNotification):
        (WebCore::ChromeClient::didChangeAccessibilityObjectState):
        (WebCore::ChromeClient::didChangeAccessibilityObjectChildren):
        * page/chromium/ChromeClientChromium.h:

2010-09-22  Chris Rogers  <crogers@google.com>

        Reviewed by James Robinson.

        Add HRTFElevation files
        https://bugs.webkit.org/show_bug.cgi?id=45864

        No new tests since audio API is not yet implemented.

        * platform/audio/HRTFElevation.cpp: Added.
        (WebCore::HRTFElevation::calculateSymmetricKernelsForAzimuthElevation):
        (WebCore::HRTFElevation::calculateKernelsForAzimuthElevation):
        (WebCore::HRTFElevation::createForSubject):
        (WebCore::HRTFElevation::createByInterpolatingSlices):
        (WebCore::HRTFElevation::getKernelsFromAzimuth):
        * platform/audio/HRTFElevation.h: Added.
        (WebCore::HRTFElevation::kernelListL):
        (WebCore::HRTFElevation::kernelListR):
        (WebCore::HRTFElevation::elevationAngle):
        (WebCore::HRTFElevation::numberOfAzimuths):
        (WebCore::HRTFElevation::sampleRate):
        (WebCore::HRTFElevation::HRTFElevation):

2010-09-22  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        [gtk] Use the smart pointers to handle cairo_path_t
        https://bugs.webkit.org/show_bug.cgi?id=46212

        Modified the code to use smart pointers with cairo_path_t
        variables.

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::appendPathToCairoContext):
        (WebCore::GraphicsContext::clip):
        (WebCore::GraphicsContext::drawTiledShadow):
        * platform/graphics/cairo/PathCairo.cpp:
        (WebCore::Path::Path):
        (WebCore::Path::operator=):
        (WebCore::Path::apply):
        (WebCore::Path::debugString):

2010-09-22  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Kent Tamura.

        [BREWMP] Implement Image::loadPlatformResource
        https://bugs.webkit.org/show_bug.cgi?id=45873

        Load images from the resource directory.

        * platform/graphics/brew/ImageBrew.cpp: Added.
        (WebCore::Image::loadPlatformResource):

2010-09-22  Chris Rogers  <crogers@google.com>

        Reviewed by James Robinson.

        Add HRTFKernel files
        https://bugs.webkit.org/show_bug.cgi?id=45863

        No new tests since audio API is not yet implemented.

        * platform/audio/HRTFKernel.cpp: Added.
        (WebCore::extractAverageGroupDelay):
        (WebCore::HRTFKernel::HRTFKernel):
        (WebCore::HRTFKernel::createImpulseResponse):
        (WebCore::HRTFKernel::createInterpolatedKernel):
        * platform/audio/HRTFKernel.h: Added.
        (WebCore::HRTFKernel::create):
        (WebCore::HRTFKernel::fftFrame):
        (WebCore::HRTFKernel::fftSize):
        (WebCore::HRTFKernel::frameDelay):
        (WebCore::HRTFKernel::sampleRate):
        (WebCore::HRTFKernel::nyquist):
        (WebCore::HRTFKernel::HRTFKernel):

2010-09-22  Kent Tamura  <tkent@chromium.org>

        Reviewed by Chris Fleizach.

        Support keyboard operations for <input type=range>.
        https://bugs.webkit.org/show_bug.cgi?id=45803

        Increasing the value with Up/Right arrow keys by its step value,
        and decreasing with Down/Left arrow keys. If an input element has
        step=any attribute, increasing/decreasing by 1/100 of max-min.

        Note: This change is not useful on Mac because users can't set
        focus on range controls.

        Test: fast/forms/range-keyoperation.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::defaultEventHandler):
          Calls handleKeyEventForRange() for RANGE and key events.
        (WebCore::HTMLInputElement::handleKeyEventForRange):
        * html/HTMLInputElement.h: Add handleKeyEventForRange() declaration.

2010-09-22  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Chris Fleizach.

        [Gtk] Incorrect exposure of list items whose children are elements
        https://bugs.webkit.org/show_bug.cgi?id=45383

        Set ATK_ROLE_LIST_ITEM looking for the role of the parent object

        Test: platform/gtk/accessibility/list-items-always-exposed.html

        * accessibility/gtk/AccessibilityObjectAtk.cpp:
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):
        Always include objects with ListItemRole in accessibility for GTK.
        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (getInterfaceMaskFromObject): Add some specific code to handle the
        special case of list markers by implementing AtkText when needed.

2010-09-22  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Make FilterEffects independent of SVG
        https://bugs.webkit.org/show_bug.cgi?id=46177

        Moving all FilterEffects from svg/graphics/filters to platform/graphics/filters, now that they
        are independent of SVG. Removed the SVG prefix of the files and updated the headers.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/filters/DistantLightSource.h: Copied from WebCore/svg/graphics/filters/SVGDistantLightSource.h.
        * platform/graphics/filters/FEConvolveMatrix.cpp: Copied from WebCore/svg/graphics/filters/SVGFEConvolveMatrix.cpp.
        * platform/graphics/filters/FEConvolveMatrix.h: Copied from WebCore/svg/graphics/filters/SVGFEConvolveMatrix.h.
        * platform/graphics/filters/FEDiffuseLighting.cpp: Copied from WebCore/svg/graphics/filters/SVGFEDiffuseLighting.cpp.
        * platform/graphics/filters/FEDiffuseLighting.h: Copied from WebCore/svg/graphics/filters/SVGFEDiffuseLighting.h.
        * platform/graphics/filters/FEDisplacementMap.cpp: Copied from WebCore/svg/graphics/filters/SVGFEDisplacementMap.cpp.
        * platform/graphics/filters/FEDisplacementMap.h: Copied from WebCore/svg/graphics/filters/SVGFEDisplacementMap.h.
        * platform/graphics/filters/FEFlood.cpp: Copied from WebCore/svg/graphics/filters/SVGFEFlood.cpp.
        * platform/graphics/filters/FEFlood.h: Copied from WebCore/svg/graphics/filters/SVGFEFlood.h.
        * platform/graphics/filters/FELighting.cpp: Copied from WebCore/svg/graphics/filters/SVGFELighting.cpp.
        * platform/graphics/filters/FELighting.h: Copied from WebCore/svg/graphics/filters/SVGFELighting.h.
        * platform/graphics/filters/FEMerge.cpp: Copied from WebCore/svg/graphics/filters/SVGFEMerge.cpp.
        * platform/graphics/filters/FEMerge.h: Copied from WebCore/svg/graphics/filters/SVGFEMerge.h.
        * platform/graphics/filters/FEMorphology.cpp: Copied from WebCore/svg/graphics/filters/SVGFEMorphology.cpp.
        * platform/graphics/filters/FEMorphology.h: Copied from WebCore/svg/graphics/filters/SVGFEMorphology.h.
        * platform/graphics/filters/FEOffset.cpp: Copied from WebCore/svg/graphics/filters/SVGFEOffset.cpp.
        * platform/graphics/filters/FEOffset.h: Copied from WebCore/svg/graphics/filters/SVGFEOffset.h.
        * platform/graphics/filters/FESpecularLighting.cpp: Copied from WebCore/svg/graphics/filters/SVGFESpecularLighting.cpp.
        * platform/graphics/filters/FESpecularLighting.h: Copied from WebCore/svg/graphics/filters/SVGFESpecularLighting.h.
        * platform/graphics/filters/FETile.cpp: Copied from WebCore/svg/graphics/filters/SVGFETile.cpp.
        * platform/graphics/filters/FETile.h: Copied from WebCore/svg/graphics/filters/SVGFETile.h.
        * platform/graphics/filters/FETurbulence.cpp: Copied from WebCore/svg/graphics/filters/SVGFETurbulence.cpp.
        * platform/graphics/filters/FETurbulence.h: Copied from WebCore/svg/graphics/filters/SVGFETurbulence.h.
        * platform/graphics/filters/LightSource.cpp: Copied from WebCore/svg/graphics/filters/SVGLightSource.cpp.
        * platform/graphics/filters/LightSource.h: Copied from WebCore/svg/graphics/filters/SVGLightSource.h.
        * platform/graphics/filters/PointLightSource.h: Copied from WebCore/svg/graphics/filters/SVGPointLightSource.h.
        * platform/graphics/filters/SpotLightSource.h: Copied from WebCore/svg/graphics/filters/SVGSpotLightSource.h.
        * svg/SVGFEConvolveMatrixElement.h:
        * svg/SVGFEDiffuseLightingElement.cpp:
        * svg/SVGFEDisplacementMapElement.h:
        * svg/SVGFEDistantLightElement.cpp:
        * svg/SVGFEFloodElement.h:
        * svg/SVGFELightElement.h:
        * svg/SVGFEMergeElement.h:
        * svg/SVGFEMorphologyElement.h:
        * svg/SVGFEOffsetElement.h:
        * svg/SVGFEPointLightElement.cpp:
        * svg/SVGFESpecularLightingElement.h:
        * svg/SVGFESpotLightElement.cpp:
        * svg/SVGFETileElement.h:
        * svg/SVGFETurbulenceElement.h:
        * svg/graphics/filters/SVGDistantLightSource.h: Removed.
        * svg/graphics/filters/SVGFEConvolveMatrix.cpp: Removed.
        * svg/graphics/filters/SVGFEConvolveMatrix.h: Removed.
        * svg/graphics/filters/SVGFEDiffuseLighting.cpp: Removed.
        * svg/graphics/filters/SVGFEDiffuseLighting.h: Removed.
        * svg/graphics/filters/SVGFEDisplacementMap.cpp: Removed.
        * svg/graphics/filters/SVGFEDisplacementMap.h: Removed.
        * svg/graphics/filters/SVGFEFlood.cpp: Removed.
        * svg/graphics/filters/SVGFEFlood.h: Removed.
        * svg/graphics/filters/SVGFELighting.cpp: Removed.
        * svg/graphics/filters/SVGFELighting.h: Removed.
        * svg/graphics/filters/SVGFEMerge.cpp: Removed.
        * svg/graphics/filters/SVGFEMerge.h: Removed.
        * svg/graphics/filters/SVGFEMorphology.cpp: Removed.
        * svg/graphics/filters/SVGFEMorphology.h: Removed.
        * svg/graphics/filters/SVGFEOffset.cpp: Removed.
        * svg/graphics/filters/SVGFEOffset.h: Removed.
        * svg/graphics/filters/SVGFESpecularLighting.cpp: Removed.
        * svg/graphics/filters/SVGFESpecularLighting.h: Removed.
        * svg/graphics/filters/SVGFETile.cpp: Removed.
        * svg/graphics/filters/SVGFETile.h: Removed.
        * svg/graphics/filters/SVGFETurbulence.cpp: Removed.
        * svg/graphics/filters/SVGFETurbulence.h: Removed.
        * svg/graphics/filters/SVGLightSource.cpp: Removed.
        * svg/graphics/filters/SVGLightSource.h: Removed.
        * svg/graphics/filters/SVGPointLightSource.h: Removed.
        * svg/graphics/filters/SVGSpotLightSource.h: Removed.

2010-09-22  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Roben.

        [WIN] Add internetHandle to WebCoreSynchronousLoader.
        https://bugs.webkit.org/show_bug.cgi?id=46185

        For loading content via network the WebCoreSynchronousLoader needs its own (synchronous) internetHandle.
        This also adds asynchronousInternetHandle() to create a static asynchronous internetHandle.

        * platform/network/win/ResourceHandleWin.cpp:
        (WebCore::createInternetHandle):
        (WebCore::asynchronousInternetHandle):
        (WebCore::WebCoreSynchronousLoader::internetHandle):
        (WebCore::WebCoreSynchronousLoader::WebCoreSynchronousLoader): Create synchronous internetHandle.
        (WebCore::WebCoreSynchronousLoader::~WebCoreSynchronousLoader): Delete synchronous internetHandle.

2010-09-22  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Chris Fleizach.

        [chromium] Remove unused sys/types.h in VDMXParser.cpp
        https://bugs.webkit.org/show_bug.cgi?id=46136

        sys/types.h is not needed here.

        * platform/graphics/chromium/VDMXParser.cpp:

2010-09-22  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Kent Tamura.

        [BREWMP] Change the home directory path to the WebKit module directory
        https://bugs.webkit.org/show_bug.cgi?id=45895

        AEEFS_HOME_DIR denotes the currently running application's directory. 
        Change it to fs:/~<clsid> to use the WebKit module directory as home.

        * platform/brew/FileSystemBrew.cpp:
        (WebCore::homeDirectoryPath):

2010-09-22  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Kent Tamura.

        [BREWMP] Add dummy Pasteboard
        https://bugs.webkit.org/show_bug.cgi?id=46107

        Pasteboard is not supported yet. Add dummy implementation to avoid link errors.

        * platform/brew/PasteboardBrew.cpp: Added.
        (WebCore::Pasteboard::generalPasteboard):
        (WebCore::Pasteboard::Pasteboard):
        (WebCore::Pasteboard::clear):
        (WebCore::Pasteboard::writeSelection):
        (WebCore::Pasteboard::writePlainText):
        (WebCore::Pasteboard::writeURL):
        (WebCore::Pasteboard::writeImage):
        (WebCore::Pasteboard::canSmartReplace):
        (WebCore::Pasteboard::plainText):
        (WebCore::Pasteboard::documentFragment):

2010-09-21  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Kent Tamura.

        Each EntityMaskIn* needs explanation
        https://bugs.webkit.org/show_bug.cgi?id=44833

        Added a description as to why we escape nbsp when serializing HTML documents but not when serializing XML documents.

        * editing/markup.cpp:

2010-09-21  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Kent Tamura.

        cleanup: removeInlineStyleFromElement and extractInlineStyleToPushDown should be merged
        https://bugs.webkit.org/show_bug.cgi?id=46205

        Cleanup required to fix the bug 27818. Added the style extraction mechanism to removeInlineStyleFromElement
        and removeCSSStyle and replaced the call to extractInlineStyleToPushDown by a call to removeInlineStyleFromElement.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::removeInlineStyleFromElement): Added extractedStyle argument.
        (WebCore::ApplyStyleCommand::removeCSSStyle): Added extractedStyle argument.
        (WebCore::ApplyStyleCommand::pushDownInlineStyleAroundNode): Calls removeInlineStyleFromElement instead of
        extractInlineStyleToPushDown which has been deleted.
        * editing/ApplyStyleCommand.h:

2010-09-21  Andrew Wilson  <atwilson@chromium.org>

        Unreviewed, rolling out r67982.
        http://trac.webkit.org/changeset/67982
        https://bugs.webkit.org/show_bug.cgi?id=45156

        Causes crashes on chromium testshell

        * WebCore.gypi:
        * accessibility/chromium/AXObjectCacheChromium.cpp:
        (WebCore::AXObjectCache::postPlatformNotification):
        (WebCore::AXObjectCache::handleFocusedUIElementChanged):
        (WebCore::AXObjectCache::handleScrolledToAnchor):
        * dom/Document.cpp:
        (WebCore::Document::implicitClose):
        (WebCore::Document::setFocusedNode):
        * editing/SelectionController.h:
        * editing/chromium/SelectionControllerChromium.cpp: Removed.
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        * page/chromium/ChromeClientChromium.h:

2010-09-21  Cosmin Truta  <ctruta@chromium.org>

        Reviewed by James Robinson.

        RenderImage::intrinsicSizeChanged crashes when m_imageResource is missing
        https://bugs.webkit.org/show_bug.cgi?id=46120

        Avoid applying operator -> to m_imageResource when its underlying pointer is NULL.

        * rendering/RenderImage.h:
        (WebCore::RenderImage::intrinsicSizeChanged): Checked m_imageResource.
        * html/HTMLImageElement.cpp:
        (HTMLImageElement::createRenderer): Fixed indentation.

2010-09-21  Kenneth Russell  <kbr@google.com>

        Reviewed by James Robinson.

        [chromium] Remove GLES2Context and WebGLES2Context
        https://bugs.webkit.org/show_bug.cgi?id=46131

        Removed now-obsolete GLES2Context and WebGLES2Context classes, and
        dependency on command buffer client code from WebCore. Built and
        tested 3D CSS and WebGL content on Mac OS X to test.

        * WebCore.gypi:
        * platform/chromium/GLES2Context.h: Removed.
        * platform/graphics/skia/ImageSkia.cpp:

2010-09-21  Geoffrey Garen  <ggaren@apple.com>

        Try to fix the Windows build.

        * loader/Cache.cpp:
        (WebCore::Cache::makeResourcePurgeable):
        (WebCore::Cache::evict): Cast to int before using unary '-', to avoid an
        MSVC warning.

2010-09-21  Pratik Solanki  <psolanki@apple.com>

        Reviewed by Geoffrey Garen and Darin Adler.

        Use purgeable memory to keep more dead resources in cache
        https://bugs.webkit.org/show_bug.cgi?id=44806
        <rdar://problem/8350901>

        This changes the behavior of dead resources in the WebCore cache to be the following if
        shouldMakeResourcePurgeableOnEviction() returns true.

        1. Dead resources in the cache are kept in non-purgeable memory.
        2. When we prune dead resources, instead of freeing them, we mark their memory as purgeable
        and keep the resources until the kernel reclaims the purgeable memory.

        By leaving the in-cache dead resources in dirty resident memory, we decrease the likelihood
        of the kernel claiming that memory and forcing us to refetch the resource (for example when
        a user presses back).

        And by having an unbounded number of resource objects using purgeable memory, we can use
        as much memory as is available on the machine. The trade-off is that the CachedResource
        object (and its member variables) are allocated in non-purgeable TC-malloc'd memory so
        we would see slightly more memory use due to this.

        * loader/Cache.cpp:
        (WebCore::Cache::resourceForURL): Adjust sizes appropriately if we made resource memory
        non-purgeable.
        (WebCore::Cache::pruneDeadResources): When removing dead resources, try first to mark their
        memory as purgeable. If not, evict the resource.
        (WebCore::Cache::makeResourcePurgeable): Added. Try to mark resource
        memory as purgeable. If successful, adjust the sizes so that we don't
        factor this resources size in the Cache size calculation.
        (WebCore::Cache::evict): Don't decrement size if we already did it in makeResourcePurgeable.
        (WebCore::Cache::dumpLRULists): Extra debug logging.
        * loader/Cache.h:
        (WebCore::Cache::shouldMakeResourcePurgeableOnEviction): Added. Indicates if the new
        behaviour is enabled.
        * loader/CachedCSSStyleSheet.cpp:
        (WebCore::CachedCSSStyleSheet::allClientsRemoved): Do not mark memory as purgeable. The
        Cache class takes care of this.
        * loader/CachedImage.cpp:
        (WebCore::CachedImage::destroyDecodedData): Ditto.
        * loader/CachedScript.cpp:
        (WebCore::CachedScript::destroyDecodedData): Ditto.

2010-09-21  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/7729077> Extending the selection to sentence boundary after a line break may select extra character
        https://bugs.webkit.org/show_bug.cgi?id=46232

        Test: editing/selection/extend-by-sentence-002.html

        * editing/visible_units.cpp:
        (WebCore::nextBoundary): The text iterator’s range end can be the position after
        the line break, in which case the next visible is actually after the first character
        of the next sentence. Instead, advance the text iterator past the newline character
        and return the beginning of its range, which is guaranteed to still be before the
        next sentence.

2010-09-21  Robert Hogan  <robert@webkit.org>

        Rubber-stamped by Ariya Hidayat.

        [Qt] Build fix against qt trunk

        * platform/graphics/qt/ContextShadow.cpp:
        (WebCore::ContextShadow::beginShadowLayer):

2010-09-21  Tony Chang  <tony@chromium.org>

        Unreviewed, QT build fix.

        * platform/qt/ClipboardQt.cpp:
        (WebCore::ClipboardQt::ClipboardQt):

2010-09-21  Andy Estes  <aestes@apple.com>

        Reviewed by Darin Adler.

        REGRESSION (r61285): AIM 2.1.296: Code rendered as text in Welcome screen
        https://bugs.webkit.org/show_bug.cgi?id=46134

        * WebCore.exp.in: Export __ZN7WebCore32applicationIsAOLInstantMessengerEv.
        * platform/mac/RuntimeApplicationChecks.h:
        * platform/mac/RuntimeApplicationChecks.mm:
        (WebCore::applicationIsAOLInstantMessenger): Determine if the embedding
        application is AOL Instant Messenger by checking the bundle identifier.

2010-09-21  Chris Guillory   <chris.guillory@google.com>

        Reviewed by Chris Fleizach.

        Send webkit accessibility notifications to Chromium.
        https://bugs.webkit.org/show_bug.cgi?id=45156

        * WebCore.gypi:
        * accessibility/chromium/AXObjectCacheChromium.cpp:
        (WebCore::AXObjectCache::postPlatformNotification):
        (WebCore::AXObjectCache::handleFocusedUIElementChanged):
        (WebCore::AXObjectCache::handleScrolledToAnchor):
        * dom/Document.cpp:
        (WebCore::Document::implicitClose):
        (WebCore::Document::setFocusedNode):
        * editing/SelectionController.h:
        * editing/chromium/SelectionControllerChromium.cpp: Added.
        (WebCore::SelectionController::notifyAccessibilityForSelectionChange):
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        * page/chromium/ChromeClientChromium.h:

2010-09-21  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        [gtk] Move copyContextProperties outside the GraphicsContextCairo
        https://bugs.webkit.org/show_bug.cgi?id=46179.

        Moved the copyContextProperties function to the CairoUtilities so
        we can use it outside GraphicsContextCairo. We moved also the old
        gtk CairoUtilities file to GdkCairoUtilities and added the new
        file in the cairo directory.

        * GNUmakefile.am:
        * platform/graphics/cairo/CairoUtilities.cpp: Added.
        (WebCore::copyContextProperties):
        * platform/graphics/cairo/CairoUtilities.h: Added.
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        * platform/graphics/gtk/CairoUtilities.cpp: Removed.
        * platform/graphics/gtk/CairoUtilities.h: Removed.
        * platform/graphics/gtk/GdkCairoUtilities.cpp: Added.
        (getCairoSurfacePixel):
        (getGdkPixbufPixel):
        (cairoImageSurfaceToGdkPixbuf):
        * platform/graphics/gtk/GdkCairoUtilities.h: Added.
        * platform/graphics/gtk/ImageBufferGtk.cpp:
        * platform/graphics/gtk/ImageGtk.cpp:

2010-09-21  Vangelis Kokkevis  <vangelis@chromium.org>

        Reviewed by James Robinson.

        [chromium] Cleaned up LayerRendererChromium::prepareToDrawLayers
        logic to avoid unnecessary copy operations if the existing root layer
        contents aren't useful for scrolling. Also removed call to updateLayersRecursive()
        as the composited layer update is actually happening in the drawLayers() method.
        https://bugs.webkit.org/show_bug.cgi?id=46199


        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::prepareToDrawLayers):

2010-09-21  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by Tony Chang.

        Change Clipboard to use an enum instead of isForDragging = true/false
        https://bugs.webkit.org/show_bug.cgi?id=46004

        No new tests, since it's just a refactoring change.

        * bindings/js/JSClipboardCustom.cpp:
        (WebCore::JSClipboard::setDragImage):
        * bindings/v8/custom/V8ClipboardCustom.cpp:
        (WebCore::V8Clipboard::setDragImageCallback):
        * dom/Clipboard.cpp:
        (WebCore::Clipboard::Clipboard):
        (WebCore::Clipboard::setDropEffect):
        (WebCore::Clipboard::setEffectAllowed):
        * dom/Clipboard.h:
        (WebCore::Clipboard::isForCopyAndPaste):
        (WebCore::Clipboard::isForDragAndDrop):
        * editing/android/EditorAndroid.cpp:
        (WebCore::Editor::newGeneralClipboard):
        * editing/brew/EditorBrew.cpp:
        (WebCore::Editor::newGeneralClipboard):
        * editing/chromium/EditorChromium.cpp:
        (WebCore::Editor::newGeneralClipboard):
        * editing/haiku/EditorHaiku.cpp:
        (WebCore::Editor::newGeneralClipboard):
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::newGeneralClipboard):
        * editing/wx/EditorWx.cpp:
        (WebCore::Editor::newGeneralClipboard):
        * page/chromium/EventHandlerChromium.cpp:
        (WebCore::EventHandler::createDraggingClipboard):
        * page/efl/EventHandlerEfl.cpp:
        (WebCore::EventHandler::createDraggingClipboard):
        * page/gtk/EventHandlerGtk.cpp:
        (WebCore::EventHandler::createDraggingClipboard):
        * page/haiku/EventHandlerHaiku.cpp:
        (WebCore::EventHandler::createDraggingClipboard):
        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::createDraggingClipboard):
        * page/qt/EventHandlerQt.cpp:
        (WebCore::EventHandler::createDraggingClipboard):
        * page/win/EventHandlerWin.cpp:
        (WebCore::EventHandler::createDraggingClipboard):
        * page/wx/EventHandlerWx.cpp:
        (WebCore::EventHandler::createDraggingClipboard):
        * platform/android/ClipboardAndroid.cpp:
        (WebCore::ClipboardAndroid::ClipboardAndroid):
        (WebCore::ClipboardAndroid::clearData):
        (WebCore::ClipboardAndroid::clearAllData):
        (WebCore::ClipboardAndroid::setData):
        * platform/android/ClipboardAndroid.h:
        * platform/brew/ClipboardBrew.cpp:
        (WebCore::ClipboardBrew::ClipboardBrew):
        (WebCore::ClipboardBrew::clearData):
        (WebCore::ClipboardBrew::clearAllData):
        (WebCore::ClipboardBrew::setData):
        * platform/brew/ClipboardBrew.h:
        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::Clipboard::create):
        (WebCore::ClipboardChromium::ClipboardChromium):
        (WebCore::ClipboardChromium::create):
        (WebCore::ClipboardChromium::getData):
        * platform/chromium/ClipboardChromium.h:
        * platform/efl/ClipboardEfl.cpp:
        (WebCore::Editor::newGeneralClipboard):
        (WebCore::ClipboardEfl::ClipboardEfl):
        * platform/efl/ClipboardEfl.h:
        (WebCore::ClipboardEfl::create):
        * platform/gtk/ClipboardGtk.cpp:
        (WebCore::Editor::newGeneralClipboard):
        (WebCore::Clipboard::create):
        (WebCore::ClipboardGtk::ClipboardGtk):
        (WebCore::dataObjectTypeFromHTMLClipboardType):
        (WebCore::ClipboardGtk::clearData):
        (WebCore::ClipboardGtk::getData):
        (WebCore::ClipboardGtk::setData):
        * platform/gtk/ClipboardGtk.h:
        (WebCore::ClipboardGtk::create):
        * platform/haiku/ClipboardHaiku.cpp:
        (WebCore::Clipboard::create):
        (WebCore::ClipboardHaiku::ClipboardHaiku):
        * platform/haiku/ClipboardHaiku.h:
        (WebCore::ClipboardHaiku::create):
        * platform/mac/ClipboardMac.h:
        (WebCore::ClipboardMac::create):
        * platform/mac/ClipboardMac.mm:
        (WebCore::Clipboard::create):
        (WebCore::ClipboardMac::ClipboardMac):
        * platform/qt/ClipboardQt.cpp:
        (WebCore::ClipboardQt::ClipboardQt):
        (WebCore::ClipboardQt::~ClipboardQt):
        (WebCore::ClipboardQt::clearData):
        (WebCore::ClipboardQt::clearAllData):
        (WebCore::ClipboardQt::setData):
        (WebCore::ClipboardQt::declareAndWriteDragImage):
        (WebCore::ClipboardQt::writeURL):
        (WebCore::ClipboardQt::writeRange):
        (WebCore::ClipboardQt::writePlainText):
        * platform/qt/ClipboardQt.h:
        (WebCore::ClipboardQt::create):
        * platform/win/ClipboardWin.cpp:
        (WebCore::Clipboard::create):
        (WebCore::ClipboardWin::ClipboardWin):
        (WebCore::ClipboardWin::clearData):
        (WebCore::ClipboardWin::clearAllData):
        (WebCore::ClipboardWin::setData):
        (WebCore::ClipboardWin::setExternalDataObject):
        * platform/win/ClipboardWin.h:
        (WebCore::ClipboardWin::create):
        * platform/win/EditorWin.cpp:
        (WebCore::Editor::newGeneralClipboard):
        * platform/wx/ClipboardWx.cpp:
        (WebCore::ClipboardWx::ClipboardWx):
        * platform/wx/ClipboardWx.h:
        (WebCore::ClipboardWx::create):

2010-09-21  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Dave Hyatt.

        Take isValueList() checks out of the asserts for memory safety.
        https://bugs.webkit.org/show_bug.cgi?id=46194

        Test: editing/execCommand/apply-style-text-decoration-crash.html

        * editing/ApplyStyleCommand.cpp:
        (WebCore::StyleChange::extractTextStyles):
        (WebCore::ApplyStyleCommand::applyInlineStyleToPushDown):

2010-09-21  Vangelis Kokkevis  <vangelis@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Fixing double translation of composited layers when scrolling.
        The scrolling transform is now applied by a separate layer maintained in
        the RenderLayerCompositor.
        https://bugs.webkit.org/show_bug.cgi?id=46193

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::drawLayers):

2010-09-21  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=46196, add marginStart/Before/End/After accessors to RenderBoxModelObject.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::marginBefore):
        (WebCore::RenderBox::marginAfter):
        (WebCore::RenderBox::marginStart):
        (WebCore::RenderBox::marginEnd):
        * rendering/RenderBox.h:
        * rendering/RenderBoxModelObject.h:
        * rendering/RenderInline.cpp:
        (WebCore::computeMargin):
        (WebCore::RenderInline::marginLeft):
        (WebCore::RenderInline::marginRight):
        (WebCore::RenderInline::marginTop):
        (WebCore::RenderInline::marginBottom):
        (WebCore::RenderInline::marginStart):
        (WebCore::RenderInline::marginEnd):
        * rendering/RenderInline.h:
        (WebCore::RenderInline::marginBefore):
        (WebCore::RenderInline::marginAfter):

2010-09-21  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=46190, add borderStart/Before/End/After accessors to RenderBoxModelObject.

        * rendering/RenderBoxModelObject.h:
        (WebCore::RenderBoxModelObject::borderBefore):
        (WebCore::RenderBoxModelObject::borderAfter):
        (WebCore::RenderBoxModelObject::borderStart):
        (WebCore::RenderBoxModelObject::borderEnd):
        (WebCore::RenderBoxModelObject::borderAndPaddingLogicalHeight):
        (WebCore::RenderBoxModelObject::borderAndPaddingLogicalWidth):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::borderStart):
        (WebCore::RenderTableCell::borderEnd):
        (WebCore::RenderTableCell::borderBefore):
        (WebCore::RenderTableCell::borderAfter):
        * rendering/RenderTableCell.h:

2010-09-21  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] 'make dist' should be fixed in preparation for the next release
        https://bugs.webkit.org/show_bug.cgi?id=46129

        * GNUmakefile.am: Update the sources list to include missing headers.

2010-09-21  David Hyatt  <hyatt@apple.com>

        Reviewed by John Sullivan.

        https://bugs.webkit.org/show_bug.cgi?id=46188, make the cross-platform setPrinting method match the Mac version of the method.
        Specifically don't pass the page size down to subframes of the one you're printing.

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

2010-09-21  Patrick Gansterer  <paroga@webkit.org>

        Reviewed by Adam Roben.

        Use WTF::Vector for storing formData in ResourceHandleWin.
        https://bugs.webkit.org/show_bug.cgi?id=46180

        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/win/ResourceHandleWin.cpp:
        (WebCore::ResourceHandle::onHandleCreated):
        (WebCore::ResourceHandle::onRequestComplete):

2010-09-21  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Check if the reply has been deleted before finishing a network request
        https://bugs.webkit.org/show_bug.cgi?id=46174

        A crash can happen with the following sequence:
        1. QNetworkReplyHandler::abort() emits reply->deleteLater()
        2. QNAM emits QNetworkReply::finished() -> calls QNetworkReplyHandler::finish()
        3. event loop would call reply->deleteLater()
        However a crash occurs since m_reply == 0 on step 2.

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

2010-09-21  Jochen Eisinger  <jochen@chromium.org>

        Reviewed by Jeremy Orlow.

        Use @ to concatenate the database name and the database identifier when building
        the filename to use for indexed databases. That character is valid for filenames
        but cannot occur in a database identifier derived from a security origin.
        https://bugs.webkit.org/show_bug.cgi?id=46178

        * storage/IDBFactoryBackendImpl.cpp:
        (WebCore::IDBFactoryBackendImpl::databaseFileName):

2010-09-21  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        DeviceOrientationClient and DeviceMotionClient should have controllerDestroyed() methods
        https://bugs.webkit.org/show_bug.cgi?id=45891

        Tested by existing DeviceOrientation tests.

        * dom/DeviceMotionClient.h:
        * dom/DeviceMotionController.cpp:
        (WebCore::DeviceMotionController::~DeviceMotionController):
        * dom/DeviceMotionController.h:
        * dom/DeviceOrientationClient.h:
        * dom/DeviceOrientationController.cpp:
        (WebCore::DeviceOrientationController::~DeviceOrientationController):
        * dom/DeviceOrientationController.h:
        * loader/EmptyClients.h:
        (WebCore::EmptyDeviceMotionClient::deviceOrientationControllerDestroyed):
        (WebCore::EmptyDeviceOrientationClient::deviceOrientationControllerDestroyed):
        * platform/mock/DeviceOrientationClientMock.h:
        (WebCore::DeviceOrientationClientMock::deviceOrientationControllerDestroyed):

2010-09-21  Jochen Eisinger  <jochen@chromium.org>

        Reviewed by Jeremy Orlow.

        Factor out the file name used for a given indexed database to a static method.
        https://bugs.webkit.org/show_bug.cgi?id=46090

        * storage/IDBFactoryBackendImpl.cpp:
        (WebCore::openSQLiteDatabase):
        (WebCore::IDBFactoryBackendImpl::databaseFileName):
        * storage/IDBFactoryBackendImpl.h:

2010-09-21  Dirk Schulze  <krit@webkit.org>

        SVG Filter cleanup
        https://bugs.webkit.org/show_bug.cgi?id=45612

        Unreviewed change of epsilon back to a more tolerant value in RenderTreeAsText and made it a static const.
        This should turn the bots green again.

        * rendering/RenderTreeAsText.cpp:
        (WebCore::hasFractions):

2010-09-21  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=46125, convert table cell intrinsic padding from top/bottom-based
        to before/after-based.  A vertical text table can have intrinsic padding built into the left/right
        direction (and this allows the base class logical padding methods on RenderBoxModelObject to be safe to use).

        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::RenderTableCell):
        (WebCore::RenderTableCell::paddingTop):
        (WebCore::RenderTableCell::paddingBottom):
        (WebCore::RenderTableCell::paddingLeft):
        (WebCore::RenderTableCell::paddingRight):
        (WebCore::RenderTableCell::paddingBefore):
        (WebCore::RenderTableCell::paddingAfter):
        * rendering/RenderTableCell.h:
        (WebCore::RenderTableCell::setIntrinsicPaddingBefore):
        (WebCore::RenderTableCell::setIntrinsicPaddingAfter):
        (WebCore::RenderTableCell::setIntrinsicPadding):
        (WebCore::RenderTableCell::intrinsicPaddingBefore):
        (WebCore::RenderTableCell::intrinsicPaddingAfter):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::calcRowHeight):
        (WebCore::RenderTableSection::layoutRows):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::RenderTreeAsText::writeRenderObject):
        (WebCore::writeTextRun):

2010-09-21  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        SVG Filter cleanup
        https://bugs.webkit.org/show_bug.cgi?id=45612

        Second cleanup patch. Modified files to follow webkit style. Removed dependencies
        to SVG of most of the filter effects and prepared them to move from WebCore/svg/graphics/filters
        to WebCore/platform/graphics/filters/.
        Renamed calculateDrawingIntRect and calculateDrawingRect to requestedRegionOfInputImageData and
        drawingRegionOfInputImage to clarify the functionality and make both functions distinguishable.

        * 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:
        (WebCore::ComponentTransferFunction::ComponentTransferFunction):
        * platform/graphics/filters/FEComposite.cpp:
        (WebCore::FEComposite::apply):
        * platform/graphics/filters/FEComposite.h:
        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::FEGaussianBlur::apply):
        * platform/graphics/filters/FEGaussianBlur.h:
        * platform/graphics/filters/Filter.h:
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::requestedRegionOfInputImageData):
        (WebCore::FilterEffect::drawingRegionOfInputImage):
        (WebCore::FilterEffect::effectContext):
        * platform/graphics/filters/FilterEffect.h:
        * platform/graphics/filters/ImageBufferFilter.cpp:
        * platform/graphics/filters/ImageBufferFilter.h:
        * platform/graphics/filters/SourceAlpha.cpp:
        (WebCore::SourceAlpha::apply):
        * platform/graphics/filters/SourceAlpha.h:
        (WebCore::SourceAlpha::isSourceInput):
        (WebCore::SourceAlpha::SourceAlpha):
        * platform/graphics/filters/SourceGraphic.cpp:
        (WebCore::SourceGraphic::apply):
        * platform/graphics/filters/SourceGraphic.h:
        (WebCore::SourceGraphic::isSourceInput):
        (WebCore::SourceGraphic::SourceGraphic):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::hasFractions):
        (WebCore::operator<<):
        * rendering/RenderTreeAsText.h:
        (WebCore::operator<<):
        * rendering/SVGRenderTreeAsText.cpp:
        * rendering/SVGRenderTreeAsText.h:
        * svg/graphics/filters/SVGFEConvolveMatrix.cpp:
        (WebCore::FEConvolveMatrix::apply):
        * svg/graphics/filters/SVGFEConvolveMatrix.h:
        * svg/graphics/filters/SVGFEDiffuseLighting.cpp:
        * 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):
        (WebCore::FEFlood::externalRepresentation):
        * svg/graphics/filters/SVGFEFlood.h:
        * svg/graphics/filters/SVGFEImage.cpp:
        (WebCore::FEImage::apply):
        * svg/graphics/filters/SVGFEImage.h:
        * svg/graphics/filters/SVGFELighting.cpp:
        (WebCore::FELighting::apply):
        * svg/graphics/filters/SVGFELighting.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:
        * 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:

2010-09-20  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Eric Carlson.

        [GTK] enhanced context menu for media elements
        https://bugs.webkit.org/show_bug.cgi?id=45021

        New items in the media Element context menu:
        - play/pause
        - mute/unmute
        - controls display control
        - switch to fullscreen (for video only)
        - loop playback control
        - copy media url to clipboard
        - open in new window

        Test: media/context-menu-actions.html

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected):
        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::populate):
        (WebCore::ContextMenu::checkOrEnableIfNeeded):
        * platform/ContextMenuItem.h:
        * platform/LocalizationStrategy.h:
        * platform/LocalizedStrings.cpp:
        (WebCore::contextMenuItemTagOpenVideoInNewWindow):
        (WebCore::contextMenuItemTagOpenAudioInNewWindow):
        (WebCore::contextMenuItemTagCopyVideoLinkToClipboard):
        (WebCore::contextMenuItemTagCopyAudioLinkToClipboard):
        (WebCore::contextMenuItemTagToggleMediaControls):
        (WebCore::contextMenuItemTagToggleMediaLoop):
        (WebCore::contextMenuItemTagEnterVideoFullscreen):
        (WebCore::contextMenuItemTagMediaPlay):
        (WebCore::contextMenuItemTagMediaPause):
        (WebCore::contextMenuItemTagMediaMute):
        * platform/LocalizedStrings.h:
        * platform/android/LocalizedStringsAndroid.cpp:
        (WebCore::contextMenuItemTagOpenVideoInNewWindow):
        (WebCore::contextMenuItemTagOpenAudioInNewWindow):
        (WebCore::contextMenuItemTagCopyVideoLinkToClipboard):
        (WebCore::contextMenuItemTagCopyAudioLinkToClipboard):
        (WebCore::contextMenuItemTagToggleMediaControls):
        (WebCore::contextMenuItemTagToggleMediaLoop):
        (WebCore::contextMenuItemTagEnterVideoFullscreen):
        (WebCore::contextMenuItemTagMediaPlay):
        (WebCore::contextMenuItemTagMediaPause):
        (WebCore::contextMenuItemTagMediaMute):
        * platform/brew/LocalizedStringsBrew.cpp:
        (WebCore::contextMenuItemTagOpenVideoInNewWindow):
        (WebCore::contextMenuItemTagOpenAudioInNewWindow):
        (WebCore::contextMenuItemTagCopyVideoLinkToClipboard):
        (WebCore::contextMenuItemTagCopyAudioLinkToClipboard):
        (WebCore::contextMenuItemTagToggleMediaControls):
        (WebCore::contextMenuItemTagToggleMediaLoop):
        (WebCore::contextMenuItemTagEnterVideoFullscreen):
        (WebCore::contextMenuItemTagMediaPlay):
        (WebCore::contextMenuItemTagMediaPause):
        (WebCore::contextMenuItemTagMediaMute):
        * platform/efl/LocalizedStringsEfl.cpp:
        (WebCore::contextMenuItemTagOpenVideoInNewWindow):
        (WebCore::contextMenuItemTagOpenAudioInNewWindow):
        (WebCore::contextMenuItemTagCopyVideoLinkToClipboard):
        (WebCore::contextMenuItemTagCopyAudioLinkToClipboard):
        (WebCore::contextMenuItemTagToggleMediaControls):
        (WebCore::contextMenuItemTagToggleMediaLoop):
        (WebCore::contextMenuItemTagEnterVideoFullscreen):
        (WebCore::contextMenuItemTagMediaPlay):
        (WebCore::contextMenuItemTagMediaPause):
        (WebCore::contextMenuItemTagMediaMute):
        * platform/gtk/ContextMenuItemGtk.cpp:
        (WebCore::gtkStockIDFromContextMenuAction):
        * platform/gtk/LocalizedStringsGtk.cpp:
        (WebCore::contextMenuItemTagOpenVideoInNewWindow):
        (WebCore::contextMenuItemTagOpenAudioInNewWindow):
        (WebCore::contextMenuItemTagCopyVideoLinkToClipboard):
        (WebCore::contextMenuItemTagCopyAudioLinkToClipboard):
        (WebCore::contextMenuItemTagToggleMediaControls):
        (WebCore::contextMenuItemTagToggleMediaLoop):
        (WebCore::contextMenuItemTagEnterVideoFullscreen):
        (WebCore::contextMenuItemTagMediaPlay):
        (WebCore::contextMenuItemTagMediaPause):
        (WebCore::contextMenuItemTagMediaMute):
        * platform/haiku/LocalizedStringsHaiku.cpp:
        (WebCore::contextMenuItemTagOpenVideoInNewWindow):
        (WebCore::contextMenuItemTagOpenAudioInNewWindow):
        (WebCore::contextMenuItemTagCopyVideoLinkToClipboard):
        (WebCore::contextMenuItemTagCopyAudioLinkToClipboard):
        (WebCore::contextMenuItemTagToggleMediaControls):
        (WebCore::contextMenuItemTagToggleMediaLoop):
        (WebCore::contextMenuItemTagEnterVideoFullscreen):
        (WebCore::contextMenuItemTagMediaPlay):
        (WebCore::contextMenuItemTagMediaPause):
        (WebCore::contextMenuItemTagMediaMute):
        * platform/wx/LocalizedStringsWx.cpp:
        (WebCore::contextMenuItemTagOpenVideoInNewWindow):
        (WebCore::contextMenuItemTagOpenAudioInNewWindow):
        (WebCore::contextMenuItemTagCopyVideoLinkToClipboard):
        (WebCore::contextMenuItemTagCopyAudioLinkToClipboard):
        (WebCore::contextMenuItemTagToggleMediaControls):
        (WebCore::contextMenuItemTagToggleMediaLoop):
        (WebCore::contextMenuItemTagEnterVideoFullscreen):
        (WebCore::contextMenuItemTagMediaPlay):
        (WebCore::contextMenuItemTagMediaPause):
        (WebCore::contextMenuItemTagMediaMute):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::absoluteMediaURL):
        (WebCore::HitTestResult::mediaSupportsFullscreen):
        (WebCore::HitTestResult::mediaElement):
        (WebCore::HitTestResult::toggleMediaControlsDisplay):
        (WebCore::HitTestResult::toggleMediaLoopPlayback):
        (WebCore::HitTestResult::enterFullscreenForVideo):
        (WebCore::HitTestResult::mediaControlsEnabled):
        (WebCore::HitTestResult::mediaLoopEnabled):
        (WebCore::HitTestResult::mediaPlaying):
        (WebCore::HitTestResult::toggleMediaPlayState):
        (WebCore::HitTestResult::mediaHasAudio):
        (WebCore::HitTestResult::mediaMuted):
        (WebCore::HitTestResult::toggleMediaMuteState):
        * rendering/HitTestResult.h:

2010-09-20  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Daniel Bates.

        [BREWMP] Handle tab key
        https://bugs.webkit.org/show_bug.cgi?id=46104

        In Brew MP, AVK_FUNCTION is the key code for tab.
        Process AVK_FUNCTION as tab in PlatformKeyboardEvent.

        * platform/brew/PlatformKeyboardEventBrew.cpp:
        (WebCore::keyIdentifierForBrewKeyCode):
        (WebCore::windowsKeyCodeForKeyEvent):

2010-09-20  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r67918.
        http://trac.webkit.org/changeset/67918
        https://bugs.webkit.org/show_bug.cgi?id=46162

        Broke chromium win compile (Requested by jamesr on #webkit).

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * platform/graphics/chromium/GlyphPageTreeNodeLinux.cpp: Renamed from WebCore/platform/graphics/skia/GlyphPageTreeNodeSkia.cpp.
        (WebCore::GlyphPage::fill):

2010-09-20  Daniel Bates  <dbates@rim.com>

        Reviewed by Dan Bernstein.

        Cleanup: Extract common border radii expansion code in
        RenderBoxModelObject::paintBoxShadow() into function
        https://bugs.webkit.org/show_bug.cgi?id=45934

        Extracted code for expanding and clamping the border radii
        into common function to remove duplicate code.

        No functionality was changed. So, no new tests.

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::uniformlyExpandBorderRadii): Added.
        (WebCore::RenderBoxModelObject::paintBoxShadow): Moved common code to uniformlyExpandBorderRadii().

2010-09-20  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by James Robinson.

        Make sure skia is not Chromium specific
        https://bugs.webkit.org/show_bug.cgi?id=39672

        GGlyphPageTreeNodeLinux does not depend on Linux or Chromium.
        Move GGlyphPageTreeNodeLinux to platform/graphics/skia and rename it to
        GlyphPageTreeNodeSkia.cpp so that other ports can use it.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * platform/graphics/chromium/GlyphPageTreeNodeLinux.cpp: Removed.
        * platform/graphics/skia/GlyphPageTreeNodeSkia.cpp: Added.

2010-09-20  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by David Levin.

        Add NoStaticTables attributes to IDLs of FileSystem API for Worker support
        https://bugs.webkit.org/show_bug.cgi?id=46021

        Added NoStaticTables attributes to IDLs except for ones for Callbacks.
        (As NoStaticTables only affects non-callback interfaces.)

        * fileapi/DOMFileSystem.idl:
        * fileapi/DirectoryEntry.idl:
        * fileapi/DirectoryReader.idl:
        * fileapi/Entry.idl:
        * fileapi/EntryArray.idl:
        * fileapi/FileEntry.idl:
        * fileapi/Flags.idl:
        * fileapi/Metadata.idl:

2010-09-20  Nico Weber  <thakis@chromium.org>

        Reviewed by Adam Barth.

        Fix "operands of ? are integers of different signs" clang warnings
        https://bugs.webkit.org/show_bug.cgi?id=46157

        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::ComplexTextController::advance):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calcHeight):

2010-09-20  Vangelis Kokkevis  <vangelis@chromium.org>

        Unreviewed, rolling out r67906.
        http://trac.webkit.org/changeset/67906
        https://bugs.webkit.org/show_bug.cgi?id=46139

        Change causes chromium to crash when switching pages

        * platform/graphics/chromium/ContentLayerChromium.h:
        * platform/graphics/chromium/LayerChromium.h:

2010-09-19  Antonio Gomes  <agomes@rim.com>

        Reviewed by Ojan Vafai.

        SelectionController::modify should ask EditingBehavior for platform specific behavior
        https://bugs.webkit.org/show_bug.cgi?id=41975

        As a follow up of the refactoring work in bug 39854, patch makes SelectionController::modify()
        stop accessing EditingBehaviorType values directly, and replaces its use by the EditingBehavior
        class.

        Since the "Settings*" parameter of the private SelectionController::modify() method becomes unneeded
        with this change (it was used to query the editingBehaviorType), patch merges two modify() methods.

        No behavior change, so no new tests.

        * editing/EditingBehavior.h:
        (WebCore::EditingBehavior::shouldAlwaysGrowSelectionWhenExtendingToBoundary):
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::modify):
        * editing/SelectionController.h:

2010-09-20  Vangelis Kokkevis  <vangelis@chromium.org>

        Reviewed by James Robinson.

        [chromium] Making destructors of LayerChromium and ContentLayerChromium virtual
        so that the derived class' destructor code gets called.
        https://bugs.webkit.org/show_bug.cgi?id=46139

        * platform/graphics/chromium/ContentLayerChromium.h:
        * platform/graphics/chromium/LayerChromium.h:

2010-09-20  Darin Adler  <darin@apple.com>

        Reviewed by James Robinson.

        Deprecate the inputType function on HTMLInputElement
        https://bugs.webkit.org/show_bug.cgi?id=46023

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::HTMLInputElement): Use m_deprecatedTypeNumber.
        (WebCore::HTMLInputElement::isValidValue): Use deprecatedInputType.
        (WebCore::HTMLInputElement::typeMismatch): Ditto.
        (WebCore::HTMLInputElement::valueMissing): Ditto.
        (WebCore::HTMLInputElement::rangeUnderflow): Ditto.
        (WebCore::HTMLInputElement::rangeOverflow): Ditto.
        (WebCore::HTMLInputElement::minimum): Ditto.
        (WebCore::HTMLInputElement::maximum): Ditto.
        (WebCore::HTMLInputElement::stepBase): Ditto.
        (WebCore::HTMLInputElement::stepMismatch): Ditto.
        (WebCore::HTMLInputElement::getStepParameters): Ditto.
        (WebCore::HTMLInputElement::getAllowedValueStep): Ditto.
        (WebCore::HTMLInputElement::isKeyboardFocusable): Ditto.
        (WebCore::HTMLInputElement::shouldUseInputMethod): Ditto.
        (WebCore::HTMLInputElement::handleBlurEvent): Ditto.
        (WebCore::HTMLInputElement::setType): Added a comment.
        (WebCore::HTMLInputElement::updateType): Replaced the setInputType function
        with this. The type is always the type attribute value, so there is no value
        in passing the type string in, and this is an internal implementation detail,
        not a public function.
        (WebCore::createFormControlTypes): Use deprecatedNumberOfTypes.
        (WebCore::HTMLInputElement::formControlType): Use deprecatedInputType.
        (WebCore::HTMLInputElement::saveFormControlState): Ditto.
        (WebCore::HTMLInputElement::restoreFormControlState): Ditto.
        (WebCore::HTMLInputElement::accessKeyAction): Ditto.
        (WebCore::HTMLInputElement::mapToEntry): Ditto.
        (WebCore::HTMLInputElement::parseMappedAttribute): Ditto.
        (WebCore::HTMLInputElement::rendererIsNeeded): Ditto.
        (WebCore::HTMLInputElement::createRenderer): Ditto.
        (WebCore::HTMLInputElement::attach): Ditto.
        (WebCore::HTMLInputElement::isSuccessfulSubmitButton): Ditto.
        (WebCore::HTMLInputElement::appendFormData): Ditto.
        (WebCore::HTMLInputElement::isTextField): Ditto.
        (WebCore::HTMLInputElement::isTextType): Ditto.
        (WebCore::HTMLInputElement::setChecked): Ditto.
        (WebCore::HTMLInputElement::value): Ditto.
        (WebCore::HTMLInputElement::valueWithDefault): Ditto.
        (WebCore::HTMLInputElement::setSuggestedValue): Ditto.
        (WebCore::HTMLInputElement::setValue): Ditto.
        (WebCore::HTMLInputElement::parseToDouble): Ditto.
        (WebCore::HTMLInputElement::valueAsDate): Ditto.
        (WebCore::HTMLInputElement::setValueAsDate): Ditto.
        (WebCore::HTMLInputElement::valueAsNumber): Ditto.
        (WebCore::HTMLInputElement::setValueAsNumber): Ditto.
        (WebCore::HTMLInputElement::serializeForDateTimeTypes): Ditto.
        (WebCore::HTMLInputElement::serialize): Ditto.
        (WebCore::HTMLInputElement::setValueFromRenderer): Ditto.
        (WebCore::HTMLInputElement::storesValueSeparateFromAttribute): Ditto.
        (WebCore::HTMLInputElement::preDispatchEventHandler): Ditto.
        (WebCore::HTMLInputElement::postDispatchEventHandler): Ditto.
        (WebCore::HTMLInputElement::defaultEventHandler): Ditto.
        (WebCore::HTMLInputElement::handleBeforeTextInsertedEvent): Ditto.
        (WebCore::HTMLInputElement::files): Ditto.
        (WebCore::HTMLInputElement::isAcceptableValue): Ditto.
        (WebCore::HTMLInputElement::sanitizeValue): Ditto.
        (WebCore::HTMLInputElement::hasUnacceptableValue): Ditto.
        (WebCore::HTMLInputElement::needsActivationCallback): Ditto.
        (WebCore::HTMLInputElement::isRequiredFormControl): Ditto.
        (WebCore::HTMLInputElement::recalcWillValidate): Ditto.
        (WebCore::HTMLInputElement::parseToDateComponents): Ditto.
        (WebCore::HTMLInputElement::dataList): Ditto.
        (WebCore::HTMLInputElement::isSpeechEnabled): Ditto.

        * html/HTMLInputElement.h: Renamed InputType to DeprecatedInputType since it
        should not be used outside this class. Renamed numberOfTypes to
        dprecatedNumberOfTypes for the same reason. Changed all code to use
        deprecatedInputType function instead of m_type. Renamed inputType function
        to deprecatedInputType. Replaced public setInputType function with private
        updateType function. Renamed m_type data member to m_deprecatedTypeNumber.

        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlInputElement::MediaControlInputElement):
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::updateFromElement):
        Use setType instead of setInputType.

2010-09-20  Mihai Parparita  <mihaip@chromium.org>

        Unreviewed; an attempt to fix Windows build.

        * WebCore.vcproj/WebCore.vcproj:

2010-09-20  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        When PDF image is directly composited, it does not display
        https://bugs.webkit.org/show_bug.cgi?id=46144
        
        In the "direct image compositing" code path, we set the image directly
        as the contents of the GraphicsLayer. However, this only works with
        bitmap images, so we have to check that the image is a bitmap image.

        Test: compositing/images/direct-pdf-image.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::isDirectlyCompositedImage):

2010-09-20  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.

        Crash when div with content set to image gets composited (Vimeo).
        https://bugs.webkit.org/show_bug.cgi?id=46140
        
        When CSS specifies that the content of an element is an image, we make
        a RenderImage, and setStyle() before setting the image resource. In this
        case the compositing code can attempt to access the cached image, which
        would crash with a null deref.
        
        Fix by null-checking m_imageResource.

        Test: compositing/images/content-image.html

        * rendering/RenderImage.h:
        (WebCore::RenderImage::cachedImage):

2010-09-20  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Dimitri Glazkov.

        Hashchange event is no longer a simple event, needs to be its own interface
        https://bugs.webkit.org/show_bug.cgi?id=36335
        
        Add HashChangeEvent.idl and supporting files/changes.

        Test: fast/loader/hashchange-event-properties.html

        The original version of this patch was written by
        Steven Lai <s3lance@hotmail.com>.

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSEventCustom.cpp:
        (WebCore::toJS):
        * bindings/v8/custom/V8EventCustom.cpp:
        (WebCore::toV8):
        * dom/Document.cpp:
        (WebCore::Document::enqueueHashchangeEvent):
        * dom/Event.cpp:
        (WebCore::Event::isHashChangeEvent):
        * dom/Event.h:
        * dom/HashChangeEvent.h: Added.
        (WebCore::HashChangeEvent::isHashChangeEvent):
        (WebCore::HashChangeEvent::create):
        (WebCore::HashChangeEvent::initHashChangeEvent):
        (WebCore::HashChangeEvent::oldURL):
        (WebCore::HashChangeEvent::newURL):
        (WebCore::HashChangeEvent::HashChangeEvent):
        * dom/HashChangeEvent.idl: Added.
        * page/DOMWindow.idl:

2010-09-20  Andy Estes  <aestes@apple.com>

        Reviewed by Adam Barth.

        REGRESSION (HTML5 Parser): Pages broken due to <tag<tag> parsing changes
        https://bugs.webkit.org/show_bug.cgi?id=40961

        Add an optional quirk to the HTML5 tokenizer that reverts it to WebKit's
        legacy behavior when the start of a new token is encountered before the
        current token is finished parsing. The legacy behavior is to emit the
        current token as if it were properly closed and being parsing the new
        token.

        Test: fast/parser/pre-html5-parser-quirks.html

        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::HTMLDocumentParser): Instantiate
        m_tokenizer with the value of Settings::usePreHTML5ParserQuirks().
        (WebCore::usePreHTMLParserQuirks): Add a helper function to return the
        value of Settings::usePreHTML5ParserQuirks() if Settings is non-NULL.
        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::HTMLPreloadScanner::HTMLPreloadScanner): Instantiate
        m_tokenizer with the value of Settings::usePreHTML5ParserQuirks().
        * html/parser/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::HTMLTokenizer):
        (WebCore::HTMLTokenizer::nextToken): If the quirk is enabled and an
        unexpected '<' is encountered in certain states, emit the current token
        and reprocess the '<' as the start of a new token.
        * html/parser/HTMLTokenizer.h:
        (WebCore::HTMLTokenizer::create):
        * html/parser/HTMLViewSourceParser.cpp:
        (WebCore::HTMLViewSourceParser::HTMLViewSourceParser): Instantiate
        m_tokenizer with the value of Settings::usePreHTML5ParserQuirks().
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h:
        (WebCore::Settings::setUsePreHTML5ParserQuirks):
        (WebCore::Settings::usePreHTML5ParserQuirks):

2010-09-20  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=46132, add an isVerticalBlockFlow() method to RenderStyle and
        patch callers so that they don't have to check both top-to-bottom and bottom-to-top block flow.

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::availableLogicalWidth):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::logicalWidth):
        (WebCore::RenderStyle::logicalHeight):
        (WebCore::RenderStyle::logicalMinWidth):
        (WebCore::RenderStyle::logicalMaxWidth):
        (WebCore::RenderStyle::logicalMinHeight):
        (WebCore::RenderStyle::logicalMaxHeight):
        (WebCore::RenderStyle::borderStartWidth):
        (WebCore::RenderStyle::borderEndWidth):
        (WebCore::RenderStyle::marginStart):
        (WebCore::RenderStyle::marginEnd):
        (WebCore::RenderStyle::paddingStart):
        (WebCore::RenderStyle::paddingEnd):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::isVerticalBlockFlow):

2010-09-20  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=46124, add support for logical padding accessors to
        RenderBoxModelObject.

        Added fast/blockflow/percentage-padding.html even though it fails, so that when more of layout is patched
        we can see it start passing.

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paddingTop):
        (WebCore::RenderBoxModelObject::paddingBottom):
        (WebCore::RenderBoxModelObject::paddingLeft):
        (WebCore::RenderBoxModelObject::paddingRight):
        (WebCore::RenderBoxModelObject::paddingBefore):
        (WebCore::RenderBoxModelObject::paddingAfter):
        (WebCore::RenderBoxModelObject::paddingStart):
        (WebCore::RenderBoxModelObject::paddingEnd):
        * rendering/RenderBoxModelObject.h:

2010-09-20  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=46126, add availableLogicalWidth() to RenderBox.
        
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::availableWidth):
        (WebCore::RenderBlock::availableLogicalWidth):
        * rendering/RenderBlock.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::availableLogicalWidth):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::availableWidth):

2010-09-20  Kenneth Russell  <kbr@google.com>

        Reviewed by James Robinson.

        [chromium] Change compositor to use GraphicsContext3D rather than GLES2Context
        https://bugs.webkit.org/show_bug.cgi?id=45912

        Switched Chromium's compositor to use GraphicsContext3D to issue
        its OpenGL rendering calls rather than the Chromium-specific
        GLES2Context and command buffer OpenGL implementation.

        The in-process software rendering path for GraphicsContext3D does
        not yet work with the compositor, at least not on Mac OS X. This
        will be worked on in subsequent bugs.

        Tested manually with 3D CSS, WebGL and video content on Mac OS X
        and Linux. No new tests.

        * platform/graphics/chromium/Canvas2DLayerChromium.cpp:
        (WebCore::Canvas2DLayerChromium::~Canvas2DLayerChromium):
        (WebCore::Canvas2DLayerChromium::updateContents):
        * platform/graphics/chromium/CanvasLayerChromium.cpp:
        (WebCore::CanvasLayerChromium::SharedValues::SharedValues):
        (WebCore::CanvasLayerChromium::SharedValues::~SharedValues):
        (WebCore::CanvasLayerChromium::draw):
        * platform/graphics/chromium/CanvasLayerChromium.h:
        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::SharedValues::SharedValues):
        (WebCore::ContentLayerChromium::SharedValues::~SharedValues):
        (WebCore::ContentLayerChromium::~ContentLayerChromium):
        (WebCore::ContentLayerChromium::updateTextureRect):
        (WebCore::ContentLayerChromium::draw):
        * platform/graphics/chromium/ContentLayerChromium.h:
        * platform/graphics/chromium/DrawingBufferChromium.cpp:
        (WebCore::DrawingBuffer::publishToPlatformLayer):
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::loadShader):
        (WebCore::LayerChromium::SharedValues::SharedValues):
        (WebCore::LayerChromium::SharedValues::~SharedValues):
        (WebCore::LayerChromium::createShaderProgram):
        (WebCore::LayerChromium::layerRendererContext):
        (WebCore::LayerChromium::drawTexturedQuad):
        (WebCore::LayerChromium::drawDebugBorder):
        (WebCore::LayerChromium::drawAsMask):
        (WebCore::LayerChromium::prepareForDraw):
        * platform/graphics/chromium/LayerChromium.h:
        (WebCore::LayerChromium::SharedValues::context):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::create):
        (WebCore::LayerRendererChromium::LayerRendererChromium):
        (WebCore::LayerRendererChromium::context):
        (WebCore::LayerRendererChromium::debugGLCall):
        (WebCore::LayerRendererChromium::useShader):
        (WebCore::LayerRendererChromium::prepareToDrawLayers):
        (WebCore::LayerRendererChromium::updateRootLayerTextureRect):
        (WebCore::LayerRendererChromium::drawLayers):
        (WebCore::LayerRendererChromium::finish):
        (WebCore::LayerRendererChromium::present):
        (WebCore::LayerRendererChromium::getFramebufferPixels):
        (WebCore::LayerRendererChromium::createLayerTexture):
        (WebCore::LayerRendererChromium::drawLayerIntoStencilBuffer):
        (WebCore::LayerRendererChromium::drawLayersRecursive):
        (WebCore::LayerRendererChromium::drawLayer):
        (WebCore::LayerRendererChromium::scissorToRect):
        (WebCore::LayerRendererChromium::makeContextCurrent):
        (WebCore::LayerRendererChromium::resizeOnscreenContent):
        (WebCore::LayerRendererChromium::initializeSharedObjects):
        (WebCore::LayerRendererChromium::cleanupSharedObjects):
        * platform/graphics/chromium/LayerRendererChromium.h:
        * platform/graphics/chromium/VideoLayerChromium.cpp:
        (WebCore::VideoLayerChromium::createTextureRect):
        (WebCore::VideoLayerChromium::updateTextureRect):
        * platform/graphics/chromium/WebGLLayerChromium.cpp:
        (WebCore::WebGLLayerChromium::updateContents):
        * platform/graphics/gpu/SharedGraphicsContext3D.cpp:
        (WebCore::SharedGraphicsContext3D::flush):
        (WebCore::SharedGraphicsContext3D::supportsCopyTextureToParentTextureCHROMIUM):
        (WebCore::SharedGraphicsContext3D::copyTextureToParentTextureCHROMIUM):
        * platform/graphics/gpu/SharedGraphicsContext3D.h:

2010-09-20  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=46119, add logical accessors to RenderStyle.  Not used by any RenderObjects yet, so no tests
        until then.

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::logicalWidth):
        (WebCore::RenderStyle::logicalHeight):
        (WebCore::RenderStyle::logicalMinWidth):
        (WebCore::RenderStyle::logicalMaxWidth):
        (WebCore::RenderStyle::logicalMinHeight):
        (WebCore::RenderStyle::logicalMaxHeight):
        (WebCore::RenderStyle::borderBeforeWidth):
        (WebCore::RenderStyle::borderAfterWidth):
        (WebCore::RenderStyle::borderStartWidth):
        (WebCore::RenderStyle::borderEndWidth):
        (WebCore::RenderStyle::marginBefore):
        (WebCore::RenderStyle::marginAfter):
        (WebCore::RenderStyle::marginStart):
        (WebCore::RenderStyle::marginEnd):
        (WebCore::RenderStyle::paddingBefore):
        (WebCore::RenderStyle::paddingAfter):
        (WebCore::RenderStyle::paddingStart):
        (WebCore::RenderStyle::paddingEnd):
        * rendering/style/RenderStyle.h:

2010-09-20  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=46116, implement block-flow-aware logical properties.
        
        This patch adds all the logical properties from the CSS3 Writing Mode draft for margins, padding, border,
        width and height.

        Added fast/css/logical-property-resolution.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSProperty.cpp:
        (WebCore::resolveToPhysicalProperty):
        (WebCore::CSSProperty::resolveDirectionAwareProperty):
        * css/CSSProperty.h:
        * css/CSSPropertyNames.in:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyDeclarations):
        (WebCore::CSSStyleSelector::applyProperty):

2010-09-20  David Hyatt  <hyatt@apple.com>

        Reviewed by Beth Dakin.

        https://bugs.webkit.org/show_bug.cgi?id=46114, two tables repaint tests failing on bots.

        Patch layoutRows to apply the layout delta when setting a new cell location prior to laying out the cell.
        
        The layout delta is then removed after layout has happened when the repaint check is done.  This change
        makes cell layout match block child layout, and now the cells have the correct new location up front
        when laying out (a necessity for pagination).

        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::layoutRows):

2010-09-20  Jacob Dinu  <dinu.jacob@nokia.com>

        Reviewed by Adam Barth.

        When loading a cached page, dispatchDidCommitLoad is called after FrameLoader::open so
        that all initialzations are done before calling client dispatchDidCommitLoad to avoid
        client from accessing incorrect data.
        https://bugs.webkit.org/show_bug.cgi?id=41155

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::commitProvisionalLoad):
        (WebCore::FrameLoader::transitionToCommitted):

2010-09-20  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Adam Roben.

        REGRESSION: alternating animation direction doesn't work on Windows
        https://bugs.webkit.org/show_bug.cgi?id=46017
        
        Animation-direction on Windows was broken because bitfields on
        Windows are signed.
        
        Fixed by making m_direction an unsigned in the bitfield, and
        casting in the accessor.

        Test: animations/animation-direction.html

        * platform/animation/Animation.h:
        (WebCore::Animation::direction):

2010-09-20  Enrica Casucci  <enrica@apple.com>

        Reviewed by Sam Weinig.

        Pasteboard doesn't work in WebKit2.
        https://bugs.webkit.org/show_bug.cgi?id=42317
        <rdar://problem/7660537>

        * loader/EmptyClients.h:
        (WebCore::EmptyEditorClient::documentFragmentFromAttributedString): Changed parameter to
        be a Vector of RefPtr.
        * page/EditorClient.h:
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::documentFragmentWithRtf): Stylistic changes.

2010-09-20  Yong Li  <yoli@rim.com>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=39966
        Make compareBorders() a consistent compare function which can beused by qsort().

        New test case added: LayoutTests/tables/sort-collapsed-border-styles.html

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

2010-09-20  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Adam Roben.

        [WINCE] Buildfix for PluginViewWin.cpp
        https://bugs.webkit.org/show_bug.cgi?id=46033

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

2010-09-18  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=46030, aintitcool.com doesn't paginate correctly when printed.
        
        This happens because the site always has a document width that will exceed the page width.
        We incorrectly apply a double scale instead of clipping after the first scale still doesn't fit.
        The fix for the issue is to cap the right layout overflow to the page width and to just clip out
        any additional excess.  This is the code in FrameView.cpp.
        
        This patch also cleans up table cell invalidation to reduce the # of relayouts.  This change is not
        a correctness fix.  It's just performance.
        
        I'm not sure how to write a test for this, since the double scale is an artifact of how WebKit mac calls
        back in when really printing.

        * page/FrameView.cpp:
        (WebCore::FrameView::forceLayoutForPagination):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::layoutBlockChild):
        (WebCore::RenderBlock::layoutPositionedObjects):
        (WebCore::RenderBlock::positionNewFloats):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::markForPaginationRelayout):
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutHorizontalBox):
        (WebCore::RenderFlexibleBox::layoutVerticalBox):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::layoutRows):

2010-09-20  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: merge Inspector client runtime events into the serialized inspector state object.

        Drive-by rename getBackendSettings -> getInspectorState to better reflect the nature of the data.

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

        * inspector/Inspector.idl:
        * inspector/InspectorClient.h:
        (WebCore::InspectorClient::updateInspectorStateCookie):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::saveApplicationSettings):
        (WebCore::InspectorController::getInspectorState):
        (WebCore::InspectorController::updateInspectorStateCookie):
        (WebCore::InspectorController::restoreInspectorStateFromCookie):
        (WebCore::InspectorController::getSettings):
        (WebCore::InspectorController::setMonitoringXHREnabled):
        (WebCore::InspectorController::restoreDebugger):
        (WebCore::InspectorController::restoreProfiler):
        (WebCore::InspectorController::setResourceTrackingEnabled):
        (WebCore::InspectorController::ensureSettingsLoaded):
        (WebCore::InspectorController::startTimelineProfiler):
        (WebCore::InspectorController::stopTimelineProfiler):
        (WebCore::InspectorController::enableProfiler):
        (WebCore::InspectorController::disableProfiler):
        (WebCore::InspectorController::enableDebuggerFromFrontend):
        (WebCore::InspectorController::disableDebugger):
        * inspector/InspectorController.h:
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype._handleContextMenuEvent):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype._toggleResourceTracking):
        * inspector/front-end/Settings.js:
        (WebInspector.Settings.initialize):
        * inspector/front-end/inspector.js:
        (WebInspector.doLoadedDone.populateInspectorState):
        (WebInspector.doLoadedDone):

2010-09-20  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        SVG Filter cleanup
        https://bugs.webkit.org/show_bug.cgi?id=45612
        
        All effect inputs are stored in a Vector in FilterEffect instead of passing them via constructors to every effect type.
        This simplifies the primitive subregion logic and centralizes it in determineFilterPrimitiveSubregion.
        Just SourceGraphic, SourceAlpha and FETile still calculate filter primitive subregions on
        their own. Working on it in a followup patch.
        The subregions code is SVG specific and moving this calculation to FilterEffect is an
        intermediate step before moving it to RenderSVGResourceFilterPrimitive in a following patch.
        The new FilterEffectVector will also make it possible to add code to determine the
        smallest used region of an effect and will help save memory and resources in the future.
        subRegion got renamed to filterPrimitiveSubregion to match the name scheme. scaledSubRegion got
        renamed to repaintRectInLocalCoordinates since this is its proper meaning.
        Removed unnecessary member variables and functions from FilterEffect.

        No new tests added since the functionality didn't change.

        * platform/graphics/cairo/GraphicsContextCairo.cpp: scaledSubRegion was renamed to repaintRectInLocalCoordinates.
        (WebCore::GraphicsContext::createShadowMask):
        * platform/graphics/filters/FEBlend.cpp: Removed Filter effect inputs from constructor.
        (WebCore::FEBlend::FEBlend):
        (WebCore::FEBlend::create):
        (WebCore::FEBlend::apply): Call inputFilterEffects to get input filter primitives.
        (WebCore::FEBlend::externalRepresentation): Call inputFilterEffects to get input filter primitives.
        * platform/graphics/filters/FEBlend.h:
        * platform/graphics/filters/FEColorMatrix.cpp: Ditto.
        (WebCore::FEColorMatrix::FEColorMatrix):
        (WebCore::FEColorMatrix::create):
        (WebCore::FEColorMatrix::apply):
        (WebCore::FEColorMatrix::externalRepresentation):
        * platform/graphics/filters/FEColorMatrix.h:
        * platform/graphics/filters/FEComponentTransfer.cpp: Ditto.
        (WebCore::FEComponentTransfer::FEComponentTransfer):
        (WebCore::FEComponentTransfer::create):
        (WebCore::FEComponentTransfer::apply):
        (WebCore::FEComponentTransfer::externalRepresentation):
        * platform/graphics/filters/FEComponentTransfer.h:
        * platform/graphics/filters/FEComposite.cpp: Ditto.
        (WebCore::FEComposite::FEComposite):
        (WebCore::FEComposite::create):
        (WebCore::FEComposite::apply):
        (WebCore::FEComposite::externalRepresentation):
        * platform/graphics/filters/FEComposite.h:
        * platform/graphics/filters/FEGaussianBlur.cpp: Ditto.
        (WebCore::FEGaussianBlur::FEGaussianBlur):
        (WebCore::FEGaussianBlur::create):
        (WebCore::FEGaussianBlur::apply):
        (WebCore::FEGaussianBlur::externalRepresentation):
        * platform/graphics/filters/FEGaussianBlur.h:
        * platform/graphics/filters/Filter.h:
        (WebCore::Filter::determineFilterPrimitiveSubregion): Renamed from calculateEffectSubRegion to match name scheme.
        * platform/graphics/filters/FilterEffect.cpp:
        (WebCore::FilterEffect::FilterEffect):
        (WebCore::FilterEffect::determineFilterPrimitiveSubregion): The main place for subregion calculation.
        (WebCore::FilterEffect::calculateDrawingIntRect): Takes repaintRectInLocalCoordinates now.
        (WebCore::FilterEffect::calculateDrawingRect): ditto.
        (WebCore::FilterEffect::getEffectContext): Check if ImageBuffer was created.
        * platform/graphics/filters/FilterEffect.h: Changed names to match name scheme. Removed unnecessary member variables and functions.
            Seperate SVG specific member variables and functions. Will get removed in followup patches.
        (WebCore::FilterEffect::resultImage):
        (WebCore::FilterEffect::setEffectBuffer):
        (WebCore::FilterEffect::inputEffect):
        (WebCore::FilterEffect::inputEffects):
        (WebCore::FilterEffect::numberOfinputEffects):
        (WebCore::FilterEffect::isAlphaImage):
        (WebCore::FilterEffect::setIsAlphaImage):
        (WebCore::FilterEffect::repaintRectInLocalCoordinates):
        (WebCore::FilterEffect::setRepaintRectInLocalCoordinates):
        (WebCore::FilterEffect::isSourceInput):
        (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::filterPrimitiveSubregion):
        (WebCore::FilterEffect::setFilterPrimitiveSubregion):
        (WebCore::FilterEffect::effectBoundaries):
        (WebCore::FilterEffect::setEffectBoundaries):
        * platform/graphics/filters/SourceAlpha.cpp:
        (WebCore::SourceAlpha::determineFilterPrimitiveSubregion): Renamed to match name scheme.
        * platform/graphics/filters/SourceAlpha.h:
        (WebCore::SourceAlpha::isSourceInput):
        * platform/graphics/filters/SourceGraphic.cpp:
        (WebCore::SourceGraphic::determineFilterPrimitiveSubregion): Ditto.
        * platform/graphics/filters/SourceGraphic.h:
        (WebCore::SourceGraphic::isSourceInput):
        * rendering/RenderSVGResourceFilter.cpp: Adapt to renames in FilterEffect.
        (WebCore::RenderSVGResourceFilter::applyResource):
        (WebCore::RenderSVGResourceFilter::postApplyResource):
        * svg/SVGFEBlendElement.cpp: Constructor of FEBlend doesn't take input effects. Adding them afterwards.
        (WebCore::SVGFEBlendElement::build):
        * svg/SVGFEColorMatrixElement.cpp: Ditto.
        (WebCore::SVGFEColorMatrixElement::build):
        * svg/SVGFEComponentTransferElement.cpp: Ditto.
        (WebCore::SVGFEComponentTransferElement::build):
        * svg/SVGFECompositeElement.cpp: Ditto.
        (WebCore::SVGFECompositeElement::build):
        * svg/SVGFEConvolveMatrixElement.cpp: Ditto.
        (WebCore::SVGFEConvolveMatrixElement::build):
        * svg/SVGFEDiffuseLightingElement.cpp: Ditto.
        (WebCore::SVGFEDiffuseLightingElement::build):
        * svg/SVGFEDisplacementMapElement.cpp: Ditto.
        (WebCore::SVGFEDisplacementMapElement::build):
        * svg/SVGFEGaussianBlurElement.cpp: Ditto.
        (WebCore::SVGFEGaussianBlurElement::build):
        * svg/SVGFEMergeElement.cpp: Ditto.
        (WebCore::SVGFEMergeElement::build):
        * svg/SVGFEMorphologyElement.cpp: Ditto.
        (WebCore::SVGFEMorphologyElement::build):
        * svg/SVGFEOffsetElement.cpp: Ditto.
        (WebCore::SVGFEOffsetElement::build):
        * svg/SVGFESpecularLightingElement.cpp: Ditto.
        (WebCore::SVGFESpecularLightingElement::build):
        * svg/SVGFETileElement.cpp: Ditto.
        (WebCore::SVGFETileElement::build):
        * svg/graphics/filters/SVGFEConvolveMatrix.cpp: Ditto.
        (WebCore::FEConvolveMatrix::FEConvolveMatrix):
        (WebCore::FEConvolveMatrix::create):
        (WebCore::FEConvolveMatrix::apply):
        (WebCore::FEConvolveMatrix::externalRepresentation):
        * svg/graphics/filters/SVGFEConvolveMatrix.h:
        * svg/graphics/filters/SVGFEDiffuseLighting.cpp: Ditto.
        (WebCore::FEDiffuseLighting::FEDiffuseLighting):
        (WebCore::FEDiffuseLighting::create):
        (WebCore::FEDiffuseLighting::externalRepresentation):
        * svg/graphics/filters/SVGFEDiffuseLighting.h:
        * svg/graphics/filters/SVGFEDisplacementMap.cpp: Ditto.
        (WebCore::FEDisplacementMap::FEDisplacementMap):
        (WebCore::FEDisplacementMap::create):
        (WebCore::FEDisplacementMap::apply):
        (WebCore::FEDisplacementMap::externalRepresentation):
        * svg/graphics/filters/SVGFEDisplacementMap.h:
        * svg/graphics/filters/SVGFEFlood.cpp: Ditto.
        (WebCore::FEFlood::apply):
        * svg/graphics/filters/SVGFEImage.cpp: Ditto.
        (WebCore::FEImage::apply):
        * svg/graphics/filters/SVGFELighting.cpp: Ditto.
        (WebCore::FELighting::FELighting):
        (WebCore::FELighting::apply):
        * svg/graphics/filters/SVGFELighting.h:
        * svg/graphics/filters/SVGFEMerge.cpp: Ditto.
        (WebCore::FEMerge::FEMerge):
        (WebCore::FEMerge::create):
        (WebCore::FEMerge::apply):
        (WebCore::FEMerge::externalRepresentation):
        * svg/graphics/filters/SVGFEMerge.h:
        * svg/graphics/filters/SVGFEMorphology.cpp: Ditto.
        (WebCore::FEMorphology::FEMorphology):
        (WebCore::FEMorphology::create):
        (WebCore::FEMorphology::apply):
        (WebCore::FEMorphology::externalRepresentation):
        * svg/graphics/filters/SVGFEMorphology.h:
        * svg/graphics/filters/SVGFEOffset.cpp: Ditto.
        (WebCore::FEOffset::FEOffset):
        (WebCore::FEOffset::create):
        (WebCore::FEOffset::apply):
        (WebCore::FEOffset::externalRepresentation):
        * svg/graphics/filters/SVGFEOffset.h:
        * svg/graphics/filters/SVGFESpecularLighting.cpp: Ditto.
        (WebCore::FESpecularLighting::FESpecularLighting):
        (WebCore::FESpecularLighting::create):
        (WebCore::FESpecularLighting::externalRepresentation):
        * svg/graphics/filters/SVGFESpecularLighting.h:
        * svg/graphics/filters/SVGFETile.cpp: Ditto.
        (WebCore::FETile::FETile):
        (WebCore::FETile::create):
        (WebCore::FETile::determineFilterPrimitiveSubregion): Renamed to match name scheme.
        (WebCore::FETile::apply):
        (WebCore::FETile::externalRepresentation):
        * svg/graphics/filters/SVGFETile.h:
        * svg/graphics/filters/SVGFilter.cpp: Renamed itemBox to targetBoundingBox to match name scheme.
        (WebCore::SVGFilter::SVGFilter):
        (WebCore::SVGFilter::determineFilterPrimitiveSubregion): Renamed to match name scheme.
        (WebCore::SVGFilter::create):
        * svg/graphics/filters/SVGFilter.h:
        (WebCore::SVGFilter::sourceImageRect):

2010-09-20  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: highlight DOM node when hover on link element or DOM breakpoint
        https://bugs.webkit.org/show_bug.cgi?id=45897

        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.BreakpointItem):
        (WebInspector.JSBreakpointItem):
        (WebInspector.DOMBreakpointItem):
        (WebInspector.DOMBreakpointItem.prototype.compareTo):
        (WebInspector.DOMBreakpointItem.prototype._breakpointClicked):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.hide):
        (WebInspector.ElementsPanel.prototype.reset):
        (WebInspector.ElementsPanel.prototype.setDocument.selectNode):
        (WebInspector.ElementsPanel.prototype._mouseMovedInCrumbs):
        (WebInspector.ElementsPanel.prototype._mouseMovedOutOfCrumbs):
        (WebInspector.ElementsPanel.prototype.linkifyNodeReference):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline.prototype.set focusedDOMNode):
        (WebInspector.ElementsTreeOutline.prototype._onmousemove):
        (WebInspector.ElementsTreeOutline.prototype._onmouseout):
        * inspector/front-end/inspector.js:
        (WebInspector.highlightDOMNode):
        (WebInspector.highlightDOMNodeForTwoSeconds):
        (WebInspector.wireElementWithDOMNode):
        (WebInspector._updateFocusedNode):
        (WebInspector.reset):
        (WebInspector.updateFocusedNode):

2010-09-19  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r67749.
        http://trac.webkit.org/changeset/67749
        https://bugs.webkit.org/show_bug.cgi?id=46068

        breaking ToT chromium canary build (Requested by shans on
        #webkit).

        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::createNewContext):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::registeredExtensionWithV8):
        (WebCore::V8Proxy::registerExtension):
        * bindings/v8/V8Proxy.h:
        * loader/EmptyClients.h:
        * loader/FrameLoaderClient.h:

2010-09-19  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Bug 46065 - Unify implementation of ToInt32 and ToUInt32, don't use fmod.

        These methods implement the same conversion (see discussion in the notes
        of sections of 9.5 and 9.6 of the spec), only differing in how the result
        is interpretted.

        Removing JSValue::toInt32 (since this has weird, non-spec function).
        A couple of places in the binding are using this method, so adding
        finiteInt32Value to the bindings to maintain current behaviour.

        Test: fast/js/toInt32UInt32.html

        * bindings/js/JSDOMBinding.h:
        (WebCore::finiteInt32Value):
        * bindings/js/JSHTMLOptionsCollectionCustom.cpp:
        (WebCore::JSHTMLOptionsCollection::add):
        * bindings/js/JSSQLResultSetRowListCustom.cpp:
        (WebCore::JSSQLResultSetRowList::item):
        * bindings/js/JSSVGPODListCustom.h:
        (WebCore::JSSVGPODListCustom::getItem):
        (WebCore::JSSVGPODListCustom::insertItemBefore):
        (WebCore::JSSVGPODListCustom::replaceItem):
        (WebCore::JSSVGPODListCustom::removeItem):
        * bindings/js/JSSVGPathSegListCustom.cpp:
        (WebCore::JSSVGPathSegList::getItem):
        (WebCore::JSSVGPathSegList::insertItemBefore):
        (WebCore::JSSVGPathSegList::replaceItem):
        (WebCore::JSSVGPathSegList::removeItem):

2010-09-19  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] clipBoundingRect() should return rect relevant to current layer
        https://bugs.webkit.org/show_bug.cgi?id=46059

        r65791 inadvertently changed clipBoundingRect() to always use the GC painter
        without checking the TransparencyLayer stack first.

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContextPlatformPrivate::p):
        (WebCore::GraphicsContextPlatformPrivate::clipBoundingRect):

2010-09-19  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Replace WKBundleRangeRef with WKBundleRangeHandleRef.
        https://bugs.webkit.org/show_bug.cgi?id=46054

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:

2010-09-19  Patrick Gansterer  <paroga@paroga.com>

        Unreviewed.

        [WINCE] Buildfix for Gradient after r67801.

        * platform/graphics/Gradient.h:
        * platform/graphics/wince/GradientWinCE.cpp:
        (WebCore::Gradient::getStops):

2010-09-19  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [Chromium] Add is<input type>() functions to WebInputElement
        https://bugs.webkit.org/show_bug.cgi?id=46035

        * html/HTMLInputElement.h:
        (WebCore::HTMLInputElement::isText): Added. It is used by WebKit/chromium.

2010-09-18  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Antonio Gomes.

        [Qt] Path: Remove unused member variable
        https://bugs.webkit.org/show_bug.cgi?id=46048

        Path::m_lastMoveToIndex is not used for anything, so remove it.

        * platform/graphics/Path.h:
        * platform/graphics/qt/PathQt.cpp:
        (WebCore::Path::Path):
        (WebCore::Path::operator=):
        (WebCore::Path::moveTo):

2010-09-18  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Darin Adler.

        Use AtomicString insted of String in XMLDocumentParser
        https://bugs.webkit.org/show_bug.cgi?id=45990

        Create AtomicString as early as possible.
        This can avoid unnecessary memcpy of String content.

        * dom/XMLDocumentParser.h:
        * dom/XMLDocumentParserLibxml2.cpp:
        (WebCore::toAtomicString):
        (WebCore::handleElementNamespaces):
        (WebCore::handleElementAttributes):
        (WebCore::XMLDocumentParser::startElementNs):

2010-09-18  Erik Arvidsson  <arv@chromium.org>

        Reviewed by Nate Chapin.

        [Chromium] fast/dom/dataset-gc.html is failing
        https://bugs.webkit.org/show_bug.cgi?id=45426

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/custom/V8DOMStringMapCustom.cpp:
        (WebCore::toV8):
        * dom/DOMStringMap.h:
        * dom/DatasetDOMStringMap.h:
        (WebCore::DatasetDOMStringMap::element):

2010-09-18  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Oliver Hunt.

        Gradient: Fast-path for the ideal case in sortStopsIfNecessary()
        https://bugs.webkit.org/show_bug.cgi?id=46045

        Avoid calling std::stable_sort for 2-stop gradients that are already in order.

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

2010-09-18  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Andreas Kling.

        [BREWMP] Fix a typo in key code name
        https://bugs.webkit.org/show_bug.cgi?id=46003

        AVK_CLR is the right Brew MP key code name for VK_BACK.

        * platform/brew/PlatformKeyboardEventBrew.cpp:
        (WebCore::windowsKeyCodeForKeyEvent):

2010-09-18  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Oliver Hunt.

        Gradient: Pre-reserve space for 2 color stops
        https://bugs.webkit.org/show_bug.cgi?id=46044

        Most gradients have only 2 color stops, pre-reserve space for these in m_stops
        to avoid growing the vector dynamically in the common case.

        * platform/graphics/Gradient.h:

2010-09-18  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, rolling out r67792.
        http://trac.webkit.org/changeset/67792
        https://bugs.webkit.org/show_bug.cgi?id=45976

        Broke over a hundred SVG tests.

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawImage):
        (WebCore::GraphicsContext::drawImageBuffer):
        * platform/graphics/GraphicsContext.h:

2010-09-18  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Simon Fraser.

        webkitAnimationEnd event doesn't fire when skipping over final iteration
        https://bugs.webkit.org/show_bug.cgi?id=46010
        
        It's possible for AnimationBase::fireAnimationEventsIfNeeded to decide
        that the animation is ended while we're in the looping state, if the
        animation timer never fires during an iteration. That then fails the
        assert in AnimationBase::updateStateMachine (we don't expect
        AnimationStateInputEndTimerFired while in the looping state). Jump the
        state to AnimationStateEnding, which is more accurate.

        Test: animations/animation-end-event-short-iterations.html

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::fireAnimationEventsIfNeeded):

2010-09-18  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Andreas Kling.

        [BREWMP] Wrong key code type in keyIdentifierForBrewKeyCode
        https://bugs.webkit.org/show_bug.cgi?id=46005

        The type of key code in Brew MP is uint16. Take uint16 instead of int16 in keyIdentifierForBrewKeyCode.

        * platform/brew/PlatformKeyboardEventBrew.cpp:
        (WebCore::keyIdentifierForBrewKeyCode):

2010-09-18  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Oliver Hunt.

        Canvas drawImage with source or destination widths/heights of -1 renders incorrectly.
        https://bugs.webkit.org/show_bug.cgi?id=45976

        Specifying a -1 width or height for either the source or destination rectangle in drawImage
        get improperly drawn with -1 replaced as the corresponding image width or height. This was because
        the value -1 was being passed around to signal non-specified widths and heights and thus was
        interpreted lower down in the drawImage implementation which disallowed any calls that actually
        wanted to use -1 as the widths or heights. Fixed this by moving the default logic up and not using
        -1 in-band signaling to denote default behavior.

        Tests: canvas/philip/tests/2d.drawImage.negativeOneDest.html
               canvas/philip/tests/2d.drawImage.negativeOneSource.html

        * platform/graphics/GraphicsContext.cpp: Removed -1 in-band signals and replaced cascased calls to have
        the desired replaces for unspecified widths and heights earlier on.
        * platform/graphics/GraphicsContext.h: Removed faulty default value.

2010-09-18  Ademar de Souza Reis Jr  <ademar.reis@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        Enable Platform Strategies on Qt

        [Qt] Turn on PLATFORM_STRATEGIES
        https://bugs.webkit.org/show_bug.cgi?id=45831

        * WebCore.pro: Adding/removing implementation files
        * platform/qt/Language.cpp: Added, WebCore::defaultLanguage() was
        moved from platform/qt/Localizations.cpp
        (WebCore::defaultLanguage): Moved from Localizations.cpp
        * platform/qt/Localizations.cpp: Removed (code is now inside
        WebCoreSupport/WebPlatformStrategies.cpp)
        * plugins/qt/PluginDataQt.cpp: Removed (idem)

2010-09-18  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Darin Adler.

        Rename Wince files to WinCE
        https://bugs.webkit.org/show_bug.cgi?id=37287

        * loader/icon/wince/IconDatabaseWinCE.cpp: Copied from WebCore/loader/icon/wince/IconDatabaseWince.cpp.
        * loader/icon/wince/IconDatabaseWince.cpp: Removed.
        * page/wince/FrameWinCE.cpp: Copied from WebCore/page/wince/FrameWince.cpp.
        * page/wince/FrameWince.cpp: Removed.
        * platform/graphics/MediaPlayer.cpp:
        * platform/graphics/wince/ColorWinCE.cpp: Copied from WebCore/platform/graphics/wince/ColorWince.cpp.
        * platform/graphics/wince/ColorWince.cpp: Removed.
        * platform/graphics/wince/FontCacheWinCE.cpp: Copied from WebCore/platform/graphics/wince/FontCacheWince.cpp.
        * platform/graphics/wince/FontCacheWince.cpp: Removed.
        * platform/graphics/wince/FontWinCE.cpp: Copied from WebCore/platform/graphics/wince/FontWince.cpp.
        * platform/graphics/wince/FontWince.cpp: Removed.
        * platform/graphics/wince/GlyphPageTreeNodeWinCE.cpp: Copied from WebCore/platform/graphics/wince/GlyphPageTreeNodeWince.cpp.
        * platform/graphics/wince/GlyphPageTreeNodeWince.cpp: Removed.
        * platform/graphics/wince/GradientWinCE.cpp: Copied from WebCore/platform/graphics/wince/GradientWince.cpp.
        * platform/graphics/wince/GradientWince.cpp: Removed.
        * platform/graphics/wince/GraphicsContextWinCE.cpp: Copied from WebCore/platform/graphics/wince/GraphicsContextWince.cpp.
        * platform/graphics/wince/GraphicsContextWince.cpp: Removed.
        * platform/graphics/wince/ImageBufferWinCE.cpp: Copied from WebCore/platform/graphics/wince/ImageBufferWince.cpp.
        * platform/graphics/wince/ImageBufferWince.cpp: Removed.
        * platform/graphics/wince/MediaPlayerPrivateWinCE.h: Copied from WebCore/platform/graphics/wince/MediaPlayerPrivateWince.h.
        * platform/graphics/wince/MediaPlayerPrivateWince.h: Removed.
        * platform/graphics/wince/PathWinCE.cpp: Copied from WebCore/platform/graphics/wince/PathWince.cpp.
        * platform/graphics/wince/PathWince.cpp: Removed.
        * platform/graphics/wince/PlatformPathWinCE.cpp: Copied from WebCore/platform/graphics/wince/PlatformPathWince.cpp.
        * platform/graphics/wince/PlatformPathWinCE.h: Copied from WebCore/platform/graphics/wince/PlatformPathWince.h.
        * platform/graphics/wince/PlatformPathWince.cpp: Removed.
        * platform/graphics/wince/PlatformPathWince.h: Removed.
        * platform/graphics/wince/SimpleFontDataWinCE.cpp: Copied from WebCore/platform/graphics/wince/SimpleFontDataWince.cpp.
        * platform/graphics/wince/SimpleFontDataWince.cpp: Removed.
        * platform/graphics/wince/WinCEGraphicsExtras.h: Copied from WebCore/platform/graphics/wince/WinceGraphicsExtras.h.
        * platform/graphics/wince/WinceGraphicsExtras.h: Removed.
        * platform/text/wince/TextBoundariesWinCE.cpp: Copied from WebCore/platform/text/wince/TextBoundariesWince.cpp.
        * platform/text/wince/TextBoundariesWince.cpp: Removed.
        * platform/text/wince/TextBreakIteratorWinCE.cpp: Copied from WebCore/platform/text/wince/TextBreakIteratorWince.cpp.
        * platform/text/wince/TextBreakIteratorWince.cpp: Removed.
        * platform/wince/CursorWinCE.cpp: Copied from WebCore/platform/wince/CursorWince.cpp.
        * platform/wince/CursorWince.cpp: Removed.
        * platform/wince/DragDataWinCE.cpp: Copied from WebCore/platform/wince/DragDataWince.cpp.
        * platform/wince/DragDataWince.cpp: Removed.
        * platform/wince/DragImageWinCE.cpp: Copied from WebCore/platform/wince/DragImageWince.cpp.
        * platform/wince/DragImageWince.cpp: Removed.
        * platform/wince/EditorWinCE.cpp: Copied from WebCore/platform/wince/EditorWince.cpp.
        (WebCore::Editor::newGeneralClipboard):
        * platform/wince/EditorWince.cpp: Removed.
        * platform/wince/FileChooserWinCE.cpp: Copied from WebCore/platform/wince/FileChooserWince.cpp.
        * platform/wince/FileChooserWince.cpp: Removed.
        * platform/wince/FileSystemWinCE.cpp: Copied from WebCore/platform/wince/FileSystemWince.cpp.
        * platform/wince/FileSystemWince.cpp: Removed.
        * platform/wince/KURLWinCE.cpp: Copied from WebCore/platform/wince/KURLWince.cpp.
        * platform/wince/KURLWince.cpp: Removed.
        * platform/wince/KeygenWinCE.cpp: Copied from WebCore/platform/wince/KeygenWince.cpp.
        * platform/wince/KeygenWince.cpp: Removed.
        * platform/wince/MIMETypeRegistryWinCE.cpp: Copied from WebCore/platform/wince/MIMETypeRegistryWince.cpp.
        * platform/wince/MIMETypeRegistryWince.cpp: Removed.
        * platform/wince/PasteboardWinCE.cpp: Copied from WebCore/platform/wince/PasteboardWince.cpp.
        * platform/wince/PasteboardWince.cpp: Removed.
        * platform/wince/SearchPopupMenuWinCE.cpp: Copied from WebCore/platform/wince/SearchPopupMenuWince.cpp.
        * platform/wince/SearchPopupMenuWince.cpp: Removed.
        * platform/wince/SharedTimerWinCE.cpp: Copied from WebCore/platform/wince/SharedTimerWince.cpp.
        * platform/wince/SharedTimerWince.cpp: Removed.
        * rendering/RenderThemeWinCE.cpp: Copied from WebCore/rendering/RenderThemeWince.cpp.
        (WebCore::RenderThemeWinCE::create):
        (WebCore::RenderTheme::themeForPage):
        (WebCore::RenderThemeWinCE::RenderThemeWinCE):
        (WebCore::RenderThemeWinCE::~RenderThemeWinCE):
        (WebCore::RenderThemeWinCE::platformActiveSelectionBackgroundColor):
        (WebCore::RenderThemeWinCE::platformInactiveSelectionBackgroundColor):
        (WebCore::RenderThemeWinCE::platformActiveSelectionForegroundColor):
        (WebCore::RenderThemeWinCE::platformInactiveSelectionForegroundColor):
        (WebCore::RenderThemeWinCE::supportsFocus):
        (WebCore::RenderThemeWinCE::supportsFocusRing):
        (WebCore::RenderThemeWinCE::determineClassicState):
        (WebCore::RenderThemeWinCE::getThemeData):
        (WebCore::RenderThemeWinCE::paintButton):
        (WebCore::RenderThemeWinCE::setCheckboxSize):
        (WebCore::RenderThemeWinCE::paintTextField):
        (WebCore::RenderThemeWinCE::adjustMenuListStyle):
        (WebCore::RenderThemeWinCE::paintMenuList):
        (WebCore::RenderThemeWinCE::paintMenuListButton):
        (WebCore::RenderThemeWinCE::systemFont):
        (WebCore::RenderThemeWinCE::themeChanged):
        (WebCore::RenderThemeWinCE::extraDefaultStyleSheet):
        (WebCore::RenderThemeWinCE::extraQuirksStyleSheet):
        (WebCore::RenderThemeWinCE::supportsHover):
        (WebCore::RenderThemeWinCE::systemColor):
        (WebCore::RenderThemeWinCE::adjustSliderThumbSize):
        (WebCore::RenderThemeWinCE::adjustButtonInnerStyle):
        (WebCore::RenderThemeWinCE::adjustSearchFieldStyle):
        (WebCore::RenderThemeWinCE::paintSearchField):
        (WebCore::RenderThemeWinCE::paintSearchFieldCancelButton):
        (WebCore::RenderThemeWinCE::adjustSearchFieldCancelButtonStyle):
        (WebCore::RenderThemeWinCE::adjustSearchFieldDecorationStyle):
        (WebCore::RenderThemeWinCE::adjustSearchFieldResultsDecorationStyle):
        (WebCore::RenderThemeWinCE::paintSearchFieldResultsDecoration):
        (WebCore::RenderThemeWinCE::adjustSearchFieldResultsButtonStyle):
        (WebCore::RenderThemeWinCE::paintSearchFieldResultsButton):
        (WebCore::RenderThemeWinCE::adjustMenuListButtonStyle):
        (WebCore::RenderThemeWinCE::paintSliderTrack):
        (WebCore::RenderThemeWinCE::paintSliderThumb):
        (WebCore::RenderThemeWinCE::paintMediaFullscreenButton):
        (WebCore::RenderThemeWinCE::paintMediaMuteButton):
        (WebCore::RenderThemeWinCE::paintMediaPlayButton):
        (WebCore::RenderThemeWinCE::paintMediaSeekBackButton):
        (WebCore::RenderThemeWinCE::paintMediaSeekForwardButton):
        (WebCore::RenderThemeWinCE::paintMediaSliderTrack):
        (WebCore::RenderThemeWinCE::paintMediaSliderThumb):
        * rendering/RenderThemeWinCE.h: Copied from WebCore/rendering/RenderThemeWince.h.
        * rendering/RenderThemeWince.cpp: Removed.
        * rendering/RenderThemeWince.h: Removed.
        * storage/wince/DatabaseThreadWinCE.cpp: Copied from WebCore/storage/wince/DatabaseThreadWince.cpp.
        * storage/wince/DatabaseThreadWinCE.h: Copied from WebCore/storage/wince/DatabaseThreadWince.h.
        * storage/wince/DatabaseThreadWince.cpp: Removed.
        * storage/wince/DatabaseThreadWince.h: Removed.
        * storage/wince/LocalStorageThreadWinCE.cpp: Copied from WebCore/storage/wince/LocalStorageThreadWince.cpp.
        * storage/wince/LocalStorageThreadWinCE.h: Copied from WebCore/storage/wince/LocalStorageThreadWince.h.
        * storage/wince/LocalStorageThreadWince.cpp: Removed.
        * storage/wince/LocalStorageThreadWince.h: Removed.

2010-09-18  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Eric Seidel.

        Move Plugin*None.cpp from CMakeLists.txt into CMakeListsEfl.txt
        https://bugs.webkit.org/show_bug.cgi?id=45900

        PluginDataNone.cpp and PluginViewNone.cpp are not used by all port.
        Move them into plaform sepcific build system.

        * CMakeLists.txt:
        * CMakeListsEfl.txt:

2010-09-18  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Don't copy clip path to TransparencyLayer
        https://bugs.webkit.org/show_bug.cgi?id=45965

        We don't need to copy the GC's clip path to the TransparencyLayer since it will
        clip anyway when ending the layer.

        * platform/graphics/qt/TransparencyLayer.h:
        (WebCore::TransparencyLayer::TransparencyLayer):

2010-09-18  Patrick Gansterer  <paroga@paroga.com>

        Unreviewed.

        [WINCE] Buildfix for FrameWince.cpp after r51353, r67762 and r67771.

        * page/wince/FrameWince.cpp:
        (WebCore::computePageRectsForFrame):
        (WebCore::imageFromSelection):

2010-09-18  Kent Tamura  <tkent@chromium.org>

        Unreviewed, a trivial change.

        Run sort-Xcode-project-file.

        * WebCore.xcodeproj/project.pbxproj:

2010-09-18  Dan Bernstein  <mitz@apple.com>

        Reviewed by Eric Seidel.

        REGRESSION (r67762): Over 160 layout tests failing due to incorrect zoom factors in subframes
        https://bugs.webkit.org/show_bug.cgi?id=46031

        * page/Frame.cpp:
        (WebCore::parentPageZoomFactor): Return the zoom factor of the parent frame.
        (WebCore::parentTextZoomFactor): Ditto.

2010-09-17  Sam Weinig  <sam@webkit.org>

        Reviewed by Jon Honeycutt.

        Need a way to load data (as plain text) in a WKPage
        <rdar://problem/8424239>

        * WebCore.exp.in:

2010-09-17  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=46027, image on gamespot.com paginates without bringing its enclosing border along.
        
        Make sure that unsplittable objects like replaced elements propagate their pagination strut outward to the parent block
        when appropriate.  An image on a line did this, but a block-level image did not.

        Added fast/multicol/image-inside-nested-blocks-with-border.html

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

2010-09-17  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        Move calls from frameView->pageZoomFactor() to frame->pageZoomFactor().

        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleTouchEvent): Removed a helper function,
            added direct calls to frame->pageZoomFactor().

2010-09-17  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=45993, convert printing to the new pagination model.

        Make printing store the page height in the RenderView and push that into the layout state to
        use the new pagination model.  The old pagination model is retained because it is still used
        for embedded WebViews.

        * page/FrameView.cpp:
        (WebCore::FrameView::reset):
        (WebCore::FrameView::layout):
        (WebCore::FrameView::forceLayout):
        (WebCore::FrameView::forceLayoutForPagination):
        (WebCore::FrameView::adjustPageHeight):
        * page/FrameView.h:
        * page/PrintContext.cpp:
        (WebCore::PrintContext::computePageRectsWithPageSizeInternal):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintChildren):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calcHeight):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintReplaced):
        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::paint):
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::paintReplaced):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::RenderView):
        (WebCore::RenderView::layout):
        (WebCore::RenderView::paint):
        (WebCore::RenderView::setBestTruncatedAt):
        * rendering/RenderView.h:
        (WebCore::RenderView::popLayoutState):
        (WebCore::RenderView::pageHeight):
        (WebCore::RenderView::setPageHeight):
        (WebCore::RenderView::bestTruncatedAt):
        (WebCore::RenderView::truncatedAt):
        (WebCore::RenderView::setTruncatedAt):
        (WebCore::RenderView::printRect):
        (WebCore::RenderView::setPrintRect):
        (WebCore::RenderView::pushLayoutState):
        (WebCore::LayoutStateMaintainer::LayoutStateMaintainer):
        (WebCore::LayoutStateMaintainer::push):
        (WebCore::LayoutStateMaintainer::pop):

2010-09-17  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        Canvas sizing ignores intrinsic size
        https://bugs.webkit.org/show_bug.cgi?id=46024

        Updated fast/replaced/table-percent-height.html

        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::RenderEmbeddedObject): If this is used as a proxy
        for <video>, behave like it has an intrinsic size (e.g. preserve aspect ratio when
        width is auto and height is specified).
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::calcAspectRatioWidth): Changed to explicitly invoke
        RenderBox::calcReplacedHeight(), now that RenderReplaced has its own implementation
        which we don’t want.
        (WebCore::RenderImage::calcAspectRatioHeight): Similarly with calcReplacedWidth().
        * rendering/RenderImage.h:
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::RenderReplaced): Initialize m_hasIntrinsicSize.
        (WebCore::lengthIsSpecified): Added this helper function, based on RenderImage’s
        is{Width,Height}Specified().
        (WebCore::RenderReplaced::calcReplacedWidth): Moved from RenderVideo all the way
        up here so other replaced objects could use this logic.
        (WebCore::RenderReplaced::calcReplacedHeight): Ditto.
        (WebCore::RenderReplaced::calcAspectRatioWidth): Ditto.
        (WebCore::RenderReplaced::calcAspectRatioHeight): Ditto.
        (WebCore::RenderReplaced::calcPrefWidths): Replaced with the RenderImage version
        of the logic.
        (WebCore::RenderReplaced::setIntrinsicSize): Added an assertion.
        * rendering/RenderReplaced.h:
        (WebCore::RenderReplaced::minimumReplacedHeight): Promoted from private to protected
        to allow RenderVideo to call through.
        (WebCore::RenderReplaced::setHasIntrinsicSize): Added this setter.
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::updateIntrinsicSize): Factor zoom into the intrinsic size,
        the way other RenderReplaced objects do.
        (WebCore::RenderVideo::calcReplacedWidth): Invoke the RenderReplaced implementation,
        which matches what used to be here, skipping over the RenderImage implementation.
        (WebCore::RenderVideo::calcReplacedHeight): Ditto.
        (WebCore::RenderVideo::minimumReplacedHeight): Ditto.
        * rendering/RenderVideo.h:

2010-09-17  Darin Adler  <darin@apple.com>

        Build fix for platforms that compile Touch.

        * dom/Touch.cpp:
        (WebCore::contentsX):
        (WebCore::contentsY):
        Get zoom factor from Frame rather than FrameView.

2010-09-17  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        REGRESSION (r60104): Zoom level is unexpectedly reset on page reload
        https://bugs.webkit.org/show_bug.cgi?id=42863

        Moved zoom level back from FrameView to Frame.
        I had forgotten that FrameView's lifetime is much shorter than
        Frame's, and until that is fixed it's best to leave this on Frame.

        * WebCore.exp.in: Updated.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::styleForDocument):
        (WebCore::CSSStyleSelector::applyProperty):
        (WebCore::CSSStyleSelector::getComputedSizeFromSpecifiedSize):
        * dom/Document.cpp:
        (WebCore::Document::nodesFromRect):
        (WebCore::Document::elementFromPoint):
        (WebCore::Document::caretRangeFromPoint):
        * dom/MouseRelatedEvent.cpp:
        (WebCore::contentsX):
        (WebCore::contentsY):
        (WebCore::pageZoomFactor):
        * dom/Node.cpp:
        (WebCore::Node::dispatchMouseEvent):
        (WebCore::Node::dispatchWheelEvent):
        * html/HTMLBodyElement.cpp:
        (WebCore::adjustForZoom):
        (WebCore::HTMLBodyElement::scrollLeft):
        (WebCore::HTMLBodyElement::setScrollLeft):
        (WebCore::HTMLBodyElement::scrollTop):
        (WebCore::HTMLBodyElement::setScrollTop):
        (WebCore::HTMLBodyElement::scrollHeight):
        (WebCore::HTMLBodyElement::scrollWidth):
        * html/ImageDocument.cpp:
        (WebCore::pageZoomFactor):
        (WebCore::ImageDocument::scale):
        (WebCore::ImageDocument::imageFitsInWindow):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::innerHeight):
        (WebCore::DOMWindow::innerWidth):
        (WebCore::DOMWindow::scrollX):
        (WebCore::DOMWindow::scrollY):
        (WebCore::DOMWindow::scrollTo):
        * page/DragController.cpp:
        (WebCore::elementUnderMouse):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::zoomFactor):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::currentScale):
        (WebCore::SVGSVGElement::setCurrentScale):
        Get zoom factor from Frame rather than FrameView.

        * page/Frame.cpp:
        (WebCore::parentPageZoomFactor): Moved back here from FrameView.
        (WebCore::parentTextZoomFactor): Ditto.
        (WebCore::Frame::Frame): Ditto.
        (WebCore::Frame::setPageZoomFactor): Ditto.
        (WebCore::Frame::setTextZoomFactor): Ditto.
        (WebCore::Frame::setPageAndTextZoomFactors): Ditto.

        * page/Frame.h: Moved functions and data for zooming back here
        from FrameView.

        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        * page/FrameView.h:
        Removed code from here.

2010-09-17  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Simon Fraser.

        Reduce minimum DOMTimer interval
        https://bugs.webkit.org/show_bug.cgi?id=45362

        Reduced the minimum allowed DOMTimer interval to 4ms. This has us matching Chrome,
        which hasn't had any problem with 4ms in the past 2 years, as well as increasing our
        performance on perf tests that have tight frequent loops such as canvas "animation"
        performance tests.

        No new tests added. Can't reliably instrument a test in javascript to verify that
        the minimum clamped interval time is in fact 4ms. 

        * WebCore.exp.in:
        * page/DOMTimer.cpp: Removed old comments.
        * page/DOMTimer.h: Removed old comments.
        * page/Settings.cpp: Exposted new method to set minimum DOMTimer interval.
        * page/Settings.h:

2010-09-17  Marc-Antoine Ruel  <maruel@chromium.org>

        Reviewed by Dimitri Glazkov.

        [Chromium] Split webcore_platform off webcore_remaining

        Further reduce webcore_remaining size by moving platform/ code in its
        own static libary.
        https://bugs.webkit.org/show_bug.cgi?id=45915

        * WebCore.gyp/WebCore.gyp:

2010-09-13  Matt Perry  <mpcomplete@chromium.org>

        Reviewed by Darin Fisher.

        Have V8DOMWindowShell ask the embedder whether to run a V8 extension
        in a particular script context.
        https://bugs.webkit.org/show_bug.cgi?id=45721

        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::createNewContext):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::registeredExtensionWithV8):
        (WebCore::V8Proxy::registerExtension):
        * bindings/v8/V8Proxy.h:
        * loader/EmptyClients.h:
        (WebCore::EmptyFrameLoaderClient::allowScriptExtension):
        * loader/FrameLoaderClient.h:

2010-09-17  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        REGRESSION (r66711): Plug-in replacement text is never shown
        https://bugs.webkit.org/show_bug.cgi?id=45997
        <rdar://problem/8446766>

        Don't return when the plug-in has replacement text.

        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::paintReplaced):

2010-09-17  Lucas De Marchi  <lucas.demarchi@profusion.mobi>

        Unreviewed, build fix. Add files missed in r67704.

        * CMakeLists.txt:

2010-09-17  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Chris Marrin.

        Remove scroll and clip layers for WKCACFLayerRenderer
        https://bugs.webkit.org/show_bug.cgi?id=45922

        WKCACFLayerRenderer no longer needs its own layers for managing scrolling
        and clipping, because RenderLayerCompositor provides this functionality.

        * platform/graphics/win/MediaPlayerPrivateFullscreenWindow.cpp:
        (WebCore::MediaPlayerPrivateFullscreenWindow::setRootChildLayer): Remove call to setScrollFrame().
        (WebCore::MediaPlayerPrivateFullscreenWindow::wndProc): Ditto.

        * platform/graphics/win/WKCACFLayerRenderer.cpp: Remove references to scroll and clip layers
        (WebCore::WKCACFLayerRenderer::WKCACFLayerRenderer):
        (WebCore::WKCACFLayerRenderer::setRootChildLayer):
        (WebCore::WKCACFLayerRenderer::destroyRenderer):
        (WebCore::WKCACFLayerRenderer::resize):
        * platform/graphics/win/WKCACFLayerRenderer.h:

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::layerTreeAsText): Dump the layers from the root platform layer.
        (WebCore::RenderLayerCompositor::requiresScrollLayer): On Windows,
        always say yes.

2010-09-17  Jian Li  <jianli@chromium.org>

        Reviewed by Dmitry Titov.

        createBlobURL with no argument causes crash.
        https://bugs.webkit.org/show_bug.cgi?id=45880

        The fix is to check if the passing blob argument is NULL or not.

        Test: fast/files/create-blob-url-crash.html

        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::createPublicBlobURL):
        * page/DOMWindow.idl: Add attribute to convert null string to undefined.

2010-09-17  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Add WebKitAccelerated2dCanvasEnabled flag to WebKit for Mac
        https://bugs.webkit.org/show_bug.cgi?id=45911

        * WebCore.exp.in:

2010-09-17  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Adam Barth.

        ASSERTION FAILED: m_loadEventDelayCount
        https://bugs.webkit.org/show_bug.cgi?id=45790

        * dom/AsyncScriptRunner.cpp: 
        (WebCore::AsyncScriptRunner::timerFired): Protect document before we go running scripts.

2010-09-17  Stephen White  <senorblanco@chromium.org>

        Reviewed by Kenneth Russell.

        [CHROMIUM] GPU-accelerated canvas should work in test_shell.
        https://bugs.webkit.org/show_bug.cgi?id=45968

        In order for the shaders in GPU-accelerated canvas to work in both the
        GraphicsContext3D / GLES2 path as well as chromium's test_shell (which
        passes them to the Mesa backend unmodified), the precision specifiers
        in the fragment shader have to be wrapped in #if GL_ES.

        Soon to be covered by many layout tests.

        * platform/graphics/gpu/SolidFillShader.cpp:
        (WebCore::SolidFillShader::create):
        * platform/graphics/gpu/TexShader.cpp:
        (WebCore::TexShader::create):

2010-09-17  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] [REGRESSION] Listbox rendering is incorrect
        https://bugs.webkit.org/show_bug.cgi?id=45941

        Only apply the shadow tiling optimization to a layer if the GraphicsContext
        has a shadow.

        This is covered by manual-tests/select-element-type-select.html.

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::drawBorderlessRectShadow): Before applying the tiled shadow optimization
        first check to see if the context has a shadow at all.

2010-09-17  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Oliver Hunt.

        [GTK] FontPlatformDataFreeType should use smart pointers to hold its members
        https://bugs.webkit.org/show_bug.cgi?id=45917

        Have FontPlatformDataFreeType use smart pointers to hold its reference-counted
        members. Also move the FcPattern specialization from OwnPtrCairo to PlatformRefPtrCairo
        as this type is reference-counted.

        No new tests as this should not introduce any functionality changes.

        * platform/graphics/cairo/FontCacheFreeType.cpp:
        (WebCore::FontCache::getFontDataForCharacters): Updated to reflect smart pointer changes.
        (WebCore::FontCache::createFontPlatformData): Ditto.
        * platform/graphics/cairo/FontPlatformDataFreeType.cpp:
        (WebCore::FontPlatformData::FontPlatformData): Ditto.
        (WebCore::FontPlatformData::operator=): Ditto.
        (WebCore::FontPlatformData::~FontPlatformData): Ditto.
        (WebCore::FontPlatformData::isFixedPitch): Ditto.
        (WebCore::FontPlatformData::operator==): Ditto.
        * platform/graphics/cairo/FontPlatformDataFreeType.h:
        (WebCore::FontPlatformData::FontPlatformData): Ditto.
        (WebCore::FontPlatformData::scaledFont): Ditto.
        (WebCore::FontPlatformData::hash): Ditto.
        (WebCore::FontPlatformData::isHashTableDeletedValue): Ditto.
        * platform/graphics/cairo/GlyphPageTreeNodeCairo.cpp:
        (WebCore::GlyphPage::fill): Ditto.
        * platform/graphics/cairo/OwnPtrCairo.cpp: Removed FcPattern specialization.
        * platform/graphics/cairo/OwnPtrCairo.h: Ditto.
        * platform/graphics/cairo/PlatformRefPtrCairo.cpp: Added FcPattern and cairo_scaled_font_t specializations.
        (WTF::refPlatformPtr): Ditto.
        (WTF::derefPlatformPtr): Ditto.
        * platform/graphics/cairo/PlatformRefPtrCairo.h: Ditto.
        * platform/graphics/cairo/SimpleFontDataCairo.cpp:
        (WebCore::SimpleFontData::platformInit): Updated to reflect smart pointer changes.
        (WebCore::SimpleFontData::containsCharacters): Ditto.
        (WebCore::SimpleFontData::platformWidthForGlyph): Ditto.
        * platform/graphics/gtk/FontGtk.cpp:
        (WebCore::setPangoAttributes): Ditto.

2010-09-14  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: show status message below call stack when debugger is paused on DOM breakpoint
        https://bugs.webkit.org/show_bug.cgi?id=45114

        * English.lproj/localizedStrings.js:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::performSearch):
        (WebCore::InspectorDOMAgent::shouldBreakOnNodeInsertion):
        (WebCore::InspectorDOMAgent::shouldBreakOnNodeRemoval):
        (WebCore::InspectorDOMAgent::shouldBreakOnAttributeModification):
        (WebCore::InspectorDOMAgent::descriptionForDOMEvent):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::didPause):
        * inspector/front-end/CallStackSidebarPane.js:
        (WebInspector.CallStackSidebarPane):
        (WebInspector.CallStackSidebarPane.prototype.updateStatus.formatters.s):
        (WebInspector.CallStackSidebarPane.prototype.updateStatus.append):
        (WebInspector.CallStackSidebarPane.prototype.updateStatus):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.linkifyNodeById):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.debuggerPaused):
        * inspector/front-end/inspector.css:
        (.pane > .body .placard + .info):
        * inspector/front-end/inspector.js:
        (WebInspector.pausedScript):
        (WebInspector.formatLocalized):

2010-09-17  Johnny Ding  <jnd@chromium.org>

        Reviewed by Adam Barth.

        Stop history reload navigation to bypass WebKit's popup blocker.
        Now history reload can only navigate the page in self frame, no matter
        what target frame is defined in <base> and no new window can be created.
        https://bugs.webkit.org/show_bug.cgi?id=45369

        Test: fast/events/popup-blocked-from-history-reload.html

        * loader/RedirectScheduler.cpp:
        (WebCore::ScheduledNavigation::ScheduledNavigation):
        (WebCore::ScheduledNavigation::wasUserGesture):
        Move the m_wasUserGesture to base class ScheduledNavigation. Then all
        asynchronous navigation situations can restore the correct gesture state
        during the real navigation process.
        (WebCore::ScheduledURLNavigation::ScheduledURLNavigation):
        (WebCore::ScheduledURLNavigation::fire):
        (WebCore::ScheduledURLNavigation::referrer):
        (WebCore::ScheduledHistoryNavigation::ScheduledHistoryNavigation):
        (WebCore::ScheduledHistoryNavigation::fire):
        (WebCore::ScheduledFormSubmission::ScheduledFormSubmission):
        (WebCore::ScheduledFormSubmission::fire):
        (WebCore::RedirectScheduler::scheduleHistoryNavigation):

2010-09-16  Vangelis Kokkevis  <vangelis@chromium.org>

        Reviewed by James Robinson.

        [chromium] Clip the update region of an ImageLayerChromium to actual size
        of the image bitmap to prevent uninitialized memory access when uploading
        the dirty region to the texture.
        https://bugs.webkit.org/show_bug.cgi?id=45937


        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerChromium::updateContents):

2010-09-17  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by David Hyatt.

        Remove extraneous RenderObject traversal.
        https://bugs.webkit.org/show_bug.cgi?id=45821

        This code always exits in the first iteration of the loop,
        because in the context of this call, node->renderer()->node() != 0
        is always true.

        No behavior change, covered by existing tests.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::canMouseDownStartSelect): Removed the loop.
        (WebCore::EventHandler::canMouseDragExtendSelect): Ditto.

2010-09-17  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: FrameLoader::loadedResourceFromMemoryCache reports
        resource as not cached to InspectorController.
        https://bugs.webkit.org/show_bug.cgi?id=45961

        Web Inspector: FrameLoader::loadedResourceFromMemoryCache reports
        resource as not cached to InspectorController.
        There is one path in control flow that leads to resources being
        reported as not cached. Patch to follow.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::markResourceAsCached):
        * inspector/InspectorController.h:
        * inspector/InspectorResource.cpp:
        (WebCore::InspectorResource::markAsCached):
        (WebCore::InspectorResource::updateResponse):
        * inspector/InspectorResource.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadedResourceFromMemoryCache):

2010-09-17  Alexander Pavlov  <apavlov@chromium.org>

        Unreviewed, build fix. Add files missed in the previous commit.

        * GNUmakefile.am:
        * css/CSSPropertySourceData.cpp: Added.
        (WebCore::SourceRange::SourceRange):
        (WebCore::SourceRange::operator=):
        (WebCore::CSSPropertySourceData::CSSPropertySourceData):
        (WebCore::CSSPropertySourceData::operator=):
        (WebCore::CSSPropertySourceData::toString):
        (WebCore::CSSPropertySourceData::hash):
        (WebCore::CSSPropertySourceData::init):
        * css/CSSPropertySourceData.h: Added.
        (WebCore::CSSPropertySourceData::~CSSPropertySourceData):
        (WebCore::CSSStyleSourceData::create):

2010-09-15  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Provide source-based properties for style declarations to CSSParser clients

        This change:
        - Enables InspectorCSSStore to extract CSS stylesheet text for all source-based stylesheets,
          even with the resource tracking turned off.
        - Adds to CSSParser a capability of source-related style declaration data extraction:
          * Start/end source offsets for a declaration, relative to the parent stylesheet start or the "style" attribute value.
          * Start/end source offsets for CSS properties, relative to the declaration start.
          * CSS property data: name, value, priority, WebCore parsability (i.e. if the property is understood by WebCore).
        - Provides the extracted data to the WebInspector frontend via InspectorDOMAgent::getStyleSourceData().
        https://bugs.webkit.org/show_bug.cgi?id=44949

        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSGrammar.y:
        * css/CSSMutableStyleDeclaration.h:
        (WebCore::CSSMutableStyleDeclaration::node):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::CSSParser):
        (WebCore::CSSParser::parseSheet):
        (WebCore::CSSParser::parseDeclaration):
        (WebCore::CSSParser::createStyleRule):
        (WebCore::CSSParser::markRuleBodyStart):
        (WebCore::CSSParser::markPropertyStart):
        (WebCore::CSSParser::markPropertyEnd):
        * css/CSSParser.h:
        (WebCore::CSSParser::resetPropertyMarks):
        * css/CSSPropertySourceData.cpp: Added.
        (WebCore::SourceRange::SourceRange):
        (WebCore::SourceRange::operator=):
        (WebCore::CSSPropertySourceData::CSSPropertySourceData):
        (WebCore::CSSPropertySourceData::operator=):
        (WebCore::CSSPropertySourceData::toString):
        (WebCore::CSSPropertySourceData::hash):
        (WebCore::CSSPropertySourceData::init):
        * css/CSSPropertySourceData.h: Added.
        (WebCore::CSSPropertySourceData::~CSSPropertySourceData):
        (WebCore::CSSStyleSourceData::create):
        * inspector/Inspector.idl:
        * inspector/InspectorCSSStore.cpp:
        (WebCore::InspectorCSSStore::reset):
        (WebCore::InspectorCSSStore::styleSheetText):
        (WebCore::InspectorCSSStore::resourceStyleSheetText):
        (WebCore::InspectorCSSStore::inlineStyleSheetText):
        (WebCore::InspectorCSSStore::getStyleSourceData):
        (WebCore::InspectorCSSStore::extractRanges):
        (WebCore::InspectorCSSStore::getStyleAttributeRanges):
        (WebCore::InspectorCSSStore::getParentStyleSheet):
        (WebCore::InspectorCSSStore::inlineStyleElement):
        * inspector/InspectorCSSStore.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::resourceContentForURL):
        * inspector/InspectorController.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::getStyleSourceData):
        (WebCore::InspectorDOMAgent::buildObjectForStyle):
        * inspector/InspectorDOMAgent.h:

2010-09-17  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Show node description in inspector highlight
        https://bugs.webkit.org/show_bug.cgi?id=20930

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::drawNodeHighlight):
        (WebCore::InspectorController::drawElementTitle):
        * inspector/InspectorController.h:

2010-09-16  takano takumi  <takano1@asia.apple.com>

        Reviewed by Kent Tamura.

        https://bugs.webkit.org/show_bug.cgi?id=45020
        Support "block-flow" and "writing-mode": interpret properties into RenderStyle

        Fixed a regression in SVG test introduced by my previous change.

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::operator EWritingMode):
        * css/SVGCSSParser.cpp:
        (WebCore::CSSParser::parseSVGValue):

2010-09-16  Kenneth Russell  <kbr@google.com>

        Reviewed by James Robinson.

        Add entry points to GraphicsContext3D needed for Chromium compositor port
        https://bugs.webkit.org/show_bug.cgi?id=45939

        Added entry points for two Chromium-specific extensions, and added
        a flag to the GraphicsContext3D constructor, currently unsupported
        by all ports (including Chromium), indicating whether the context
        should render directly to the passed HostWindow or off-screen per
        the current semantics. The switch to use GraphicsContext3D in
        Chromium's compositor will follow in a subsequent patch.

        No new tests; functionality is unchanged. Built and tested
        Chromium and WebKit on Mac OS X.

        * platform/graphics/GraphicsContext3D.cpp:
        (WebCore::GraphicsContext3D::supportsMapSubCHROMIUM):
        (WebCore::GraphicsContext3D::mapBufferSubDataCHROMIUM):
        (WebCore::GraphicsContext3D::unmapBufferSubDataCHROMIUM):
        (WebCore::GraphicsContext3D::mapTexSubImage2DCHROMIUM):
        (WebCore::GraphicsContext3D::unmapTexSubImage2DCHROMIUM):
        (WebCore::GraphicsContext3D::supportsCopyTextureToParentTextureCHROMIUM):
        (WebCore::GraphicsContext3D::copyTextureToParentTextureCHROMIUM):
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/mac/GraphicsContext3DMac.mm:
        (WebCore::GraphicsContext3D::create):
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3D::create):
        (WebCore::GraphicsContext3D::GraphicsContext3D):

2010-09-16  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by James Robinson.

        In layerTreeAsText output, avoid printing properties which have their default values
        https://bugs.webkit.org/show_bug.cgi?id=45931

        Don't dump properties that have their default values to simplify output.

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::dumpProperties):

2010-09-16  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Ariya Hidayat.

        [Qt] GraphicsContext: Remove unused variable

        GraphicsContextPlatformPrivate::redirect wasn't used for anything.

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContextPlatformPrivate::p):
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):

2010-09-16  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Ariya Hidayat.

        [Qt] Remove unnecessary QPainter::clipPath() call in TransparencyLayer()
        https://bugs.webkit.org/show_bug.cgi?id=45923

        QPainter::clipPath() can be very expensive, so use QPainter::hasClipping()
        instead of QPainter::clipPath().isEmpty().

        * platform/graphics/qt/TransparencyLayer.h:
        (WebCore::TransparencyLayer::TransparencyLayer):

2010-09-16  David Hyatt  <hyatt@apple.com>

        Reviewed by Eric Seidel.

        Fix for regression from my previous check-in.  Make sure not to move the LayoutRepainter line
        below the setHeight(0) call.  This meant it snagged the wrong rectangle and we ended up repainting
        the world.

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

2010-09-16  takano takumi  <takano1@asia.apple.com>

        Reviewed by Dave Hyatt.

        https://bugs.webkit.org/show_bug.cgi?id=45020
        Support "block-flow" and "writing-mode": interpret properties into RenderStyle
 
        Added code that interprets "block-flow" property and "writing-mode" property settings
        into a RenderStyle object.

        Test: fast/text/international/block-flow-parser-test.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator EBlockFlowDirection):
        * css/CSSPropertyNames.in:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * css/CSSValueKeywords.in:
        * css/SVGCSSValueKeywords.in:
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::diff):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::setBitDefaults):
        (WebCore::InheritedFlags::blockFlow):
        (WebCore::InheritedFlags::setBlockFlow):
        (WebCore::InheritedFlags::initialBlockFlow):
        * rendering/style/RenderStyleConstants.h:

2010-09-16  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Implement dissolveDragImageToFraction
        https://bugs.webkit.org/show_bug.cgi?id=45826

        Convert the drag image from a GdkPixbuf to a Cairo surface. Not only
        might this allow code to be shared between Cairo ports it prevents a
        full data copy when the image is not resized and makes the implementation
        of dissolveDragImageToFraction more straight-forward.

        This feature is covered by manual-tests/drag-image.html.

        * page/gtk/DragControllerGtk.cpp:
        (WebCore::DragController::maxDragImageSize): Make the maximum size of the drag
        image a little smaller.
        * platform/DragImage.h: Changed the drag image type to be a cairo_surface_t*.
        * platform/gtk/DragImageGtk.cpp:
        (WebCore::dragImageSize): Reimplemented to reflect new drag image type.
        (WebCore::deleteDragImage): Ditto.
        (WebCore::scaleDragImage): Ditto.
        (WebCore::dissolveDragImageToFraction): Filled the stub of this function.
        (WebCore::createDragImageFromImage): Reimplemented to reflect new drag image type.
        * platform/gtk/GtkVersioning.h: Added definition for gtk_widget_get_realized for older GTK+s.

2010-09-15  David Hyatt  <hyatt@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=38402, paginate columns at layout time rather than at paint time.

        This patch adds support for column breaking at layout time rather than at paint time.  New variables have been
        added to LayoutState and to ColumnInfo to track column information while laying out.
        
        The basic idea behind this patch is to retain the columns' paint-time hackery of transforming one long vertical strip
        into multiple columns.  Now, however, layout is aware of the columns and will move objects up and down vertically in order
        to ensure they don't intersect a break.
        
        Many new tests added in fast/multicol and new results added for existing fast/multicol tests.

        * rendering/ColumnInfo.h:
        (WebCore::ColumnInfo::ColumnInfo):
        (WebCore::ColumnInfo::columnCount):
        (WebCore::ColumnInfo::columnHeight):
        (WebCore::ColumnInfo::setColumnCountAndHeight):
        (WebCore::ColumnInfo::setColumnHeight):
        (WebCore::ColumnInfo::updateMinimumColumnHeight):
        (WebCore::ColumnInfo::minimumColumnHeight):
        (WebCore::ColumnInfo::forcedBreaks):
        (WebCore::ColumnInfo::forcedBreakOffset):
        (WebCore::ColumnInfo::maximumDistanceBetweenForcedBreaks):
        (WebCore::ColumnInfo::clearForcedBreaks):
        (WebCore::ColumnInfo::addForcedBreak):
        * rendering/LayoutState.cpp:
        (WebCore::LayoutState::LayoutState):
        (WebCore::LayoutState::clearPaginationInformation):
        (WebCore::LayoutState::pageY):
        (WebCore::LayoutState::addForcedColumnBreak):
        * rendering/LayoutState.h:
        (WebCore::LayoutState::LayoutState):
        (WebCore::LayoutState::paginatingColumns):
        (WebCore::LayoutState::paginated):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::RenderBlock):
        (WebCore::RenderBlock::~RenderBlock):
        (WebCore::RenderBlock::layoutBlock):
        (WebCore::RenderBlock::collapseMargins):
        (WebCore::RenderBlock::estimateVerticalPosition):
        (WebCore::RenderBlock::layoutBlockChild):
        (WebCore::RenderBlock::layoutPositionedObjects):
        (WebCore::RenderBlock::paintColumnRules):
        (WebCore::RenderBlock::paintColumnContents):
        (WebCore::RenderBlock::paintChildren):
        (WebCore::RenderBlock::insertFloatingObject):
        (WebCore::RenderBlock::removeFloatingObjects):
        (WebCore::RenderBlock::positionNewFloats):
        (WebCore::RenderBlock::positionNewFloatOnLine):
        (WebCore::RenderBlock::lowestPosition):
        (WebCore::RenderBlock::rightmostPosition):
        (WebCore::RenderBlock::leftmostPosition):
        (WebCore::RenderBlock::markAllDescendantsWithFloatsForLayout):
        (WebCore::RenderBlock::markDescendantBlocksAndLinesForLayout):
        (WebCore::RenderBlock::hitTestColumns):
        (WebCore::RenderBlock::setDesiredColumnCountAndWidth):
        (WebCore::RenderBlock::columnCount):
        (WebCore::RenderBlock::columnRectAt):
        (WebCore::RenderBlock::layoutColumns):
        (WebCore::RenderBlock::adjustPointToColumnContents):
        (WebCore::RenderBlock::adjustRectForColumns):
        (WebCore::RenderBlock::adjustForColumns):
        (WebCore::RenderBlock::setMaxTopMargins):
        (WebCore::RenderBlock::setMaxBottomMargins):
        (WebCore::RenderBlock::setPaginationStrut):
        (WebCore::RenderBlock::setPageY):
        (WebCore::RenderBlock::nextPageTop):
        (WebCore::inNormalFlow):
        (WebCore::RenderBlock::applyBeforeBreak):
        (WebCore::RenderBlock::applyAfterBreak):
        (WebCore::RenderBlock::adjustForUnsplittableChild):
        (WebCore::RenderBlock::adjustLinePositionForPagination):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::paginationStrut):
        (WebCore::RenderBlock::pageY):
        (WebCore::RenderBlock::maxTopPosMargin):
        (WebCore::RenderBlock::maxTopNegMargin):
        (WebCore::RenderBlock::maxBottomPosMargin):
        (WebCore::RenderBlock::maxBottomNegMargin):
        (WebCore::RenderBlock::initMaxMarginValues):
        (WebCore::RenderBlock::FloatingObject::FloatingObject):
        (WebCore::RenderBlock::FloatingObject::type):
        (WebCore::RenderBlock::RenderBlockRareData::RenderBlockRareData):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutInlineChildren):
        (WebCore::RenderBlock::determineStartPosition):
        (WebCore::RenderBlock::skipLeadingWhitespace):
        (WebCore::RenderBlock::findNextLineBreak):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::mapLocalToContainer):
        (WebCore::RenderBox::computeRectForRepaint):
        (WebCore::RenderBox::markDescendantBlocksAndLinesForLayout):
        * rendering/RenderBox.h:
        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutBlock):
        (WebCore::RenderFlexibleBox::layoutHorizontalBox):
        (WebCore::RenderFlexibleBox::layoutVerticalBox):
        * rendering/RenderFlexibleBox.h:
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::computeRectForRepaint):
        (WebCore::RenderInline::mapLocalToContainer):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::updatePagination):
        (WebCore::RenderLayer::paintChildLayerIntoColumns):
        (WebCore::RenderLayer::hitTestChildLayerColumns):
        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::paint):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::RenderTable):
        (WebCore::RenderTable::layout):
        * rendering/RenderTable.h:
        * rendering/RenderTableRow.cpp:
        (WebCore::RenderTableRow::layout):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::layoutRows):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::RenderView):
        (WebCore::RenderView::pushLayoutState):
        * rendering/RenderView.h:
        (WebCore::RenderView::setTruncatedAt):
        (WebCore::RenderView::pushLayoutState):
        (WebCore::RenderView::popLayoutState):
        (WebCore::LayoutStateMaintainer::LayoutStateMaintainer):
        (WebCore::LayoutStateMaintainer::push):
        * rendering/RootInlineBox.h:
        (WebCore::RootInlineBox::RootInlineBox):
        (WebCore::RootInlineBox::paginationStrut):
        (WebCore::RootInlineBox::setPaginationStrut):

2010-09-16  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Dimitri Glazkov.

        Fix debug crash in HTMLFrameOwnerElement caused by content frame being used after destruction.
        https://bugs.webkit.org/show_bug.cgi?id=45737

        Test: fast/frames/frame-limit.html

        * html/HTMLFrameOwnerElement.cpp:
        (WebCore::HTMLFrameOwnerElement::willRemove):

2010-09-16  Thomas Zander <t.zander@nokia.com>

        Reviewed by Andreas Kling.

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

        [Qt] Fixed incorrect Symbian scoping.

        The missing install functionality is only true for mmp based systems.

        * WebCore.pro: limit functionality to mmp systems.

2010-09-16  Anders Carlsson  <andersca@apple.com>

        Fix clang build.

        * page/animation/AnimationBase.h:
        Fix struct/class mismatch.

2010-09-16  Darin Adler  <darin@apple.com>

        Reviewed by Andreas Kling.

        Reduce use of HTMLInputElement::inputType so we can remove it later
        https://bugs.webkit.org/show_bug.cgi?id=45903

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isFileUploadButton): Use isFileUpload.
        (WebCore::AccessibilityRenderObject::isInputImage): Use isImageButton.
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole): Use
        isCheckbox and isRadioButton.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::adjustRenderStyle): Use isImageButton.

        * editing/Editor.cpp:
        (WebCore::Editor::setBaseWritingDirection): Use isTextField.

        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply): Use isPasswordField.

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::isInPasswordField): Use isPasswordField.

        * html/HTMLInputElement.h: Added isFileUpload, isImageButton, and isSubmitButton.

        * page/Chrome.cpp:
        (WebCore::Chrome::setToolTip): Use isSubmitButton and isFileUpload.

        * page/DragController.cpp:
        (WebCore::asFileInput): Use isFileUpload.

        * page/EventHandler.cpp:
        (WebCore::isSubmitImage): Use isImageButton.

        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::updateFromElement): Use isFileUpload.

2010-09-16  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: quick fix for crash in InspectorController::loadBreakpoints caused by empty main resource
        https://bugs.webkit.org/show_bug.cgi?id=45901

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::breakpointsSettingKey):

2010-09-16  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Prevent responseReceivedTime from being > endTime in case mixture of WebCore and Network stack info is used.
        https://bugs.webkit.org/show_bug.cgi?id=45892

        * inspector/InspectorResource.cpp:
        (WebCore::InspectorResource::endTiming):

2010-09-16  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: move resourceTracking flag under control of BackendSettings.

        Four Inspector API methods about resourceTracking flag were removed.
        Actual state of the flag is transfered as the response of setResourceTracking request.
        Initial state of the flag on the frontend side is obtained from settings.backend.

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

        * inspector/Inspector.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::getBackendSettings):
        (WebCore::InspectorController::populateScriptObjects):
        (WebCore::InspectorController::setResourceTracking):
        * inspector/InspectorController.h:
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype._toggleResourceTracking):
        * inspector/front-end/Settings.js:
        (WebInspector.Settings.initialize.populateBackendSettings):
        (WebInspector.Settings.initialize):
        * inspector/front-end/inspector.js:

2010-09-16  Jian Li  <jianli@chromium.org>

        Reviewed by David Levin.

        BlobData should be copied for it to be used cross-thread in ThreadableBlobRegistry.
        https://bugs.webkit.org/show_bug.cgi?id=45909

        * fileapi/ThreadableBlobRegistry.cpp:
        (WebCore::BlobRegistryContext::BlobRegistryContext):

2010-09-16  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by Simon Fraser.

        [chromium] Fix incorrect drag node/selection painting.
        https://bugs.webkit.org/show_bug.cgi?id=45573

        Drag selections were being incorrectly clipped when dragging a selection
        near the bottom of a page that was taller than the viewport. To fix
        this, we use paintContents() instead of paint().

        * page/chromium/FrameChromium.cpp:
        (WebCore::Frame::nodeImage):
        (WebCore::Frame::dragImageForSelection):

2010-09-16  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by Tony Chang.

        Fix incorrect usage of dissolveDragImageToFraction().
        https://bugs.webkit.org/show_bug.cgi?id=45835

        createDragImageForSelection() was ignoring the return value of
        dissolveDragImageToFraction(). This didn't happen to crash on most
        platforms, since most implementations simply modified the image that was
        passed in. However, Chromium Mac's implementation actually creates a new
        image and returns that instead. This caused us to crash when copying the
        image from the renderer to the browser process, since the memory had
        already been freed.

        * manual-tests/selection-drag-crash.html: Added.
        * platform/DragImage.cpp:
        (WebCore::createDragImageForSelection):

2010-09-16  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r67628.
        http://trac.webkit.org/changeset/67628
        https://bugs.webkit.org/show_bug.cgi?id=45904

        broke the build (Requested by eric_carlson on #webkit).

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected):
        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::populate):
        (WebCore::ContextMenu::checkOrEnableIfNeeded):
        * platform/ContextMenuItem.h:
        * platform/LocalizationStrategy.h:
        * platform/LocalizedStrings.cpp:
        * platform/LocalizedStrings.h:
        * platform/android/LocalizedStringsAndroid.cpp:
        * platform/brew/LocalizedStringsBrew.cpp:
        * platform/efl/LocalizedStringsEfl.cpp:
        * platform/gtk/ContextMenuItemGtk.cpp:
        (WebCore::gtkStockIDFromContextMenuAction):
        * platform/gtk/LocalizedStringsGtk.cpp:
        * platform/haiku/LocalizedStringsHaiku.cpp:
        * platform/wx/LocalizedStringsWx.cpp:
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::absoluteMediaURL):
        * rendering/HitTestResult.h:

2010-09-16  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Simon Fraser.

        CSS: Fix crash in getTimingFunctionValue()
        https://bugs.webkit.org/show_bug.cgi?id=45896

        Use a RefPtr to avoid deleting the TimingFunction prematurely.

        This is covered by existing tests, e.g transitions/inherit-other-props.html
        but will only actually crash on picky platforms (or in valgrind.)

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

2010-09-16  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: prevent resource timing popover from having scrollers.
        https://bugs.webkit.org/show_bug.cgi?id=45883

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

2010-09-15  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Eric Carlson.

        [GTK] enhanced context menu for media elements
        https://bugs.webkit.org/show_bug.cgi?id=45021

        New items in the media Element context menu:
        - play/pause
        - mute/unmute
        - controls display control
        - switch to fullscreen (for video only)
        - loop playback control
        - copy media url to clipboard
        - open in new window

        Test: media/context-menu-actions.html

        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected):
        * platform/ContextMenu.cpp:
        (WebCore::ContextMenu::populate):
        (WebCore::ContextMenu::checkOrEnableIfNeeded):
        * platform/ContextMenuItem.h:
        * platform/LocalizationStrategy.h:
        * platform/LocalizedStrings.cpp:
        (WebCore::contextMenuItemTagOpenMediaInNewWindow):
        (WebCore::contextMenuItemTagCopyMediaLinkToClipboard):
        (WebCore::contextMenuItemTagToggleMediaControls):
        (WebCore::contextMenuItemTagToggleMediaLoop):
        (WebCore::contextMenuItemTagEnterVideoFullscreen):
        (WebCore::contextMenuItemTagMediaPlay):
        (WebCore::contextMenuItemTagMediaPause):
        (WebCore::contextMenuItemTagMediaMute):
        (WebCore::contextMenuItemTagMediaUnMute):
        * platform/LocalizedStrings.h:
        * platform/android/LocalizedStringsAndroid.cpp:
        (WebCore::contextMenuItemTagOpenMediaInNewWindow):
        (WebCore::contextMenuItemTagCopyMediaLinkToClipboard):
        (WebCore::contextMenuItemTagToggleMediaControls):
        (WebCore::contextMenuItemTagToggleMediaLoop):
        (WebCore::contextMenuItemTagEnterVideoFullscreen):
        (WebCore::contextMenuItemTagMediaPlay):
        (WebCore::contextMenuItemTagMediaPause):
        (WebCore::contextMenuItemTagMediaMute):
        (WebCore::contextMenuItemTagMediaUnMute):
        * platform/brew/LocalizedStringsBrew.cpp:
        (WebCore::contextMenuItemTagOpenMediaInNewWindow):
        (WebCore::contextMenuItemTagCopyMediaLinkToClipboard):
        (WebCore::contextMenuItemTagToggleMediaControls):
        (WebCore::contextMenuItemTagToggleMediaLoop):
        (WebCore::contextMenuItemTagEnterVideoFullscreen):
        (WebCore::contextMenuItemTagMediaPlay):
        (WebCore::contextMenuItemTagMediaPause):
        (WebCore::contextMenuItemTagMediaMute):
        (WebCore::contextMenuItemTagMediaUnMute):
        * platform/efl/LocalizedStringsEfl.cpp:
        (WebCore::contextMenuItemTagOpenMediaInNewWindow):
        (WebCore::contextMenuItemTagCopyMediaLinkToClipboard):
        (WebCore::contextMenuItemTagToggleMediaControls):
        (WebCore::contextMenuItemTagToggleMediaLoop):
        (WebCore::contextMenuItemTagEnterVideoFullscreen):
        (WebCore::contextMenuItemTagMediaPlay):
        (WebCore::contextMenuItemTagMediaPause):
        (WebCore::contextMenuItemTagMediaMute):
        (WebCore::contextMenuItemTagMediaUnMute):
        * platform/gtk/ContextMenuItemGtk.cpp:
        (WebCore::gtkStockIDFromContextMenuAction):
        * platform/gtk/LocalizedStringsGtk.cpp:
        (WebCore::contextMenuItemTagOpenMediaInNewWindow):
        (WebCore::contextMenuItemTagCopyMediaLinkToClipboard):
        (WebCore::contextMenuItemTagToggleMediaControls):
        (WebCore::contextMenuItemTagToggleMediaLoop):
        (WebCore::contextMenuItemTagEnterVideoFullscreen):
        (WebCore::contextMenuItemTagMediaPlay):
        (WebCore::contextMenuItemTagMediaPause):
        (WebCore::contextMenuItemTagMediaMute):
        (WebCore::contextMenuItemTagMediaUnMute):
        * platform/haiku/LocalizedStringsHaiku.cpp:
        (WebCore::contextMenuItemTagOpenMediaInNewWindow):
        (WebCore::contextMenuItemTagCopyMediaLinkToClipboard):
        (WebCore::contextMenuItemTagToggleMediaControls):
        (WebCore::contextMenuItemTagToggleMediaLoop):
        (WebCore::contextMenuItemTagEnterVideoFullscreen):
        (WebCore::contextMenuItemTagMediaPlay):
        (WebCore::contextMenuItemTagMediaPause):
        (WebCore::contextMenuItemTagMediaMute):
        (WebCore::contextMenuItemTagMediaUnMute):
        * platform/wx/LocalizedStringsWx.cpp:
        (WebCore::contextMenuItemTagOpenMediaInNewWindow):
        (WebCore::contextMenuItemTagCopyMediaLinkToClipboard):
        (WebCore::contextMenuItemTagToggleMediaControls):
        (WebCore::contextMenuItemTagToggleMediaLoop):
        (WebCore::contextMenuItemTagEnterVideoFullscreen):
        (WebCore::contextMenuItemTagMediaPlay):
        (WebCore::contextMenuItemTagMediaPause):
        (WebCore::contextMenuItemTagMediaMute):
        (WebCore::contextMenuItemTagMediaUnMute):
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::absoluteMediaURL):
        (WebCore::HitTestResult::mediaSupportsFullscreen):
        (WebCore::HitTestResult::mediaElement):
        (WebCore::HitTestResult::toggleMediaControlsDisplay):
        (WebCore::HitTestResult::toggleMediaLoopPlayback):
        (WebCore::HitTestResult::enterFullscreenForVideo):
        (WebCore::HitTestResult::mediaControlsEnabled):
        (WebCore::HitTestResult::mediaLoopEnabled):
        (WebCore::HitTestResult::mediaPlaying):
        (WebCore::HitTestResult::toggleMediaPlayState):
        (WebCore::HitTestResult::mediaHasAudio):
        (WebCore::HitTestResult::mediaMuted):
        (WebCore::HitTestResult::toggleMediaMuteState):
        * rendering/HitTestResult.h:

2010-09-16  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Adam Barth.

        Crash in WebCore::FrameLoader::shouldInterruptLoadForXFrameOptions
        https://bugs.webkit.org/show_bug.cgi?id=45833

        Test: fast/parser/x-frame-options-detached-document-crash.html

        * dom/Document.cpp:
        (WebCore::Document::processHttpEquiv): Other branches in this method already test for a null frame. So it seems to make sense to test that here as well.

2010-09-16  Vangelis Kokkevis  <vangelis@chromium.org>

        Reviewed by Darin Fisher.

        [chromium] ImageLayerChromium needs to keep a ref to the Image it uses
        so that it never tries to access an already destroyed Image.
        https://bugs.webkit.org/show_bug.cgi?id=45869

        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::setContentsToImage):
        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerChromium::setContents):
        (WebCore::ImageLayerChromium::updateContents):
        * platform/graphics/chromium/ImageLayerChromium.h:

2010-09-16  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Adam Roben.

        [WINCE] Add platform-specific Image methods
        https://bugs.webkit.org/show_bug.cgi?id=28272

        * platform/graphics/wince/ImageWinCE.cpp: Added.
        (WebCore::RGBA32Buffer::asNewNativeImage):
        (WebCore::FrameData::clear):
        (WebCore::BitmapImage::getHBITMAPOfSize):
        (WebCore::BitmapImage::drawFrameMatchingSourceSize):
        (WebCore::BitmapImage::draw):
        (WebCore::Image::drawPattern):
        (WebCore::BitmapImage::drawPattern):
        (WebCore::BitmapImage::checkForSolidColor):

2010-09-16  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [REGRESSION] Scripts disappear from scripts panel after navigation
        https://bugs.webkit.org/show_bug.cgi?id=45890

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::populateScriptObjects):
        (WebCore::InspectorController::restoreDebugger):
        (WebCore::InspectorController::restoreProfiler):
        * inspector/InspectorController.h:

2010-09-16  Satish Sampath  <satish@chromium.org>

        Unreviewed, fixing a build break with VS 2008.

        Fix build break, add the namespace in a friend declaration to get MSVC recognize it properly.
        https://bugs.webkit.org/show_bug.cgi?id=45893

        * fileapi/FileWriter.h:

2010-09-15  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Martin Robinson.

        [GStreamer] XOverlay API changes break the build
        https://bugs.webkit.org/show_bug.cgi?id=45810

        Cope with the GStreamer XOverlay API change for the upcoming
        0.10.31 version.
        No new tests, build fix only.

        * platform/graphics/gstreamer/GStreamerGWorld.cpp:
        (WebCore::GStreamerGWorld::setWindowOverlay):

2010-09-16  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] V8 port: Fix debug build

        Add missing inclusion of <wtf/text/CString.h> where necessary for debug builds.

        * history/PageCache.cpp:
        * html/HTMLElement.cpp:
        * html/HTMLMediaElement.cpp:
        * loader/DocumentLoader.cpp:
        * loader/icon/IconDatabase.cpp:
        * loader/icon/IconLoader.cpp:
        * storage/AbstractDatabase.cpp:
        * storage/Database.cpp:
        * storage/DatabaseSync.cpp:
        * storage/DatabaseTracker.cpp:

2010-09-16  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=45852
        Range::selectNode and selectNodeContents misbehave when argument is in another document

        Test: fast/dom/Range/select-node-different-document.html

        There is nothing in DOM Traversal spec that says this shouldn't work, and it does work in
        Firefox.

        * dom/Range.cpp:
        (WebCore::Range::setDocument):
        (WebCore::Range::selectNode):
        (WebCore::Range::selectNodeContents):
        * dom/Range.h:

2010-09-16  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: [Resources panel] [HAR] Need a way to save timing data.
        Added support to export HAR to file from Resources panel (conditional on Preferences)
        Added support for HARLog (a higher-level aggregate than HAREntry)
        https://bugs.webkit.org/show_bug.cgi?id=45663

        * English.lproj/localizedStrings.js:
        * inspector/front-end/HAREntry.js:
        (WebInspector.HAREntry.prototype.build):
        (WebInspector.HAREntry.prototype._buildTimings):
        (WebInspector.HAREntry._toMilliseconds):
        (WebInspector.HARLog):
        (WebInspector.HARLog.prototype.build):
        (WebInspector.HARLog.prototype._buildPages):
        (WebInspector.HARLog.prototype._buildMainResourceTimings):
        (WebInspector.HARLog.prototype._convertResource):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel):
        (WebInspector.ResourcesPanel.prototype.hide):
        (WebInspector.ResourcesPanel.prototype._contextMenu):
        (WebInspector.ResourcesPanel.prototype._exportAll):
        (WebInspector.ResourcesPanel.prototype._exportResource):
        * inspector/front-end/Settings.js:
        * inspector/front-end/utilities.js:
        ():

2010-09-16  Eric Uhrhane  <ericu@chromium.org>

        Reviewed by Jian Li.

        Unify FILE_SYSTEM and FILE_WRITER enables under the name FILE_SYSTEM.
        https://bugs.webkit.org/show_bug.cgi?id=45798

        * CMakeLists.txt:
        * Configurations/FeatureDefines.xcconfig:
        * GNUmakefile.am:
        * WebCore.pro:
        * dom/EventTarget.cpp:
        * dom/EventTarget.h:
        * dom/ExceptionCode.h:
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::~ScriptExecutionContext):
        * dom/ScriptExecutionContext.h:
        * fileapi/AsyncFileWriter.h:
        * fileapi/FileEntry.cpp:
        * fileapi/FileEntry.h:
        * fileapi/FileEntry.idl:
        * fileapi/FileError.h:
        * fileapi/FileError.idl:
        * fileapi/FileException.h:
        * fileapi/FileException.idl:
        * fileapi/FileStreamProxy.cpp:
        * fileapi/FileStreamProxy.h:
        * fileapi/FileThread.cpp:
        * fileapi/FileThread.h:
        * fileapi/FileWriter.cpp:
        * fileapi/FileWriter.h:
        * fileapi/FileWriter.idl:
        * fileapi/FileWriterCallback.h:
        * fileapi/FileWriterCallback.idl:
        * fileapi/FileWriterClient.h:
        * page/DOMWindow.idl:
        * platform/AsyncFileStream.h:
        * platform/FileStream.cpp:
        * platform/FileStream.h:
        * platform/FileStreamClient.h:

2010-09-16  Marc-Antoine Ruel  <maruel@chromium.org>

        Reviewed by Dimitri Glazkov.

        Convert WebCore.gyp to use regexp to excludes files instead of listing them in sources!.

        This is necessary because sources! is processed before sources/. This makes
        applying broader pattern in sources/ more difficult since it overrides the files
        listed in sources!. Having all them in sources/ permits controlling the ordering
        of the regexp, thus the final list of included files.

        Fix Harfbuzz and VDMX source files includes in WebCore.gypi and WebCore.gyp

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

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:

2010-09-16  Nat Duca  <nduca@chromium.org>

        Reviewed by Darin Fisher.

        [chromium] Make compositor obey finish flag
        https://bugs.webkit.org/show_bug.cgi?id=45552

        The compositor should obey the finish flag on doComposite. This
        flag causes the compositor to finish rendering before returning,
        which is needed when resizing the window to avoid flashes of green.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::finish):
        * platform/graphics/chromium/LayerRendererChromium.h:

2010-09-16  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Xan Lopez.

        GTK+ 3.x. updates, gtk_widget_size_request is deprecated and
        "activate-slider" style property for scrollbars is gone.

        * platform/gtk/PopupMenuGtk.cpp:
        (WebCore::PopupMenuGtk::show):
        * platform/gtk/gtk2drawing.c:
        (moz_gtk_scrollbar_thumb_paint):
        (moz_gtk_combo_box_paint):

2010-09-16  Diego Gonzalez  <diegohcg@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Remove FrameLoaderClientQt::webFrame() to use NetworkingContext to get the WebFrame to avoid layering violations
        https://bugs.webkit.org/show_bug.cgi?id=42293

        * platform/graphics/qt/MediaPlayerPrivateQt.cpp:
        (WebCore::MediaPlayerPrivate::commitLoad):

2010-09-16  Ryuan Choi  <ryuan.choi@samsung.com>

        Unreviewed build fix for EFL

        [EFL] REGRESSION(67567) FontCacheCairo was removed
        https://bugs.webkit.org/show_bug.cgi?id=45858

        * CMakeListsEfl.txt:

2010-09-16  Yong Li  <yoli@rim.com>

        Reviewed by George Staikos.

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

        Add platform-independent JPEG/PNG image encoders that
        work with big endian RGBA source data.

        There's no layout test because this patch does't make
        any port start using the encoders.

        * platform/image-encoders/JPEGImageEncoder.cpp: Added.
        * platform/image-encoders/JPEGImageEncoder.h: Added.
        * platform/image-encoders/PNGImageEncoder.cpp: Added.
        * platform/image-encoders/PNGImageEncoder.h: Added.

2010-09-15  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Steve Block.

        Allow the embedder to specify the base path for IndexedDB.
        https://bugs.webkit.org/show_bug.cgi?id=45815

        Existing tests provide coverage. Use the indexedDBPath parameter that's
        already on the group settings object. Pass this parameter into the backend
        which will use it rather than a hard coded tmp directory location. If
        nothing is specified, assume it should be an in-memory temporary database.
        (This is useful for bringup and Chromium's incognito mode.)

        * storage/IDBFactory.cpp:
        (WebCore::IDBFactory::open):
        * storage/IDBFactoryBackendImpl.cpp:
        (WebCore::openSQLiteDatabase):
        (WebCore::createTables):
        (WebCore::IDBFactoryBackendImpl::open):
        * storage/IDBFactoryBackendImpl.h:
        * storage/IDBFactoryBackendInterface.h:

2010-09-16  Yong Li  <yoli@rim.com>

        Reviewed by George Staikos.

        Fix the bug that GIF image down sampling can miss some lines.
        https://bugs.webkit.org/show_bug.cgi?id=45322

        Test: fast/images/gif-large-checkerboard.html

        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::haveDecodedRow):

2010-09-16  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Andreas Kling.

        [GStreamer] un-needed header includes in MediaPlayerPrivate
        https://bugs.webkit.org/show_bug.cgi?id=45877

        Include only the headers we need.
        No new tests, #includes cleanup only.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:

2010-09-16  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: console.group(object) does not allow object to be expanded.
        https://bugs.webkit.org/show_bug.cgi?id=45806

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleGroup.prototype.addMessage):
        * inspector/front-end/treeoutline.js:
        (TreeElement.treeElementToggled):

2010-09-08  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Steve Block.

        Complete index support for IndexedDB
        https://bugs.webkit.org/show_bug.cgi?id=45386

        Add the rest of the index related API for IndexedDB.  This
        includes cursor suport.  A bunch of code was also refactored
        since it is shared between indexes and objectStores.

        Tests: storage/indexeddb/index-basics.html
               storage/indexeddb/index-cursor.html
               + additions to others.

        * storage/IDBAny.cpp:
        (WebCore::IDBAny::set):
        * storage/IDBCursor.cpp:
        (WebCore::IDBCursor::value):
        * storage/IDBCursorBackendImpl.cpp:
        (WebCore::IDBCursorBackendImpl::IDBCursorBackendImpl):
        (WebCore::IDBCursorBackendImpl::value):
        (WebCore::IDBCursorBackendImpl::update):
        (WebCore::IDBCursorBackendImpl::continueFunction):
        (WebCore::IDBCursorBackendImpl::remove):
        (WebCore::IDBCursorBackendImpl::loadCurrentRow):
        (WebCore::IDBCursorBackendImpl::database):
        * storage/IDBCursorBackendImpl.h:
        (WebCore::IDBCursorBackendImpl::create):
        * storage/IDBCursorBackendInterface.h:
        * storage/IDBFactoryBackendImpl.cpp:
        (WebCore::createTables):
        * storage/IDBIndex.cpp:
        (WebCore::IDBIndex::openObjectCursor):
        (WebCore::IDBIndex::openCursor):
        (WebCore::IDBIndex::getObject):
        (WebCore::IDBIndex::get):
        * storage/IDBIndex.h:
        (WebCore::IDBIndex::storeName):
        * storage/IDBIndex.idl:
        * storage/IDBIndexBackendImpl.cpp:
        (WebCore::IDBIndexBackendImpl::storeName):
        (WebCore::openCursorInternal):
        (WebCore::IDBIndexBackendImpl::openObjectCursor):
        (WebCore::IDBIndexBackendImpl::openCursor):
        (WebCore::getInternal):
        (WebCore::IDBIndexBackendImpl::getObject):
        (WebCore::IDBIndexBackendImpl::get):
        * storage/IDBIndexBackendImpl.h:
        (WebCore::IDBIndexBackendImpl::objectStore):
        * storage/IDBIndexBackendInterface.h:
        * storage/IDBKey.cpp:
        (WebCore::IDBKey::fromQuery):
        (WebCore::IDBKey::whereSyntax):
        (WebCore::IDBKey::leftCursorWhereFragment):
        (WebCore::IDBKey::rightCursorWhereFragment):
        * storage/IDBKey.h:
        * storage/IDBKeyRange.cpp:
        (WebCore::IDBKeyRange::leftWhereClauseComparisonOperator):
        (WebCore::IDBKeyRange::rightWhereClauseComparisonOperator):
        * storage/IDBKeyRange.h:
        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::openCursor):
        * storage/IDBRequest.cpp:
        (WebCore::IDBRequest::timerFired):

2010-09-15  Simon Fraser  <simon.fraser@apple.com>

        Fix chromium build.
        
        * platform/graphics/chromium/GraphicsLayerChromium.cpp:

2010-09-15  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=44715
        maps.google.com flips upside down when zooming map using trackpad in WebKit2 on Mac

        Remove the concept of geometry flipping from GraphicsLayer; geometry flipping will
        be taken care of in platform code without the need to complicate the GraphicsLayer API.
        
        RenderLayerCompositor no longer sets the geometry orientation for the root
        platform layer; platform-specific code does this instead.
        
        This fixes flipped layers in WebKit2, since WebKit2 was already flipping
        geometry, and then RenderLayerCompositor was doing an additional flip.

        * platform/graphics/GraphicsLayer.cpp:
        (WebCore::GraphicsLayer::GraphicsLayer):
        * platform/graphics/GraphicsLayer.h:
        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        * platform/graphics/chromium/GraphicsLayerChromium.h:
        * platform/graphics/mac/GraphicsLayerCA.h:
        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers):
        (WebCore::GraphicsLayerCA::swapFromOrToTiledLayer):
        (WebCore::GraphicsLayerCA::defaultContentsOrientation):
        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::GraphicsLayerQtImpl::flushChanges):
        * platform/graphics/qt/GraphicsLayerQt.h:
        * platform/graphics/win/GraphicsLayerCACF.cpp:
        (WebCore::GraphicsLayerCACF::swapFromOrToTiledLayer):
        * platform/graphics/win/GraphicsLayerCACF.h:
        * platform/graphics/win/WKCACFLayerRenderer.cpp:
        (WebCore::WKCACFLayerRenderer::setRootChildLayer):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::ensureRootPlatformLayer):

2010-09-15  Julien Chaffraix  <jchaffraix@codeaurora.org>

        Unreviewed.

        Reverting my changes as it is breaking several tests on Gtk and Qt.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseColor):
        * css/CSSParser.h:
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setStrokeColor):
        (WebCore::CanvasRenderingContext2D::setFillColor):
        * html/canvas/CanvasStyle.cpp:
        (WebCore::CanvasStyle::createFromString):
        * html/canvas/CanvasStyle.h:

2010-09-15  Julien Chaffraix  <jchaffraix@codeaurora.org>

        Reviewed by Andreas Kling.

        Parse system colors in the HTML5 canvas context.
        https://bugs.webkit.org/show_bug.cgi?id=39168

        Test: fast/css/test-setting-canvas-color.html

        Based on previous work by Jan Erik Hanssen  <jhanssen@codeaurora.org>

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseColor): Changed the function to better match our
        early return policy. Also we now return false when we don't parse the color.
        This is needed for createFromString to fallback to using parseSystemColor.

        (WebCore::CSSParser::parseSystemColor): Made use of the RenderTheme to get
        the system colors.

        * css/CSSParser.h: Added the new parseSystemColor method.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setStrokeColor): Pass the document to createFromString.
        (WebCore::CanvasRenderingContext2D::setFillColor): Ditto.
        * html/canvas/CanvasStyle.cpp:
        (WebCore::CanvasStyle::createFromString): Try to parse the color using CSSParser::parseColor
        and fall back to parseSystemColor if it did not work.

        * html/canvas/CanvasStyle.h: Added the new Document* parameter to createFromString.

2010-09-14  Erik Arvidsson  <arv@chromium.org>

        Reviewed by Darin Adler.

        getComputedStyle() returns different values for different zoom levels
        https://bugs.webkit.org/show_bug.cgi?id=32230

        Test: fast/css/getComputedStyle/computed-style-with-zoom.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::zoomAdjustedPixelValue):
        (WebCore::zoomAdjustedNumberValue):
        (WebCore::valueForReflection):
        (WebCore::getPositionOffsetValue):
        (WebCore::getBorderRadiusCornerValue):
        (WebCore::computedTransform):
        (WebCore::CSSComputedStyleDeclaration::getFontSizeCSSValuePreferringKeyword):
        (WebCore::CSSComputedStyleDeclaration::valueForShadow):
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSComputedStyleDeclaration.h:
        * css/SVGCSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getSVGPropertyCSSValue):
        * rendering/RenderObject.h:
        (WebCore::adjustForAbsoluteZoom):
        * rendering/style/RenderStyle.h:
        (WebCore::adjustForAbsoluteZoom):

2010-09-14  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Fully separate Pango and FreeType font backends
        https://bugs.webkit.org/show_bug.cgi?id=27442

        Split FontPlatformData.h into separate versions for Pango, FreeType and WinCairo.
        Include the correct file via #ifdef'd includes, like the Chromium port. Also split
        FontCacheCairo.cpp into Pango and FreeType versions, as they had almost no code in
        common. Finally, rename FontPlatformDataCairo to FontPlatformDataFreeType, as this
        compilation unit is used only by the FreeType backend. This change is important to
        prevent upcoming fixes to the FreeType backend from affecting other backends.

        No new tests as functionality has not changed.

        * CMakeListsEfl.txt: Update source lists.
        * GNUmakefile.am: Update source lists.
        * platform/graphics/cairo/FontCacheCairo.cpp: Removed.
        * platform/graphics/cairo/FontCacheFreeType.cpp: Added.
        (WebCore::FontCache::platformInit):
        (WebCore::FontCache::getFontDataForCharacters):
        (WebCore::FontCache::getSimilarFontPlatformData):
        (WebCore::FontCache::getLastResortFallbackFont):
        (WebCore::FontCache::getTraitsInFamily):
        (WebCore::isWellKnownFontName):
        (WebCore::FontCache::createFontPlatformData):
        * platform/graphics/cairo/FontPlatformData.h:
        * platform/graphics/cairo/FontPlatformDataFreeType.cpp: Renamed from WebCore/platform/graphics/cairo/FontPlatformDataCairo.cpp.
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::operator=):
        (WebCore::FontPlatformData::init):
        (WebCore::FontPlatformData::~FontPlatformData):
        (WebCore::FontPlatformData::isFixedPitch):
        (WebCore::FontPlatformData::operator==):
        (WebCore::FontPlatformData::description):
        * platform/graphics/cairo/FontPlatformDataFreeType.h: Added.
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::size):
        (WebCore::FontPlatformData::setSize):
        (WebCore::FontPlatformData::syntheticBold):
        (WebCore::FontPlatformData::syntheticOblique):
        (WebCore::FontPlatformData::scaledFont):
        (WebCore::FontPlatformData::hash):
        (WebCore::FontPlatformData::isHashTableDeletedValue):
        (WebCore::FontPlatformData::hashTableDeletedFontValue):
        * platform/graphics/gtk/FontCachePango.cpp: Added.
        (WebCore::FontCache::platformInit):
        (WebCore::FontCache::getFontDataForCharacters):
        (WebCore::FontCache::getSimilarFontPlatformData):
        (WebCore::FontCache::getLastResortFallbackFont):
        (WebCore::FontCache::getTraitsInFamily):
        (WebCore::FontCache::createFontPlatformData):
        * platform/graphics/gtk/FontPlatformDataPango.h: Added.
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::size):
        (WebCore::FontPlatformData::setSize):
        (WebCore::FontPlatformData::syntheticBold):
        (WebCore::FontPlatformData::syntheticOblique):
        (WebCore::FontPlatformData::scaledFont):
        (WebCore::FontPlatformData::hash):
        (WebCore::FontPlatformData::isHashTableDeletedValue):
        (WebCore::FontPlatformData::hashTableDeletedFontValue):
        * platform/graphics/win/FontPlatformDataCairoWin.h: Added.
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::hfont):
        (WebCore::FontPlatformData::useGDI):
        (WebCore::FontPlatformData::fontFace):
        (WebCore::FontPlatformData::size):
        (WebCore::FontPlatformData::setSize):
        (WebCore::FontPlatformData::syntheticBold):
        (WebCore::FontPlatformData::syntheticOblique):
        (WebCore::FontPlatformData::scaledFont):
        (WebCore::FontPlatformData::hash):
        (WebCore::FontPlatformData::isHashTableDeletedValue):

2010-09-15  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Simon Fraser.

        AX: when text is auto-truncated, accessibility bounds are wrong
        https://bugs.webkit.org/show_bug.cgi?id=45793

        Allow accessibility to retrieve the absoluteQuads of a text node that
        clips to the ellipsis.
        
        Test: accessibility/ellipsis-text.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::boundingBoxRect):
        * rendering/RenderText.cpp:
        (WebCore::ellipsisRectForBox):
            Make a common method to retrieve the ellipsis rect.
        (WebCore::RenderText::absoluteQuads):
            Default into the absoluteQuads method that allows for ellipsis clipping.
        (WebCore::RenderText::selectionRectForRepaint):
            Use the common method for retrieving the ellipsis.
        * rendering/RenderText.h:

2010-09-15  Ariya Hidayat  <ariya@sencha.com>

        [Qt] Improve the speed of blur shadow
        https://bugs.webkit.org/show_bug.cgi?id=44222

        Rewrite the shadow blur function with loop unrolls and sliding step
        unification for both horizontal and vertical directions.
        This gives significant performance improvement on most cases.

        * platform/graphics/qt/ContextShadow.cpp:
        (WebCore::shadowBlur):

2010-09-14  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        (Take 2). Web Inspector: Provide network-based load timing.
        Before this change, inspector used timers taken from
        within WebCore notifications (that are by definition
        synchronous and serialized). As a result, timing was
        affected by the routines running on the main thread
        (JavaScript and such).
        https://bugs.webkit.org/show_bug.cgi?id=45664

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::willSendRequest):
        (WebCore::InspectorController::didFinishLoading):
        (WebCore::InspectorController::didFailLoading):
        * inspector/InspectorController.h:
        * inspector/InspectorResource.cpp:
        (WebCore::InspectorResource::endTiming):
        * inspector/InspectorResource.h:
        * loader/PingLoader.h:
        (WebCore::PingLoader::didFinishLoading):
        * loader/ResourceLoadNotifier.cpp:
        (WebCore::ResourceLoadNotifier::dispatchDidFinishLoading):
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::didFinishLoading):
        * loader/ResourceLoader.h:
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::didFinishLoading):
        * loader/appcache/ApplicationCacheGroup.h:
        * loader/icon/IconFetcher.cpp:
        (WebCore::IconFetcher::didFinishLoading):
        * loader/icon/IconFetcher.h:
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (StreamingClient::didFinishLoading):
        * platform/network/BlobResourceHandle.cpp:
        (WebCore::BlobResourceHandle::notifyFinish):
        * platform/network/ResourceHandleClient.h:
        (WebCore::ResourceHandleClient::didFinishLoading):
        * platform/network/ResourceLoadTiming.h:
        (WebCore::ResourceLoadTiming::deepCopy):
        (WebCore::ResourceLoadTiming::operator==):
        (WebCore::ResourceLoadTiming::ResourceLoadTiming):
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::didFinishLoading):
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::WebCoreSynchronousLoader::didFinishLoading):
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::downloadTimerCallback):
        (WebCore::parseDataUrl):
        * platform/network/mac/ResourceHandleMac.mm:
        (-[WebCoreResourceHandleAsDelegate connectionDidFinishLoading:]):
        (WebCoreSynchronousLoaderClient::didFinishLoading):
        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::finish):
        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::WebCoreSynchronousLoader::didFinishLoading):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::WebCoreSynchronousLoader::didFinishLoading):
        (WebCore::WebCoreSynchronousLoader::didFail):
        * platform/network/win/ResourceHandleWin.cpp:
        (WebCore::WebCoreSynchronousLoader::didFinishLoading):
        (WebCore::ResourceHandle::onRequestComplete):
        (WebCore::ResourceHandle::fileLoadTimer):
        (WebCore::ResourceHandle::cancel):

2010-09-15  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r67551.
        http://trac.webkit.org/changeset/67551
        https://bugs.webkit.org/show_bug.cgi?id=45816

        "Plugin tests fail" (Requested by yurys on #webkit).

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::willSendRequest):
        (WebCore::InspectorController::didFinishLoading):
        (WebCore::InspectorController::didFailLoading):
        (WebCore::InspectorController::didCloseWebSocket):
        * inspector/InspectorController.h:
        * inspector/InspectorResource.cpp:
        (WebCore::InspectorResource::endTiming):
        * inspector/InspectorResource.h:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::substituteResourceDeliveryTimerFired):
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::continueAfterContentPolicy):
        (WebCore::MainResourceLoader::didFinishLoading):
        * loader/MainResourceLoader.h:
        * loader/NetscapePlugInStreamLoader.cpp:
        (WebCore::NetscapePlugInStreamLoader::didFinishLoading):
        * loader/PingLoader.h:
        (WebCore::PingLoader::didFinishLoading):
        * loader/ResourceLoadNotifier.cpp:
        (WebCore::ResourceLoadNotifier::didFinishLoad):
        (WebCore::ResourceLoadNotifier::dispatchDidFinishLoading):
        (WebCore::ResourceLoadNotifier::sendRemainingDelegateMessages):
        * loader/ResourceLoadNotifier.h:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::didFinishLoading):
        (WebCore::ResourceLoader::didFinishLoadingOnePart):
        * loader/ResourceLoader.h:
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didReceiveResponse):
        (WebCore::SubresourceLoader::didFinishLoading):
        * loader/SubresourceLoader.h:
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::didFinishLoading):
        * loader/appcache/ApplicationCacheGroup.h:
        * loader/icon/IconFetcher.cpp:
        (WebCore::IconFetcher::didFinishLoading):
        * loader/icon/IconFetcher.h:
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (StreamingClient::didFinishLoading):
        * platform/network/BlobResourceHandle.cpp:
        (WebCore::BlobResourceHandle::notifyFinish):
        * platform/network/ResourceHandleClient.h:
        (WebCore::ResourceHandleClient::didFinishLoading):
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::didFinishLoading):
        (WebCore::WebCoreSynchronousLoaderClient::didFinishLoading):
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::WebCoreSynchronousLoader::didFinishLoading):
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::downloadTimerCallback):
        (WebCore::parseDataUrl):
        * platform/network/mac/ResourceHandleMac.mm:
        (-[WebCoreResourceHandleAsDelegate connectionDidFinishLoading:]):
        (WebCoreSynchronousLoaderClient::didFinishLoading):
        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::finish):
        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::WebCoreSynchronousLoader::didFinishLoading):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::WebCoreSynchronousLoader::didFinishLoading):
        (WebCore::WebCoreSynchronousLoader::didFail):
        (WebCore::finishedCallback):
        (WebCore::parseDataUrl):
        * platform/network/win/ResourceHandleWin.cpp:
        (WebCore::WebCoreSynchronousLoader::didFinishLoading):
        (WebCore::ResourceHandle::onRequestComplete):
        (WebCore::ResourceHandle::fileLoadTimer):
        (WebCore::ResourceHandle::cancel):

2010-09-14  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Provide network-based load timing.
        Before this change, inspector used timers taken from
        within WebCore notifications (that are by definition
        synchronous and serialized). As a result, timing was
        affected by the routines running on the main thread
        (JavaScript and such).
        https://bugs.webkit.org/show_bug.cgi?id=45664

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::willSendRequest):
        (WebCore::InspectorController::didFinishLoading):
        (WebCore::InspectorController::didFailLoading):
        * inspector/InspectorController.h:
        * inspector/InspectorResource.cpp:
        (WebCore::InspectorResource::endTiming):
        * inspector/InspectorResource.h:
        * loader/PingLoader.h:
        (WebCore::PingLoader::didFinishLoading):
        * loader/ResourceLoadNotifier.cpp:
        (WebCore::ResourceLoadNotifier::dispatchDidFinishLoading):
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::didFinishLoading):
        * loader/ResourceLoader.h:
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::didFinishLoading):
        * loader/appcache/ApplicationCacheGroup.h:
        * loader/icon/IconFetcher.cpp:
        (WebCore::IconFetcher::didFinishLoading):
        * loader/icon/IconFetcher.h:
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (StreamingClient::didFinishLoading):
        * platform/network/BlobResourceHandle.cpp:
        (WebCore::BlobResourceHandle::notifyFinish):
        * platform/network/ResourceHandleClient.h:
        (WebCore::ResourceHandleClient::didFinishLoading):
        * platform/network/ResourceLoadTiming.h:
        (WebCore::ResourceLoadTiming::deepCopy):
        (WebCore::ResourceLoadTiming::operator==):
        (WebCore::ResourceLoadTiming::ResourceLoadTiming):
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::didFinishLoading):
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::WebCoreSynchronousLoader::didFinishLoading):
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::ResourceHandleManager::downloadTimerCallback):
        (WebCore::parseDataUrl):
        * platform/network/mac/ResourceHandleMac.mm:
        (-[WebCoreResourceHandleAsDelegate connectionDidFinishLoading:]):
        (WebCoreSynchronousLoaderClient::didFinishLoading):
        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::finish):
        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::WebCoreSynchronousLoader::didFinishLoading):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::WebCoreSynchronousLoader::didFinishLoading):
        (WebCore::WebCoreSynchronousLoader::didFail):
        * platform/network/win/ResourceHandleWin.cpp:
        (WebCore::WebCoreSynchronousLoader::didFinishLoading):
        (WebCore::ResourceHandle::onRequestComplete):
        (WebCore::ResourceHandle::fileLoadTimer):
        (WebCore::ResourceHandle::cancel):

2010-09-14  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        WebInspector: small refactoring for monitorXHR backend property.

        Our Inspector API is quite big and can be simplified a bit.
        As example for single backend property like monitoringXHR we
        have 4 functions in the API. Two functions for frontend
        enableMonitoringXHR/disableMonitoringXHR and
        two functions for backend monitoringXHRWasEnabled and
        monitoringXHRWasDisabled. These functions can be replaced by
        one setMonitoringXHR with one 'in' and one 'out' argument.
        The initial state of the flag can be gathered from backend
        with help of getSettings call where additional section was
        added for backend state information.

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

        * inspector/Inspector.idl:
        * inspector/InspectorController.cpp:
        * inspector/InspectorController.h:
        * inspector/front-end/ConsoleView.js:
        * inspector/front-end/Settings.js:
        * inspector/front-end/inspector.js:

2010-09-15  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Multiline console does not work on Windows / Linux.
        https://bugs.webkit.org/show_bug.cgi?id=45807

        * inspector/front-end/ConsoleView.js:

2010-09-15  Renata Hodovan  <reni@inf.u-szeged.hu>

        Reviewed by Dirk Schulze.

        SVGFETurbulenceElement doesn't support dynamic invalidation, when attributes change.
        A typo (noStich instead of nostitch) is also fixed in this patch.
        https://bugs.webkit.org/show_bug.cgi?id=45809

        Tests: svg/dynamic-updates/SVGFETurbulenceElement-dom-baseFrequency-attr.html
               svg/dynamic-updates/SVGFETurbulenceElement-dom-numOctaves-attr.html
               svg/dynamic-updates/SVGFETurbulenceElement-dom-seed-attr.html
               svg/dynamic-updates/SVGFETurbulenceElement-dom-stitchTiles-attr.html
               svg/dynamic-updates/SVGFETurbulenceElement-dom-type-attr.html
               svg/dynamic-updates/SVGFETurbulenceElement-svgdom-baseFrequency-prop.html
               svg/dynamic-updates/SVGFETurbulenceElement-svgdom-numOctaves-prop.html
               svg/dynamic-updates/SVGFETurbulenceElement-svgdom-seed-prop.html
               svg/dynamic-updates/SVGFETurbulenceElement-svgdom-stitchTiles-prop.html
               svg/dynamic-updates/SVGFETurbulenceElement-svgdom-type-prop.html

        * svg/SVGFETurbulenceElement.cpp:
        (WebCore::SVGFETurbulenceElement::parseMappedAttribute):
        (WebCore::SVGFETurbulenceElement::svgAttributeChanged):
        * svg/SVGFETurbulenceElement.h:

2010-09-15  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Kenneth Rohde Christiansen.

        [WINCE] Avoid memcpy in TextCodecWinCE::encode
        https://bugs.webkit.org/show_bug.cgi?id=45468

        * platform/text/wince/TextCodecWinCE.cpp:
        (WebCore::TextCodecWinCE::encode):

2010-09-14  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Dumitru Daniliuc.

        Add custom binding code for DirectoryEntry to allow JSON parameters for Flags
        https://bugs.webkit.org/show_bug.cgi?id=45724

        No new tests; tests will be added later.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDirectoryEntryCustom.cpp: Added.
        (WebCore::JSDirectoryEntry::getFile):
        (WebCore::JSDirectoryEntry::getDirectory):
        * bindings/v8/custom/V8DirectoryEntryCustom.cpp: Added.
        (WebCore::V8DirectoryEntry::getDirectoryCallback):
        (WebCore::V8DirectoryEntry::getFileCallback):
        * fileapi/DirectoryEntry.h:
        * fileapi/DirectoryEntry.idl:

2010-09-14  Jia Pu  <jpu@apple.com>
        
        Reviewed by Dan Bernstein.

        Only intercept ESC key press when autocorrection UI is visible.
        https://bugs.webkit.org/show_bug.cgi?id=45071

        Only intercept ESC key when autocorrection panel is shown. Otherwise pressing
        ESC will cancel current loading like usual.

        * editing/Editor.cpp:
        (WebCore::Editor::isShowingCorrectionPanel): Query editor client whether autocorrection
          panel is shown.

        * editing/Editor.h: Added declaration of isShowingCorrectionPanel().

        * editing/EditorCommand.cpp:
        (WebCore::supportedDismissCorrectionPanel): Only support executeCancelOperation()
          when autocorrection panel is shown.
        (WebCore::createCommandMap): Replaced isSupported function pointer for
          executeCancelOperation() command with supportedDismissCorrectionPanel().

        * loader/EmptyClients.h:
        (WebCore::EmptyEditorClient::isShowingCorrectionPanel): Dummy implementation of
          new member method declared in base class.

        * page/EditorClient.h: Declared new member method isShowingCorrectionPanel().

2010-09-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r67503.
        http://trac.webkit.org/changeset/67503
        https://bugs.webkit.org/show_bug.cgi?id=45802

        This patch broke GTK builds (Requested by jianli_ on #webkit).

        * fileapi/ThreadableBlobRegistry.cpp:
        (WebCore::BlobRegistryContext::BlobRegistryContext):
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::resourceData):
        (WebCore::ResourceLoader::addData):
        * platform/network/BlobResourceHandle.cpp:
        * platform/network/BlobResourceHandle.h:
        * platform/network/ResourceHandle.h:
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::bufferedData):

2010-09-14  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Zoom factor for checkboxes and radios.
        https://bugs.webkit.org/show_bug.cgi?id=45776

        RenderThemeQt does not consider RenderStyle::effectiveZoom when calculating sizes of
        checkboxes and radios.

        Even with this change the used QStyle must support different sizes for radios and checkboxes.
        QWindowStyle and QMacStyle, for example, do not.

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

2010-09-14  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        audio engine: add AudioFileReader files (Mac implementation)
        https://bugs.webkit.org/show_bug.cgi?id=36475

        No new tests since audio API is not yet implemented.

        * platform/audio/AudioFileReader.h: Added.
        * platform/audio/mac/AudioFileReaderMac.cpp: Added.
        (WebCore::createAudioBufferList):
        (WebCore::destroyAudioBufferList):
        (WebCore::AudioFileReader::AudioFileReader):
        (WebCore::AudioFileReader::~AudioFileReader):
        (WebCore::AudioFileReader::readProc):
        (WebCore::AudioFileReader::getSizeProc):
        (WebCore::AudioFileReader::createBus):
        (WebCore::createBusFromAudioFile):
        (WebCore::createBusFromInMemoryAudioFile):
        * platform/audio/mac/AudioFileReaderMac.h: Added.
        (WebCore::AudioFileReader::data):
        (WebCore::AudioFileReader::dataSize):

2010-09-14  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Oliver Hunt.

        Drawing an image outside the bounds of a canvas still causes repaints
        https://bugs.webkit.org/show_bug.cgi?id=45792
        
        Some canvas examples, such as http://www.phoboslab.org/biolab/, draw
        images outide the bounds of the canvas. If the canvas already had a
        non-empty m_dirtyRect, such draws would cause us to do a repaint of
        m_dirtyRect again (which goes through the platform-specific invalidation
        machinery, which can be slow).
        
        Optimize this by avoiding extra invalidation when the dirty rect
        does not intersect the canvas bounds.
        
        Not testable because this avoids additional repaints of m_dirtyRect, but
        m_dirtyRect has to be non-empty for this to benefit.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::didDraw):

2010-09-14  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Links from "Profiles" don't lead to "Scripts"
        https://bugs.webkit.org/show_bug.cgi?id=45756

        * inspector/front-end/ProfileDataGridTree.js:
        (WebInspector.ProfileDataGridNode.prototype.createCell): use standard routine to create resource link
        * inspector/front-end/inspector.js: code cleanup: removed no-op method
        (WebInspector.addMainEventListeners):

2010-09-14  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Adam Roben.

        [WINCE] Use codePage instead of TextEncoding
        https://bugs.webkit.org/show_bug.cgi?id=45466

        Use codePage as member variable to avoid repeated lookup.

        * platform/text/wince/TextCodecWinCE.cpp:
        (WebCore::newTextCodecWinCE):
        (WebCore::TextCodecWinCE::TextCodecWinCE):
        (WebCore::decode):
        (WebCore::TextCodecWinCE::decode):
        (WebCore::TextCodecWinCE::encode):
        * platform/text/wince/TextCodecWinCE.h:

2010-09-14  Adam Barth  <abarth@webkit.org>

        Attempted Chromium build fix.  The compiler can't tell that
        ASSERT_NOT_REACHED is not reached and so it demands an initialization
        of this variable.

        * html/HTMLFontElement.cpp:
        (WebCore::HTMLFontElement::parseMappedAttribute):

2010-09-14  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Ariya Hidayat.

        [Qt] Wheeling over windowed plugins sometimes cause them to disappear

        * plugins/qt/PluginContainerQt.cpp:
        (PluginClientWrapper::x11Event): Pass on captured mouse wheel events
        to the effective native window rather than the grandparent widget.
        We were calling QWidget::winId() which caused a new X11 window to be
        created for the grandparent widget and generally mess things up.

2010-09-14  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix after move of selectedText() method.

        * platform/wx/PasteboardWx.cpp:
        (WebCore::Pasteboard::writeSelection):

2010-09-14  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Handle <font size=0> as <font size=1> like any other browser
        https://bugs.webkit.org/show_bug.cgi?id=39148

        Update font size parser to match HTML5 spec.  The main difference here
        is the handling of 0, which now maps to 1 instead of 3.

        * html/HTMLFontElement.cpp:
        (WebCore::parseFontSize):
        (WebCore::HTMLFontElement::cssValueFromFontSizeNumber):

2010-09-14  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        document.lastModified gives no output if the response doesn't have a Last-Modified header
        https://bugs.webkit.org/show_bug.cgi?id=8475

        Implement document.lastModified as per HTML5.

        Tests: http/tests/misc/last-modified-parsing.html
               http/tests/misc/no-last-modified.html

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

2010-09-14  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        `document.compatMode` is `undefined` when using `application/xhtml+xml`
        https://bugs.webkit.org/show_bug.cgi?id=44422

        Moving the compatMode IDL attribute from HTMLDocument.idl to
        Document.idl fixes this bug and improve compliance with HTML5.

        Test: fast/parser/compatMode-in-xhtml.xhtml

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

2010-09-14  Adam Barth  <abarth@webkit.org>

        Reviewed by Nate Chapin.

        V8 security checks don't account for shadowing named frames
        https://bugs.webkit.org/show_bug.cgi?id=45700

        Test: http/tests/security/xss-DENIED-frame-name.html

        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::namedSecurityCheck):
            - If the property name exists on the object, it will shadow the
              named property lookup on the window object.  That means we need
              to block access if there's shadowing going on.
        (WebCore::V8DOMWindow::indexedSecurityCheck):
            - I made the corresponding change to this function too, but I don't
              think this one can actually be triggered because JavaScript
              variable names need to start with a non-digit.

2010-09-14  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        incorrect tabindex parsing
        https://bugs.webkit.org/show_bug.cgi?id=21076

        Updated our integer parsing for tabindex to use the algorithm from the
        HTML5 spec.

        Test: fast/parser/tabindex-parsing-2.html

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::parseMappedAttribute):
        * html/parser/HTMLParserIdioms.cpp:
        (WebCore::parseHTMLInteger):
        * html/parser/HTMLParserIdioms.h:

2010-09-14  Brent Fulgham  <bfulgham@webkit.org>

        Build correction, no review.

        * WebCore.vcproj/WebCore.vcproj: Exclude OwnPtrCairo.cpp from
        non-Cairo based builds.

2010-09-14  Jian Li  <jianli@chromium.org>

        Reviewed by David Levin.

        fast/files/apply-blob-url-to-img.html timeout on Leopard
        https://bugs.webkit.org/show_bug.cgi?id=45576

        The failure on Leopard is caused by the static method
        ResourceHandle::supportsBufferedData that returns true to indicate that
        the buffered data support is enabled for blob resource. However,
        BlobResourceHandle does not support this and we need to override this.

        The fix is to change supportsBufferedData method from static to virtual
        so that we can override the default behavior in BlobResourceHandle.

        * fileapi/ThreadableBlobRegistry.cpp: Copy BlobData to make it cross-thread. 
        (WebCore::BlobRegistryContext::BlobRegistryContext):
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::resourceData):
        (WebCore::ResourceLoader::addData):
        * platform/network/BlobResourceHandle.cpp:
        (WebCore::BlobResourceHandle::supportsBufferedData): Override the default
        behavior.
        * platform/network/BlobResourceHandle.h:
        * platform/network/ResourceHandle.h: Made supportsBufferedData virtual.
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::bufferedData):

2010-09-14  Brent Fulgham  <bfulgham@webkit.org>

        Build correction, no review.

        * WebCore.vcproj/WebCore.vcproj: Add missing OwnPtrCairo.cpp
          implementation file.
        * platform/graphics/cairo/OwnPtrCairo.cpp: Add missing include
          for <cairo.h>

2010-09-14  Chris Guillory   <chris.guillory@google.com>

        Reviewed by Chris Fleizach.

        Send all accessibility notifications to Chromium.
        https://bugs.webkit.org/show_bug.cgi?id=45156
        
        Use postAccessibilityNotification to pass accessibility notifications
        to chromium.

        Tests: platform/chromium/accessibility/post-notification-ActiveDescendantChanged.html
               platform/chromium/accessibility/post-notification-CheckedStateChanged.html
               platform/chromium/accessibility/post-notification-ChildrenChanged.html
               platform/chromium/accessibility/post-notification-FocusedUIElementChanged.html
               platform/chromium/accessibility/post-notification-LayoutComplete.html
               platform/chromium/accessibility/post-notification-LiveRegionChanged.html
               platform/chromium/accessibility/post-notification-LoadComplete.html
               platform/chromium/accessibility/post-notification-MenuListValueChanged.html
               platform/chromium/accessibility/post-notification-RowCollapsed.html
               platform/chromium/accessibility/post-notification-RowCountChanged.html
               platform/chromium/accessibility/post-notification-RowExpanded.html
               platform/chromium/accessibility/post-notification-ScrolledToAnchor.html
               platform/chromium/accessibility/post-notification-SelectedChildrenChanged.html
               platform/chromium/accessibility/post-notification-SelectedTextChanged.html
               platform/chromium/accessibility/post-notification-ValueChanged.html

        * accessibility/chromium/AXObjectCacheChromium.cpp:
        (WebCore::AXObjectCache::postPlatformNotification):
        * page/chromium/ChromeClientChromium.h:

2010-09-14  Darin Adler  <darin@apple.com>

        Reviewed by Geoffrey Garen.

        Hang processing href attribute containing a million slashes
        https://bugs.webkit.org/show_bug.cgi?id=45767

        Test: fast/css/visited-link-hang.html

        * platform/LinkHash.cpp:
        (WebCore::findSlashDotDotSlash): Added a start position argument and
        changed types to use size_t consistently instead of a mix.
        (WebCore::findSlashSlash): Ditto.
        (WebCore::findSlashDotSlash): Ditto.
        (WebCore::squeezeOutNullCharacters): Added.
        (WebCore::cleanSlashDotDotSlashes): Added. Factored out part
        of cleanPath (see below).
        (WebCore::mergeDoubleSlashes): Ditto.
        (WebCore::cleanSlashDotSlashes): Ditto.
        (WebCore::cleanPath): Changed algorithm to not remove as we go to
        avoid N^2 behavior; instead replace with null characters and then
        do a squeeze operation after the fact. Also moved the body of the
        function out of line since we normally don't have to do any cleaning.
        This whole thing should go at some point -- it's not the right
        algorithm -- but this should eliminate the performance problems
        without changing behavior.

2010-09-14  Nico Weber  <thakis@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium]: On Mac, let image layer data row order match skia.
        https://bugs.webkit.org/show_bug.cgi?id=45400

        Make CoreGraphics texture row order match skia's row order, remove all
        code that worked around this difference. This also fixes a problem where
        image layers would be drawn upside down.

        Covered by existing layout tests, but we don't run these with
        compositing yet.

        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::SharedValues::SharedValues):
        (WebCore::ContentLayerChromium::updateContents):
        (WebCore::ContentLayerChromium::updateTextureRect):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::setRootLayerCanvasSize):
        (WebCore::LayerRendererChromium::drawLayers):

2010-09-14  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Tony Chang.

        applyInlineStyleToNodeRange does not extend run properly
        https://bugs.webkit.org/show_bug.cgi?id=45616

        The bug was caused by applyInlineStyleToNodeRange's skipping a node whenever it has children.
        Fixed the bug by only skipping a node that contains the past end node, contains non-editable region,
        or has a non-editable parent node. Also fixed a bug that applyInlineStyleToNodeRange does not remove
        styled elements in a run that are identical to the one added. addInlineStyleIfNeeded now removes
        all styled elements in a run using removeStyleFromRunBeforeApplyingStyle before calling addInlineStyleIfNeeded.

        Test: editing/style/inline-style-extend-run.html

        * editing/ApplyStyleCommand.cpp:
        (WebCore::containsNonEditableRegion): Added.
        (WebCore::ApplyStyleCommand::applyInlineStyleToNodeRange): See above.
        (WebCore::ApplyStyleCommand::removeStyleFromRunBeforeApplyingStyle): Added, see above.
        (WebCore::ApplyStyleCommand::removeInlineStyleFromElement): Added support for RemoveAlways.
        (WebCore::ApplyStyleCommand::removeImplicitlyStyledElement): Replaced RemoveAttributesAndElements by RemoveIfNeeded.
        (WebCore::ApplyStyleCommand::extractInlineStyleToPushDown): Replaced RemoveAttributesAndElements by RemoveIfNeeded.
        * editing/ApplyStyleCommand.h:

2010-09-14  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] V8 port: Get inspector up and running
        https://bugs.webkit.org/show_bug.cgi?id=45771

        * inspector/front-end/WebKit.qrc: Add DebuggerScript.js

2010-09-14  Oliver Hunt  <oliver@apple.com>

        PPC Build fix.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneDeserializer::readFile):
        (WebCore::CloneDeserializer::readTerminal):

2010-09-14  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Andreas Kling.

        [chromium] Remove unused ICU headers
        https://bugs.webkit.org/show_bug.cgi?id=45698

        Remove unused headers.

        * platform/graphics/chromium/FontCacheLinux.cpp:

2010-09-14  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Antonio Gomes.

        [Qt] Numpad Enter key returns keyCode 0 instead of 13
        https://bugs.webkit.org/show_bug.cgi?id=45014

        Original patch by Jarred Nicholls <jarred.nicholls@gmail.com>

        There is a missing case statement in the PlatformKeyboardEventQt.cpp
        file to handle the Enter button on the number pad.  Because it is not
        handled, the keyCode returned in a JavaScript event is 0 rather than 13.

        Test: manual-tests/qt/numpad-enter-key.html

        * manual-tests/qt/numpad-enter-key.html: Added.
        * platform/qt/PlatformKeyboardEventQt.cpp:
        (WebCore::windowsKeyCodeForKeyEvent):

2010-09-14  Evan Martin  <evan@chromium.org>

        Reviewed by Darin Fisher.

        [chromium] building without debug syms broke after recent refactoring
        https://bugs.webkit.org/show_bug.cgi?id=45720

        Now that we build WebCore as multiple libraries, we need to adjust the
        flags to turn off debug symbols for all of these libraries.

        No new tests; should only affect an uncommon build flag.

        * WebCore.gyp/WebCore.gyp:

2010-09-14  Tony Chang  <tony@chromium.org>

        Unreviewed, fix chromium compile.

        * platform/graphics/chromium/ImageLayerChromium.h:

2010-09-14  Nico Weber  <thakis@chromium.org>

        Reviewed by Darin Fisher.

        [chromium]: crash less in compositor mode on mac
        https://bugs.webkit.org/show_bug.cgi?id=45714

        The contents image can go away when the dom is updated. Since the
        layer tree is updated asynchronously, it needs to ref the native image,
        else it will hold on to a stale object.

        This still needs to be done for skia, too.

        * platform/graphics/chromium/ImageLayerChromium.h:
        * platform/graphics/chromium/ImageLayerChromium.cpp:

2010-09-14  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: [Resources panel] [HAR] Need a way to save timing data.
        Added support for resource timings to HAREntry.
        https://bugs.webkit.org/show_bug.cgi?id=45663

        * inspector/front-end/HAREntry.js:
        (WebInspector.HAREntry.prototype._buildTimings):
        (WebInspector.HAREntry.prototype._toMilliseconds):
        (WebInspector.HAREntry.prototype._interval):

2010-09-14  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Kent Tamura.

        [BREWMP] Always set LeftButton in PlatformMouseEvent
        https://bugs.webkit.org/show_bug.cgi?id=45705

        AEE_POINTER_GET_MOUSE_MODIFIERS always returns 0, so it is impossible to know
        which button is pressed or released. The current code erroneously sets NoButton.
        Set LeftButton unconditionally because Brew MP usually runs on touch device.

        * platform/brew/PlatformMouseEventBrew.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):

2010-09-14  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Andreas Kling.

        Move DebuggerScript.js from WebKit/chromium/src/js to WebCore/bindings/v8
        https://bugs.webkit.org/show_bug.cgi?id=45739

        * bindings/v8/DebuggerScript.js: Added.

2010-09-10  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Implement on-demand reporting of empty CSS rules matched for a node by WebCore
        https://bugs.webkit.org/show_bug.cgi?id=45530

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::matchRules):
        (WebCore::CSSStyleSelector::matchRulesForList):
        (WebCore::CSSStyleSelector::matchUARules):
        (WebCore::CSSStyleSelector::styleForElement):
        (WebCore::CSSStyleSelector::pseudoStyleForElement):
        (WebCore::CSSStyleSelector::styleRulesForElement):
        (WebCore::CSSStyleSelector::pseudoStyleRulesForElement):
        * css/CSSStyleSelector.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::getStyles):
        (WebCore::InspectorDOMAgent::buildArrayForPseudoElements):

2010-09-14  Hyung Song  <beergun@company100.net>

        Reviewed by Darin Adler.

        [BREWMP] Set m_size in SharedBuffer::createWithContentsOfFile();
        https://bugs.webkit.org/show_bug.cgi?id=45701

        SharedBuffer::createWithContentsOfFile() reads file content and saves to 
        result.m_buffer directly, leaving result.m_size unchanged.

        * platform/brew/SharedBufferBrew.cpp:
        (WebCore::SharedBuffer::createWithContentsOfFile):

2010-09-14  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Move adjustLexerState to the HTMLTokenizer
        https://bugs.webkit.org/show_bug.cgi?id=45649

        This function used let us share code between the tree builder and the
        two other users of the HTMLTokenizer.  However, now that the tree
        builder is all grown up, it can't use this code anymore.  The other
        users would much rather this code lived on HTMLTokenizer and understood
        <script>.  This patch attempts to make them happy.

        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::HTMLPreloadScanner::processToken):
        * html/parser/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::updateStateFor):
        * html/parser/HTMLTokenizer.h:
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::scriptEnabled):
        * html/parser/HTMLTreeBuilder.h:
        * html/parser/HTMLViewSourceParser.cpp:
        (WebCore::HTMLViewSourceParser::updateTokenizerState):

2010-09-14  Pierre-Antoine LaFayette  <plafayet@codeaurora.org>

        Reviewed by Darin Adler.

        REGRESSION (r52839): Incomplete repaint of IMG with text-align:center
        https://bugs.webkit.org/show_bug.cgi?id=40142

        http://trac.webkit.org/changeset/52839 didn't really deal with the inline replaced element case.  This just generalizes to all inline content.

        Patch by: Dave Hyatt

        Tests: fast/repaint/block-layout-inline-children-float-positioned.html
               fast/repaint/block-layout-inline-children-replaced.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutInlineChildren):
         
2010-09-14  Balazs Kelemen  <kb@inf.u-szeged.hu>

        Reviewed by Andreas Kling.

        [Qt] Cookie operations should use NetworkingContext
        https://bugs.webkit.org/show_bug.cgi?id=45745
        No new functionality so no new tests.

        * platform/qt/CookieJarQt.cpp:
        (WebCore::cookieJar): Use the NetworkingContext for obtaining the QNetworkAccessManager
        instead of directly accessing the FrameLoaderClient.

2010-09-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r67449.
        http://trac.webkit.org/changeset/67449
        https://bugs.webkit.org/show_bug.cgi?id=45746

        This change makes tree red. (Requested by pfeldman on
        #webkit).

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyInlineStyleToNodeRange):
        (WebCore::ApplyStyleCommand::removeInlineStyleFromElement):
        (WebCore::ApplyStyleCommand::removeImplicitlyStyledElement):
        (WebCore::ApplyStyleCommand::extractInlineStyleToPushDown):
        * editing/ApplyStyleCommand.h:

2010-09-14  Eric Seidel  <eric@webkit.org>

        Unreviewed, reverting changes r67451 and r67451.
        Broke lots of builders.

        Only intercept ESC key press when autocorrection UI is visible.
        https://bugs.webkit.org/show_bug.cgi?id=45071

        * editing/Editor.cpp:
        * editing/Editor.h:
        * editing/EditorCommand.cpp:
        (WebCore::createCommandMap):
        * loader/EmptyClients.h:
        * page/EditorClient.h:

2010-09-14  Kinuko Yasuda  <kinuko@chromium.org>

        Unreviewed; an attempt to fix Chromium Windows build.

        * fileapi/FileEntry.cpp:

2010-09-13  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: provide support for opening external navigation for links within certain elements
        Use default handling for clicks on links that have target="_blank".
        Add option for external navigation to URL audit formatter.
        https://bugs.webkit.org/show_bug.cgi?id=45671

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

2010-09-14  Dan Bernstein  <mitz@apple.com>

        Build fix.

        * editing/EditorCommand.cpp:

2010-09-14  Jia Pu  <jpu@apple.com>

        Reviewed by Dan Bernstein.

        Only intercept ESC key press when autocorrection UI is visible.
        https://bugs.webkit.org/show_bug.cgi?id=45071

        Only intercept ESC key when autocorrection panel is shown. Otherwise pressing
        ESC will cancel current loading like usual.

        * editing/Editor.cpp:
        (WebCore::Editor::isShowingCorrectionPanel): Query editor client whether autocorrection
          panel is shown.

        * editing/Editor.h: Added declaration of isShowingCorrectionPanel().

        * editing/EditorCommand.cpp:
        (WebCore::supportedDismissCorrectionPanel): Only support executeCancelOperation()
          when autocorrection panel is shown.
        (WebCore::createCommandMap): Replaced isSupported function pointer for
          executeCancelOperation() command with supportedDismissCorrectionPanel().

        * loader/EmptyClients.h:
        (WebCore::EmptyEditorClient::isShowingCorrectionPanel): Dummy implementation of
          new member method declared in base class.

        * page/EditorClient.h: Declared new member method isShowingCorrectionPanel().

2010-09-14  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Kent Tamura.

        [BREWMP] Remove TextBreakIteratorInternalICUBrew.cpp
        https://bugs.webkit.org/show_bug.cgi?id=45691

        Brew MP no longer depends on ICU for internationalization.
        Remove TextBreakIteratorInternalICUBrew.cpp.

        * platform/text/brew/TextBreakIteratorInternalICUBrew.cpp: Removed.

2010-09-14  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Tony Chang.

        applyInlineStyleToNodeRange does not extend run properly
        https://bugs.webkit.org/show_bug.cgi?id=45616

        The bug was caused by applyInlineStyleToNodeRange's skipping a node whenever it has children.
        Fixed the bug by only skipping a node that contains the past end node, contains non-editable region,
        or has a non-editable parent node. Also fixed a bug that applyInlineStyleToNodeRange does not remove
        styled elements in a run that are identical to the one added. addInlineStyleIfNeeded now removes
        all styled elements in a run using removeStyleFromRunBeforeApplyingStyle before calling addInlineStyleIfNeeded.

        Test: editing/style/inline-style-extend-run.html

        * editing/ApplyStyleCommand.cpp:
        (WebCore::containsNonEditableRegion): Added.
        (WebCore::ApplyStyleCommand::applyInlineStyleToNodeRange): See above.
        (WebCore::ApplyStyleCommand::removeStyleFromRunBeforeApplyingStyle): Added, see above.
        (WebCore::ApplyStyleCommand::removeInlineStyleFromElement): Added support for RemoveAlways.
        (WebCore::ApplyStyleCommand::removeImplicitlyStyledElement): Replaced RemoveAttributesAndElements by RemoveIfNeeded.
        (WebCore::ApplyStyleCommand::extractInlineStyleToPushDown): Replaced RemoveAttributesAndElements by RemoveIfNeeded.
        * editing/ApplyStyleCommand.h:

2010-09-13  Yuta Kitamura  <yutak@chromium.org>

        Reviewed by Kent Tamura.

        Add one #if guard block to fix Qt builds.

        Web Inspector: WebSocket in Resources tab
        https://bugs.webkit.org/show_bug.cgi?id=40768

        * inspector/InspectorResource.cpp:

2010-09-13  Yuta Kitamura  <yutak@chromium.org>

        Reviewed by Pavel Feldman.

        Add WebSocket resource type to Web Inspector.

        When a new WebSocket connection is established, a line for that connection
        will appear in Web Inspector's Resources tab. If the resource name is
        clicked, the details of handshake request and response will be shown.

        Web Inspector: WebSocket in Resources tab
        https://bugs.webkit.org/show_bug.cgi?id=40768

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::addResource): WebSocket resource does not
        have an associated loader, thus frame might be null. Need to check it.
        (WebCore::InspectorController::removeResource): Ditto.
        (WebCore::InspectorController::didCreateWebSocket):
        (WebCore::InspectorController::willSendWebSocketHandshakeRequest):
        (WebCore::InspectorController::didReceiveWebSocketHandshakeResponse):
        (WebCore::InspectorController::didCloseWebSocket):
        * inspector/InspectorController.h:
        * inspector/InspectorResource.cpp: Add null checks of m_loader and m_frame,
        because WebSocket does not have a loader and we need to allow null for
        these variables.
        (WebCore::createReadableStringFromBinary):
        (WebCore::InspectorResource::InspectorResource):
        (WebCore::InspectorResource::create): Factory function of
        regular (non-WebSocket) resources.
        (WebCore::InspectorResource::createWebSocket): Factory function of
        WebSocket resources.
        (WebCore::InspectorResource::updateWebSocketRequest):
        (WebCore::InspectorResource::updateWebSocketResponse):
        (WebCore::InspectorResource::updateScriptObject): m_frame->document() becomes
        available when Frame::setDocument() is called. We cannot obtain documentURL
        during the constructor or updateRequest() function, because m_frame->document()
        is not available yet at that point and documentURL will contain a wrong URL.
        As far as I know, updateScriptObject() is the only place where we can safely
        obtain documentURL.
        (WebCore::InspectorResource::cachedResource):
        (WebCore::InspectorResource::type):
        (WebCore::InspectorResource::resourceData):
        * inspector/InspectorResource.h:
        (WebCore::InspectorResource::):
        (WebCore::InspectorResource::markWebSocket):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.Type.toString):
        (WebInspector.Resource.prototype.set type):
        (WebInspector.Resource.prototype._mimeTypeIsConsistentWithType):
        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceView.prototype._refreshRequestHeaders):
        (WebInspector.ResourceView.prototype._refreshResponseHeaders):
        (WebInspector.ResourceView.prototype._refreshHeaders):
        * inspector/front-end/inspector.css:
        (.resources-category-websockets, .resources-category-other):
        (.resources-category-websockets .resources-graph-bar):
        (.resources-category-websockets.resource-cached .resources-graph-bar):
        * inspector/front-end/inspector.js:
        (WebInspector.loaded):
        (WebInspector.updateResource):
        * websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::WebSocketChannel):
        (WebCore::WebSocketChannel::disconnect):
        (WebCore::WebSocketChannel::didOpen):
        (WebCore::WebSocketChannel::didClose):
        (WebCore::WebSocketChannel::processBuffer):
        (WebCore::WebSocketChannel::identifier):
        * websockets/WebSocketChannel.h:

2010-09-13  W. James MacLean  <wjmaclean@google.com>

        Reviewed by Darin Fisher.

        [chromium] Thumbnails not generated for GPU Rendered Pages
        https://bugs.webkit.org/show_bug.cgi?id=44127

        Replicates existing functionality, use existing tests.
        Adds pixel-readback for GPU composited pages to allow for thumbnailing,
        printing and other services to work with GPU rendered pages.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::getFramebufferPixels):
        * platform/graphics/chromium/LayerRendererChromium.h:
        (WebCore::LayerRendererChromium::rootLayerTextureSize):

2010-09-13  Kinuko Yasuda  <kinuko@chromium.org>

        Unreviewed, build fix for Gtk.

        * bindings/js/JSEntryCustom.cpp:

2010-09-13  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Adam Barth.

        Make FileEntry and DirectoryEntry methods accessible via Entry instance
        https://bugs.webkit.org/show_bug.cgi?id=45553

        FileEntry- and DirectoryEntry- specific methods must be available on Entry object based on its internal type.

        Added custom toJS/toV8 implementation to Entry interface.

        No new tests; test will be added later when we have complete implementation for the API.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSEntryCustom.cpp: Added.
        (WebCore::toJS):
        * bindings/v8/custom/V8EntryCustom.cpp: Added.
        (WebCore::toV8):
        * fileapi/DirectoryEntry.h: Nits fix.
        * fileapi/DirectoryEntry.idl: Added ConvertUndefinedOrNullToString to path parameter.
        * fileapi/Entry.idl: Added CustomToJS attribute.
        * fileapi/FileEntry.cpp:
        (WebCore::FileEntry::createWriter):
        (WebCore::FileEntry::file):
        * fileapi/FileEntry.h:
        * fileapi/FileEntry.idl:

2010-09-13  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        REGRESSION: In Gmail, a crash occurs at getDoubleValue() when applying a text color to a new line
        https://bugs.webkit.org/show_bug.cgi?id=45632

        Test: editing/execCommand/query-font-size-with-typing-style.html

        The crash was caused by selectionStartCSSPropertyValue's deleting nodeToRemove before
        retrieving the font-size property. Fixed the bug by moving the removal code to the end of the function.

        * editing/Editor.cpp:
        (WebCore::Editor::selectionStartCSSPropertyValue):

2010-09-13  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Darin Adler.

        [BREWMP] Remove WebCore namespace in SSLKeyGeneratorBrew.cpp
        https://bugs.webkit.org/show_bug.cgi?id=45690

        WebCore namespace is not required because getSupportedKeySizes and signedPublicKeyAndChallengeString are already
        in namespace WebCore block.

        * platform/brew/SSLKeyGeneratorBrew.cpp:
        (WebCore::getSupportedKeySizes):
        (WebCore::signedPublicKeyAndChallengeString):

2010-09-13  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Code simplification needed in Atk Wrapper
        https://bugs.webkit.org/show_bug.cgi?id=45687

        Use TextIterator::rangeLength() to calculate endOffset

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (getSelectionOffsetsForObject): Don't manually iterate over a
        artificial new range but just call TextIterator::rangeLength on
        the range created between the start and end positions.

2010-09-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Alice Liu.

        Clean up xcode project.

        * WebCore.xcodeproj/project.pbxproj:

2010-09-13  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Geoff Garen.

        JavaScript dialog should not deactivate media element
        https://bugs.webkit.org/show_bug.cgi?id=45688

        Test: http/tests/media/reload-after-dialog.html

        * bindings/generic/ActiveDOMCallback.cpp:
        (WebCore::ActiveDOMObjectCallbackImpl::suspend): Add ReasonForSuspension parameter.

        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::setJavaScriptPaused): Pass new parameter to suspendActiveDOMObjects.

        * dom/ActiveDOMObject.cpp:
        (WebCore::ActiveDOMObject::suspend): Add ReasonForSuspension parameter.
        * dom/ActiveDOMObject.h:

        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::suspendActiveDOMObjects): Ditto.
        * dom/ScriptExecutionContext.h:

        * history/CachedFrame.cpp:
        (WebCore::CachedFrame::CachedFrame): Pass new parameter to suspendActiveDOMObjects.

        * html/HTMLMarqueeElement.cpp:
        (WebCore::HTMLMarqueeElement::suspend): Add ReasonForSuspension parameter.
        * html/HTMLMarqueeElement.h:

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::stop): Deal with element being suspended.
        (WebCore::HTMLMediaElement::suspend): Do nothing unless reason for suspension is document
        becoming inactive.
        * html/HTMLMediaElement.h:

        * page/PageGroupLoadDeferrer.cpp:
        (WebCore::PageGroupLoadDeferrer::PageGroupLoadDeferrer): Pass WillShowDialog to suspendActiveDOMObjects.

        * page/SuspendableTimer.cpp:
        (WebCore::SuspendableTimer::suspend): Add ReasonForSuspension parameter.
        * page/SuspendableTimer.h:

        * websockets/WebSocket.cpp:
        (WebCore::WebSocket::suspend): Ditto.
        * websockets/WebSocket.h:

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::suspend): Ditto.
        * xml/XMLHttpRequest.h:

2010-09-13  Sam Weinig  <sam@webkit.org>

        Fix the mac build.

        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::passMousePressEventToSubframe):

2010-09-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Can't scroll on Bugzilla patch review pages on Mac with WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=43555

        <rdar://problem/8421386> WebKit2: gmail.com is completely unresponsive to clicks
        <rdar://problem/8276298> Can't scroll on Bugzilla patch review pages on Mac with WebKit2 (43555)

        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::passWheelEventToWidget):
        (WebCore::frameHasPlatformWidget):
        (WebCore::EventHandler::passMousePressEventToSubframe):
        (WebCore::EventHandler::passMouseMoveEventToSubframe):
        (WebCore::EventHandler::passMouseReleaseEventToSubframe):
        Add WebKit2 mode for these functions based on the presence of a platform widget for a
        FrameView.

2010-09-13  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Kenneth Rohde Christiansen.

        [WINCE] Buildfix for ViewportArguments.cpp
        https://bugs.webkit.org/show_bug.cgi?id=45678

        Use fabs() instead of abs().
        This patch also fixes the return value, when
        the value is between -1 and 1.

        * dom/ViewportArguments.cpp:
        (WebCore::findUserScalableValue):

2010-09-13  Darin Adler  <darin@apple.com>

        Reviewed by Adam Barth.

        Preparation for eliminating deprecatedParseURL
        https://bugs.webkit.org/show_bug.cgi?id=45695

        Added new HTMLParserIdioms source file, with a name inspired by the HTML
        specification, which has a section defining things like "space character"
        that talks about common parser idioms. These are idioms for the main HTML
        parser and for parsers for various microlanguages as well.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        Added HTMLParserIdioms.

        * css/CSSHelper.h: Fixed indentation and comments here. Point to the new
        stripLeadingAndTrailingHTMLSpaces function.

        * html/parser/HTMLParserIdioms.cpp: Added.
        * html/parser/HTMLParserIdioms.h: Added.

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::ExternalCharacterTokenBuffer::skipLeadingWhitespace):
        (WebCore::HTMLTreeBuilder::ExternalCharacterTokenBuffer::takeLeadingWhitespace):
        (WebCore::HTMLTreeBuilder::ExternalCharacterTokenBuffer::takeLeadingNonWhitespace):
        (WebCore::HTMLTreeBuilder::ExternalCharacterTokenBuffer::takeRemainingWhitespace):
        Updated for name changes.

        * html/parser/HTMLTreeBuilder.h: Moved functions to HTMLParserIdioms.h.

        * html/HTMLInputElement.cpp:
        * html/HTMLMeterElement.cpp:
        * html/HTMLProgressElement.cpp:
        * html/StepRange.cpp:
        * rendering/RenderSlider.cpp:
        Updated includes.

        * svg/SVGImageLoader.cpp:
        (WebCore::SVGImageLoader::sourceURI): Fixed incorrect use of deprecatedParseURL.
        This is for use on the attribute value before building the URL, not on the URL
        after building it. I did not add a test case; this is an obscure corner and soon
        we will be moving to stripLeadingAndTrailingHTMLSpaces anyway.
        * wml/WMLImageLoader.cpp:
        (WebCore::WMLImageLoader::sourceURI): Ditto.

2010-09-13  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        AX: REGRESSION: WebKit does not report label of web popup buttons
        https://bugs.webkit.org/show_bug.cgi?id=45715

        Test: platform/mac/accessibility/popup-button-title.html

        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::title):

2010-09-13  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Dumitru Daniliuc.

        Expose Flags constructor if FileSystem API is Enabled
        https://bugs.webkit.org/show_bug.cgi?id=45165

        This change also includes:
        - Changed Flags' attribute names from UPPERCASE to camelCase to reflect the recent spec change.
          http://dev.w3.org/2009/dap/file-system/file-dir-sys.html#the-flags-interface
        - Enhanced EnabledAtRuntime attribute to take parameter that is used to generate a RuntimeEnabledFeatures method name.

        No new tests; tests will be added when we fully expose the interface.

        * bindings/v8/V8DOMWindowCustom.cpp: Added custom getter for FlagsConstructor.
        * fileapi/Flags.idl: Changed attribute names to camelCase.
        * page/DOMWindow.idl: Exposed Flags constructor.

        * bindings/scripts/CodeGenerator.pm: Updated the WK_lcfirst hack to work around getter method for 'create' (create() should be avoided as it's widely used to instantiate an object).
        * bindings/scripts/CodeGeneratorV8.pm: Added EnabledAtRuntime=FeatureName support.
        * bindings/scripts/test/CPP/WebDOMTestObj.cpp:
        (WebDOMTestObj::create):
        (WebDOMTestObj::setCreate):
        * bindings/scripts/test/CPP/WebDOMTestObj.h:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        (webkit_dom_test_obj_set_property):
        (webkit_dom_test_obj_get_property):
        (webkit_dom_test_obj_class_init):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        * bindings/scripts/test/ObjC/DOMTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.mm:
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjInternal::createAttrGetter):
        (WebCore::TestObjInternal::createAttrSetter):
        (WebCore::TestObjInternal::enabledAtRuntimeAttr1AttrGetter):
        (WebCore::TestObjInternal::enabledAtRuntimeAttr1AttrSetter):
        (WebCore::TestObjInternal::enabledAtRuntimeAttr2AttrGetter):
        (WebCore::TestObjInternal::enabledAtRuntimeAttr2AttrSetter):
        (WebCore::TestObjInternal::enabledAtRuntimeMethod1Callback):
        (WebCore::TestObjInternal::enabledAtRuntimeMethod2Callback):
        (WebCore::ConfigureV8TestObjTemplate):

2010-09-13  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        "Implement" EOF processing in AfterBodyMode and AfterAfterBodyMode
        https://bugs.webkit.org/show_bug.cgi?id=45647

        Implements the notImplemented by doing nothing, which is the proper
        behavior according to the spec.

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processEndOfFile):

2010-09-13  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        More trivial EOF handling in tree builder
        https://bugs.webkit.org/show_bug.cgi?id=45648

        The spec says to treat these modes like the InBodyMode, which is what
        this patch does.  Doing so is indistinguishable from our current
        behavior, which is why we didn't catch this based on tests.

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processEndOfFile):

2010-09-13  James Robinson  <jamesr@chromium.org>

        Reviewed by Kenneth Russell.

        SharedGraphicsContext3D's texture cache holds on to images after free
        https://bugs.webkit.org/show_bug.cgi?id=45706

        Each SharedGraphicsContext3D keeps a cache of uploaded textures keyed by NativeImagePtrs.
        Whenever the backing native image is deleted it needs to let the SharedGraphicsContext3D know
        so that the cache entry and associated texture can also be removed.

        * platform/graphics/gpu/SharedGraphicsContext3D.cpp:
        (WebCore::SharedGraphicsContext3D::SharedGraphicsContext3D):
        (WebCore::SharedGraphicsContext3D::~SharedGraphicsContext3D):
        (WebCore::SharedGraphicsContext3D::removeTextureFor):
        (WebCore::SharedGraphicsContext3D::removeTexturesFor):
        (WebCore::SharedGraphicsContext3D::allContexts):
        * platform/graphics/gpu/SharedGraphicsContext3D.h:
        * platform/graphics/skia/NativeImageSkia.cpp:
        (WebCore::NativeImageSkia::~NativeImageSkia):
        * platform/graphics/skia/NativeImageSkia.h:

2010-09-13  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by David Kilzer.

        AX: accessibilityIsIgnored is returning nil when return value expects a BOOL
        https://bugs.webkit.org/show_bug.cgi?id=45548

        Test: platform/mac/accessibility/element-is-ignored.html

        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityIsIgnored]):

2010-09-13  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        CrashTracer: 874 crashes in Safari at com.apple.WebCore: WebCore::AccessibilityTable::isTableExposableThroughAccessibility + 663
        https://bugs.webkit.org/show_bug.cgi?id=45697

        Inside of AccessibilityTableRow, parentTable() should not use getOrCreate() on the parent table, because the render table may
        be in a bad state and accessing internal variables can lead to a crash.

        Test: platform/mac/accessibility/updating-attribute-in-table-row-crash.html

        * accessibility/AccessibilityTableRow.cpp:
        (WebCore::AccessibilityTableRow::parentTable):

2010-09-13  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Implement EOF handling in TextMode
        https://bugs.webkit.org/show_bug.cgi?id=45644

        This patch is actually covered by a bunch of tests.  We were just
        magically passing the tests before because of some nutty code in
        Document.cpp.

        * dom/Document.cpp:
        (WebCore::Document::implicitClose):
            - This code was masking the notImplemented in the tree builder.
              I also removed the use of the setting because it wasn't working
              properly anyway.  I'll implement a working version shortly.
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processEndOfFile):
            - Implement per the spec.

2010-09-13  Enrica Casucci  <enrica@apple.com>

        Reviewed by Sam Weining.

        Paste should be implemented in WebCore like Copy and Cut for Mac also.
        https://bugs.webkit.org/show_bug.cgi?id=45494
        <rdar://problem/7660537>

        On the Mac platform, the implementation of the paste operation is all done
        at the WebKit level. In order to support it on WebKit2 it is necessary to
        refactor the code and move this functionality at the level of WebCore like
        we already have on Windows.
        The original code relies on some in AppKit functions that call back into
        WebKit causing problems in WebKit2. All this functionality has been moved
        at the level of the editor client where it can be dealt with appropriately.

        * editing/Editor.cpp:
        (WebCore::Editor::shouldInsertFragment):
        * editing/mac/EditorMac.mm: extended to support Mail specific scenarios.
        (WebCore::Editor::pasteWithPasteboard):
        * loader/EmptyClients.h:
        (WebCore::EmptyFrameLoaderClient::canShowMIMETypeAsHTML): Added.
        (WebCore::EmptyEditorClient::documentFragmentFromAttributedString): Added.
        (WebCore::EmptyEditorClient::setInsertionPasteboard): Added to support Mail.
        * loader/FrameLoaderClient.h:
        * page/EditorClient.h:
        * platform/Pasteboard.h:
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::writeSelection): replaced call to Appkit with one that
        doesn't calll back into WebKit.
        (WebCore::Pasteboard::documentFragmentWithImageResource): Re-implemented at the
        WebCore level.
        (WebCore::Pasteboard::documentFragmentWithRtf): Re-implemented at the
        WebCore level.
        (WebCore::uniqueURLWithRelativePart): Added.
        (WebCore::Pasteboard::documentFragment): Extended to include all the functionality
        provided in documentFragmentFromPasteboard in WebHTMLView.mm.

2010-09-13  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Gtk] Reduce the size of the shadow buffer in the paths using the clip region
        https://bugs.webkit.org/show_bug.cgi?id=44699

        Intersect the clip bounding rect with the path that we are going
        to use to create the shadow in order to reduce the region we have
        to blur.

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

210-09-13  Darin Fisher  <darin@chromium.org>

        Reviewed by David Levin.

        Add option to conditionally compile smooth scrolling support.
        https://bugs.webkit.org/show_bug.cgi?id=45689

        The OS(WINDOWS) conditional becomes unnecessary since
        ENABLE(SMOOTH_SCROLLING) should only be specified on
        platforms that have a smooth scrolling implementation.

        * platform/ScrollAnimator.cpp:
        * platform/ScrollAnimatorWin.cpp:
        * platform/ScrollAnimatorWin.h:

2010-09-13  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Kent Tamura.

        Move functions of StyledMarkupAccumulator below that of MarkupAccumulator
        https://bugs.webkit.org/show_bug.cgi?id=45624

        Moved the declaration of StyledMarkupAccumulator and the definitions of its member functions
        to below the definitions of MarkupAccumulator's member functions.

        No new tests are added since this is a cleanup.

        * editing/markup.cpp:
        (WebCore::StyledMarkupAccumulator::StyledMarkupAccumulator):
        (WebCore::StyledMarkupAccumulator::appendElement):
        (WebCore::StyledMarkupAccumulator::shouldAnnotate):
        (WebCore::StyledMarkupAccumulator::wrapWithNode):
        (WebCore::StyledMarkupAccumulator::wrapWithStyleNode):
        (WebCore::StyledMarkupAccumulator::takeResults):
        (WebCore::StyledMarkupAccumulator::appendText):
        (WebCore::StyledMarkupAccumulator::renderedText):
        (WebCore::StyledMarkupAccumulator::stringValueForRange):
        (WebCore::styleFromMatchedRulesForElement):
        (WebCore::StyledMarkupAccumulator::removeExteriorStyles):
        (WebCore::needInterchangeNewlineAfter):
        (WebCore::styleFromMatchedRulesAndInlineDecl):
        (WebCore::removeEnclosingMailBlockquoteStyle):
        (WebCore::removeDefaultStyles):

2010-09-13  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Leak in the GraphicsContextCairo drawPathShadow
        https://bugs.webkit.org/show_bug.cgi?id=44959

        Fix a leak of the cairo_path.

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::drawPathShadow):
        * platform/graphics/cairo/OwnPtrCairo.cpp:
        (WTF::cairo_path_t):
        * platform/graphics/cairo/OwnPtrCairo.h:

2010-09-13  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Fix </sarcasm>
        https://bugs.webkit.org/show_bug.cgi?id=45645

        Umm... Yeah.

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processEndTagForInBody):

2010-09-13  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Reviewed by Darin Adler.

        [WML] Fix build breaks when WML is enabled
        https://bugs.webkit.org/show_bug.cgi?id=45628

        There are build breaks by Bug 22382 when WML is enabled. The handleLinkClick() has an event parameter.
        So, we need to set an event when wml invoke the handleLinkClick(). And, doTextFieldCommandFromEvent()
        was moved to editor. So, we need to mofidy the invocation in WMLInputElement.cpp 

        * wml/WMLAElement.cpp:
        (WebCore::WMLAElement::defaultEventHandler):
        * wml/WMLInputElement.cpp:
        (WebCore::WMLInputElement::defaultEventHandler):

2010-09-13  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] When a feature is disabled by default, the source necessary to build it are not included in the distribution
        https://bugs.webkit.org/show_bug.cgi?id=45230

        No new tests as this is just a build change.

        * GNUmakefile.am: Move as many sources as possible to the SOURCES primary.
        Others should be moved over time as we solve issues with them.

2010-09-13  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        REGRESSION (r64816-r64889): Crash in WebCore::AccessibilityRenderObject
        https://bugs.webkit.org/show_bug.cgi?id=43807

        Ensure that visiblePositionForPoint can handle non RenderBoxModelObject types.

        Test: platform/mac/accessibility/visible-position-crash-for-text-node.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::visiblePositionForPoint):

2010-09-13  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Andreas Kling.

        [Qt] DOM listeners get wrong keycodes for some keys
        https://bugs.webkit.org/show_bug.cgi?id=43365

        Produce the proper keycodes for the print screen key as well as the
        keypad insert and delete keys.

        * platform/qt/PlatformKeyboardEventQt.cpp:
        (WebCore::windowsKeyCodeForKeyEvent): Fix keycode translation for the mentioned keys.

2010-09-13  Jonathan Dixon  <joth@chromium.org>

        Reviewed by Steve Block.

        [chromium] Port test shell geolocation fixes to DRT
        https://bugs.webkit.org/show_bug.cgi?id=45313

        Also re-apply rolled out patch http://trac.webkit.org/changeset/66886 :-
        Add missing virtual destructor to the abstract base class.

        * platform/chromium/GeolocationServiceChromium.cpp:
        (WebCore::GeolocationServiceBridge::~GeolocationServiceBridge):
        * platform/chromium/GeolocationServiceChromium.h:

2010-09-13  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: upstream testExpandScope debugger test
        https://bugs.webkit.org/show_bug.cgi?id=45260

        Test: inspector/debugger-expand-scope.html

        * inspector/front-end/InjectedScript.js: return "Arguments" as class name for arguments variable in v8.
        (injectedScriptConstructor.):

2010-09-13  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] ATs should be able to select/unselect text
        https://bugs.webkit.org/show_bug.cgi?id=25673

        Implement AtkText's setSelection and removeSelection functions

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::visiblePositionRangeForRange):
        Moved some GTK specific code from a ifdef-endif region to
        AccessibilityObjectAtk.cpp
        * accessibility/AccessibilityObject.h:
        * accessibility/gtk/AccessibilityObjectAtk.cpp:
        (WebCore::AccessibilityObject::getLengthForTextRange): New.
        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (webkit_accessible_text_remove_selection): Implemented following
        the lead of GAIL's implementation of the AtkText interface.
        (webkit_accessible_text_set_selection): Implemented following
        the lead of GAIL's implementation of the AtkText interface.
        (webkit_accessible_text_set_caret_offset): Changed to directly use
        visiblePositionRangeForRange now that there's no longer a problem
        with that, as it was in the past (only worked for text controls).

2010-08-27  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Antti Koivisto.

        Update support for the viewport meta tag algorithm, to
        match the following draft spec:

        http://people.opera.com/rune/TR/ED-css-viewport-20100806/

        Add common handling of viewport meta tag based on new Opera spec
        https://bugs.webkit.org/show_bug.cgi?id=44201

        Tests: fast/viewport/viewport-1.html
               fast/viewport/viewport-10.html
               fast/viewport/viewport-100.html
               fast/viewport/viewport-101.html
               fast/viewport/viewport-102.html
               fast/viewport/viewport-103.html
               fast/viewport/viewport-104.html
               fast/viewport/viewport-105.html
               fast/viewport/viewport-106.html
               fast/viewport/viewport-107.html
               fast/viewport/viewport-108.html
               fast/viewport/viewport-109.html
               fast/viewport/viewport-11.html
               fast/viewport/viewport-110.html
               fast/viewport/viewport-111.html
               fast/viewport/viewport-112.html
               fast/viewport/viewport-113.html
               fast/viewport/viewport-114.html
               fast/viewport/viewport-115.html
               fast/viewport/viewport-116.html
               fast/viewport/viewport-117.html
               fast/viewport/viewport-118.html
               fast/viewport/viewport-119.html
               fast/viewport/viewport-12.html
               fast/viewport/viewport-120.html
               fast/viewport/viewport-121.html
               fast/viewport/viewport-122.html
               fast/viewport/viewport-123.html
               fast/viewport/viewport-124.html
               fast/viewport/viewport-125.html
               fast/viewport/viewport-126.html
               fast/viewport/viewport-127.html
               fast/viewport/viewport-13.html
               fast/viewport/viewport-14.html
               fast/viewport/viewport-15.html
               fast/viewport/viewport-16.html
               fast/viewport/viewport-17.html
               fast/viewport/viewport-18.html
               fast/viewport/viewport-19.html
               fast/viewport/viewport-2.html
               fast/viewport/viewport-20.html
               fast/viewport/viewport-21.html
               fast/viewport/viewport-22.html
               fast/viewport/viewport-23.html
               fast/viewport/viewport-24.html
               fast/viewport/viewport-25.html
               fast/viewport/viewport-26.html
               fast/viewport/viewport-27.html
               fast/viewport/viewport-28.html
               fast/viewport/viewport-29.html
               fast/viewport/viewport-3.html
               fast/viewport/viewport-30.html
               fast/viewport/viewport-31.html
               fast/viewport/viewport-32.html
               fast/viewport/viewport-33.html
               fast/viewport/viewport-34.html
               fast/viewport/viewport-35.html
               fast/viewport/viewport-36.html
               fast/viewport/viewport-37.html
               fast/viewport/viewport-38.html
               fast/viewport/viewport-39.html
               fast/viewport/viewport-4.html
               fast/viewport/viewport-40.html
               fast/viewport/viewport-41.html
               fast/viewport/viewport-42.html
               fast/viewport/viewport-43.html
               fast/viewport/viewport-44.html
               fast/viewport/viewport-45.html
               fast/viewport/viewport-46.html
               fast/viewport/viewport-47.html
               fast/viewport/viewport-48.html
               fast/viewport/viewport-49.html
               fast/viewport/viewport-5.html
               fast/viewport/viewport-50.html
               fast/viewport/viewport-51.html
               fast/viewport/viewport-52.html
               fast/viewport/viewport-53.html
               fast/viewport/viewport-54.html
               fast/viewport/viewport-55.html
               fast/viewport/viewport-56.html
               fast/viewport/viewport-57.html
               fast/viewport/viewport-58.html
               fast/viewport/viewport-59.html
               fast/viewport/viewport-6.html
               fast/viewport/viewport-60.html
               fast/viewport/viewport-61.html
               fast/viewport/viewport-62.html
               fast/viewport/viewport-63.html
               fast/viewport/viewport-64.html
               fast/viewport/viewport-65.html
               fast/viewport/viewport-66.html
               fast/viewport/viewport-67.html
               fast/viewport/viewport-68.html
               fast/viewport/viewport-69.html
               fast/viewport/viewport-7.html
               fast/viewport/viewport-70.html
               fast/viewport/viewport-71.html
               fast/viewport/viewport-72.html
               fast/viewport/viewport-73.html
               fast/viewport/viewport-74.html
               fast/viewport/viewport-75.html
               fast/viewport/viewport-76.html
               fast/viewport/viewport-77.html
               fast/viewport/viewport-78.html
               fast/viewport/viewport-79.html
               fast/viewport/viewport-8.html
               fast/viewport/viewport-80.html
               fast/viewport/viewport-81.html
               fast/viewport/viewport-82.html
               fast/viewport/viewport-83.html
               fast/viewport/viewport-84.html
               fast/viewport/viewport-85.html
               fast/viewport/viewport-86.html
               fast/viewport/viewport-87.html
               fast/viewport/viewport-88.html
               fast/viewport/viewport-9.html
               fast/viewport/viewport-90.html

        * dom/ViewportArguments.cpp:
        (WebCore::findConfigurationForViewportData):
        (WebCore::findSizeValue):
        (WebCore::findScaleValue):
        (WebCore::findUserScalableValue):
        (WebCore::findTargetDensityDPIValue):
        (WebCore::setViewportFeature):
        * dom/ViewportArguments.h:
        (WebCore::ViewportArguments::):
        (WebCore::ViewportArguments::ViewportArguments):
        (WebCore::ViewportArguments::hasCustomArgument):

2010-09-13  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Don't add empty strings to list of supported image MIME types
        https://bugs.webkit.org/show_bug.cgi?id=45643

        After <http://trac.webkit.org/changeset/67355> getMIMETypeForExtension()
        returns an empty string instead of "application/octet-stream" for unsupported
        extensions. Don't add these to the list of supported types, and clean out
        the logic that removed "application/octet-stream" from supported types.

        Fixes crash in initializeMIMETypeRegistry() due to inserting String() into
        a HashSet<String>.

        * platform/MIMETypeRegistry.cpp:
        (WebCore::initializeSupportedImageMIMETypes):
        (WebCore::initializeSupportedImageMIMETypesForEncoding):

2010-09-13  Adam Barth  <abarth@webkit.org>

        Attempted Qt build fix.

        * html/parser/HTMLElementStack.cpp:

2010-09-13  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Apply spec changes to InForeignContentMode
        https://bugs.webkit.org/show_bug.cgi?id=45636

        Now breaking out of foreign content doesn't always bring you back to
        HTML.  If you have a foreign content element that can contain HTML, you
        just get brought back to that element.

        * html/parser/HTMLElementStack.cpp:
        (WebCore::HTMLNames::isForeignContentScopeMarker):
        (WebCore::HTMLElementStack::popUntilForeignContentScopeMarker):
        * html/parser/HTMLElementStack.h:
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTag):
        (WebCore::HTMLTreeBuilder::processEndOfFile):

2010-09-13  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Convert notImplemented() to ASSERT_NOT_REACHED
        https://bugs.webkit.org/show_bug.cgi?id=45639

        The reason we never implemented this state is because it's not actually
        reachable.

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTag):

2010-09-13  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Kenneth Rohde Christiansen.

        [WINCE] Buildfix for ScrollAnimatorWin
        https://bugs.webkit.org/show_bug.cgi?id=45595

        Use fabs() instead of abs().

        * platform/ScrollAnimatorWin.cpp:
        (WebCore::ScrollAnimatorWin::scroll):
        (WebCore::ScrollAnimatorWin::animateScroll):

2010-09-13  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Remove fixed FIXME
        https://bugs.webkit.org/show_bug.cgi?id=45637

        The spec made assertions that were false.  Hixie fixed the spec by
        removing the assertions.  There's no need to keep these FIXMEs in the
        code.

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processEndTagForInCell):

2010-09-12  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Remove FIXME now that the HTML5 spec has been updated
        https://bugs.webkit.org/show_bug.cgi?id=45634

        The spec changed to say what we do here so this FIXME isn't needed
        anymore.

        Tests: fast/parser/form-pointer-1.html
               fast/parser/form-pointer-2.html
               fast/parser/form-pointer-3.html
               fast/parser/form-pointer-4.html

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTagForInTable):

2010-09-12  Robin Qiu  <robin.qiu@torchmobile.com.cn>

        Reviewed by Antonio Gomes.

        https://bugs.webkit.org/show_bug.cgi?id=18768
        Fixed a bug in scroll flow. When we don't have scrollbars, we need to
        repaintFixedElementsAfterScrolling(), sendScrollEvent() ... as well as
        scrollContents();

        Tests: scrollbars/scrollevent-iframe-no-scrolling-wheel.html
               scrollbars/scrollevent-iframe-no-scrolling.html

        * page/FrameView.cpp:
        (WebCore::FrameView::valueChanged): Added.
        * page/FrameView.h: Added a new method.
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::valueChanged): Added.
        (WebCore::ScrollView::updateScrollbars):
        * platform/ScrollView.h: Added a new method.

2010-09-10  MORITA Hajime  <morrita@google.com>

        Reviewed by Tony Chang.

        [Chromium] Implement textInputController.hasSpellingMarker() for Chromium
        https://bugs.webkit.org/show_bug.cgi?id=45441
        
        Added an  API for testing marker state. 
        We locate this here instead of DRT for sharing the logic between
        multiple ports.

        * WebCore.exp.in:
        * editing/Editor.cpp:
        (WebCore::Editor::selectionStartHasSpellingMarkerFor):
        * editing/Editor.h:

2010-09-12  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Adoption agency should use takeAllChildrenFrom
        https://bugs.webkit.org/show_bug.cgi?id=45570

        Before this patch, we were using an unsafe pattern of walking the
        sibling list without grabbing references.  Instead, we should use the
        shiny new takeAllChildrenFrom method that shoves the children into a
        vector first.  Also, update takeAllChildrenFrom to handle the case
        where the old parent is attached.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::takeAllChildrenFrom):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::callTheAdoptionAgency):
        * html/parser/HTMLTreeBuilder.h:

2010-09-12  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        isParsingFragment assert hit in new treebuilder
        https://bugs.webkit.org/show_bug.cgi?id=45621

        Update our list of special tags to match the spec.

        * html/parser/HTMLTreeBuilder.cpp:

2010-09-12  Robert Hogan  <robert@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] Fix http/tests/navigation/reload-subframe-object.html

        We need to bring our use of getMimeTypeForPath() and
        getMimeTypeForExtension() into line with WebCore expectations.

        We should use MIMETypeRegistry::getMIMETypeForExtension() for cases
        where an empty mimetype should be returned if no match is found, and
        MIMETypeRegistry::getMIMETypeForPath() for cases where
        'application/octet-stream' should be returned if no match is found.

        Fixes http/tests/navigation/reload-subframe-object.html

        Based on findings in webkit.org/b/31398 and webkit.org/b/15554.

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

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

2010-09-12  Dan Bernstein  <mitz@apple.com>

        Reviewed by Adele Peterson.

        Neglect unlikely hyphenation opportunities
        https://bugs.webkit.org/show_bug.cgi?id=45606

        Avoid looking for hyphenation points in about 40% of the cases at the cost of missing about
        3% of the hyphenation opportunities.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::tryHyphenating): Bail out if the widest the prefix before the hyphen can be is no more
        than 5/4 the font size.

2010-09-12  Oswald Buddenhagen  <oswald.buddenhagen@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] fix qt_webkit_version.pri install for in-Qt builds

        Always add the target, even if building inside Qt - as opposed to the
        headers and libraries, there are no rules for that coming from
        qbase.pri.

        Task-number: QTBUG-13306

        * WebCore.pro:

2010-09-12  Oswald Buddenhagen  <oswald.buddenhagen@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Let QtWebKit inject itself into the qt configuration

        i.e., don't explicitly deal with qt_webkit_version.pri outside of the
        webkit source directory.

        Task-number: QTBUG-12379

        * WebCore.pro:

2010-09-12  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Build fix.

        * WebCore.pro: Re-add erroneously removed sources.

2010-09-12  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Remove Path::closeSubpath() workaround for broken miter joins
        https://bugs.webkit.org/show_bug.cgi?id=45618

        Removed Path::closeCanvasSubpath() and share the logic between Canvas and SVG
        paths. The problem was actually in Qt's path stroker and has been fixed for Qt 4.7.1.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::closePath):
        * platform/graphics/Path.h:
        * platform/graphics/qt/PathQt.cpp:

2010-09-12  Simon Hausmann  <simon.hausmann@nokia.com>

        Fix the Gtk and minimal builds.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::npObject): Correct the #ifdefs.
        (WebCore::PluginView::bindingInstance): Moved npErr variable
        into npObject() function where it is used.

2010-09-12  Simon Hausmann  <simon.hausmann@nokia.com>

        [Qt] Prospective build fix for minimal build.

        * plugins/PluginView.cpp: Guard newly added function
        by ENABLE_NETSCAPE_PLUGIN feature.
        (WebCore::PluginView::npObject):
        * plugins/PluginView.h:

2010-09-12  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Add support for binding QtWebKit to a QScriptEngine.

        The ScriptController owns the V8 context, and this patch
        for the Qt build also gives it a QScriptEngine, that has
        been instructed to adopt the V8 context.

        This is the enabler for the QObject bindings, used in
        the API and DRT.

        * WebCore.pro:
        * bindings/v8/ScriptController.cpp: Include QScriptEngine
        for the Qt build, to let the ~ScriptController destructor
        find the QScriptEngine destructor (via OwnPtr).
        * bindings/v8/ScriptController.h: Declare getters.
        * bindings/v8/ScriptControllerQt.cpp: Added.
        (WebCore::ScriptController::qtScriptEngine): Implement
        engine adoption.

2010-09-12  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Last bits and pieces for a V8 build.

        When building with V8, get it from QtScript.

        * WebCore.pro: Use QtScript, removed non-existant
        bridge files from the build.

2010-09-12  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Add PlatformBridge for V8 build.

        Add the minimalisting platform bridge with the two
        methods needed by NPV8Object.cpp.

        * WebCore.pro:
        * platform/qt/PlatformBridge.h: Added.
        * platform/qt/PlatformBridgeQt.cpp: Added.
        (WebCore::PlatformBridge::popupsAllowed):
        (WebCore::PlatformBridge::pluginScriptableObject):
        * plugins/PluginView.cpp: Refactor the plugin object
        retrieval code into a separate function, called by
        bindingInstance() and PlatformBridge.
        (WebCore::PluginView::npObject):
        (WebCore::PluginView::bindingInstance):
        * plugins/PluginView.h:

2010-09-11  Jer Noble  <jer.noble@apple.com>

        Reviewed by Eric Carlson.

        http/tests/media/text-served-as-text.html failing on Windows (Debug+Release)
        https://bugs.webkit.org/show_bug.cgi?id=45603

        Disable the eat/text components under Windows the same way as we do on the Mac.

        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
        * platform/graphics/win/QTMovie.cpp:
        * platform/graphics/win/QTMovie.h:

2010-09-12  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Andreas Kling.

        Fix compilation of the V8 bindings on X11 with Qt.

        This changes brings the file in sync with its copy in bridge/,
        adding additional conflicting X11 keywords to undef. This is
        a temporary fix until the file is removed altogether, which is
        tracked in https://bugs.webkit.org/show_bug.cgi?id=45617

        * bindings/v8/npruntime_internal.h:

2010-09-12  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Andreas Kling.

        Fix compilation of the V8 bindings on X11 with Qt.

        These headers include npruntime, which drag on X11Resources.h, which
        among other things #define's None and Boolean. Later on v8.h is included,
        which declares these in enums and therefore conflicts. npruntime_internal.h
        was introduced exactly to address this problem by including npruntime.h
        and undeff'ing the offending constants.

        * bindings/v8/V8Helpers.h:
        * bindings/v8/V8NPObject.h:
        * bindings/v8/V8NPUtils.h:

2010-09-12  Simon Hausmann  <simon.hausmann@nokia.com>

        Gtk build fix.

        Use false instead of False after
        http://trac.webkit.org/changeset/67323

        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::updatePluginWidget):
        (WebCore::PluginView::paint):

2010-09-12  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Fix the compilation of V8Binding.cpp when compiling with Qt.

        * bindings/v8/V8Binding.cpp:
        (WebCore::WebCoreStringResource::WebCoreStringResource): In this
        line an AtomicString should be converted to a WTF::String. The former
        has a conversion operator to the latter, to be able to call the
        WTF::String copy constructor. When compiling with Qt, then AtomicString
        also has a conversion operator to QString _and_ WTF::String has an
        implicit constructor that takes a QString. Therefore the compiler is
        confused and not sure which conversion to prefer, the one that isn't
        actually a conversion - going to WTF::String - or the conversion from
        AtomicString to QString and then constructing the WTF::String from
        a QString. To resolve this ambiguity we explicitly call the string()
        helper function on the AtomicString, which is equivalent to the
        operator WTF::String().

2010-09-12  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Andreas Kling.

        Fix the build without JSC.

        Complement http://trac.webkit.org/changeset/59826 and
        add missing JSC guards.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::bindingInstance):
        (WebCore::PluginView::privateBrowsingStateChanged):
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::dispatchNPEvent):
        (WebCore::PluginView::setNPWindowIfNeeded):
        (WebCore::PluginView::platformStart):

2010-09-12  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Andreas Kling.

        Fix compilation with V8 and XPath enabled.

        V8XPathNSResolver.cpp includes V8XPathNSResolver.h,
        which includes V8DOMWrapper.h as its first header.
        V8DOMWrapper.h then uses V8XPathNSResolver in an inline
        function, and gcc doesn't seem to like this, because
        at this point the type isn't known ("V8XPathNSResolver
        has not been declared"). Forward declaring the type
        doesn't help unfortunately: "incomplete type
        'WebCore::V8XPathNSResolver' used in nested name
        specifier".

        To resolve this circular dependency, this patch moves
        the inline function into the .cpp file.

        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getXPathNSResolver):
        * bindings/v8/V8DOMWrapper.h:

2010-09-12  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Andreas Kling.

        [Qt][X11] Fix build with V8 against X11 headers.

        Added "True" and "False" to the list of words
        we free from the X11 macro jail.

        * bridge/npruntime_internal.h:
        * config.h: The V8 bindings end up indirectly pulling
        in X11 headers and they use True/False. There's no
        central header apart from this one, so include the
        x11 fixing header here for Qt/X11/V8.
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::paint): Use false instead of False
        since False isn't available anymore.

2010-09-12  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Fix compilation with V8 and Qt.

        Use WebKit's page cache for ScriptCachedFrameData.

        * bindings/v8/ScriptCachedFrameData.h:

2010-09-12  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Andreas Kling.

        Fix compiler warning.

        NPClass has 13 members, the last one (NPConstructFunctionPtr construct) wasn't
        initialized explicitly.

        * bindings/v8/NPV8Object.cpp:

2010-09-12  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Martin Robinson.

        [Gtk] get_n_selections and get_selection fail when selecting text across object boundaries
        https://bugs.webkit.org/show_bug.cgi?id=26991

        Fix AtkText getNSelections() and getSelection() to work properly

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (selectionBelongsToObject): Check that both the selection intersects
        the node AND that the selection is not just "touching" one of the
        boundaries for the selected node. We want to check whether the
        node is actually inside the region, at least partially
        (getSelectionOffsetsForObject): New function to get the start and
        end offsets of a selection for a given accessible object.
        (webkit_accessible_text_get_selection): Return zero when both
        start and end offsets are equal, following the lead of GAIL.

2010-09-11  Adam Barth  <abarth@webkit.org>

        Reviewed by Sam Weinig.

        Make SecurityOrigin::canDisplay an instance function
        https://bugs.webkit.org/show_bug.cgi?id=45219

        This function was secretly an instance function because callers needed
        to pass in a document (which owns a SecurityOrigin).  Only the
        FrameLoader actually needs the method to be static.

        * WebCore.exp.in:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::isSafeToLoadURL):
        * loader/Cache.cpp:
        (WebCore::Cache::requestResource):
            - Notice that DocLoader::doc() can never be 0.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadFrameRequest):
        * loader/PingLoader.cpp:
        (WebCore::PingLoader::loadImage):
        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::loadMediaPlayerProxyPlugin):
        (WebCore::SubframeLoader::createJavaAppletWidget):
        (WebCore::SubframeLoader::loadSubframe):
        (WebCore::SubframeLoader::loadPlugin):
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::create):
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::canDisplay):
        (WebCore::SecurityOrigin::deprecatedCanDisplay):
        * page/SecurityOrigin.h:
        * plugins/PluginView.cpp:
        (WebCore::PluginView::load):

2010-09-11  Adam Barth  <abarth@webkit.org>

        Reviewed by Sam Weinig.

        Make SecurityOrigin::canDisplay an instance function
        https://bugs.webkit.org/show_bug.cgi?id=45219

        This function was secretly an instance function because callers needed
        to pass in a document (which owns a SecurityOrigin).  Only the
        FrameLoader actually needs the method to be static.

        * WebCore.exp.in:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::isSafeToLoadURL):
        * loader/Cache.cpp:
        (WebCore::Cache::requestResource):
            - Notice that DocLoader::doc() can never be 0.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadFrameRequest):
        * loader/PingLoader.cpp:
        (WebCore::PingLoader::loadImage):
        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::loadMediaPlayerProxyPlugin):
        (WebCore::SubframeLoader::createJavaAppletWidget):
        (WebCore::SubframeLoader::loadSubframe):
        (WebCore::SubframeLoader::loadPlugin):
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::create):
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::canDisplay):
        (WebCore::SecurityOrigin::deprecatedCanDisplay):
        * page/SecurityOrigin.h:
        * plugins/PluginView.cpp:
        (WebCore::PluginView::load):

2010-09-11  Simon Hausmann  <simon.hausmann@nokia.com>

        Unreviewed.

        [Qt] Trivial V8 build fix.

        * WebCore.pri: Add storage, workers and css to the include paths for the
        JS code generator.

2010-09-11  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] V8 port: Fix "WTF::String::utf8" returns incomplete type WTF::CString
        https://bugs.webkit.org/show_bug.cgi?id=45157

        Include CString.h where necessary. Chromium builds would get it from
        KURLGooglePrivate.h so this is only an issue for Qt + V8.

        * bindings/v8/V8Proxy.cpp:
        * inspector/InspectorDebuggerAgent.cpp:
        * inspector/InspectorProfilerAgent.cpp:
        * plugins/PluginDatabase.cpp:

2010-09-11  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] V8 port: webkit project files changes
        https://bugs.webkit.org/show_bug.cgi?id=45140

        * WebCore.pro: Removed unecessary common.pri inclusion from earlier patch.

2010-09-03  Vlad Burlik  <volodimir.burlik@nokia.com>, Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] V8 port: webcore project files changes
        https://bugs.webkit.org/show_bug.cgi?id=45141

        Modify webcore project files to include V8 javascript engine. By default disabled.

        * WebCore.pri:
        * WebCore.pro:
        * features.pri:

2010-09-11  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Simon Hausmann.

        Web Inspector: Include CString.h in generated files

        This is necessary for generated code that uses the CString
        returned by String::utf8() (from generateBackendDispatcher)

        Chromium builds already get CString.h from KURLGooglePrivate.h
        so this issue only occurs when building Qt against V8.

        * inspector/CodeGeneratorInspector.pm:

2010-09-11  Adele Peterson  <adele@apple.com>

        Reviewed by Sam Weinig.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=45587
        Move line clamp code to its own function.

        * rendering/RenderFlexibleBox.cpp:
        (WebCore::RenderFlexibleBox::layoutVerticalBox):
        (WebCore::RenderFlexibleBox::applyLineClamp):
        * rendering/RenderFlexibleBox.h:

2010-09-11  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Adam Barth.

        URIs in styles created via innerHTML are not resolved against the document's base URI
        https://bugs.webkit.org/show_bug.cgi?id=45565

        The dummy document used for fragment parsing created by 
        FragmentParsingContext should use the base URI of the fragment's
        document. Since (HTML)Document doesn't expose a setter for the base URI
        (and shouldn't), we allow it to be set by the constructor/create
        function.
        
        Also remove some obsolete code that references the legacy tree builder
        from HTMLElement that I happened to notice.

        Test: fast/innerHTML/innerHTML-uri-resolution.html

        * dom/Document.cpp:
        (WebCore::Document::Document):
        * dom/Document.h:
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::HTMLDocument):
        * html/HTMLDocument.h:
        (WebCore::HTMLDocument::create):
        * html/HTMLElement.cpp:
        (WebCore::createFragmentFromSource):
        (WebCore::HTMLElement::setInnerHTML):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::FragmentParsingContext::FragmentParsingContext):

2010-09-10  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        Reviewed by Darin Adler.

        Add NetworkingContext to avoid layer violations
        https://bugs.webkit.org/show_bug.cgi?id=42292

        Activate NetworkingContext:

        Since the ResourceHandle::create, ResourceHandle::start and
        ResourceHandle::loadResourceSynchronously API's were modified,
        having their Frame* parameter substituted by a NetworkingContext*,
        all implementations of them were also modified.
        This patch also modifies all functions that were calling the above
        ones.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadResourceSynchronously):
        * loader/FrameLoader.h:
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::loadNow):
        * loader/PingLoader.cpp:
        (WebCore::PingLoader::PingLoader):
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::load):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::createResourceHandle):
        * loader/icon/IconFetcher.cpp:
        (WebCore::IconFetcher::loadEntry):
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webKitWebSrcStart):
        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::create):
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::loadResourceSynchronously):
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::loadResourceSynchronously):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::loadResourceSynchronously):
        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::QNetworkReplyHandler):
        (WebCore::QNetworkReplyHandler::sendResponseIfNeeded):
        (WebCore::QNetworkReplyHandler::start):
        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::willLoadFromCache):
        (WebCore::ResourceHandle::loadResourceSynchronously):
        * platform/network/soup/ResourceHandleSoup.cpp:
        * platform/network/win/ResourceHandleWin.cpp:
        (WebCore::ResourceHandle::start):

2010-09-10  Jer Noble  <jer.noble@apple.com>

        No review; build fix only.

        <CoreGraphics/CGAffineTransform.h> isn't on the build bots either.  Wrap
        all references to m_movieTransform in #if USE(ACCELERATED_COMPOSITING) guards.
        
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::MediaPlayerPrivateQuickTimeVisualContext):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::naturalSize):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::retrieveAndResetMovieTransform):
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.h:

2010-09-10  Jer Noble  <jer.noble@apple.com>

        No review; build fix only.

        <CoreGraphics/CGFloat.h> does not exist on the build bots.  Replace
        instances of CGFAbs() with abs().

        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::naturalSize):

2010-09-10  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/8414282> Can’t dynamically change first-letter to/from floating

        Test: fast/dynamic/first-letter-display-change.html

        * rendering/RenderBlock.cpp:
        (WebCore::styleForFirstLetter): Factored this helper function out.
        (WebCore::RenderBlock::updateFirstLetter): Renamed variables so that the
        “update style” and “create new” branches use the same terminology. In the
        update case, if the style change requires a new renderer, handle it.
        * rendering/RenderTextFragment.h:
        (WebCore::toRenderTextFragment): Added.

2010-09-10  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Remove unnecessary constraint in WebCore of choosing either text zoom or full page zoom.
        Precursor to <rdar://problem/7660657>
        https://bugs.webkit.org/show_bug.cgi?id=45522

        * GNUmakefile.am:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        Remove ZoomMode.h

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        (WebCore::CSSStyleSelector::getComputedSizeFromSpecifiedSize):
        Remove uses of shouldApplyTextZoom(), it had turned into just a compare to 1.0f.

        * html/HTMLBodyElement.cpp:
        (WebCore::adjustForZoom):
        (WebCore::HTMLBodyElement::setScrollLeft):
        (WebCore::HTMLBodyElement::setScrollTop):
        Convert these to use the explicit pageZoomFactor() function, it made no sense for text zoom
        anyway.

        * page/Frame.h:
        Remove include of ZoomMode.h

        * page/FrameView.cpp:
        (WebCore::parentPageZoomFactor):
        (WebCore::parentTextZoomFactor):
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::setPageZoomFactor):
        (WebCore::FrameView::setTextZoomFactor):
        (WebCore::FrameView::setPageAndTextZoomFactors):
        * page/FrameView.h:
        (WebCore::FrameView::pageZoomFactor):
        (WebCore::FrameView::textZoomFactor):
        Change FrameView to store two values for zoom, one for page zoom and one for text zoom.

        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h:
        Removed zoom mode.

        * page/ZoomMode.h: Removed.

        * rendering/RenderView.cpp:
        (WebCore::RenderView::zoomFactor):
        Remove now unnecessary call to shouldApplyPageZoom since it will be 1 if it should
        be ignored.

        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::setCurrentScale):
        Use explicit setPageZoomFactor function.

2010-09-10  Ryuan Choi  <ryuan.choi@samsung.com>

        Unreviewed build fix for EFL.

        [EFL] REGRESSION(67167) build break because of newly added JSBindingState.cpp
        https://bugs.webkit.org/show_bug.cgi?id=45537

        * CMakeLists.txt:

2010-09-10  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Move some Dashboard stuff from WebCore to WebKit along with a bit more FrameMac cleanup
        https://bugs.webkit.org/show_bug.cgi?id=45582

        * WebCore.exp.in: Updated.

        * WebCore.xcodeproj/project.pbxproj: Removed WebDashboardRegion.h/m.
        * page/mac/WebDashboardRegion.h: Removed.
        * page/mac/WebDashboardRegion.m: Removed.

        * page/Frame.h: Removed unneeded #if. Removed dashboardRegionsDictionary function, now
        handled in WebKit. Removed searchForNSLabelsAboveCell function, which had become dead code.
        * page/mac/FrameMac.mm: Ditto. Also tweaked a place that said "int unsigned".

2010-09-10  Peter Kasting  <pkasting@google.com>

        Reviewed by Darin Adler.

        Make middle clicks not fire DOM onclick events.
        https://bugs.webkit.org/show_bug.cgi?id=22382

        * html/HTMLAnchorElement.cpp: Explicitly include middle-clicks in the
        computation of what constitutes a link click, since they're no longer
        implicitly included.
        (WebCore::isLinkClick):
        * html/HTMLInputElement.cpp: Removed unneeded checks that click events
        are coming from the left mouse button, since they all are now.
        (WebCore::HTMLInputElement::preDispatchEventHandler):
        (WebCore::HTMLInputElement::postDispatchEventHandler):
        (WebCore::HTMLInputElement::defaultEventHandler):
        * page/EventHandler.cpp: Changed logic to send a click event only for
        the left button.
        (WebCore::EventHandler::handleMouseDoubleClickEvent):
        (WebCore::EventHandler::handleMouseReleaseEvent):

2010-09-10  Adam Barth  <abarth@webkit.org>

        Attempted build fix for Qt Minimal.

        * dom/Element.cpp:
        (WebCore::Element::getBoundingClientRect):

2010-09-10  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        Pseudostyle resolution corrupts cached child index values
        https://bugs.webkit.org/show_bug.cgi?id=45574

        Covered by fast/dom/firstline-fixed-crash.html and fast/dom/firstletter-tablecell-crash.html.

        RenderBlock::updateFirstLetter() calls getCachedPseudoStyle() passing as the parent style the
        style of the parent of the first letter, which is not always the parent of the element for
        which we are getting :first-letter style. As a result, style resolution caches childIndex values
        in the wrong element’s style.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::pseudoStyleForElement): Create the new style and inherit from
        the parent style before matching rules, to avoid corrupting the parent style itself.
        (WebCore::CSSStyleSelector::checkSelector): Always pass the element’s parent style as
        the parent style here.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::updateFirstLetter): Removed the null check that was added
        in r67183.
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::findNextLineBreak): Removed the null check that was added
        in r67184.

2010-09-10  Jer Noble  <jer.noble@apple.com>

        Reviewed by Simon Fraser.

        Movies with track or movie matrices don't display in <video> elements (Safari 5/Windows)
        https://bugs.webkit.org/show_bug.cgi?id=45333
        rdar://problem/81333126
        
        QuickTime will refuse to decode video frames for movies whose movie and track matrices 
        are non-identity.  To work around this problem, extract the movie and track matrices 
        from the movie, and set that matrix on the video layer instead.

        * WebCore.vcproj/QTMovieWin.vcproj:
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::LayoutClient::LayoutClient): Added.
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::LayoutClient::layoutSublayersOfLayer):
            Layout the video layer according to its superlayer's size.
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::MediaPlayerPrivateQuickTimeVisualContext):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::platformLayer):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::naturalSize):
            Apply the m_movieTransform to the size reported by QTMovie.
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::retrieveAndResetMovieTransform):
            Calculate m_movieTransform and reset the movie and track matrices in the movie.
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::createLayerForMovie):
            Create two nested layers instead of one.
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::destroyLayerForMovie):
            Make sure to remove m_qtVideoLayer from any superlayer before dereferencing it.
        * platform/graphics/win/QTMovie.cpp:
        (QTMovie::videoTracks): Added.
        (QTMovie::getTransform): Added.
        (QTMovie::setTransform): Added.
        (QTMovie::resetTransform): Added.
        * platform/graphics/win/QTMovie.h:
        * platform/graphics/win/QTTrack.cpp: Added.
        * platform/graphics/win/QTTrack.h: Added.
        * platform/graphics/win/WKCACFLayer.cpp:
        (WebCore::WKCACFLayer::setBounds): Call setNeedsLayout() if a layoutClient is present.
        (WebCore::WKCACFLayer::setFrame): Call setNeedsLayout() if a layoutClient is present.

2010-09-10  Jer Noble  <jer.noble@apple.com>

        No review; build fix only.

        Touch mediaControlsQuickTime in order to trigger the UserAgentStyleSheet.h to be rebuilt.

        * css/mediaControlsQuickTime.css:
        (audio::-webkit-media-controls-volume-slider-mute-button, video::-webkit-media-controls-volume-slider-mute-button):

2010-09-10  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Fisher.

        Move code from WebKit-layer to DocumentLoader
        https://bugs.webkit.org/show_bug.cgi?id=45569

        There's a bunch of code that's copy/pasted (poorly) across all the
        ports that really belongs in WebCore.  This patch moves that logic into
        DocumentLoader.  This patch is a step on the path to having
        DocumentLoader own DocumentWriter.

        * WebCore.exp.in:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::commitData):
        * loader/DocumentLoader.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::finishedLoadingDocument):

2010-09-10  Cosmin Truta  <ctruta@chromium.org>

        Reviewed by Nikolas Zimmermann.

        getBoundingClientRect Broken for SVG Elements
        https://bugs.webkit.org/show_bug.cgi?id=42815

        Use getBBox to retrieve the bounding rectangle for SVG elements.

        Test: svg/dom/getBoundingClientRect.xhtml

        * dom/Element.cpp:
        (Element::getBoundingClientRect):

2010-09-09  Jer Noble  <jer.noble@apple.com>

        Reviewed by Eric Carlson.

        Adopt shared control drawing for <video> controls on Windows
        https://bugs.webkit.org/show_bug.cgi?id=45490
        
        * DerivedSources.make: Remove the OS check around mediaControlsQuickTime.css.
        * rendering/RenderMediaControls.cpp:
        (WebCore::determineState): Use WKMediaControllerThemeState flags instead of SafariTheme ones.
        (WebCore::getUnzoomedRectAndAdjustCurrentContext): Added. Copied verbatim from RenderMediaMac.mm.
        (WebCore::RenderMediaControls::adjustMediaSliderThumbSize): Use wkMeasureMediaUIPart to adjust the thumb size.
        (WebCore::RenderMediaControls::paintMediaControlsPart): Use wkDrawMediaUIPart instead of paintThemePart.
        (WebCore::RenderMediaControls::volumeSliderOffsetFromMuteButton): Added. Copied verbatim from RenderMediaMac.mm.
        * rendering/RenderMediaControls.h:
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::adjustSliderThumbSize): Adjust both sliders and volume sliders.
        (WebCore::RenderThemeWin::extraMediaControlsStyleSheet): Added. Returns the mediaControlsQuickTime sheet.
        (WebCore::RenderThemeWin::paintMediaRewindButton): Added. Pass through to RenderMediaControls.
        (WebCore::RenderThemeWin::paintMediaControlsBackground): Added. Pass through to RenderMediaControls.
        (WebCore::RenderThemeWin::paintMediaVolumeSliderContainer): Added. Pass through to RenderMediaControls.
        (WebCore::RenderThemeWin::paintMediaVolumeSliderTrack): Added. Pass through to RenderMediaControls.
        (WebCore::RenderThemeWin::paintMediaVolumeSliderThumb): Added.  Pass through to RenderMediaControls.
        (WebCore::RenderThemeWin::volumeSliderOffsetFromMuteButton): Added. Pass through to RenderMediaControls.
        * rendering/RenderThemeWin.h:

2010-09-10  Peter Kasting  <pkasting@google.com>

        Reviewed by Darin Adler.

        Cleanup and simplification in advance of making middle clicks not send a
        click event.
        https://bugs.webkit.org/show_bug.cgi?id=22382

        * editing/DeleteButton.cpp:
        (WebCore::DeleteButton::defaultEventHandler): Removed unneeded code to
        check if the event is a MouseEvent. Any click event will do.
        * html/HTMLAnchorElement.cpp:
        (WebCore::appendServerMapMousePosition): Added. Factors out the
        modifications to the URL to add the mouse position to make the default
        event handler function easier to read.
        (WebCore::HTMLAnchorElement::defaultEventHandler): Reorganized to make
        the enter key logic separate from the link clicking logic and simplify
        the function.  This makes minor functional changes like not calling
        FrameLoader::urlSelected() for fake "keydown" events constructed from
        JavaScript.
        (WebCore::HTMLAnchorElement::isLiveLink): Refactored to use new shared
        implementation in treatLinkAsLiveForEventType().
        (WebCore::eventType): Factors out event type calculation (for
        treatLinkAsLiveForEventType()) from the default event handler to make it
        easier to read.
        (WebCore::HTMLAnchorElement::treatLinkAsLiveForEventType):
        Implementation of the portions of isLiveLink() that are common with the
        checks defaultEventHandler() wants to do.
        (WebCore::isEnterKeyKeydownEvent): Added. Shared by the default
        event handlers for all three anchor elements.
        (WebCore::isMiddleMouseButtonEvent): Added. Shared by the isLinkClick
        function below and some code in SVG. Later we can make this private to
        this source file once we remove the unneeded SVG code.
        (WebCore::isLinkClick): Added. Shared by the default event handlers for
        all three anchor elements.
        (WebCore::handleLinkClick): Ditto.
        * html/HTMLAnchorElement.h: Added the new functions.
        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::defaultEventHandler): Removed lots of unneeded
        logic and streamlined the code to more closely match the
        HTMLAnchorElement code and share functions with it.
        * wml/WMLAElement.cpp:
        (WebCore::WMLAElement::defaultEventHandler): Ditto.

2010-09-10  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Eric Seidel.

        Implement HTML5 definition of script for-event neutering
        https://bugs.webkit.org/show_bug.cgi?id=45493

        * dom/ScriptElement.cpp:
        (WebCore::ScriptElementData::shouldExecuteAsJavaScript): Same behavior, but reads more like the spec. Removed obsolete comments about supporting for-event.
        * html/parser/HTMLScriptRunner.cpp:
        (WebCore::HTMLScriptRunner::executeScript): Moved to runScript.
        (WebCore::HTMLScriptRunner::runScript): Checking shouldExecuteAsJavaScript() here means that external scripts which fail the check will never be requested.

2010-09-10  Nat Duca  <nduca@chromium.org>

        Reviewed by Darin Fisher.

        [chromium] Accelerated Compositing: screen garbage when scrolling
        https://bugs.webkit.org/show_bug.cgi?id=45092

        Split LayerRenderChromium::drawLayers into several different
        functions, responsible for preparing the backbuffer, updating the
        root texture, compositing and performing the final
        swapbuffers. This are then used by the new
        WebViewImpl::composite rendering path.

        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::setBounds):
        (WebCore::LayerChromium::setFrame):
        (WebCore::LayerChromium::setNeedsDisplay):
        (WebCore::LayerChromium::resetNeedsDisplay):
        * platform/graphics/chromium/LayerChromium.h:
        (WebCore::LayerChromium::dirtyRect):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::prepareToDrawLayers):
        (WebCore::LayerRendererChromium::updateRootLayerTextureRect):
        (WebCore::LayerRendererChromium::drawLayers):
        (WebCore::LayerRendererChromium::present):
        * platform/graphics/chromium/LayerRendererChromium.h:

2010-09-10  David Holloway  <dhollowa@chromium.org>

        Reviewed by Adam Barth.

        Replace WebCore::HTMLFormElement::submissionTrigger with WebCore::HTMLFormElement::submittedByUserGesture.
        Chromium AutoFill feature semantics changed with respect to what we mean by "user submitted" form.  A
        more accurate measure of the user manually submitting a form is via user gesture.
        https://bugs.webkit.org/show_bug.cgi?id=45128

        No new tests as this is only used by the Chromium WebKit API.

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::HTMLFormElement):
        (WebCore::HTMLFormElement::prepareSubmit):
        (WebCore::HTMLFormElement::submit):
        (WebCore::HTMLFormElement::submittedByUserGesture):
        * html/HTMLFormElement.h:

2010-09-10  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Remove mention of "part" from Document.cpp
        https://bugs.webkit.org/show_bug.cgi?id=45566

        This is an old KHTML name that's lingering around.

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

2010-09-09  Darin Adler  <darin@apple.com>

        Reviewed by Adam Barth.

        Move functions from Frame to SelectionController as planned
        https://bugs.webkit.org/show_bug.cgi?id=45508

        Also removed Frame::dragCaretController since it just called Page::dragCaretController.

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::setSelection):
        (WebCore::SelectionController::modify):
        (WebCore::SelectionController::selectFrameElementInParentIfFullySelected):
        (WebCore::SelectionController::selectAll):
        (WebCore::SelectionController::focusedOrActiveStateChanged):
        (WebCore::SelectionController::notifyRendererOfSelectionChange):
        (WebCore::isFrameElement):
        (WebCore::SelectionController::setFocusedNodeIfNeeded):
        (WebCore::SelectionController::paintDragCaret):
        (WebCore::SelectionController::shouldDeleteSelection):
        (WebCore::SelectionController::selectionBounds):
        (WebCore::SelectionController::selectionTextRects):
        (WebCore::scanForForm):
        (WebCore::SelectionController::currentForm):
        (WebCore::SelectionController::revealSelection):
        (WebCore::SelectionController::setSelectionFromNone):
        (WebCore::SelectionController::shouldChangeSelection):
        * editing/SelectionController.h:
        Moved functions here from Frame.

        * page/Frame.cpp:
        * page/Frame.h:
        Moved functions to SelectionController.
        Reorganized header to be easier to read and a bit more logical.

        * WebCore.exp.in: Updated.

        * dom/Document.cpp:
        (WebCore::Document::nodeChildrenWillBeRemoved):
        (WebCore::Document::nodeWillBeRemoved):
        Call Page::dragCaretController directly.

        * dom/Element.cpp:
        (WebCore::Element::updateFocusAppearance):
        * dom/InputElement.cpp:
        (WebCore::InputElement::updateFocusAppearance):
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::editingStyleAtPosition):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::calculateTypingStyleAfterDelete):
        * editing/Editor.cpp:
        (WebCore::Editor::canSmartCopyOrDelete):
        (WebCore::Editor::textDirectionForSelection):
        (WebCore::Editor::appliedEditing):
        (WebCore::Editor::insertTextWithoutSendingTextEvent):
        (WebCore::Editor::advanceToNextMisspelling):
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges):
        (WebCore::Editor::revealSelectionAfterEditingOperation):
        (WebCore::Editor::transpose):
        (WebCore::Editor::changeSelectionAfterCommand):
        (WebCore::Editor::computeAndSetTypingStyle):
        (WebCore::Editor::selectionComputedStyle):
        (WebCore::Editor::styleForSelectionStart):
        (WebCore::Editor::findString):
        * editing/EditorCommand.cpp:
        (WebCore::executeDelete):
        * editing/InsertLineBreakCommand.cpp:
        (WebCore::InsertLineBreakCommand::doApply):
        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::input):
        * editing/RemoveFormatCommand.cpp:
        (WebCore::RemoveFormatCommand::doApply):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply):
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::insertTextRunWithoutNewlines):
        (WebCore::TypingCommand::deleteKeyPressed):
        (WebCore::TypingCommand::forwardDeleteKeyPressed):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::updateFocusAppearance):
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected):
        * page/DragController.cpp:
        (WebCore::DragController::concludeEditDrag):
        (WebCore::dragLocForSelectionDrag):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::selectClosestWordFromMouseEvent):
        (WebCore::EventHandler::selectClosestWordOrLinkFromMouseEvent):
        (WebCore::EventHandler::handleMousePressEventTripleClick):
        (WebCore::EventHandler::handleMousePressEventSingleClick):
        (WebCore::EventHandler::updateSelectionForMouseDrag):
        (WebCore::EventHandler::handleMouseReleaseEvent):
        * page/FocusController.cpp:
        (WebCore::FocusController::advanceFocusInDocumentOrder):
        * page/chromium/EventHandlerChromium.cpp:
        (WebCore::EventHandler::passMousePressEventToSubframe):
        * page/chromium/FrameChromium.cpp:
        (WebCore::Frame::dragImageForSelection):
        * page/mac/FrameMac.mm:
        (WebCore::Frame::selectionImage):
        * platform/mac/ClipboardMac.mm:
        (WebCore::ClipboardMac::writeRange):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintCaret):
        Call functions on selection().

2010-09-10  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Darin Adler.

        SVGGElement::rendererIsNeeded should return false when parent isn't SVG
        https://bugs.webkit.org/show_bug.cgi?id=45562

        Test: svg/custom/g-outside-svg.html

        * svg/SVGGElement.cpp:
        (WebCore::SVGGElement::rendererIsNeeded):
        * svg/SVGGElement.h:

2010-09-10  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        REGRESSION (HTML Parser): CNN's Money site is not formatted correctly with AdBlock installed
        https://bugs.webkit.org/show_bug.cgi?id=41371

        Drop support for closing comments with "-- >".  This was an attempt to
        be more IE-like in comment parsing, but it turns out to cause problems
        for some high-profile sites.  Firefox 4 is dropping support as well.
        We expect the spec to change soon too.

        * html/parser/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::nextToken):
        * html/parser/HTMLTokenizer.h:

2010-09-10  Chris Marrin  <cmarrin@apple.com>

        Unreviewed.

        Adding file that should have been in http://trac.webkit.org/changeset/67226 but 
        I forgot to svn add.
        
        * platform/graphics/opengl: Added.
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp: Copied from platform/graphics/mac/GraphicsContext3DMac.mm.

2010-09-10  Paul Sawaya  <psawaya@apple.com>

        Reviewed by Chris Marrin.

        Refactored non-Mac specific code into GraphicsContext3DOpenGL.
        
        Moving this file into platform/graphics/opengl and only building on Mac for now.
        
        https://bugs.webkit.org/show_bug.cgi?id=30625

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/mac/GraphicsContext3DMac.mm:
        (WebCore::GraphicsContext3D::makeContextCurrent):
        (WebCore::GraphicsContext3D::isErrorGeneratedOnOutOfBoundsAccesses):
        * platform/graphics/opengl: Added.
        * platform/graphics/opengl/GraphicsContext3DOpenGL.cpp: Copied from platform/graphics/mac/GraphicsContext3DMac.mm.
        (WebCore::GraphicsContext3D::prepareTexture):
        (WebCore::GraphicsContext3D::activeTexture):
        (WebCore::GraphicsContext3D::attachShader):
        (WebCore::GraphicsContext3D::bindAttribLocation):
        (WebCore::GraphicsContext3D::bindBuffer):
        (WebCore::GraphicsContext3D::bindFramebuffer):
        (WebCore::GraphicsContext3D::bindRenderbuffer):
        (WebCore::GraphicsContext3D::bindTexture):
        (WebCore::GraphicsContext3D::blendColor):
        (WebCore::GraphicsContext3D::blendEquation):
        (WebCore::GraphicsContext3D::blendEquationSeparate):
        (WebCore::GraphicsContext3D::blendFunc):
        (WebCore::GraphicsContext3D::blendFuncSeparate):
        (WebCore::GraphicsContext3D::bufferData):
        (WebCore::GraphicsContext3D::bufferSubData):
        (WebCore::GraphicsContext3D::checkFramebufferStatus):
        (WebCore::GraphicsContext3D::clearColor):
        (WebCore::GraphicsContext3D::clear):
        (WebCore::GraphicsContext3D::clearDepth):
        (WebCore::GraphicsContext3D::clearStencil):
        (WebCore::GraphicsContext3D::colorMask):
        (WebCore::GraphicsContext3D::compileShader):
        (WebCore::GraphicsContext3D::copyTexImage2D):
        (WebCore::GraphicsContext3D::copyTexSubImage2D):
        (WebCore::GraphicsContext3D::cullFace):
        (WebCore::GraphicsContext3D::depthFunc):
        (WebCore::GraphicsContext3D::depthMask):
        (WebCore::GraphicsContext3D::depthRange):
        (WebCore::GraphicsContext3D::detachShader):
        (WebCore::GraphicsContext3D::disable):
        (WebCore::GraphicsContext3D::disableVertexAttribArray):
        (WebCore::GraphicsContext3D::drawArrays):
        (WebCore::GraphicsContext3D::drawElements):
        (WebCore::GraphicsContext3D::enable):
        (WebCore::GraphicsContext3D::enableVertexAttribArray):
        (WebCore::GraphicsContext3D::finish):
        (WebCore::GraphicsContext3D::flush):
        (WebCore::GraphicsContext3D::framebufferRenderbuffer):
        (WebCore::GraphicsContext3D::framebufferTexture2D):
        (WebCore::GraphicsContext3D::frontFace):
        (WebCore::GraphicsContext3D::generateMipmap):
        (WebCore::GraphicsContext3D::getActiveAttrib):
        (WebCore::GraphicsContext3D::getActiveUniform):
        (WebCore::GraphicsContext3D::getAttachedShaders):
        (WebCore::GraphicsContext3D::getAttribLocation):
        (WebCore::GraphicsContext3D::getError):
        (WebCore::GraphicsContext3D::getString):
        (WebCore::GraphicsContext3D::hint):
        (WebCore::GraphicsContext3D::isBuffer):
        (WebCore::GraphicsContext3D::isEnabled):
        (WebCore::GraphicsContext3D::isFramebuffer):
        (WebCore::GraphicsContext3D::isProgram):
        (WebCore::GraphicsContext3D::isRenderbuffer):
        (WebCore::GraphicsContext3D::isShader):
        (WebCore::GraphicsContext3D::isTexture):
        (WebCore::GraphicsContext3D::lineWidth):
        (WebCore::GraphicsContext3D::linkProgram):
        (WebCore::GraphicsContext3D::pixelStorei):
        (WebCore::GraphicsContext3D::polygonOffset):
        (WebCore::GraphicsContext3D::readPixels):
        (WebCore::GraphicsContext3D::releaseShaderCompiler):
        (WebCore::GraphicsContext3D::renderbufferStorage):
        (WebCore::GraphicsContext3D::sampleCoverage):
        (WebCore::GraphicsContext3D::scissor):
        (WebCore::GraphicsContext3D::shaderSource):
        (WebCore::GraphicsContext3D::stencilFunc):
        (WebCore::GraphicsContext3D::stencilFuncSeparate):
        (WebCore::GraphicsContext3D::stencilMask):
        (WebCore::GraphicsContext3D::stencilMaskSeparate):
        (WebCore::GraphicsContext3D::stencilOp):
        (WebCore::GraphicsContext3D::stencilOpSeparate):
        (WebCore::GraphicsContext3D::texParameterf):
        (WebCore::GraphicsContext3D::texParameteri):
        (WebCore::GraphicsContext3D::uniform1f):
        (WebCore::GraphicsContext3D::uniform1fv):
        (WebCore::GraphicsContext3D::uniform2f):
        (WebCore::GraphicsContext3D::uniform2fv):
        (WebCore::GraphicsContext3D::uniform3f):
        (WebCore::GraphicsContext3D::uniform3fv):
        (WebCore::GraphicsContext3D::uniform4f):
        (WebCore::GraphicsContext3D::uniform4fv):
        (WebCore::GraphicsContext3D::uniform1i):
        (WebCore::GraphicsContext3D::uniform1iv):
        (WebCore::GraphicsContext3D::uniform2i):
        (WebCore::GraphicsContext3D::uniform2iv):
        (WebCore::GraphicsContext3D::uniform3i):
        (WebCore::GraphicsContext3D::uniform3iv):
        (WebCore::GraphicsContext3D::uniform4i):
        (WebCore::GraphicsContext3D::uniform4iv):
        (WebCore::GraphicsContext3D::uniformMatrix2fv):
        (WebCore::GraphicsContext3D::uniformMatrix3fv):
        (WebCore::GraphicsContext3D::uniformMatrix4fv):
        (WebCore::GraphicsContext3D::useProgram):
        (WebCore::GraphicsContext3D::validateProgram):
        (WebCore::GraphicsContext3D::vertexAttrib1f):
        (WebCore::GraphicsContext3D::vertexAttrib1fv):
        (WebCore::GraphicsContext3D::vertexAttrib2f):
        (WebCore::GraphicsContext3D::vertexAttrib2fv):
        (WebCore::GraphicsContext3D::vertexAttrib3f):
        (WebCore::GraphicsContext3D::vertexAttrib3fv):
        (WebCore::GraphicsContext3D::vertexAttrib4f):
        (WebCore::GraphicsContext3D::vertexAttrib4fv):
        (WebCore::GraphicsContext3D::vertexAttribPointer):
        (WebCore::GraphicsContext3D::viewport):
        (WebCore::GraphicsContext3D::getBooleanv):
        (WebCore::GraphicsContext3D::getBufferParameteriv):
        (WebCore::GraphicsContext3D::getFloatv):
        (WebCore::GraphicsContext3D::getFramebufferAttachmentParameteriv):
        (WebCore::GraphicsContext3D::getIntegerv):
        (WebCore::GraphicsContext3D::getProgramiv):
        (WebCore::GraphicsContext3D::getProgramInfoLog):
        (WebCore::GraphicsContext3D::getRenderbufferParameteriv):
        (WebCore::GraphicsContext3D::getShaderiv):
        (WebCore::GraphicsContext3D::getShaderInfoLog):
        (WebCore::GraphicsContext3D::getShaderSource):
        (WebCore::GraphicsContext3D::getTexParameterfv):
        (WebCore::GraphicsContext3D::getTexParameteriv):
        (WebCore::GraphicsContext3D::getUniformfv):
        (WebCore::GraphicsContext3D::getUniformiv):
        (WebCore::GraphicsContext3D::getUniformLocation):
        (WebCore::GraphicsContext3D::getVertexAttribfv):
        (WebCore::GraphicsContext3D::getVertexAttribiv):
        (WebCore::GraphicsContext3D::getVertexAttribOffset):
        (WebCore::GraphicsContext3D::texImage2D):
        (WebCore::GraphicsContext3D::texSubImage2D):
        (WebCore::GraphicsContext3D::createBuffer):
        (WebCore::GraphicsContext3D::createFramebuffer):
        (WebCore::GraphicsContext3D::createProgram):
        (WebCore::GraphicsContext3D::createRenderbuffer):
        (WebCore::GraphicsContext3D::createShader):
        (WebCore::GraphicsContext3D::createTexture):
        (WebCore::GraphicsContext3D::deleteBuffer):
        (WebCore::GraphicsContext3D::deleteFramebuffer):
        (WebCore::GraphicsContext3D::deleteProgram):
        (WebCore::GraphicsContext3D::deleteRenderbuffer):
        (WebCore::GraphicsContext3D::deleteShader):
        (WebCore::GraphicsContext3D::deleteTexture):

2010-09-10  Oliver Hunt  <oliver@apple.com>

        Qt build fix.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneDeserializer::deserialize):

2010-09-10  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Remove useless FrameLoader method
        https://bugs.webkit.org/show_bug.cgi?id=45492

        This method has one caller, and that caller already has a more direct
        way of accessing the correct DocumentLoader.

        * loader/FrameLoader.cpp:
        * loader/FrameLoader.h:
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::addData):

2010-09-10  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Main resource bytes shouldn't bounce through FrameLoader
        https://bugs.webkit.org/show_bug.cgi?id=45496

        After the MainResourceLoader hands the bytes for the main resource to
        the DocumentLoader, the DocumentLoader hands the bytes to the
        FrameLoaderClient.  The FrameLoaderClient, in turn, returns the bytes
        to WebCore.  Prior to this patch, the FrameLoaderClient returned the
        bytes to the FrameLoader.  However, the FrameLoader was actually adding
        any value.

        In this patch, we change the FrameLoaderClient to return the bytes to
        the DocumentLoader directly.  In a future patch, we'll cut out the
        FrameLoaderClient middleman and handle the bytes internally in the
        DocumentLoader.

        * WebCore.exp.in:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::addData):
        * loader/DocumentLoader.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::finishedLoadingDocument):
        * loader/FrameLoader.h:

2010-09-10  Oliver Hunt  <oliver@apple.com>

        Reviewed by Darin Adler.

        Speed up deserialisation of strings
        https://bugs.webkit.org/show_bug.cgi?id=45555

        Rather than building a list of Identifiers for the string pool
        we now build a list of a tuple of UString and JSString*.  This
        doesn't hurt the property name case as ustring->identifier conversion
        is essentially free if the ustring has already been converted to
        an Identifier, but saves an unnecessary Identifier creation for
        strings we only ever use to create JSStrings.  We also reduce
        GC pressure for duplicate strings by caching the JSStrings.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneDeserializer::CachedString::CachedString):
        (WebCore::CloneDeserializer::CachedString::jsString):
        (WebCore::CloneDeserializer::CachedString::ustring):
        (WebCore::CloneDeserializer::readStringData):
        (WebCore::CloneDeserializer::putProperty):
        (WebCore::CloneDeserializer::readFile):
        (WebCore::CloneDeserializer::readTerminal):
        (WebCore::CloneDeserializer::deserialize):

2010-09-10  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Antonio Gomes.

        REGRESSION(r67176): editing/selection/doubleclick-inline-first-last-contenteditable.html crashes
        https://bugs.webkit.org/show_bug.cgi?id=45525

        The crash was caused by ancestorToRetainStructureAndAppearance not taking into consideration
        the case where there is no common block ancestor. Fixed this by adding a null check.

        Test: editing/pasteboard/copy-without-common-block-crash.html

        * editing/markup.cpp:
        (WebCore::ancestorToRetainStructureAndAppearance): Added a null check.

2010-09-09  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Dumitru Daniliuc.

        [FileSystem] Do not call EntriesCallback more than once if there're no entries.
        https://bugs.webkit.org/show_bug.cgi?id=45498

        No new tests, layout-tests that confirm the behavior will be added in later patches.

        * fileapi/FileSystemCallbacks.cpp:
        (WebCore::EntriesCallbacks::EntriesCallbacks):
        (WebCore::EntriesCallbacks::didReadDirectoryEntry):
        (WebCore::EntriesCallbacks::didReadDirectoryEntries):

2010-09-10  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Darin Adler.

        Use String::fromUTF8 instead of UTF8Encoding().decode
        in the libxml XMLDocumentParser
        https://bugs.webkit.org/show_bug.cgi?id=45488

        * dom/XMLDocumentParserLibxml2.cpp:
        (WebCore::toString):

2010-09-10  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by David Kilzer.

        AX: accessibility not returning strings when visibility is hidden
        https://bugs.webkit.org/show_bug.cgi?id=45116

        AX code uses plainText() in TextIterator to get the text for a node.
        However, when that node is not visible, no text is returned because TextIterator ignores
        clipped nodes and other hidden elements.

        Solution is to add a new text iterator behavior for ignoring style visiblity. This allows
        for text to allows be returned for accessibility purposes.

        Test: platform/mac/accessibility/clipped-text-under-element.html

        * WebCore.exp.in:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::textUnderElement):
        (WebCore::AccessibilityRenderObject::stringValue):
           Use the new flag for plainText
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::TextIterator):
        (WebCore::TextIterator::handleTextNode):
        (WebCore::TextIterator::handleTextBox):
        (WebCore::TextIterator::handleTextNodeFirstLetter):
        (WebCore::TextIterator::handleReplacedElement):
           Use the new flag to NOT skip hidden elements.
        (WebCore::plainTextToMallocAllocatedBuffer):
        (WebCore::plainText):
        * editing/TextIterator.h:
           Add the new text iterator behavior.

2010-09-10  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by David Kilzer.

        Mail crashes with searching for next misspelled word with VoiceOver
        https://bugs.webkit.org/show_bug.cgi?id=45501

        Test: platform/mac/accessibility/crash-in-element-for-text-marker.html

        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):
            Check that the AX object is not nil before asking for the wrapper().

2010-09-10  Michael Nordman  <michaeln@google.com>

        Reviewed by Dumitru Daniliuc.

        Decouple Blob from ScriptExecutionContext.
        https://bugs.webkit.org/show_bug.cgi?id=45410

        - Removed ScriptExecutionContext pointers from Blob and File constructors.
        - Removed ScriptExecutionContext's collection of Blobs instance in that context.
        - Refactored BlobURL to make a distinction between 'public' blob urls and 'internal'
          urls that are used solely as identifiers. The former requires a SecurityOrigin to
          to manufacture, the latter does not.
        - Added a constant and accessor for the blob protocol scheme on the BlobURL class.

        No new tests are added since this is a cleanup.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneDeserializer::readFile):
        (WebCore::CloneDeserializer::readTerminal):
        * bindings/v8/SerializedScriptValue.cpp:
        (WebCore::ZigZag::Reader::readBlob):
        (WebCore::ZigZag::Reader::readFile):
        (WebCore::ZigZag::Reader::readFileList):
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::~ScriptExecutionContext):
        (WebCore::ScriptExecutionContext::createPublicBlobURL):
        (WebCore::ScriptExecutionContext::revokePublicBlobURL):
        * dom/ScriptExecutionContext.h:
        * fileapi/Blob.cpp:
        (WebCore::Blob::Blob):
        (WebCore::Blob::~Blob):
        (WebCore::Blob::slice):
        * fileapi/Blob.h:
        (WebCore::Blob::create):
        (WebCore::Blob::url):
        * fileapi/Blob.idl:
        * fileapi/BlobBuilder.cpp:
        (WebCore::BlobBuilder::getBlob):
        * fileapi/BlobBuilder.h:
        * fileapi/BlobBuilder.idl:
        * fileapi/BlobURL.cpp:
        (WebCore::BlobURL::createPublicURL):
        (WebCore::BlobURL::createInternalURL):
        (WebCore::BlobURL::getOrigin):
        (WebCore::BlobURL::getIdentifier):
        (WebCore::BlobURL::createBlobURL):
        * fileapi/BlobURL.h:
        (WebCore::BlobURL::blobProtocol):
        (WebCore::BlobURL::BlobURL):
        * fileapi/File.cpp:
        (WebCore::File::File):
        * fileapi/File.h:
        (WebCore::File::create):
        * fileapi/FileReader.cpp: Register a public url to perform the read.
        (WebCore::FileReader::cleanup):
        (WebCore::FileReader::start):
        (WebCore::FileReader::didFinishLoading):
        (WebCore::FileReader::failed):
        * fileapi/FileReader.h: Added m_urlForReading data member.
        * fileapi/FileReaderSync.cpp:
        (WebCore::FileReaderSync::read): Register a public url to perform the read.
        * fileapi/ThreadableBlobRegistry.cpp:
        (WebCore::ThreadableBlobRegistry::registerBlobURL):
        (WebCore::ThreadableBlobRegistry::unregisterBlobURL):
        * fileapi/ThreadableBlobRegistry.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::appendFormData):
        (WebCore::HTMLInputElement::setFileListFromRenderer):
        * page/SecurityOrigin.cpp: Use BlobURL.blobProtocol().
        (WebCore::SecurityOrigin::create):
        (WebCore::SecurityOrigin::canRequest):
        (WebCore::SecurityOrigin::canDisplay):
        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::ClipboardChromium::files):
        * platform/gtk/ClipboardGtk.cpp:
        (WebCore::ClipboardGtk::files):
        * platform/mac/ClipboardMac.mm:
        (WebCore::ClipboardMac::files):
        * platform/win/ClipboardWin.cpp:
        (WebCore::ClipboardWin::files):

2010-09-10  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Martin Robinson.

        GDK_DISPLAY was removed in GTK+ 3.x, re-declare it when built
        against that.

        * platform/gtk/GtkVersioning.h:

2010-09-10  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Martin Robinson.

        Fix compilation with GTK+ 3.x.

        GDK key macros were renamed from GDK_FOO to GDK_KEY_FOO, we need
        to include the compat header provided if we want to keep using the
        old names.

        * platform/gtk/GtkVersioning.h: add the compatibility header.
        * platform/gtk/KeyEventGtk.cpp: include GtkVersioning.h

2010-09-09  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Eric Seidel.

        Factor out the NestingLevelIncrementer
        https://bugs.webkit.org/show_bug.cgi?id=45471

        No new tests because no new functionality.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/parser/HTMLDocumentParser.cpp:
        * html/parser/HTMLDocumentParser.h:
        * html/parser/HTMLScriptRunner.cpp:
        * html/parser/NestingLevelIncrementer.h: Added.
        (WebCore::NestingLevelIncrementer::NestingLevelIncrementer):
        (WebCore::NestingLevelIncrementer::~NestingLevelIncrementer):

2010-09-10  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        SVG text chunk concept needs to be integrated in the InlineBox structure
        https://bugs.webkit.org/show_bug.cgi?id=45533

        Begin rewriting the SVG text layout code. As first step move the text chunk concept right into the inline box structure.
        This obsoletes the whole text chunk part concept (see SVGTextChunkLayoutInfo.h for details), and will soon simplify the
        whole layout code a lot. Previously we hacked around the fact that a single InlineTextBox could contain multiple text chunks
        For example: <text x="20 30 40">ABC</text> only led to the creation of one InlineTextBox containing three chunks. When
        painting such an InlineTextBox, we had to do nasty hacks (same for text selection etc.)
        
        This is finally fixed by incorporating the knownledge about text chunks into the line layout algorithm.
        Note, this has no impact on HTML at all, no worries.

        It's even required to do it this way as BiDi reordering shouldn't happen across text chunks.
        These are only the first bits, and currently slows down text layouting. Follow-up patches will remove the old layout
        algorithm, and will rely on the stored SVGTextLayoutAttributes in the RenerSVGInlineText renderers (instead of computing again).

        * Android.mk: Add rendering/svg/SVGTextLayoutAttributes.* & rendering/svg/SVGTextLayoutBuilder.* to build.
        * CMakeLists.txt: Ditto.
        * GNUmakefile.am: Ditto.
        * WebCore.gyp/WebCore.gyp: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.vcproj/WebCoreCommon.vsprops: Ditto. (Recognize new rendering/svg directory.)
        * WebCore.vcproj/copyForwardingHeaders.cmd: Ditto. (Copy forwarding headers from rendering/svg directory.)
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * rendering/RenderBlockLineLayout.cpp: This is the key of the new concept, take text chunks into account when building the InlineBox structure.
        (WebCore::RenderBlock::findNextLineBreak): Split midpointState, if we encounter the beginning of a new text chunk.
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isSVGInline): New method, which will be used to identify RenderSVGInline objects.
        * rendering/RenderSVGInline.h:
        (WebCore::RenderSVGInline::isSVGInline): Return true.
        * rendering/RenderSVGInlineText.cpp:
        (WebCore::RenderSVGInlineText::linesBoundingBox): Overriden, to simplify the calculations for SVG.
        (WebCore::RenderSVGInlineText::characterStartsNewTextChunk): Determines wheter the given position starts a new text chunk.
        * rendering/RenderSVGInlineText.h:
        (WebCore::RenderSVGInlineText::storeLayoutAttributes): Stores the layout attributes calculated in the text layout process (will be used everywhere in follow-up patches).
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::layout): Invoke SVGTextLayoutBuilder before creating the inline box tree, so we can decide which characters start new text chunks.
        * rendering/RenderText.h: Made linesBoundingBox() virtual so RenderSVGInlineText can override it.
        * rendering/svg: Added.
        * rendering/svg/SVGTextLayoutAttributes.cpp: Added. Holds x/y/dx/dy/rotate values and all kerning/ligature information used during layout.
        * rendering/svg/SVGTextLayoutAttributes.h: Added.
        * rendering/svg/SVGTextLayoutBuilder.cpp: Added.
        * rendering/svg/SVGTextLayoutBuilder.h: Added.

2010-09-10  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed fix after r67085.

        * WebCore.pro: Fix previously moved filenames.

2010-09-10  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Inline FrameLoader::committedLoad into its one caller
        https://bugs.webkit.org/show_bug.cgi?id=45481

        This saves one round-trip through the FrameLoader when loading
        documents.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::commitLoad):
        * loader/FrameLoader.cpp:
        * loader/FrameLoader.h:

2010-09-10  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Adam Roben.

        [WINCE] Remove ImageBuffer::toDataURL implementation
        https://bugs.webkit.org/show_bug.cgi?id=45478

        At the moment ImageBuffer::toDataURL uses JPEGEncoder.h and PNGEncoder.h.
        Both files are not in the repository. So remove the implementation for now.

        * platform/graphics/wince/ImageBufferWince.cpp:
        (WebCore::ImageBuffer::toDataURL):

2010-09-10  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Antonio Gomes.

        WebGL: Fix GCC warnings about suggested parentheses around && within ||
        https://bugs.webkit.org/show_bug.cgi?id=45534

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getVertexAttrib):
        (WebCore::WebGLRenderingContext::readPixels):
        (WebCore::WebGLRenderingContext::texParameter):
        (WebCore::WebGLRenderingContext::handleNPOTTextures):

2010-09-09  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Add navigation items into the Elements panel context menu.

        For all anchors that have the class of "webkit-html-resource-link" or "webkit-html-external-link",
        a custom context menu with the items "Open Link in New Window" (invokes InspectorBackend.openInInspectedWindow() with
        the related URL) and "Open Link in Resources Panel" (opens the related resource in the Resources panel) is shown
        (the latter item is displayed only if the corresponding resource is known to the Web Inspector).
        https://bugs.webkit.org/show_bug.cgi?id=34250

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.populateHrefContextMenu):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeOutline.prototype._contextMenuEventFired):
        (WebInspector.ElementsTreeElement.prototype._attributeHTML):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype._contextMenuEventFired):
        * inspector/front-end/inspector.js:
        (WebInspector.openResource):
        (WebInspector.resourceURLForRelatedNode):

2010-09-10  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by James Robinson.

        Make sure skia is not Chromium specific
        https://bugs.webkit.org/show_bug.cgi?id=39672

        Move Image::loadPlatformResource to platform/graphics/chromium/ImageChromium.cpp.
        Other ports can use ImageSkia.cpp.

        No new tests because this is pure refacotring.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * platform/graphics/chromium/ImageChromium.cpp: Added.
        (WebCore::Image::loadPlatformResource):
        * platform/graphics/skia/ImageSkia.cpp:

2010-09-09  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Joseph Pecoraro.

        WebInspector: Selecting 'inspect element' always shows body in inspector instead of clicked element.

        1. Open any page
        2. Right-click on any element, select "Inspect Element"
        3. Web Inspector is opened but the <body> element (for HTML) is focused rather than the selected element
        4. Inspect the Web Inspector. An error message is logged in the console.

        The regression was introduced in http://trac.webkit.org/changeset/66012 - focusNode() is invoked in
        InspectorController::populateScriptObjects() before the main document is set for the InspectorDOMAgent
        instance (which makes focusNode() bail out prematurely).

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

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::populateScriptObjects):

2010-09-10  Cris Neckar  <cdn@chromium.org>

        Reviewed by Chris Fleizach.

        Null deref in RenderBlock::updateFirstLetter(). Check for null psuedo style.
        https://bugs.webkit.org/show_bug.cgi?id=45404

        Test: fast/dom/firstletter-tablecell-crash.html

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

2010-09-10  Cris Neckar  <cdn@chromium.org>

        Reviewed by Chris Fleizach.

        Null deref in RenderBlock::findNextLineBreak(). Check for null style with
        first-line style and fixed position.
        https://bugs.webkit.org/show_bug.cgi?id=45350

        Test: fast/dom/firstline-fixed-crash.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::findNextLineBreak):

2010-09-10  Eric Seidel  <eric@webkit.org>

        Reviewed by Dimitri Glazkov.

        Remove support for non-lazy attach and fix frames to load from insertedIntoDocument instead of attach
        https://bugs.webkit.org/show_bug.cgi?id=45365

        This change is the last piece of the puzzle which was preventing us from
        removing all eager-attach logic and moving WebCore to using an entirely
        recalcStyle-driven, on-demand renderer creation system, instead of every
        element being synchronously attached during parsing, regardless of whether
        it was ever going to be displayed or not.

        This does not change the places we call lazyAttach vs. attach.  This only
        changes the behavior of frame/plugin elements when lazyAttach is called.
        Previously lazyAttach would eager-attach those elements (and their ancestors)
        because they were marked as canLazyAttach() { return false; }.

        This is a very tricky change, please review carefully.

        Mostly I'm moving logic which used to be in attach() into
        insertedIntoDocument.  Once it was there, there was no longer any reason
        why frame elements couldn't lazyAttach, thus removing the need
        for the non-lazy attach code path entirely.
        We've not yet converted all callsites over to using lazyAttach() instead
        of attach() however.

        In order to move frame loading logic into insertedIntoDocument
        instead of attach, I needed to make sure that any javascript calls
        during the load would see an attached element.  Thus I needed to mark
        the element as needing style resolve so that it would attach itself
        if needed.

        I was not able to just call lazyAttach() from insertedIntoDocument directly
        due to two conflicting assumptions in the rendering tree:
         1. ContainerNode::attach() assumes its "safe" to call attach on all children
            without checking first if the child is already attached.  This seems sane
            since its strange to think of a subtree as being attached w/o ancestors
            already being attached.  Although it is a hard rule that subtrees may not
            have renderers w/o ancestors also having renderers, I do not believe it's
            a hard rule that subtrees may not be attached.  Remember, attached() does
            not imply renderer()!  It's possible ContainerNode::attach()'s assumption is wrong here.
         2. Node::attach() asserts !attached().  This makes sense and I would not
            want to remove this assert, however it means that if insertedIntoDocument
            were to call lazyAttach() (thus marking the element as attached()) then
            all callers would need to check if the element was already attached after
            insertedIntoDocument (called by appendChild, parserAppendChild, etc.)
            before calling attach or lazyAttach().  The following example:
            element.innerHTML = "<span><iframe></span>" is one case where this
            ASSERT would be hit if insertedIntoDocument called lazyAttach, since
            ContainerNode::attach() (called on the span by in appendChild(DocumentFragment) code)
            does not check if iframe is already attached.

        Note: One subtle change here is that synchronous javascript which results
        from javascript: or beforeload is now run as part of insertedIntoDocument
        (thus any insert/append call *even* parserAddChild) instead of being
        run during attach (technically in the post-attach callbacks).

        This is covered by numerous layout tests.

        * dom/ContainerNode.cpp:
        (WebCore::willRemoveChild):
        (WebCore::willRemoveChildren):
         - Since insertedIntoDocument starts a load and yet does not mark the
           element as attached, we need to always call willRemove().
           See note above as to why we don't just mark attached() in insertedIntoDocument.
        * dom/Node.cpp:
        (WebCore::Node::markAncestorsWithChildNeedsStyleRecalc):
         - Share some code between lazyAttach and setNeedsStyleRecalc.
        (WebCore::Node::setNeedsStyleRecalc):
         - Use the new markAncestorsWithChildNeedsStyleRecalc
        (WebCore::Node::lazyAttach):
         - Remove the non-lazy code path, and use markAncestorsWithChildNeedsStyleRecalc.
         - Add an option to lazyAttach without marking attached(), used by HTMLFrameElementBase::insertedIntoDocument.
        * dom/Node.h:
        * html/HTMLFrameElementBase.cpp:
         - m_shouldOpenURLAfterAttach is no longer needed, yay!
         - m_checkAttachedTimer no longer has anything to do with attached(), so renamed it.
           I also documented that the newly named m_checkInDocumentTimer is all about the
           "magic iframe" performance quirk.  (Which is actually speced in HTML5).
           I was initially baffled by this code, so I documented it.
        (WebCore::HTMLFrameElementBase::HTMLFrameElementBase)
        (WebCore::HTMLFrameElementBase::insertedIntoDocument):
         - This is the meat of this change, see discussion above.
        (WebCore::HTMLFrameElementBase::attach):
         - Code deleted or moved to insertedIntoDocument.
        (WebCore::HTMLFrameElementBase::width):
         - Fixed a bug in height()/width() which was probably causing crashes
           and was causing incorrect behavior after this change.
           renderBox() is not necessarily valid unless layout is up to date.
           Updating layout, can cause renderBox() to go invalid, thus this
           could have been a null-pointer crash.
        (WebCore::HTMLFrameElementBase::height): see width()
        (WebCore::HTMLFrameElementBase::setRemainsAliveOnRemovalFromTree): Timer rename.
        (WebCore::HTMLFrameElementBase::checkInDocumentTimerFired): Timer rename.
        * html/HTMLFrameElementBase.h:
        * html/HTMLFrameOwnerElement.cpp:
        (WebCore::HTMLFrameOwnerElement::willRemove):
         - Disconnecting the owner element removes the frame from the frame tree.
           frameDetached() calls Page::frameCount which expects that the frame is
           already gone at this point and asserts when it's not.  It's unclear how
           this worked before, except that the frame removal was likely done in the
           post-attach callback, so the frameCount was wrong (too high) during
           frameDetached(), but was fixed up in the post-detach callback.
        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::attachAtSite):
          - Simplified this code, and added a check for the case when the node was already removed.
            Since the load logic is now run during insertedIntoDocument instead of attach(),
            synchronous javascript is now running during insertedIntoDocument and we need to
            make sure that the child is still in the tree.

2010-09-10  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed, rolling out r67178.
        http://trac.webkit.org/changeset/67178
        https://bugs.webkit.org/show_bug.cgi?id=45524

        re-roll-out patch to put original changes back in

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::parametersForPlugin):
        (WebCore::HTMLObjectElement::updateWidget):
        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::resourceWillUsePlugin):
        * loader/SubframeLoader.h:

2010-09-10  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Kent Tamura.

        roll out r66992 and r66997 - possibly introduced a perf slowdown in chromium tests
        https://bugs.webkit.org/show_bug.cgi?id=45524

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::parametersForPlugin):
        (WebCore::HTMLObjectElement::updateWidget):
        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::requestFrame):
        * loader/SubframeLoader.h:

2010-09-10  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Tony Chang.

        Extract the code to find special ancestors in createMarkup into a function
        https://bugs.webkit.org/show_bug.cgi?id=45449

        Extracted the code to find special common ancestors in createMarkup as highestAncestorToWrapMarkup.
        Also isolated the code to find ancestors required to retain structure and appearance into
        ancestorToRetainStructureAndAppearance.

        No new tests are added since this is a cleanup.

        * editing/markup.cpp:
        (WebCore::ancestorToRetainStructureAndAppearance): Added.
        (WebCore::propertyMissingOrEqualToNone): Moved.
        (WebCore::isElementPresentational): Moved.
        (WebCore::shouldIncludeWrapperForFullySelectedRoot): Added. isSpecialAncestorBlock is merged into this function.
        (WebCore::highestAncestorToWrapMarkup): Extracted from createMarkup.
        (WebCore::createMarkup): Calls highestAncestorToWrapMarkup.

2010-09-09  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        Spurious null check in MediaDocumentParser
        https://bugs.webkit.org/show_bug.cgi?id=45461

        Trivial change.  FrameLoader can never be null.

        * html/MediaDocument.cpp:
        (WebCore::MediaDocumentParser::createDocumentStructure):

2010-09-09  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        REGRESSION: applying new font size causes font-size outside selection to change
        https://bugs.webkit.org/show_bug.cgi?id=45026

        The regression was caused by removeImplicitlyStyledElement not converting font size to CSS value properly.
        Namely, it was treating font size as a pixel value for font-size property.  Fixed this by adding fontSizeToCSSValue
        which uses HTMLFontElement::cssValueFromFontSizeNumber and deployed it in removeImplicitlyStyledElement

        Also fixed a bug in StyleChange::extractTextStyles that it ignores font-size property when the values were
        relative terms such as x-small and -webkit-xxx-large. And replaced the logic to convert from pixel font size
        to legacy font size by CSSStyleSelector::legacyFontSize.

        Test: editing/style/push-down-font-styles.html

        * editing/ApplyStyleCommand.cpp:
        (WebCore::StyleChange::extractTextStyles): Fixed a bug. See above.
        (WebCore::stringToCSSValue): Converts string to CSSValue.
        (WebCore::fontSizeToCSSValue): Converts font size number (String) to CSSPrimitiveValue.
        (WebCore::ApplyStyleCommand::removeImplicitlyStyledElement): Calls stringToCSSValue and fontSizeToCSSValue.
        * css/CSSStyleSelector.h: Made fontSizeForKeyword public.

2010-09-09  Kent Tamura  <tkent@chromium.org>

        Unreviewed, build fix for Qt.

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

2010-09-09  Dominic Cooney  <dominicc@google.com>

        Reviewed by Kent Tamura.

        Moves location.replace bindings logic into bindings/generic and
        instantiates it for JSC and V8.

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

        Covered by existing location.replace tests.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/WebCoreCommon.vsprops:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/generic/BindingDOMWindow.h:
        * bindings/generic/BindingFrame.h: Added.
        (WebCore::::navigateIfAllowed):
        * bindings/generic/BindingLocation.h: Added.
        (WebCore::::replace):
        * bindings/generic/GenericBinding.h:
        (WebCore::completeURL):
        * bindings/js/JSBinding.h: Added.
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::shouldAllowNavigation):
        (WebCore::toLexicalFrame):
        (WebCore::toDynamicFrame):
        (WebCore::processingUserGesture):
        (WebCore::completeURL):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::navigateIfAllowed):
        (WebCore::JSLocation::replace):
        * bindings/js/specialization/JSBindingState.cpp: Added.
        (WebCore::::getActiveFrame):
        (WebCore::::getFirstFrame):
        (WebCore::::processingUserGesture):
        (WebCore::::allowsAccessFromFrame):
        * bindings/js/specialization/JSBindingState.h: Added.
        * bindings/v8/V8Binding.h:
        * bindings/v8/V8Utilities.cpp:
        (WebCore::completeURL):
        (WebCore::navigateIfAllowed):
        * bindings/v8/custom/V8LocationCustom.cpp:
        (WebCore::V8Location::replaceCallback):
        * bindings/v8/specialization/V8BindingState.cpp:
        (WebCore::::allowsAccessFromFrame):
        * bindings/v8/specialization/V8BindingState.h:

2010-09-09  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        Apply :invalid CSS class to <input type=number> with an unacceptable value
        https://bugs.webkit.org/show_bug.cgi?id=45376

        Apply :invalid CSS class to <input type=number> elements with an
        unacceptable value in order to tell users that a value is not
        valid.

        Introducing Element::hasUnaccceptableValue(), and CSSStyleSelector
        applies :invalid to not only elements with !isValidFormControlElement()
        but also elements with hasUnaccceptableValue().

        HTMLInputElement and RenderTextControlSingleLine need some changes
        to update style and to avoid updating renderer value during style
        update.

        Test: fast/forms/input-number-unacceptable-style.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector):
        * dom/Element.h:
        (WebCore::Element::hasUnacceptableValue):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::handleBlurEvent):
        (WebCore::HTMLInputElement::hasUnacceptableValue):
        * html/HTMLInputElement.h:
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::subtreeHasChanged):
        (WebCore::RenderTextControlSingleLine::updateFromElement):

2010-09-09  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        <input type=number> should not have an invalid number as its value
        https://bugs.webkit.org/show_bug.cgi?id=43973

        This change implements the value sanitization algorithm for
        type=number, and remove validity.typeMismatch support for
        type=number in order to improve HTML5 conformance.

        HTMLInputElement::value for type=number always has a valid number
        string or an empty string. However, the input field for it, a
        RenderTextControlSingleLine, can have a non-number string. For
        example, '-' is a non-number string, but a user needs to type
        '-'. So, the string in the input field has never been committed to
        HTMLInputElement until the string becomes a valid number string.

        This change is also a preparation of supporting localized
        numbers. A localized string in the input field would not be
        matched with HTMLInputElement::value.

        Test: fast/forms/input-number-commit-valid-only.html

        * dom/InputElement.h: Add isAcceptableValue()
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::handleBlurEvent):
         Set formControlValueMatchesRenderer false to clean an invalid value in the renderer.
        (WebCore::HTMLInputElement::isAcceptableValue):
        (WebCore::HTMLInputElement::sanitizeValue):
        * html/HTMLInputElement.h:
        * html/ValidityState.cpp:
        (WebCore::ValidityState::typeMismatch): Always returns false for type=number.
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::subtreeHasChanged):
        * wml/WMLInputElement.h:
        (WebCore::WMLInputElement::isAcceptableValue):

2010-09-09  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Adam Barth.

        Support <script async> as specified by HTML5
        https://bugs.webkit.org/show_bug.cgi?id=45310

        Tests: fast/dom/HTMLScriptElement/async-inline-script.html
               fast/dom/HTMLScriptElement/async-onbeforeload.html
               fast/dom/HTMLScriptElement/async-write.html
               http/tests/misc/async-and-defer-script.html
               http/tests/misc/script-async.html

        * dom/AsyncScriptRunner.cpp:
        (WebCore::AsyncScriptRunner::AsyncScriptRunner):
        (WebCore::AsyncScriptRunner::~AsyncScriptRunner):
        (WebCore::AsyncScriptRunner::executeScriptSoon): Increment the delay count when a task to execute scripts is queued up.
        (WebCore::AsyncScriptRunner::timerFired): decrementLoadEventDelayCount handles calling checkCompleted().
        * dom/AsyncScriptRunner.h:
        (WebCore::AsyncScriptRunner::create):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::insertedIntoDocument): Treats async scripts just like a dynamically inserted script element rather than a parser inserted one.
        * html/parser/HTMLScriptRunner.cpp:
        (WebCore::HTMLScriptRunner::runScript):

2010-09-09  Alexey Marinichev  <amarinichev@chromium.org>

        Reviewed by James Robinson.

        [chromium] Disable subpixel rendering in Linux when GPU compositor is active
        https://bugs.webkit.org/show_bug.cgi?id=45087

        This extends windows-only logic to chromium linux as well.

        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::updateContents):
        * platform/graphics/chromium/FontLinux.cpp:
        (WebCore::adjustTextRenderMode): Added a check to see if the compositor is active.
        (WebCore::Font::drawGlyphs):
        (WebCore::Font::drawComplexText):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::setRootLayerCanvasSize):
        * platform/graphics/chromium/VideoLayerChromium.cpp:
        (WebCore::VideoLayerChromium::updateContents):
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        (WebCore::ImageBuffer::clip):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        Made setDrawingToImageBuffer and isDrawingToImageBuffer available to
        Linux; removed all #if OS(WINDOWS) || OS(LINUX).
        (WebCore::PlatformContextSkia::State::State):
        (WebCore::PlatformContextSkia::PlatformContextSkia):
        (WebCore::PlatformContextSkia::isDrawingToImageBuffer):
        (WebCore::PlatformContextSkia::save):
        (WebCore::PlatformContextSkia::beginLayerClippedToImage):
        (WebCore::PlatformContextSkia::restore):
        (WebCore::PlatformContextSkia::applyClipFromImage):
        * platform/graphics/skia/PlatformContextSkia.h:

2010-09-09  Kinuko Yasuda  <kinuko@chromium.org>

        Unreviewed, Windows build fix.

        * WebCore.vcproj/WebCore.vcproj:

2010-09-09  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Jian Li.

        [FileSystem] Add File and FileWriter accessor methods in FileEntry
        https://bugs.webkit.org/show_bug.cgi?id=45440

        Adding file() and createWrite() methods in FileEntry.
        http://dev.w3.org/2009/dap/file-system/file-dir-sys.html#the-fileentry-interface

        No new tests; this patch doesn't have implementation yet.

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * fileapi/FileEntry.cpp:
        (WebCore::FileEntry::createWriter): Added.
        (WebCore::FileEntry::file): Added.
        * fileapi/FileEntry.h:
        * fileapi/FileEntry.idl:
        * fileapi/FileCallback.h: Added.
        * fileapi/FileCallback.idl: Added.
        * fileapi/FileWriterCallback.h: Added.
        * fileapi/FileWriterCallback.idl: Added.

2010-09-09  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Darin Adler.

        Fix for Bug 24742 - CSS tokenizer allows color in 6 hex digit notation to be followed by the next token without separation
        Stop checking in the flex definition the number of hexadecimal digits for a hex color.
        Instead, rely on the checking in Color::parseHexColor().
        The resultant grammar is actually more close to the one in http://www.w3.org/TR/CSS21/grammar.html .

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

        Test: fast/css/invalid-hex-color.html

        * css/tokenizer.flex:

2010-09-09  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Add AudioSourceNode files
        https://bugs.webkit.org/show_bug.cgi?id=45010

        No new tests since audio API is not yet implemented.

        * webaudio/AudioSourceNode.h: Added.
        (WebCore::AudioSourceNode::AudioSourceNode):
        * webaudio/AudioSourceNode.idl: Added.

2010-09-09  James Robinson  <jamesr@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Don't call deleteTexture on a texture attached to an FBO that is not currently bound
        https://bugs.webkit.org/show_bug.cgi?id=45504

        The OpenGL semantics for glDeleteTextures() are that if one of the specified texture is attached
        to the currently bound FBO, that FBO's color attachment is removed.  However, if the specified
        texture is attached to a non-current FBO then OpenGL states explicitly that that FBO's color
        attachment is not cleared and that the texture stays alive even though its ID is no longer
        valid to use.  This is not the behavior we want in DrawingBuffer - we actually want the
        texture to be immediately deleted.  This patch makes sure the DrawingBuffer's FBO is bound
        before deleting its color attachment texture.

        * platform/graphics/chromium/DrawingBufferChromium.cpp:
        (WebCore::DrawingBuffer::~DrawingBuffer):
        (WebCore::DrawingBuffer::reset):

2010-09-09  James Robinson  <jamesr@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Chromium mac build should exclude all Skia files in platform/graphics/skia/, not just some
        https://bugs.webkit.org/show_bug.cgi?id=45516

        This excludes platform/graphics/skia/*Skia.(h|cpp) by pattern instead of individual files.
        None of these files should be compiled into the Chromium mac build and the old file list had
        both omissions and stale entries.

        * WebCore.gyp/WebCore.gyp:

2010-09-09  Dirk Pranke  <dpranke@chromium.org>

        Unreviewed, rolling out r67145.
        http://trac.webkit.org/changeset/67145
        https://bugs.webkit.org/show_bug.cgi?id=45431

        broke editing/inserting/5994480-2.html on Chromium Linux

        * css/CSSStyleSelector.h:
        * editing/ApplyStyleCommand.cpp:
        (WebCore::StyleChange::init):
        (WebCore::StyleChange::extractTextStyles):
        (WebCore::ApplyStyleCommand::removeImplicitlyStyledElement):

2010-09-09  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Removing an obsolete comment.
        https://bugs.webkit.org/show_bug.cgi?id=40112

        * bindings/generic/ActiveDOMCallback.cpp:

2010-09-09  James Robinson  <jamesr@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Clear only the uploaded portion of the software backing store when in mixed mode
        https://bugs.webkit.org/show_bug.cgi?id=45503

        This clears out only the dirty region of the software backing store when uploading results
        to hardware rather than clearing out the entire software backing store.  This is a significant
        performance improvement when the dirty rects are small relative to the whole canvas.

        This also implements the non-swizzle path of copySubRect() using memcpy() to copy the rows, which
        is another respectable performance increase.

        * html/canvas/CanvasRenderingContext2D.cpp:
        * platform/graphics/gpu/Texture.cpp:
        (WebCore::copySubRect):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::prepareForSoftwareDraw):
        (WebCore::PlatformContextSkia::uploadSoftwareToHardware):
        (WebCore::PlatformContextSkia::readbackHardwareToSoftware):

2010-09-09  Kenneth Russell  <kbr@google.com>

        Reviewed by James Robinson.

        Add math utilities for cubic curve processing
        https://bugs.webkit.org/show_bug.cgi?id=45251

        Adding mathematic utilities needed for the GPU accelerated path
        rendering algorithm from GPU Gems 3. No tests yet; will be tested
        in conjunction with later code.

        * platform/graphics/gpu/LoopBlinnMathUtils.cpp: Added.
        (WebCore::LoopBlinnMathUtils::roundToZero):
        (WebCore::LoopBlinnMathUtils::approxEqual):
        (WebCore::LoopBlinnMathUtils::linesIntersect):
        (WebCore::LoopBlinnMathUtils::pointInTriangle):
        (WebCore::LoopBlinnMathUtils::trianglesOverlap):
        (WebCore::LoopBlinnMathUtils::chopCubicAt):
        (WebCore::LoopBlinnMathUtils::xRayCrossesLine):
        (WebCore::LoopBlinnMathUtils::numXRayCrossingsForCubic):
        * platform/graphics/gpu/LoopBlinnMathUtils.h: Added.

2010-09-09  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Dumitru Daniliuc.

        Add Entry.getMetadata for FileSystem API
        https://bugs.webkit.org/show_bug.cgi?id=45403

        Add getMetadata to Entry.idl (I had missed to include this
        in my previous Entry.idl patch.)

        Also make some minor cleanups and nits fixes.

        No new tests; layout test is going be added later.

        * fileapi/DOMFileSystem.cpp: Bug fix.
        * fileapi/MetadataCallback.h: Nits fix.
        * fileapi/Entry.idl: Added getMetadata.
        * fileapi/ErrorCallback.h: Nits fix.

2010-09-09  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        REGRESSION: applying new font size causes font-size outside selection to change
        https://bugs.webkit.org/show_bug.cgi?id=45026

        The regression was caused by removeImplicitlyStyledElement not converting font size to CSS value properly.
        Namely, it was treating font size as a pixel value for font-size property.  Fixed this by adding fontSizeToCSSValue
        which uses HTMLFontElement::cssValueFromFontSizeNumber and deployed it in removeImplicitlyStyledElement

        Also fixed a bug in StyleChange::extractTextStyles that it ignores font-size property when the values were
        relative terms such as x-small and -webkit-xxx-large. And replaced the logic to convert from pixel font size
        to legacy font size by CSSStyleSelector::legacyFontSize.

        Test: editing/style/push-down-font-styles.html

        * editing/ApplyStyleCommand.cpp:
        (WebCore::StyleChange::extractTextStyles): Fixed a bug. See above.
        (WebCore::stringToCSSValue): Converts string to CSSValue.
        (WebCore::fontSizeToCSSValue): Converts font size number (String) to CSSPrimitiveValue.
        (WebCore::ApplyStyleCommand::removeImplicitlyStyledElement): Calls stringToCSSValue and fontSizeToCSSValue.
        * css/CSSStyleSelector.h: Made fontSizeForKeyword public.

2010-09-09  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r67126.
        http://trac.webkit.org/changeset/67126
        https://bugs.webkit.org/show_bug.cgi?id=45510

        broke chromium mac compile, it also uses PlatformContextSkia
        (Requested by jamesr on #webkit).

        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::updateContents):
        * platform/graphics/chromium/FontLinux.cpp:
        (WebCore::adjustTextRenderMode):
        (WebCore::Font::drawGlyphs):
        (WebCore::Font::drawComplexText):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::setRootLayerCanvasSize):
        * platform/graphics/chromium/VideoLayerChromium.cpp:
        (WebCore::VideoLayerChromium::updateContents):
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        (WebCore::ImageBuffer::clip):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::State::State):
        (WebCore::PlatformContextSkia::PlatformContextSkia):
        (WebCore::PlatformContextSkia::save):
        (WebCore::PlatformContextSkia::restore):
        * platform/graphics/skia/PlatformContextSkia.h:

2010-09-09  Simon Fraser  <simon.fraser@apple.com>

        Attempt to fix Qt build.

        * WebCore.pro:

2010-09-09  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=45509
        <rdar://problem/8142166> REGRESSION: WebView setDrawsBackground:NO no
        longer works without setBackgroundColor:clearColor
        
        r61215 caused RenderView to paint the viewport background when the
        document element's renderer is known to not fill opaquely paint
        the entire viewport, i.e. more often than it did before.
        
        This exposed a latent, long-standing bug which was introduced
        in r14638 (the RenderCanvas -> RenderView rename), where a call
        to view()->isTransparent() was not converted to frameView()->isTransparent(),
        yet happened to still compile because of RenderObject::isTransparent().
        
        This resulted in us painting the viewport background, even when
        WebView clients explicitly said that they wanted a transparent
        WebView.
        
        Fixed by calling frameView()->isTransparent(), as intended.

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

2010-09-09  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        audio engine: add Biquad files
        https://bugs.webkit.org/show_bug.cgi?id=44795

        No new tests since audio API is not yet implemented.

        * platform/audio/Biquad.cpp: Added.
        (WebCore::Biquad::Biquad):
        (WebCore::Biquad::process):
        (WebCore::Biquad::processFast):
        (WebCore::Biquad::processSliceFast):
        (WebCore::Biquad::reset):
        (WebCore::Biquad::setLowpassParams):
        (WebCore::Biquad::setHighpassParams):
        (WebCore::Biquad::setLowShelfParams):
        (WebCore::Biquad::setZeroPolePairs):
        (WebCore::Biquad::setAllpassPole):
        * platform/audio/Biquad.h: Added.
        (WebCore::Biquad::~Biquad):

2010-09-09  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Add AudioBuffer files
        https://bugs.webkit.org/show_bug.cgi?id=45003

        No new tests since audio API is not yet implemented.

        * webaudio/AudioBuffer.cpp: Added.
        (WebCore::AudioBuffer::create):
        (WebCore::AudioBuffer::createFromAudioFileData):
        (WebCore::AudioBuffer::AudioBuffer):
        (WebCore::AudioBuffer::releaseMemory):
        (WebCore::AudioBuffer::getChannelData):
        (WebCore::AudioBuffer::zero):
        * webaudio/AudioBuffer.h: Added.
        (WebCore::AudioBuffer::length):
        (WebCore::AudioBuffer::duration):
        (WebCore::AudioBuffer::sampleRate):
        (WebCore::AudioBuffer::numberOfChannels):
        (WebCore::AudioBuffer::gain):
        (WebCore::AudioBuffer::setGain):
        * webaudio/AudioBuffer.idl: Added.

2010-09-09  Alexey Marinichev  <amarinichev@chromium.org>

        Reviewed by James Robinson.

        [chromium] Disable subpixel rendering in Linux when GPU compositor is active
        https://bugs.webkit.org/show_bug.cgi?id=45087

        Covered by all tests that activate the compositor and contain text.

        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::updateContents):
        * platform/graphics/chromium/FontLinux.cpp:
        (WebCore::adjustTextRenderMode): Added a check to see if the compositor is active.
        (WebCore::Font::drawGlyphs):
        (WebCore::Font::drawComplexText):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::setRootLayerCanvasSize):
        * platform/graphics/chromium/VideoLayerChromium.cpp:
        (WebCore::VideoLayerChromium::updateContents):
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        (WebCore::ImageBuffer::clip):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        Made setDrawingToImageBuffer and isDrawingToImageBuffer available to
        Linux; removed all #if OS(WINDOWS) || OS(LINUX).
        (WebCore::PlatformContextSkia::State::State):
        (WebCore::PlatformContextSkia::PlatformContextSkia):
        (WebCore::PlatformContextSkia::isDrawingToImageBuffer):
        (WebCore::PlatformContextSkia::save):
        (WebCore::PlatformContextSkia::beginLayerClippedToImage):
        (WebCore::PlatformContextSkia::restore):
        (WebCore::PlatformContextSkia::applyClipFromImage):
        * platform/graphics/skia/PlatformContextSkia.h:

2010-09-09  Simon Fraser  <simon.fraser@apple.com>

        Fix windows build by adding missing file.

        * platform/graphics/win/LocalWindowsContext.h: Added.
        (WebCore::LocalWindowsContext::LocalWindowsContext):
        (WebCore::LocalWindowsContext::~LocalWindowsContext):
        (WebCore::LocalWindowsContext::hdc):

2010-09-09  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Adam Roben.

        Scrollbars fail to render in composited iframes.
        https://bugs.webkit.org/show_bug.cgi?id=45335

        Add a stack-based class, LocalWindowsContext, which does a getWindowsContext/
        releaseWindowsContext automatically.

        Also fix getWindowsContext to create a bitmap context if mayCreateBitmap
        is true, and if the context's HDC is null. This fixes scrollbar rendering
        in compositing layers.

        Use LocalWindowsContext in places where we had bare getWindowsContext() calls.

        * platform/graphics/win/LocalWindowsContext.h
        (WebCore::LocalWindowsContext::LocalWindowsContext):
        (WebCore::LocalWindowsContext::~LocalWindowsContext):
        (WebCore::LocalWindowsContext::hdc):
        * platform/graphics/win/GraphicsContextCGWin.cpp:
        (WebCore::GraphicsContext::releaseWindowsContext):
        * platform/graphics/win/GraphicsContextWin.cpp:
        (WebCore::GraphicsContext::getWindowsContext):
        * platform/graphics/win/IconWin.cpp:
        (WebCore::Icon::paint):
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:
        (WebCore::MediaPlayerPrivate::paint):
        * platform/win/ScrollbarThemeWin.cpp:
        (WebCore::ScrollbarThemeWin::paintTrackPiece):
        (WebCore::ScrollbarThemeWin::paintButton):
        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::paintWindowedPluginIntoContext):
        (WebCore::PluginView::paint):
        * rendering/RenderThemeWin.cpp:
        (WebCore::drawControl):

2010-09-09  Vincent Scheib  <scheib@chromium.org>

        Reviewed by James Robinson.

        [Chromium] Minimize uploads in canvas 2d mixed mode rendering
        https://bugs.webkit.org/show_bug.cgi?id=45476

        No new tests - change is for performance, logic fixes only apparent when running hardware acceleration.

        - Enumeration values fixed, "CavasWillDraw" -> "CanvasDidDraw".
        - markDirtyRect() plumbed through GraphicsContext to PlatformContextSkia.
        - Texture::updateSubRect() added to allow uploading only a dirty rect.
        - Logic fix in ImageBuffer::draw(), caused canvas to canvas copies to be incorrect.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setAllAttributesToDefault):
        (WebCore::CanvasRenderingContext2D::strokeRect):
        (WebCore::CanvasRenderingContext2D::drawImage):
        (WebCore::CanvasRenderingContext2D::didDraw):
          - Logic fix for drawingContext()->markDirtyRect() call.
        (WebCore::CanvasRenderingContext2D::putImageData):
        (WebCore::CanvasRenderingContext2D::drawTextInternal):
          - Logic fix for calls to "didDraw()", use peer method first.
        * html/canvas/CanvasRenderingContext2D.h:
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawImageBuffer):
        (WebCore::GraphicsContext::markDirtyRect):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/gpu/Texture.cpp:
        (WebCore::Texture::create):
        (WebCore::Texture::load):
        (WebCore::Texture::updateSubRect):
        * platform/graphics/gpu/Texture.h:
        * platform/graphics/gpu/TilingData.h:
        (WebCore::TilingData::borderTexels):
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::clipConvexPolygon):
        (WebCore::GraphicsContext::markDirtyRect):
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageBuffer::draw):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::State::cloneInheritedProperties):
        (WebCore::PlatformContextSkia::drawRect):
        (WebCore::PlatformContextSkia::setFillColor):
        (WebCore::PlatformContextSkia::setStrokeColor):
        (WebCore::PlatformContextSkia::markDirtyRect):
        (WebCore::PlatformContextSkia::uploadSoftwareToHardware):
        * platform/graphics/skia/PlatformContextSkia.h:

2010-09-08  Darin Adler  <darin@apple.com>

        Reviewed by Adam Barth.

        Move functions from Frame to Editor as planned
        https://bugs.webkit.org/show_bug.cgi?id=45218

        Just executing the plan that has long been described in Frame.h
        to move a bunch of functions to Editor.

        * WebCore.exp.in: Updated.

        * editing/Editor.cpp:
        (WebCore::Editor::fontForSelection):
        (WebCore::Editor::textDirectionForSelection):
        (WebCore::Editor::applyStyle):
        (WebCore::Editor::selectionStartHasStyle):
        (WebCore::Editor::selectionHasStyle):
        (WebCore::Editor::selectionStartCSSPropertyValue):
        (WebCore::Editor::Editor):
        (WebCore::Editor::cut):
        (WebCore::Editor::copy):
        (WebCore::Editor::ignoreSpelling):
        (WebCore::Editor::learnSpelling):
        (WebCore::Editor::isSelectionMisspelled):
        (WebCore::Editor::guessesForMisspelledSelection):
        (WebCore::Editor::selectedText):
        (WebCore::Editor::firstRectForRange):
        (WebCore::Editor::shouldChangeSelection):
        (WebCore::Editor::computeAndSetTypingStyle):
        (WebCore::Editor::selectionComputedStyle):
        (WebCore::Editor::textFieldDidBeginEditing):
        (WebCore::Editor::textFieldDidEndEditing):
        (WebCore::Editor::textDidChangeInTextField):
        (WebCore::Editor::doTextFieldCommandFromEvent):
        (WebCore::Editor::textWillBeDeletedInTextField):
        (WebCore::Editor::textDidChangeInTextArea):
        (WebCore::Editor::applyEditingStyleToBodyElement):
        (WebCore::Editor::applyEditingStyleToElement):
        (WebCore::Editor::styleForSelectionStart):
        (WebCore::Editor::findString):
        (WebCore::Editor::countMatchesForText):
        (WebCore::Editor::setMarkedTextMatchesAreHighlighted):
        (WebCore::Editor::respondToChangedSelection):
        * editing/Editor.h:
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::fontAttributesForSelectionStart):
        (WebCore::Editor::baseWritingDirectionForSelectionStart):
        Moved functions here.

        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        (WebCore::Frame::shouldChangeSelection):
        * page/Frame.h:
        * page/mac/FrameMac.mm:
        Moved functions out of here.

        * dom/InputElement.cpp:
        (WebCore::InputElement::dispatchBlurEvent):
        (WebCore::InputElement::aboutToUnload):
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::doApply):
        * editing/EditorCommand.cpp:
        (WebCore::executeToggleStyleInList):
        (WebCore::executeDeleteToMark):
        (WebCore::executeFindString):
        (WebCore::executeSelectToMark):
        (WebCore::executeSetMark):
        (WebCore::executeSwapWithMark):
        (WebCore::enabledVisibleSelectionAndMark):
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::setSelection):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::defaultEventHandler):
        * page/ContextMenuController.cpp:
        (WebCore::ContextMenuController::contextMenuItemSelected):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::find):
        * page/DragController.cpp:
        (WebCore::DragController::startDrag):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::sendContextMenuEventForKey):
        * page/Page.cpp:
        (WebCore::Page::findString):
        (WebCore::Page::markAllMatchesForText):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintTextMatchMarker):
        * rendering/RenderTextControlMultiLine.cpp:
        (WebCore::RenderTextControlMultiLine::subtreeHasChanged):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::subtreeHasChanged):
        Changed call sites to use editor().

2010-09-09  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Add AudioDSPKernelProcessor files
        https://bugs.webkit.org/show_bug.cgi?id=45211

        No new tests since audio API is not yet implemented.

        * platform/audio/AudioDSPKernelProcessor.cpp: Added.
        (WebCore::AudioDSPKernelProcessor::AudioDSPKernelProcessor):
        (WebCore::AudioDSPKernelProcessor::initialize):
        (WebCore::AudioDSPKernelProcessor::uninitialize):
        (WebCore::AudioDSPKernelProcessor::process):
        (WebCore::AudioDSPKernelProcessor::reset):
        (WebCore::AudioDSPKernelProcessor::setNumberOfChannels):
        * platform/audio/AudioDSPKernelProcessor.h: Added.
        (WebCore::AudioDSPKernelProcessor::numberOfChannels):

2010-09-09  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Add setRange() and zeroRange() methods to TypedArrayBase
        https://bugs.webkit.org/show_bug.cgi?id=45419

        No new tests since adding new methods which are not yet called anywhere.

        * html/canvas/ArrayBufferView.cpp:
        (WebCore::ArrayBufferView::setRangeImpl):
        (WebCore::ArrayBufferView::zeroRangeImpl):
        * html/canvas/ArrayBufferView.h:
        * html/canvas/TypedArrayBase.h:
        (WebCore::TypedArrayBase::setRange):
        (WebCore::TypedArrayBase::zeroRange):

2010-09-09  Robert Hogan  <robert@webkit.org>

        Reviewed by Andreas Kling.

        [Qt] always send an Accept header

        Ensure QtWebKit always sends an Accept header. This is required
        for compatibility with sites that expect the header in requests
        for subresources.

        See https://bugs.webkit.org/show_bug.cgi?id=33242 for more.

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

        * platform/network/qt/ResourceRequestQt.cpp:
        (WebCore::ResourceRequest::toNetworkRequest):

2010-09-09  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Chris Marrin.

        Add media element logging
        https://bugs.webkit.org/show_bug.cgi?id=45469

        Add logging at interesting points in a media element's lifecycle.

        * html/HTMLMediaElement.cpp:
        (WebCore::urlForLogging):
        (WebCore::boolString):
        (WebCore::HTMLMediaElement::scheduleEvent):
        (WebCore::HTMLMediaElement::asyncEventTimerFired):
        (WebCore::HTMLMediaElement::canPlayType):
        (WebCore::HTMLMediaElement::load):
        (WebCore::HTMLMediaElement::prepareForLoad):
        (WebCore::HTMLMediaElement::selectMediaResource):
        (WebCore::HTMLMediaElement::loadResource):
        (WebCore::HTMLMediaElement::isSafeToLoadURL):
        (WebCore::HTMLMediaElement::waitForSourceChange):
        (WebCore::HTMLMediaElement::noneSupported):
        (WebCore::HTMLMediaElement::mediaEngineError):
        (WebCore::HTMLMediaElement::cancelPendingEventsAndCallbacks):
        (WebCore::HTMLMediaElement::setNetworkState):
        (WebCore::HTMLMediaElement::setReadyState):
        (WebCore::HTMLMediaElement::rewind):
        (WebCore::HTMLMediaElement::returnToRealtime):
        (WebCore::HTMLMediaElement::addPlayedRange):
        (WebCore::HTMLMediaElement::seek):
        (WebCore::HTMLMediaElement::finishSeek):
        (WebCore::HTMLMediaElement::setPlaybackRate):
        (WebCore::HTMLMediaElement::setWebkitPreservesPitch):
        (WebCore::HTMLMediaElement::setAutoplay):
        (WebCore::HTMLMediaElement::setPreload):
        (WebCore::HTMLMediaElement::play):
        (WebCore::HTMLMediaElement::playInternal):
        (WebCore::HTMLMediaElement::pause):
        (WebCore::HTMLMediaElement::pauseInternal):
        (WebCore::HTMLMediaElement::setLoop):
        (WebCore::HTMLMediaElement::setControls):
        (WebCore::HTMLMediaElement::setVolume):
        (WebCore::HTMLMediaElement::setMuted):
        (WebCore::HTMLMediaElement::togglePlayState):
        (WebCore::HTMLMediaElement::beginScrubbing):
        (WebCore::HTMLMediaElement::endScrubbing):
        (WebCore::HTMLMediaElement::selectNextSourceChild):
        (WebCore::HTMLMediaElement::mediaPlayerTimeChanged):
        (WebCore::HTMLMediaElement::mediaPlayerVolumeChanged):
        (WebCore::HTMLMediaElement::mediaPlayerMuteChanged):
        (WebCore::HTMLMediaElement::mediaPlayerDurationChanged):
        (WebCore::HTMLMediaElement::mediaPlayerRateChanged):
        (WebCore::HTMLMediaElement::mediaPlayerPlaybackStateChanged):
        (WebCore::HTMLMediaElement::mediaPlayerSawUnsupportedTracks):
        (WebCore::HTMLMediaElement::mediaPlayerSizeChanged):
        (WebCore::HTMLMediaElement::mediaPlayerRenderingModeChanged):
        (WebCore::HTMLMediaElement::updatePlayState):
        (WebCore::HTMLMediaElement::userCancelledLoad):
        (WebCore::HTMLMediaElement::stop):
        (WebCore::HTMLMediaElement::suspend):
        (WebCore::HTMLMediaElement::resume):
        (WebCore::HTMLMediaElement::hasPendingActivity):
        (WebCore::HTMLMediaElement::mediaVolumeDidChange):
        (WebCore::HTMLMediaElement::createMediaPlayerProxy):
        (WebCore::HTMLMediaElement::enterFullscreen):
        (WebCore::HTMLMediaElement::exitFullscreen):
        (WebCore::HTMLMediaElement::setClosedCaptionsVisible):
        (WebCore::HTMLMediaElement::mediaCanStart):
        (WebCore::HTMLMediaElement::setShouldDelayLoadEvent):

2010-09-09  Anton Muhin  <antonm@chromium.org>

        Reviewed by Adam Barth.

        [v8] bypass caches when query memory usage from post GC and in crash handler.
        https://bugs.webkit.org/show_bug.cgi?id=45036

        Second part of the whole change: now use API introduced in
        http://trac.webkit.org/changeset/66818 and now backed by Chromium.

        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::reportFatalErrorInV8):
        * bindings/v8/V8GCController.cpp:
        (WebCore::V8GCController::gcEpilogue):

2010-09-09  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by James Robinson.

        Make sure skia is not Chromium specific
        https://bugs.webkit.org/show_bug.cgi?id=39672

        FontCustomPlatformData is not Chromium-specific. Move it to platform/skia.

        No new tests because this is pure refactoring.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * platform/graphics/chromium/FontCustomPlatformData.cpp: Removed.
        * platform/graphics/chromium/FontCustomPlatformData.h: Removed.
        * platform/graphics/skia/FontCustomPlatformData.cpp: Copied from WebCore/platform/graphics/chromium/FontCustomPlatformData.cpp.
        * platform/graphics/skia/FontCustomPlatformData.h: Copied from WebCore/platform/graphics/chromium/FontCustomPlatformData.h.

2010-09-09  Chris Rogers  <crogers@google.com>

        Reviewed by Chris Fleizach.

        Add AudioDSPKernel files
        https://bugs.webkit.org/show_bug.cgi?id=45319

        No new tests since audio API is not yet implemented.

        * platform/audio/AudioDSPKernel.h: Added.
        (WebCore::AudioDSPKernel::AudioDSPKernel):
        (WebCore::AudioDSPKernel::~AudioDSPKernel):
        (WebCore::AudioDSPKernel::sampleRate):
        (WebCore::AudioDSPKernel::nyquist):
        (WebCore::AudioDSPKernel::processor):

2010-09-09  Chris Rogers  <crogers@google.com>

        Reviewed by Chris Fleizach.

        Add AudioProcessor.h
        https://bugs.webkit.org/show_bug.cgi?id=45206

        No new tests since audio API is not yet implemented.

        * platform/audio/AudioProcessor.h: Added.
        (WebCore::AudioProcessor::AudioProcessor):
        (WebCore::AudioProcessor::~AudioProcessor):
        (WebCore::AudioProcessor::isInitialized):
        (WebCore::AudioProcessor::sampleRate):

2010-09-09  Kenneth Russell  <kbr@google.com>

        Reviewed by James Robinson.

        Add cubic texture coordinate computation
        https://bugs.webkit.org/show_bug.cgi?id=45250

        Adding the texture coordinate computation for cubic curves per the
        GPU Gems 3 chapter. No tests yet; will be tested in conjunction
        with later code.

        * platform/graphics/gpu/LoopBlinnConstants.h: Added.
        * platform/graphics/gpu/LoopBlinnTextureCoords.cpp: Added.
        (WebCore::LoopBlinnTextureCoords::compute):
        * platform/graphics/gpu/LoopBlinnTextureCoords.h: Added.
        (WebCore::LoopBlinnTextureCoords::Result::Result):
        (WebCore::LoopBlinnTextureCoords::LoopBlinnTextureCoords):

2010-09-09  Kenneth Russell  <kbr@google.com>

        Reviewed by James Robinson.

        Add cubic curve classifier
        https://bugs.webkit.org/show_bug.cgi?id=45249

        Adding the cubic curve classification algorithm per the GPU Gems 3
        chapter. No tests yet; will be tested in conjunction with later code.

        * platform/graphics/gpu/LoopBlinnClassifier.cpp: Added.
        (WebCore::LoopBlinnClassifier::classify):
        * platform/graphics/gpu/LoopBlinnClassifier.h: Added.
        (WebCore::LoopBlinnClassifier::Result::Result):
        (WebCore::LoopBlinnClassifier::LoopBlinnClassifier):

2010-09-09  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        QueryCommandValue('FontSize') returns pixel values instead of IE font numbers
        https://bugs.webkit.org/show_bug.cgi?id=21033

        Modified selectionStartCSSPropertyValue to return legacy font size instead of pixel size.
        To implement the conversion between pixel font size and legacy font size,
        added legacyFontSize to CSSStyleSelector with a helper static function findNearestLegacyFontSize.

        Fixed a bug in selectionComputedStyle where it obtains the style of the previous editing position
        even when the selection is a range. This change revealed a crash in executeToggleStyleInList,
        which was also fixed.

        Test: editing/execCommand/query-font-size.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getFontSizeCSSValuePreferringKeyword): Corrected style.
        (WebCore::CSSComputedStyleDeclaration::useFixedFontDefaultSize): Added.
        * css/CSSComputedStyleDeclaration.h:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::fontSizeForKeyword): Renamed fixed/monospace to shouldUseFixedDefaultSize.
        (WebCore::findNearestLegacyFontSize): Added, a helper for legacyFontSize.
        (WebCore::CSSStyleSelector::legacyFontSize): Added.
        * css/CSSStyleSelector.h:
        * editing/Editor.cpp:
        (WebCore::Editor::selectionStartCSSPropertyValue): Added a conversion from pixel to legacy font size.
        * editing/EditorCommand.cpp:
        (WebCore::executeToggleStyleInList): Crash fix.
        * page/Frame.cpp:
        (WebCore::Frame::selectionComputedStyle): See above.

2010-09-09  Robert Hogan  <robert@webkit.org>

        Reviewed by Adam Barth.

        Give WebKit clients a way to replace window.screen 
        to foil attempts to track users with it.

        This allows clients to overload the values returned by the
        Screen object through the JSC manipulation API (such as
        QWebFrame::addToJavaScriptWindowObject() in Qt). Clients will
        want to do this when they do not want to reveal too much
        explicit information about the user's desktop configuration.

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

        * page/DOMWindow.idl:

2010-09-09  Kenneth Russell  <kbr@google.com>

        Reviewed by James Robinson.

        Memory leak in red/black tree
        https://bugs.webkit.org/show_bug.cgi?id=45472

        Fixed memory leak in red/black tree where it was using operator
        new directly to allocate its internal nodes rather than the arena
        with which it was configured. Added allocateObject variant to
        arena supporting single-argument constructors. Added test to
        red/black tree unit tests to cover this functionality, and
        refactored TrackedAllocator into helper file to share between
        arena and red/black tree tests.

        * platform/graphics/gpu/PODArena.h:
        (WebCore::PODArena::allocateObject):
        (WebCore::PODArena::allocateBase):
        * platform/graphics/gpu/PODIntervalTree.h:
        (WebCore::PODIntervalTree::PODIntervalTree):
        * platform/graphics/gpu/PODRedBlackTree.h:
        (WebCore::PODRedBlackTree::add):

2010-09-09  Dean Jackson  <dino@apple.com>

        Reviewed by Simon Fraser.

        Fill mode is broken with multiple keyframes
        https://bugs.webkit.org/show_bug.cgi?id=41209

        With a forward fill mode the animation would tick after
        the end of the animation, causing the fractional
        duration of the animation to wrap. This meant the last
        style update would happen using the incorrect keyframes.
        The solution was to put clamps in for the elapsed time
        and current iteration count.

        Tests: animations/fill-mode-missing-from-to-keyframes.html
               animations/fill-mode-multiple-keyframes.html

        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::fetchIntervalEndpointsForProperty):

2010-09-09  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by David Kilzer.

        AX: Support AccessibilityTextMarkers in DRT
        https://bugs.webkit.org/show_bug.cgi?id=44778

        Provide support in DRT for accessing and manipulating the text marker system that AX exposes.
        This will allow future bug fixes in the text marker system to be adequately tested.

        Tests: platform/mac/accessibility/element-for-text-marker.html
               platform/mac/accessibility/text-marker-length.html

        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):

2010-09-09  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        REGRESSION(r58875-r59046): Scrollable content drawn in wrong layer with Flash 10.1
        https://bugs.webkit.org/show_bug.cgi?id=40743
        
        We can't do partial compositing layer updates on scrolling if we have to look
        for overlap, because the overlap map needs to be populated by traversing the
        compositing layer hierarchy from the root.

        Test: compositing/layer-creation/scroll-partial-update.html

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::updateCompositingLayers):

2010-09-09  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] testmimehandling falsely succeeds testing Ogg mime type
        https://bugs.webkit.org/show_bug.cgi?id=45349

        Advertize audio/x-vorbis+ogg so MediaDocuments loading local ogg
        files work as well.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mimeTypeCache):

2010-09-09  Adam Barth  <abarth@webkit.org>

        Move FTPDirectoryDocument, ImageDocument, MediaDocument, and
        PluginDocument from WebCore/loader to WebCore/html.  These classes are
        subclasses of HTMLDocument.  They don't belong in the loader.  Further
        cleanup patches to follow.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/FTPDirectoryDocument.cpp: Copied from WebCore/loader/FTPDirectoryDocument.cpp.
        * html/FTPDirectoryDocument.h: Copied from WebCore/loader/FTPDirectoryDocument.h.
        * html/ImageDocument.cpp: Copied from WebCore/loader/ImageDocument.cpp.
        * html/ImageDocument.h: Copied from WebCore/loader/ImageDocument.h.
        * html/MediaDocument.cpp: Copied from WebCore/loader/MediaDocument.cpp.
        * html/MediaDocument.h: Copied from WebCore/loader/MediaDocument.h.
        * html/PluginDocument.cpp: Copied from WebCore/loader/PluginDocument.cpp.
        * html/PluginDocument.h: Copied from WebCore/loader/PluginDocument.h.
        * loader/FTPDirectoryDocument.cpp: Removed.
        * loader/FTPDirectoryDocument.h: Removed.
        * loader/ImageDocument.cpp: Removed.
        * loader/ImageDocument.h: Removed.
        * loader/MediaDocument.cpp: Removed.
        * loader/MediaDocument.h: Removed.
        * loader/PluginDocument.cpp: Removed.
        * loader/PluginDocument.h: Removed.

2010-09-09  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: use string representation of resource type in extension API
        Fixed Resoruce.Type.toString() to handle Resource.Type.Media.
        https://bugs.webkit.org/show_bug.cgi?id=45286

        Test: inspector/extensions-resources.html

        * English.lproj/localizedStrings.js: Added "media".
        * inspector/front-end/ExtensionServer.js: Added webInspector.resources.Types. Return resource types as strings.
        (WebInspector.ExtensionServer.prototype._convertResource):
        (WebInspector.ExtensionServer.prototype._buildExtensionAPIInjectedScript):
        * inspector/front-end/Resource.js: Added toUIString(), changed toString() to return locale-independent representation.
        (WebInspector.Resource.Type.toUIString):
        (WebInspector.Resource.Type.toString):

2010-09-09  Kristian Amlie  <kristian.amlie@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] Fixed incorrect Symbian scoping.

        The missing install functionality is only true for mmp based systems.

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

        * WebCore.pro:

2010-09-09  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Reviewed by Dirk Schulze.

        [WML] Add a parameter to fix build break.
        https://bugs.webkit.org/show_bug.cgi?id=45437

        In WMLSelectElement.h, the setSelectedIndexByUser() needs to have one more parameter. 
        Because, parent class's setSelectedIndexByUser() has one more param.

        * wml/WMLSelectElement.h:

2010-09-09  Ryuan Choi  <ryuan.choi@samsung.com>

        Unreviewed attempt to fix EFL build after r67001.

        [EFL] Regression (67001) Build break
        https://bugs.webkit.org/show_bug.cgi?id=45422

        * platform/efl/ScrollbarEfl.cpp:
        (scrollbarEflEdjeMessage):

2010-09-08  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Tony Chang.

        MarkupAccumulator should be broken down into two classes
        https://bugs.webkit.org/show_bug.cgi?id=44854

        Extracted wrapWithNode, wrapWithStyleNode, stringValueForRange, renderedText, removeExteriorStyles,
        shouldAnnotate, m_shouldAnnotate, and m_reversedPrecedingMarkup from MarkupAccumulator to create
        StyledMarkupAccumulator in order to isolate annotation related code and prepending of text.

        Isolating MarkupAccumulator as a separate class has two advantages:
        1. Isolated serialization code is easier to understand and easier to security-review.
        2. Embedder can use MarkupAccumulator to implement "Save as" feature.

        Also made takeResults, appendText, and appendElement in MarkupAccumulator virtual to override in
        StyledMarkupAccumulator because prepending text requires overriding takeResults, appendText needs
        to append only rendered text when shouldAnnotate() is true, and appendElement requires a different
        behavior when shouldAnnotate() is true or when called inside wrapWithNode with convertBlocksToInlines = true.

        No new tests are added since this is a cleanup.

        * editing/markup.cpp:
        (WebCore::MarkupAccumulator::MarkupAccumulator): Removed shouldAnnotate from argument.
        (WebCore::MarkupAccumulator::~MarkupAccumulator): Added.
        (WebCore::StyledMarkupAccumulator::): Added.
        (WebCore::StyledMarkupAccumulator::StyledMarkupAccumulator): Added.
        (WebCore::StyledMarkupAccumulator::appendElement): Added to support annotation.
        (WebCore::StyledMarkupAccumulator::shouldAnnotate): Moved from MarkupAccumulator.
        (WebCore::MarkupAccumulator::appendStartTag): No longer takes convertBlocksToInlines and RangeFullySelectsNode.
        (WebCore::StyledMarkupAccumulator::wrapWithStyleNode): Moved from MarkupAccumulator.
        (WebCore::MarkupAccumulator::takeResults): No longer accumulates prepended text, and made virtual.
        (WebCore::StyledMarkupAccumulator::takeResults): Added to support prepended text.
        (WebCore::MarkupAccumulator::shouldAddNamespaceAttribute): Takes a reference to Attribute instead of a pointer.
        (WebCore::MarkupAccumulator::entityMaskForText): Extracted from appendText.
        (WebCore::MarkupAccumulator::appendText): No longer deals with annotation.
        (WebCore::StyledMarkupAccumulator::appendText): Added to support annotation.
        (WebCore::StyledMarkupAccumulator::stringValueForRange): Moved from MarkupAccumulator.
        (WebCore::StyledMarkupAccumulator::renderedText): Moved from MarkupAccumulator.
        (WebCore::MarkupAccumulator::appendElement): No longer deals with annotation.
        (WebCore::StyledMarkupAccumulator::wrapWithNode): Moved from MarkupAccumulator.
        (WebCore::StyledMarkupAccumulator::removeExteriorStyles): Moved from MarkupAccumulator.
        (WebCore::MarkupAccumulator::appendOpenTag): Added.
        (WebCore::MarkupAccumulator::appendCloseTag): Added.
        (WebCore::MarkupAccumulator::appendAttribute): Added.
        (WebCore::MarkupAccumulator::appendStartMarkup): No longer takes convertBlocksToInlines and RangeFullySelectsNode.
        (WebCore::serializeNodes): Takes StyledMarkupAccumulator.
        (WebCore::createMarkup): Range version uses StyledMarkupAccumulator and node version uses MarkupAccumulator.

2010-09-08  Peter Kasting  <pkasting@google.com>

        Not reviewed, layout test fix.
        
        Fix flaky layout test results caused by not initializing members correctly.
        https://bugs.webkit.org/show_bug.cgi?id=45411

        * platform/ScrollAnimator.cpp:
        (WebCore::ScrollAnimator::ScrollAnimator):
        (WebCore::ScrollAnimator::~ScrollAnimator):
        * platform/ScrollAnimator.h:

2010-09-08  MORITA Hajime  <morrita@google.com>

        Reviewed by Tony Chang.

        spelling underline gets lost on backspace
        https://bugs.webkit.org/show_bug.cgi?id=41423

        moveParagraphs() did make a DOM range by serializing source range
        and deserializing it back, and markers are gone during the process.
        This change marks that DOM range again.

        Test: editing/spelling/spelling-backspace-between-lines.html

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::moveParagraphs):
        * editing/Editor.cpp:
        (WebCore::Editor::clearMisspellingsAndBadGrammar): Added.
        (WebCore::Editor::markMisspellingsAndBadGrammar): Added.
        * editing/Editor.h:

2010-09-08  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        text/plain documents that start with \n trigger ASSERT
        https://bugs.webkit.org/show_bug.cgi?id=45409

        Because the TextDocumentParser uses a <pre> element to show the text,
        it ran into a requirement from HTML5 to skip any initial \n character
        tokens inside a <pre> element.  We don't want the behavior for
        TextDocuments, so I've loosened our ASSERTs and added a comment and a
        test to document the correct behavior.

        Test: fast/tokenizer/text-plain.html

        * html/parser/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::nextToken):

2010-09-08  James Robinson  <jamesr@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Always do 2d canvas clearRect() in hardware
        https://bugs.webkit.org/show_bug.cgi?id=45415

        r67003 forced Canvas 2d's clearRect() to happen in software if a gradient/shadow/etc was
        active.  This is subtly wrong for mixed mode rendering since it results in only the
        software backing store being cleared and not the hardware.  This forces clearRect() to
        happen in hardware.  Since we upload mixed mode results before doing any hardware draw
        this means we always clear everything.

        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::clearRect):

2010-09-08  Dean Jackson  <dino@apple.com>

        Unreviewed attempt to fix the Mac builds.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseAnimationTimingFunction):

2010-09-08  Dean Jackson  <dino@apple.com>

        Unreviewed attempt to fix QT build.

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::solveStepsFunction):
        (WebCore::applyTimingFunction):

2010-09-08  Dean Jackson  <dino@apple.com>

        Reviewed by Simon Fraser.

        Implement steps() timing function for animations
        https://bugs.webkit.org/show_bug.cgi?id=44541

        Tests: animations/timing-functions.html
               transitions/steps-timing-function.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::getTimingFunctionValue):
            - when creating computed style we now test what
              type of timing function it being used
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseCubicBezierTimingFunctionValue):
            - rename this method from parseTimingFunctionValue
        (WebCore::CSSParser::parseAnimationTimingFunction):
            - support parsing the steps() function
        * css/CSSParser.h:
            - method rename
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::mapAnimationTimingFunction):
            - handle 'step-start' and 'step-end' identifiers. Also
              now use ::create when constructing objects
        * css/CSSTimingFunctionValue.cpp:
        (WebCore::CSSLinearTimingFunctionValue::cssText):
        (WebCore::CSSCubicBezierTimingFunctionValue::cssText):
        (WebCore::CSSStepsTimingFunctionValue::cssText):
            - new text output for computed style. We now produce
              the text 'linear' when appropriate.
        * css/CSSTimingFunctionValue.h:
        (WebCore::CSSTimingFunctionValue::isLinearTimingFunctionValue):
        (WebCore::CSSTimingFunctionValue::isCubicBezierTimingFunctionValue):
        (WebCore::CSSTimingFunctionValue::isStepsTimingFunctionValue):
        (WebCore::CSSTimingFunctionValue::CSSTimingFunctionValue):
        (WebCore::CSSTimingFunctionValue::isTimingFunctionValue):
        (WebCore::CSSLinearTimingFunctionValue::create):
        (WebCore::CSSLinearTimingFunctionValue::isLinearTimingFunctionValue):
        (WebCore::CSSLinearTimingFunctionValue::CSSLinearTimingFunctionValue):
        (WebCore::CSSCubicBezierTimingFunctionValue::create):
        (WebCore::CSSCubicBezierTimingFunctionValue::isCubicBezierTimingFunctionValue):
        (WebCore::CSSCubicBezierTimingFunctionValue::CSSCubicBezierTimingFunctionValue):
        (WebCore::CSSStepsTimingFunctionValue::create):
        (WebCore::CSSStepsTimingFunctionValue::numberOfSteps):
        (WebCore::CSSStepsTimingFunctionValue::stepAtStart):
        (WebCore::CSSStepsTimingFunctionValue::isStepsTimingFunctionValue):
        (WebCore::CSSStepsTimingFunctionValue::CSSStepsTimingFunctionValue):
            - CSSTimingFunction is now a pure virtual ref-counted base class, with
              subclasses for each of the three supported timing functions.
        * css/CSSValueKeywords.in:
            - new keywords step-start and step-end
        * page/animation/AnimationBase.cpp:
        (WebCore::solveStepsFunction):
            - produces the output value from a stepping function
        (WebCore::AnimationBase::progress):
            - now has to switch based on timing function type
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::fetchIntervalEndpointsForProperty):
            - use ref-counted access
        * platform/animation/Animation.cpp:
        (WebCore::Animation::animationsMatch):
            - change timing function comparison for operator==
        * platform/animation/Animation.h:
        (WebCore::Animation::timingFunction):
        (WebCore::Animation::setTimingFunction):
        (WebCore::Animation::initialAnimationTimingFunction):
            - move to ref-counted timing function class
        * platform/animation/TimingFunction.h:
        (WebCore::TimingFunction::~TimingFunction):
        (WebCore::TimingFunction::isLinearTimingFunction):
        (WebCore::TimingFunction::isCubicBezierTimingFunction):
        (WebCore::TimingFunction::isStepsTimingFunction):
        (WebCore::TimingFunction::TimingFunction):
        (WebCore::LinearTimingFunction::create):
        (WebCore::LinearTimingFunction::~LinearTimingFunction):
        (WebCore::LinearTimingFunction::operator==):
        (WebCore::LinearTimingFunction::LinearTimingFunction):
        (WebCore::CubicBezierTimingFunction::create):
        (WebCore::CubicBezierTimingFunction::~CubicBezierTimingFunction):
        (WebCore::CubicBezierTimingFunction::operator==):
        (WebCore::CubicBezierTimingFunction::CubicBezierTimingFunction):
        (WebCore::StepsTimingFunction::create):
        (WebCore::StepsTimingFunction::~StepsTimingFunction):
        (WebCore::StepsTimingFunction::operator==):
        (WebCore::StepsTimingFunction::numberOfSteps):
        (WebCore::StepsTimingFunction::stepAtStart):
        (WebCore::StepsTimingFunction::StepsTimingFunction):
            - TimingFunction is now a ref-counted pure virtual base class,
              with three subclasses representing the types of timing functions
              that are supported.
        * platform/graphics/GraphicsLayer.h:
        (WebCore::AnimationValue::AnimationValue):
        (WebCore::FloatAnimationValue::FloatAnimationValue):
        (WebCore::TransformAnimationValue::TransformAnimationValue):
            - use PassRefPtr in function parameters
        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::solveStepsFunction):
        (WebCore::applyTimingFunction):
        (WebCore::AnimationQt::AnimationQt):
        (WebCore::AnimationQt::updateCurrentTime):
            - implement the timing function switch for QT
        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::getCAMediaTimingFunction):
            - update for new timing function interface
        (WebCore::animationHasStepsTimingFunction):
            - new method to make sure animations with steps() functions
              never try to execute in Core Animation
        (WebCore::GraphicsLayerCA::addAnimation):
            - test for steps() timing function
        (WebCore::GraphicsLayerCA::timingFunctionForAnimationValue):
        * rendering/style/RenderStyleConstants.h:
            - remove old RenderStyle enum for timing function types

2010-09-08  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed trivial fix after r66960.

        * WebCore.pro: loader/TextDocument.h renamed to html/TextDocument.h

2010-09-08  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        move-during-parse-parent.html crashes
        https://bugs.webkit.org/show_bug.cgi?id=45210

        When inserting elements into the tree, they need to be associated with
        their parent's document, not the document for which the parser is
        running.  These two are different when the parent has been moved to a
        different document during parsing.

        Test: fast/parser/move-during-parsing.html

        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::insertComment):
        (WebCore::HTMLConstructionSite::insertCommentOnHTMLHtmlElement):
        (WebCore::HTMLConstructionSite::insertScriptElement):
        (WebCore::HTMLConstructionSite::insertTextNode):
        (WebCore::HTMLConstructionSite::createElement):
        (WebCore::HTMLConstructionSite::createHTMLElement):

2010-09-08  Gabor Loki  <loki@webkit.org>

        Reviewed by Andreas Kling.

        Fix increases required alignment of target type warning on ARM
        https://bugs.webkit.org/show_bug.cgi?id=45301

        No new tests needed.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneDeserializer::readLittleEndian):
        (WebCore::CloneDeserializer::readString):
        * plugins/PluginDatabase.cpp:
        (WebCore::readTime):

2010-09-08  Antonio Gomes  <agomes@rim.com>

        Reviewed by Daniel Bates.

        Make FocusController::focusedOrMainFrame method const
        https://bugs.webkit.org/show_bug.cgi?id=45406

        No new tests.

        * page/FocusController.cpp:
        (WebCore::FocusController::focusedOrMainFrame):
        * page/FocusController.h:

2010-09-08  Jian Li  <jianli@chromium.org>

        Reviewed by Darin Adler.

        Fix a problem in createCanonicalUUIDString that causes the last digit
        missing on Linux.
        https://bugs.webkit.org/show_bug.cgi?id=45412

        This is caused by not including the final null character into the count
        that is provided to fgets.

        This is covered by the existing test: send-form-data-with-sliced-file.html.

        * platform/UUID.cpp:
        (WebCore::createCanonicalUUIDString):

2010-09-08  Nico Weber  <thakis@chromium.org>

        Reviewed by Dimitri Glazkov.

        chromium/mac: Fix overrelease in ImageLayerChromium
        https://bugs.webkit.org/show_bug.cgi?id=45360

        Only release colorSpace if we created it.

        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerChromium::updateContents):

2010-09-08  Robert Hogan  <robert@webkit.org>

        Reviewed by Antonio Gomes.

        Remove some unnecessary duplicate calls to string functions

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

        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::parseDataUrl):
        * websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::send):

2010-09-08  Peter Kasting  <pkasting@google.com>

        Not reviewed, fallout from http://trac.webkit.org/changeset/67001

        Fix compile failures and add svn:eol-style on two new files.

        * platform/ScrollAnimator.h: Added property svn:eol-style.
        * platform/ScrollAnimatorWin.cpp: Added property svn:eol-style.
        * platform/win/PopupMenuWin.cpp: Fix compile errors.
        (WebCore::PopupMenuWin::scrollToRevealSelection):
        (WebCore::PopupMenuWin::scrollSize):

2010-09-08  James Robinson  <jamesr@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Force canvas 2d draw calls to happen in software if a gradient, pattern, shadow, or clip are active
        https://bugs.webkit.org/show_bug.cgi?id=45405

        This forces all draw calls to happen in software instead of hardware if there is a fill pattern, gradient,
        shadow, or clip applied; at least until we can handle these in hardware.  Otherwise the pattern/gradient/etc
        is completely ignored by the hardware drawing routine and we render incorrectly.

        The test is slightly convervative - for example it will force drawImage() calls to happen in software if a
        fill gradient is set even though it's irrelevant.  This doesn't seem to be an issue in practice and we
        can tighten the checks later if needed.

        Tested by fast/canvas/canvas-incremental-repaint.html.

        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::canvasClip):
        (WebCore::GraphicsContext::fillRect):
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageBuffer::draw):
        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::BitmapImage::draw):
        (WebCore::BitmapImageSingleFrameSkia::draw):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::State::State):
        (WebCore::PlatformContextSkia::canvasClipPath):
        (WebCore::PlatformContextSkia::canAccelerate):
        * platform/graphics/skia/PlatformContextSkia.h:

2010-09-08  Peter Kasting  <pkasting@google.com>

        Reviewed by David Hyatt.

        Add smooth scrolling framework, and a Windows implementation.
        https://bugs.webkit.org/show_bug.cgi?id=32356

        * CMakeLists.txt: Add ScrollAnimator.
        * GNUmakefile.am: Add ScrollAnimator.
        * WebCore.gyp/WebCore.gyp: Add Windows ScrollAnimator.
        * WebCore.gypi: Add ScrollAnimator.
        * WebCore.pro: Add ScrollAnimator.
        * WebCore.vcproj/WebCore.vcproj: Add ScrollAnimator.
        * WebCore.xcodeproj/project.pbxproj: Add ScrollAnimator.
        * platform/ScrollAnimator.cpp: Added base implementation that does no animation.
        (WebCore::ScrollAnimator::create):
        (WebCore::ScrollAnimator::scroll):
        (WebCore::ScrollAnimator::setScrollPositionAndStopAnimation):
        * platform/ScrollAnimator.h: Added base implementation that does no animation.
        (WebCore::ScrollAnimator::ScrollAnimator):
        (WebCore::ScrollAnimator::~ScrollAnimator):
        * platform/ScrollAnimatorWin.cpp: Added Windows subclass that animates scrolls.
        (WebCore::ScrollAnimator::create):
        (WebCore::ScrollAnimatorWin::PerAxisData::PerAxisData):
        (WebCore::ScrollAnimatorWin::ScrollAnimatorWin):
        (WebCore::ScrollAnimatorWin::~ScrollAnimatorWin):
        (WebCore::ScrollAnimatorWin::scroll):
        (WebCore::ScrollAnimatorWin::setScrollPositionAndStopAnimation):
        (WebCore::ScrollAnimatorWin::accelerationTime):
        (WebCore::ScrollAnimatorWin::animationTimerFired):
        (WebCore::ScrollAnimatorWin::stopAnimationTimerIfNeeded):
        (WebCore::ScrollAnimatorWin::animateScroll):
        * platform/ScrollAnimatorWin.h: Added Windows subclass that animates scrolls.
        * platform/ScrollView.cpp: Implement new ScrollbarClient functions.  Allow wheel scrolls to be animated.
        (WebCore::ScrollView::scrollSize):
        (WebCore::ScrollView::setScrollOffsetFromAnimation):
        (WebCore::ScrollView::updateScrollbars):
        (WebCore::ScrollView::wheelEvent):
        * platform/ScrollView.h: Implement new ScrollbarClient functions.
        * platform/Scrollbar.cpp: Allow ScrollAnimator to handle scrolls if present.
        (WebCore::Scrollbar::setValue):
        (WebCore::Scrollbar::scroll):
        (WebCore::Scrollbar::moveThumb):
        (WebCore::Scrollbar::setCurrentPos):
        (WebCore::Scrollbar::mouseMoved):
        * platform/Scrollbar.h:
        * platform/ScrollbarClient.cpp: Added to avoid having to make ScrollAnimator.h non-private.
        (WebCore::ScrollbarClient::ScrollbarClient):
        (WebCore::ScrollbarClient::~ScrollbarClient):
        (WebCore::ScrollbarClient::scroll):
        (WebCore::ScrollbarClient::setScrollPositionAndStopAnimation):
        * platform/ScrollbarClient.h: Add hooks for ScrollAnimator.
        (WebCore::ScrollbarClient::convertFromScrollbarToContainingView):
        (WebCore::ScrollbarClient::convertFromContainingViewToScrollbar):
        * platform/gtk/MainFrameScrollbarGtk.cpp:
        (MainFrameScrollbarGtk::gtkValueChanged):
        * platform/qt/ScrollbarQt.cpp: Use scroll() in preference to setValue().
        (WebCore::Scrollbar::contextMenu):
        * platform/win/PopupMenuWin.cpp: Implement new ScrollbarClient functions.
        (WebCore::PopupMenuWin::scrollSize):
        (WebCore::PopupMenuWin::setScrollOffsetFromAnimation):
        * platform/win/PopupMenuWin.h: Implement new ScrollbarClient functions.
        * rendering/RenderDataGrid.cpp: Implement new ScrollbarClient functions.
        (WebCore::RenderDataGrid::scrollSize):
        (WebCore::RenderDataGrid::setScrollOffsetFromAnimation):
        * rendering/RenderDataGrid.h: Implement new ScrollbarClient functions.
        * rendering/RenderLayer.cpp: Implement new ScrollbarClient functions.
        (WebCore::RenderLayer::scrollToOffset):
        (WebCore::RenderLayer::scrollSize):
        (WebCore::RenderLayer::setScrollOffsetFromAnimation):
        (WebCore::RenderLayer::updateScrollInfoAfterLayout):
        * rendering/RenderLayer.h: Implement new ScrollbarClient functions.
        * rendering/RenderListBox.cpp: Implement new ScrollbarClient functions.
        (WebCore::RenderListBox::scrollToRevealElementAtListIndex):
        (WebCore::RenderListBox::scrollSize):
        (WebCore::RenderListBox::setScrollOffsetFromAnimation):
        (WebCore::RenderListBox::setScrollTop):
        * rendering/RenderListBox.h: Implement new ScrollbarClient functions.

2010-09-08  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Tony Chang.

        applyInlineStyleToRange needs cleanup
        https://bugs.webkit.org/show_bug.cgi?id=45008

        Removed rangeIsEmpty and extracted the entire loop into applyInlineStyleToNodeRange.
        applyInlineStyleToRange is now a wrapper that fixes range and passes it on to applyInlineStyleToNodeRange.

        No new tests are added since this is a cleanup.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyInlineStyleToRange): Cleaned up.
        (WebCore::ApplyStyleCommand::applyInlineStyleToNodeRange): Extracted from applyInlineStyleToRange.
        * editing/ApplyStyleCommand.h:

2010-09-08  Andy Estes  <aestes@apple.com>

        Rubber-stamped by Darin Adler.

        Incorporate additional feedback from
        https://bugs.webkit.org/show_bug.cgi?id=45364.

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::parametersForPlugin): Rename urlParam to
        urlParameter.
        * loader/SubframeLoader.h: Add argument names to the definition of
        SubframeLoader::resourceWillUsePlugin().

2010-09-07  Oliver Hunt  <oliver@apple.com>

        Reviewed by Anders Carlsson.

        Support SerializedScriptValue in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=45340

        Add a new constructor that allows WebKit2 to create a SerializedScriptValue
        directly from serialized data.

        * WebCore.exp.in:
        * bindings/js/SerializedScriptValue.h:
        (WebCore::SerializedScriptValue::adopt):
        (WebCore::SerializedScriptValue::data):

2010-09-08  Andy Estes  <aestes@apple.com>

        Reviewed by Eric Carlson.

        Fallback content should be rendered when an <object> doesn't specify a
        data, type or classid attribute.
        https://bugs.webkit.org/show_bug.cgi?id=45364
        <rdar://problem/8375816>

        HTML5 says that if no data or type attribute is specified on an <object>,
        fallback content should be rendered. However, WebKit has traditionally
        supported specifying a URL and MIME type in <param> elements. 

        To more closely match the spec while maintaining compatibility with
        content that relied on our old behavior, we will continue to load
        a resource specified by <param> elements if we can determine a priori
        that it will be handled by a plug-in. 

        If we can't make this determination, and the <object> element has no
        "data" or "type" attribute, the <param> elements will be ignored and
        fallback content will be rendered. Otherwise, there is no change in
        behavior.

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::parametersForPlugin): If an empty url is
        passed to this function and a <param> exists that specifies a url that
        references a plug-in resource, set it to url, making it the url that
        will be loaded by the <object> element.
        (WebCore::HTMLObjectElement::updateWidget): If no type attribute was
        specified, but there is a classid attribute, try to map the classid to
        a MIME type. This needs to be done before calling
        HTMLObjectElement::parametersForPlugin().
        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::resourceWillUsePlugin): Make a public method
        that determines if a resource will load a plug-in based on its url and
        MIME type. This is equivalent to calling
        SubframeLoader::shouldUsePlugin(), but does not burden the caller with
        the details of fallback content.
        * loader/SubframeLoader.h:

2010-09-08  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: add breakpoints to source frame after content is loaded.
        https://bugs.webkit.org/show_bug.cgi?id=43056

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._resourceLoadingFinished):
        (WebInspector.ScriptsPanel.prototype._showScriptOrResource):
        * inspector/front-end/SourceView.js:
        (WebInspector.SourceView.prototype._contentLoaded):

2010-09-08  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Canvas: Remove unnecessary null-check of canvas() in getImageData()
        https://bugs.webkit.org/show_bug.cgi?id=45394

        canvas() is already dereferenced earlier in the function so there is
        no use in checking it for null later.

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

2010-09-08  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Eric Carlson.

        [GStreamer] cache media duration in READY instead of PLAYING
        https://bugs.webkit.org/show_bug.cgi?id=39053

        New cacheDuration private method used to in updateStates() and
        durationChanged().

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::updateStates):
        (WebCore::MediaPlayerPrivateGStreamer::cacheDuration):
        (WebCore::MediaPlayerPrivateGStreamer::durationChanged):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:

2010-09-08  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Need a WebSocket implementation
        https://bugs.webkit.org/show_bug.cgi?id=45197

        Add a GIO-based WebSocket implementation. This does not yet support
        SSL sockets or proxies, but these should be possible to add as support
        arrives in GLib/GIO for them.

        * platform/network/soup/SocketStreamHandle.h:
        * platform/network/soup/SocketStreamHandleSoup.cpp: Add a GIO-based WebSocket implementation.
        (WebCore::isActiveHandle): Added.
        (WebCore::deactivateHandle): Added.
        (WebCore::SocketStreamHandle::SocketStreamHandle): Filled out stub.
        (WebCore::SocketStreamHandle::~SocketStreamHandle): Ditto.
        (WebCore::SocketStreamHandle::connected): Added.
        (WebCore::SocketStreamHandle::readBytes): Added.
        (WebCore::SocketStreamHandle::writeReady): Added.
        (WebCore::SocketStreamHandle::platformSend): Filled out stub.
        (WebCore::SocketStreamHandle::platformClose): Filled out stub.
        (WebCore::SocketStreamHandle::beginWaitingForSocketWritability): Added.
        (WebCore::SocketStreamHandle::stopWaitingForSocketWritability):
        (WebCore::connectedCallback): Added.
        (WebCore::readReadyCallback): Added.
        (WebCore::writeReadyCallback): Added.

2010-09-07  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Dirk Schulze.

        [Cairo] Actually use the antialias parameter of GraphicsContext::clipConvexPolygon
        https://bugs.webkit.org/show_bug.cgi?id=45355

        r63864 added an additional boolean parameter to GraphicsContext::clipConvexPolygon,
        which determines whether or not to render the render the clip with anti-aliasing
        or not. The Cairo implementation now uses that parameter to determine the argument
        to pass to cairo_set_antialias(...) when clipping.

        Test: This is tested by many tests in fast/borders.

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::clipConvexPolygon): Actually use the boolean antialias parameter.

2010-09-08  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Reviewed by Kenneth Rohde Christiansen.

        [EFL] Support to enable HTML5's Video based on gstreamer in WebKit-EFL
        https://bugs.webkit.org/show_bug.cgi?id=44098

        To support video of HTML5 based on gstreamer, add files regarding gstreamer to
        CMakeListsEfl.txt.

        * CMakeListsEfl.txt:

2010-09-08  Jan E Hanssen  <jhanssen@sencha.com>

        Reviewed by Dirk Schulze.

        [Qt] PathQt should use the QPainterPath functionality for calculations
        https://bugs.webkit.org/show_bug.cgi?id=43837

        Change PathQt to use the built-in functionality of QPainterPath for
        calculating length(), pointAtLength() and normalAngleAtLength().

        * platform/graphics/Path.cpp:
        * platform/graphics/qt/PathQt.cpp:
        (WebCore::Path::length):
        (WebCore::Path::pointAtLength):
        (WebCore::Path::normalAngleAtLength):

2010-09-08  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Reviewed by Dirk Schulze.

        [WML] Remove create() function in WMLTaskElement because of build break.
        https://bugs.webkit.org/show_bug.cgi?id=44954

        Remove create() function in WMLTaskElement.cpp because of build breaks.

        * wml/WMLTaskElement.cpp:
        * wml/WMLTaskElement.h:

2010-09-08  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Reviewed by Dirk Schulze.

        [WML] Add create functions to WML.
        https://bugs.webkit.org/show_bug.cgi?id=44950

        There are missing definitions of create function in WML area. 
        So, there are build breaks when enabling WML. The create functions and the construction 
        are added. In addition, a style error and duplicated adoptRef usage are fixed.

        * wml/WMLDocument.h:
        (WebCore::WMLDocument::create):
        * wml/WMLFormControlElement.h:
        * wml/WMLIntrinsicEvent.cpp:
        (WebCore::WMLIntrinsicEvent::WMLIntrinsicEvent):
        * wml/WMLIntrinsicEvent.h:

2010-09-08  Nico Weber  <thakis@chromium.org>

        Reviewed by Kenneth Russell.

        chromium/mac: Fix crash with compositor due to missing current NSGraphicsContext
        https://bugs.webkit.org/show_bug.cgi?id=45354

        * platform/graphics/chromium/ContentLayerChromium.cpp:
        (WebCore::ContentLayerChromium::updateContents): Set a current local context.

2010-09-08  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Nikolas Zimmermann.

        NULL deref when use target is reset, then set to display:none
        https://bugs.webkit.org/show_bug.cgi?id=45345

        Move the NULL check on shadowRoot earlier in SVGUseElement::recalcStyle

        Test: svg/custom/use-display-none.svg

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

2010-08-30  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Darin Adler.

        Handle MediaQueryExp memory management exclusively with smart pointers
        https://bugs.webkit.org/show_bug.cgi?id=44874

        Gace MediaQueryExp a create function, made the constructor private, and followed
        the implications. The one tricky bit was using a non-copying sort to sort
        the Vector<OwnPtr<MediaQueryExp> > in the MediaQuery constructor.
        
        * ForwardingHeaders/wtf/NonCopyingSort.h: Added.
        * css/CSSGrammar.y:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::~CSSParser):
        (WebCore::CSSParser::createFloatingMediaQueryExp):
        (WebCore::CSSParser::createFloatingMediaQueryExpList):
        (WebCore::CSSParser::sinkFloatingMediaQueryExpList):
        (WebCore::CSSParser::createFloatingMediaQuery):
        * css/CSSParser.h:
        * css/MediaList.cpp:
        * css/MediaQuery.cpp:
        (WebCore::expressionCompare):
        (WebCore::MediaQuery::MediaQuery):
        (WebCore::MediaQuery::~MediaQuery):
        * css/MediaQuery.h:
        (WebCore::MediaQuery::expressions):
        * css/MediaQueryEvaluator.cpp:
        (WebCore::MediaQueryEvaluator::eval):
        * css/MediaQueryExp.h:
        (WebCore::MediaQueryExp::create):

2010-09-08  Adam Barth  <abarth@webkit.org>

        Reviewed by Maciej Stachowiak.

        Remove unused member variable from DecodedDocumentParser
        https://bugs.webkit.org/show_bug.cgi?id=45379

        This member variable isn't used because of the recent split of
        TextDocumentParser and TextViewSourceParser.

        * dom/DecodedDataDocumentParser.cpp:
        (WebCore::DecodedDataDocumentParser::DecodedDataDocumentParser):
        * dom/DecodedDataDocumentParser.h:
        * dom/ScriptableDocumentParser.cpp:
        (WebCore::ScriptableDocumentParser::ScriptableDocumentParser):
        * dom/ScriptableDocumentParser.h:

2010-09-08  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Andreas Kling.

        Fix warning in rendering/RenderBlock.cpp.
        https://bugs.webkit.org/show_bug.cgi?id=45373

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::hitTestColumns): Suggested parentheses added around && within ||

2010-09-08  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Martin Robinson.

        [Gtk] A list item's number/bullet should not be a child of that list item
        https://bugs.webkit.org/show_bug.cgi?id=45190

        Ignore list markers and prefix them to the text for the item

        * accessibility/gtk/AccessibilityObjectAtk.cpp:
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):
        Make list markers ignore accessibility for the GTK port.
        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (webkit_accessible_text_get_text): Prefix the text of a marker
        along with the accessible text for its list item's AtkObject

2010-09-08  Adam Barth  <abarth@webkit.org>

        Rubber-stamped by Eric Seidel.

        Rename DocLoader to CachedResourceLoader because that's what it does.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSCursorImageValue.cpp:
        (WebCore::CSSCursorImageValue::cachedImage):
        * css/CSSCursorImageValue.h:
        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::getFontData):
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::cachedResourceLoader):
        (WebCore::CSSFontSelector::addFontFaceRule):
        * css/CSSFontSelector.h:
        * css/CSSImageValue.cpp:
        (WebCore::CSSImageValue::cachedImage):
        * css/CSSImageValue.h:
        * css/CSSImportRule.cpp:
        (WebCore::CSSImportRule::insertedIntoParent):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::loadPendingImages):
        * css/CSSStyleSheet.h:
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::~Document):
        (WebCore::Document::implicitClose):
        * dom/Document.h:
        (WebCore::Document::cachedResourceLoader):
        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::checkStyleSheet):
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElementData::requestScript):
        * dom/XMLDocumentParser.cpp:
        * dom/XMLDocumentParser.h:
        * dom/XMLDocumentParserLibxml2.cpp:
        (WebCore::matchFunc):
        (WebCore::shouldAllowExternalLoad):
        (WebCore::openFunc):
        (WebCore::XMLDocumentParser::doWrite):
        (WebCore::XMLDocumentParser::endElementNs):
        (WebCore::XMLDocumentParser::initializeParserContext):
        (WebCore::XMLDocumentParser::doEnd):
        (WebCore::xmlDocPtrForString):
        * dom/XMLDocumentParserQt.cpp:
        (WebCore::XMLDocumentParser::parseEndElement):
        * dom/XMLDocumentParserScope.cpp:
        (WebCore::XMLDocumentParserScope::XMLDocumentParserScope):
        (WebCore::XMLDocumentParserScope::~XMLDocumentParserScope):
        * dom/XMLDocumentParserScope.h:
        * editing/Editor.cpp:
        (WebCore::Editor::paste):
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::paste):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::process):
        * html/parser/CSSPreloadScanner.cpp:
        (WebCore::CSSPreloadScanner::emitRule):
        * html/parser/HTMLPreloadScanner.cpp:
        (WebCore::HTMLNames::PreloadTask::preload):
        * html/parser/HTMLScriptRunner.cpp:
        (WebCore::HTMLScriptRunner::requestPendingScript):
        * inspector/InspectorResource.cpp:
        (WebCore::InspectorResource::cachedResource):
        * loader/Cache.cpp:
        (WebCore::Cache::requestResource):
        (WebCore::Cache::requestUserCSSStyleSheet):
        (WebCore::Cache::revalidateResource):
        (WebCore::Cache::addCachedResourceLoader):
        (WebCore::Cache::removeCachedResourceLoader):
        * loader/Cache.h:
        * loader/CachedCSSStyleSheet.h:
        * loader/CachedFont.cpp:
        (WebCore::CachedFont::load):
        (WebCore::CachedFont::beginLoadIfNeeded):
        * loader/CachedFont.h:
        * loader/CachedImage.cpp:
        (WebCore::CachedImage::load):
        (WebCore::CachedImage::maximumDecodedImageSize):
        * loader/CachedImage.h:
        * loader/CachedResource.cpp:
        (WebCore::CachedResource::CachedResource):
        (WebCore::CachedResource::~CachedResource):
        (WebCore::CachedResource::load):
        * loader/CachedResource.h:
        (WebCore::CachedResource::load):
        (WebCore::CachedResource::setCachedResourceLoader):
        * loader/CachedResourceLoader.cpp: Copied from WebCore/loader/DocLoader.cpp.
        (WebCore::CachedResourceLoader::CachedResourceLoader):
        (WebCore::CachedResourceLoader::~CachedResourceLoader):
        (WebCore::CachedResourceLoader::frame):
        (WebCore::CachedResourceLoader::checkForReload):
        (WebCore::CachedResourceLoader::requestImage):
        (WebCore::CachedResourceLoader::requestFont):
        (WebCore::CachedResourceLoader::requestCSSStyleSheet):
        (WebCore::CachedResourceLoader::requestUserCSSStyleSheet):
        (WebCore::CachedResourceLoader::requestScript):
        (WebCore::CachedResourceLoader::requestXSLStyleSheet):
        (WebCore::CachedResourceLoader::requestLinkPrefetch):
        (WebCore::CachedResourceLoader::canRequest):
        (WebCore::CachedResourceLoader::requestResource):
        (WebCore::CachedResourceLoader::printAccessDeniedMessage):
        (WebCore::CachedResourceLoader::setAutoLoadImages):
        (WebCore::CachedResourceLoader::cachePolicy):
        (WebCore::CachedResourceLoader::removeCachedResource):
        (WebCore::CachedResourceLoader::setLoadInProgress):
        (WebCore::CachedResourceLoader::checkCacheObjectStatus):
        (WebCore::CachedResourceLoader::incrementRequestCount):
        (WebCore::CachedResourceLoader::decrementRequestCount):
        (WebCore::CachedResourceLoader::requestCount):
        (WebCore::CachedResourceLoader::preload):
        (WebCore::CachedResourceLoader::checkForPendingPreloads):
        (WebCore::CachedResourceLoader::requestPreload):
        (WebCore::CachedResourceLoader::clearPreloads):
        (WebCore::CachedResourceLoader::clearPendingPreloads):
        (WebCore::CachedResourceLoader::printPreloadStats):
        * loader/CachedResourceLoader.h: Copied from WebCore/loader/DocLoader.h.
        * loader/CachedScript.h:
        * loader/CachedXSLStyleSheet.h:
        * loader/DocLoader.cpp: Removed.
        * loader/DocLoader.h: Removed.
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::isLoadingInAPISense):
        (WebCore::DocumentLoader::subresource):
        (WebCore::DocumentLoader::getSubresources):
        * loader/FrameLoader.cpp:
        (WebCore::numRequests):
        (WebCore::FrameLoader::stopLoading):
        (WebCore::FrameLoader::didBeginDocument):
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::createItem):
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::updateFromElement):
        * loader/Request.cpp:
        (WebCore::Request::Request):
        * loader/Request.h:
        (WebCore::Request::cachedResourceLoader):
        * loader/loader.cpp:
        (WebCore::Loader::load):
        (WebCore::Loader::cancelRequests):
        (WebCore::Loader::Host::servePendingRequests):
        (WebCore::Loader::Host::didFinishLoading):
        (WebCore::Loader::Host::didFail):
        (WebCore::Loader::Host::didReceiveResponse):
        (WebCore::Loader::Host::cancelPendingRequests):
        (WebCore::Loader::Host::cancelRequests):
        * loader/loader.h:
        * page/DragController.cpp:
        (WebCore::DragController::concludeEditDrag):
        * page/Frame.cpp:
        * page/FrameView.cpp:
        (WebCore::FrameView::checkStopDelayingDeferredRepaints):
        (WebCore::FrameView::updateDeferredRepaintDelay):
        * page/Settings.cpp:
        (WebCore::setLoadsImagesAutomaticallyInAllFrames):
        * platform/android/TemporaryLinkStubs.cpp:
        (WebCore::CheckCacheObjectStatus):
        * platform/network/android/ResourceHandleAndroid.cpp:
        (WebCore::ResourceHandle::start):
        * platform/network/cf/ResourceHandleCFNet.cpp:
        * platform/network/curl/ResourceHandleCurl.cpp:
        * platform/network/mac/ResourceHandleMac.mm:
        * platform/network/qt/ResourceHandleQt.cpp:
        * platform/network/soup/ResourceHandleSoup.cpp:
        * platform/network/win/ResourceHandleWin.cpp:
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::requestImageResource):
        * svg/SVGFontFaceUriElement.cpp:
        (WebCore::SVGFontFaceUriElement::loadFont):
        * workers/Worker.cpp:
        * xml/XSLImportRule.cpp:
        (WebCore::XSLImportRule::loadSheet):
        * xml/XSLStyleSheet.h:
        * xml/XSLStyleSheetLibxslt.cpp:
        (WebCore::XSLStyleSheet::cachedResourceLoader):
        (WebCore::XSLStyleSheet::parseString):
        * xml/XSLStyleSheetQt.cpp:
        (WebCore::XSLStyleSheet::cachedResourceLoader):
        * xml/XSLTProcessor.cpp:
        * xml/XSLTProcessorLibxslt.cpp:
        (WebCore::docLoaderFunc):
        (WebCore::setXSLTLoadCallBack):
        (WebCore::xmlDocPtrFromNode):
        (WebCore::XSLTProcessor::transformToString):

2010-09-06  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Eric Carlson.

        Add mediaPlayerPlaybackStateChanged to MediaPlayerClient

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

        The platform backend may change state, for example as a result
        of an external plugin controlling the backend, so we need to
        react to this situation by syncing up the WebCore state with the
        platform backend.

        We call playInternal()/pauseInternal() depending on the backend
        state, to trigger the corresponding DOM events to match the state.

        updatePlayState() is then refactored to take into account the
        situation where the backend is already in the correct state but
        WebCore is not, so that we update the playback progress timer
        and set m_playing correctly.

        updatePlayState() changes Should be covered by existing tests.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::mediaPlayerPlaybackStateChanged):
        (WebCore::HTMLMediaElement::updatePlayState):
        * html/HTMLMediaElement.h:
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::playbackStateChanged):
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayerClient::mediaPlayerPlaybackStateChanged):

2010-09-08  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        TextDocument doesn't belong in WebCore/loader
        https://bugs.webkit.org/show_bug.cgi?id=45346

        TextDocument has nothing to do with loading.  It turns out that it
        should be in WebCore/html because TextDocument is actually a subclass
        of HTMLDocument (in quirks mode, no less).

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/TextDocument.cpp: Renamed from WebCore/loader/TextDocument.cpp.
        (WebCore::TextDocument::TextDocument):
        (WebCore::TextDocument::createParser):
        * html/TextDocument.h: Renamed from WebCore/loader/TextDocument.h.
        (WebCore::TextDocument::create):

2010-09-08  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Create TextViewSourceParser
        https://bugs.webkit.org/show_bug.cgi?id=45343

        Rather than have the view source document set a flag on
        HTMLViewSourceParser to indicate whether we're parsing a text document,
        this patch creates a TextViewSourceParser for parsing text documents in
        view-source mode.  Like the TextDocumentParser, the
        TextViewSourceParser implements this functionality by subclassing its
        HTML counterpart.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::createParser):
        * html/parser/HTMLViewSourceParser.cpp:
        * html/parser/HTMLViewSourceParser.h:
        (WebCore::HTMLViewSourceParser::tokenizer):
        * html/parser/TextViewSourceParser.cpp: Added.
        (WebCore::TextViewSourceParser::TextViewSourceParser):
        (WebCore::TextViewSourceParser::~TextViewSourceParser):
        * html/parser/TextViewSourceParser.h: Added.
        (WebCore::TextViewSourceParser::create):

2010-09-08  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Move HTMLInputStream to WebCore/html/parser
        https://bugs.webkit.org/show_bug.cgi?id=45339

        I forgot to move this file before.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/parser/HTMLInputStream.h: Renamed from WebCore/html/HTMLInputStream.h.
        (WebCore::HTMLInputStream::HTMLInputStream):
        (WebCore::HTMLInputStream::appendToEnd):
        (WebCore::HTMLInputStream::insertAtCurrentInsertionPoint):
        (WebCore::HTMLInputStream::hasInsertionPoint):
        (WebCore::HTMLInputStream::markEndOfFile):
        (WebCore::HTMLInputStream::haveSeenEndOfFile):
        (WebCore::HTMLInputStream::current):
        (WebCore::HTMLInputStream::splitInto):
        (WebCore::HTMLInputStream::mergeFrom):
        (WebCore::InsertionPointRecord::InsertionPointRecord):
        (WebCore::InsertionPointRecord::~InsertionPointRecord):

2010-09-08  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        TextDocument should come in from the cold
        https://bugs.webkit.org/show_bug.cgi?id=45334

        Previously, TextDocument reinvented the wheel to parse text.  This
        patch replaces TextDocument's hand-rolled parser with a parser built on
        the HTML parser infrustructure, which gives us that stuff for free.  I
        also disentangled TextDocument from HTMLViewSourceDocument.

        In a future patch, I'll move TextDocument out of the "loader" directory.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::createParser):
        * html/HTMLViewSourceDocument.h:
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::constructTreeFromToken):
        (WebCore::HTMLTreeBuilder::constructTreeFromAtomicToken):
        * html/parser/HTMLTreeBuilder.h:
        * html/parser/HTMLViewSourceParser.cpp:
        (WebCore::HTMLViewSourceParser::forcePlaintext):
        * html/parser/HTMLViewSourceParser.h:
        * html/parser/TextDocumentParser.cpp: Added.
        (WebCore::TextDocumentParser::TextDocumentParser):
        (WebCore::TextDocumentParser::~TextDocumentParser):
        (WebCore::TextDocumentParser::insertFakePreElement):
        * html/parser/TextDocumentParser.h: Added.
        (WebCore::TextDocumentParser::create):
        * loader/TextDocument.cpp:
        * loader/TextDocument.h:

2010-09-06  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Andreas Kling.

        Implement MediaPlayerPrivate::platformMedia() for the Qt port

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

        * platform/graphics/MediaPlayer.h:
        * platform/graphics/qt/MediaPlayerPrivateQt.cpp:
        (WebCore::MediaPlayerPrivate::platformMedia):
        * platform/graphics/qt/MediaPlayerPrivateQt.h:

2010-09-08  Zoltan Herczeg  <zherczeg@webkit.org>

        Reviewed by Dirk Schulze.

        An individual renderer should be assigned to each SVGFE*Element class
        https://bugs.webkit.org/show_bug.cgi?id=43954

        RenderSVGResourceFilterPrimitive renderer is added to
        the project, and assigned to each object, which class is
        derived from SVGFilterPrimitiveStandardAttributes. The patch
        mainly contains build system changes, and it fixes one layout
        test in svg/dynamic-updates.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isSVGResourceFilterPrimitive):
        * rendering/RenderSVGResourceFilterPrimitive.cpp: Added.
        (WebCore::RenderSVGResourceFilterPrimitive::RenderSVGResourceFilterPrimitive):
        * rendering/RenderSVGResourceFilterPrimitive.h: Added.
        (WebCore::RenderSVGResourceFilterPrimitive::isSVGResourceFilterPrimitive):
        * rendering/SVGRenderTreeAsText.cpp:
        (WebCore::writeSVGContainer):
        * svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::svgAttributeChanged):
        * svg/SVGFELightElement.cpp:
        (WebCore::SVGFELightElement::svgAttributeChanged):
        (WebCore::SVGFELightElement::childrenChanged):
        * svg/SVGFEOffsetElement.cpp:
        (WebCore::SVGFEOffsetElement::svgAttributeChanged):
        * svg/SVGFilterElement.h:
        * svg/SVGFilterPrimitiveStandardAttributes.cpp:
        (WebCore::SVGFilterPrimitiveStandardAttributes::svgAttributeChanged):
        (WebCore::SVGFilterPrimitiveStandardAttributes::childrenChanged):
        (WebCore::SVGFilterPrimitiveStandardAttributes::createRenderer):
        * svg/SVGFilterPrimitiveStandardAttributes.h:
        (WebCore::SVGFilterPrimitiveStandardAttributes::invalidate):

2010-09-07  Sam Weinig  <sam@webkit.org>

        Reviewed by Dan Bernstein.

        DatasetDOMStringMap does not have the right memory model
        https://bugs.webkit.org/show_bug.cgi?id=45358

        Test: fast/dom/dataset-gc.html

        * bindings/js/JSElementCustom.cpp:
        (WebCore::JSElement::markChildren):
        Mark the dataset if it exists.

        * dom/Element.cpp:
        (WebCore::Element::optionalDataset):
        * dom/Element.h:
        Expose a way to get the dataset or null (depending on if anyone thing
        has forced its creation yet).

2010-09-07  Jan E Hanssen  <jhanssen@sencha.com>

        Reviewed by Andreas Kling.

        [Qt] Add a separate Path::closeCanvasSubpath() function for canvas paths
        https://bugs.webkit.org/show_bug.cgi?id=45331

        This is needed due to an adverse effect of the fix in 44061 that causes
        certain paths not to be closed. This is not important for canvas paths
        but it is for SVG paths, so splitting up the code in a generic (SVG)
        case and one specialized for canvas.

        Test: svg/dom/path-totalLength.html

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::closePath):
        * platform/graphics/Path.h:
        (WebCore::Path::closeCanvasSubpath):
        * platform/graphics/qt/PathQt.cpp:
        (WebCore::Path::closeSubpath):
        (WebCore::Path::closeCanvasSubpath):

2010-09-07  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Chris Marrin.

        Transform animations always run in software now
        https://bugs.webkit.org/show_bug.cgi?id=45341
        
        After r66339 we always fell into software animation, because we
        failed to detect transform or opacity properties in the keyframes,
        so would send an empty list of values to the GraphicsLayer.
        
        Fixed by using CSSProperty values, rather than GraphicsLayer
        values, when detecting the presence of properties in the keyframes.
        
        Test: manual-tests/transition-accelerated.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::startAnimation):

2010-09-07  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        audio engine: add FFTFrame files
        https://bugs.webkit.org/show_bug.cgi?id=34827

        No new tests since audio API is not yet implemented.

        * platform/audio/FFTFrame.cpp: Added.
        (WebCore::FFTFrame::doPaddedFFT):
        (WebCore::FFTFrame::createInterpolatedFrame):
        (WebCore::FFTFrame::interpolateFrequencyComponents):
        (WebCore::FFTFrame::extractAverageGroupDelay):
        (WebCore::FFTFrame::addConstantGroupDelay):
        (WebCore::FFTFrame::print):
        * platform/audio/FFTFrame.h: Added.
        (WebCore::FFTFrame::fftSize):
        (WebCore::FFTFrame::log2FFTSize):
        (WebCore::FFTFrame::dspSplitComplex):
        * platform/audio/mac/FFTFrameMac.cpp: Added.
        (WebCore::FFTFrame::FFTFrame):
        (WebCore::FFTFrame::~FFTFrame):
        (WebCore::FFTFrame::multiply):
        (WebCore::FFTFrame::doFFT):
        (WebCore::FFTFrame::doInverseFFT):
        (WebCore::FFTFrame::fftSetupForSize):
        (WebCore::FFTFrame::cleanup):
        (WebCore::FFTFrame::realData):
        (WebCore::FFTFrame::imagData):

2010-09-07  Brent Fulgham  <bfulgham@webkit.org>

        Build fix, no review.

        Provide stubs to allow WebKit.dll to build
        for the WinCairo port.

        * platform/network/curl/ResourceRequest.h:
        (WebCore::ResourceRequest::ResourceRequest):
        * platform/network/curl/ResourceResponse.h:
        (WebCore::ResourceResponse::cfURLResponse):

2010-09-07  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Add AudioArray.h
        https://bugs.webkit.org/show_bug.cgi?id=45204

        No new tests since audio API is not yet implemented.

        * platform/audio/AudioArray.h: Added.
        (WebCore::AudioArray::AudioArray):
        (WebCore::AudioArray::zero):
        (WebCore::AudioArray::zeroRange):
        (WebCore::AudioArray::copyToRange):

2010-09-07  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Oliver Hunt.

        pushState and replaceState do not clone RegExp objects correctly
        https://bugs.webkit.org/show_bug.cgi?id=44718
        
        Add RegExp support to the JSC implementation of SerializedScriptValue
        (it stores the pattern and flags read from a RegExpObject, and creates
        a new one on deserialization).
        
        Tests: fast/loader/stateobjects/pushstate-object-types.html 

        * ForwardingHeaders/runtime/RegExp.h: Added.
        * ForwardingHeaders/runtime/RegExpObject.h: Added.
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::dumpIfTerminal):
        (WebCore::CloneDeserializer::readTerminal):

2010-09-07  James Robinson  <jamesr@chromium.org>

        Reviewed by Kenneth Russell.

        Fix compile errors in DrawingBuffer if USE(ACCELERATED_COMPOSITING) is not set
        https://bugs.webkit.org/show_bug.cgi?id=45324

        Adds appropriate #if guards around code that has to deal directly with the compositor.
        DrawingBuffer can still be used without the compositor as an off-screen rendering
        region.

        To test, compile without USE(ACCELERATED_COMPOSITING).

        * platform/graphics/chromium/DrawingBufferChromium.cpp:
        (WebCore::DrawingBuffer::~DrawingBuffer):
        (WebCore::DrawingBuffer::reset):
        * platform/graphics/gpu/DrawingBuffer.h:

2010-09-03  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Darin Adler.

        Provide a way to trigger a <select multiple> onchange event on changes
        https://bugs.webkit.org/show_bug.cgi?id=45192

        Test: LayoutTests/platform/mac/fast/objc/dom-html-select-activate.html

        This provides a way for a WebKit client using the Obj-C DOM bindings to
        trigger the "change" on a listbox select (<select multiple> or <select>
        with size > 1). This is because when a select is rendered as a listbox
        "change" events are triggered by mouse down events.

        This adds -[DOMHTMLSelectElement _activateItemAtIndex:allowMultipleSelection:]
        to allow for handling multiple selections if the select element is a
        multi-select.

        * bindings/objc/DOMHTML.mm:
        (-[DOMHTMLSelectElement _activateItemAtIndex:allowMultipleSelection:]):
        * bindings/objc/DOMPrivate.h: unified the Category name. Was "FormsAutocomplete" now all are "FormAutocomplete".
        * dom/SelectElement.h:
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::setSelectedIndexByUser): listboxs need to be treated specially to fire their "change" event.
        * html/HTMLSelectElement.h:
        * wml/WMLSelectElement.cpp:
        (WebCore::WMLSelectElement::setSelectedIndexByUser):

2010-09-07  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.

        Minor WKCACFLayerRenderer cleanup
        https://bugs.webkit.org/show_bug.cgi?id=45201

        Call initD3DGeometry() from createRenderer, rather than duplicating the code.

        No behavior changes.

        * platform/graphics/win/WKCACFLayerRenderer.cpp:
        (WebCore::WKCACFLayerRenderer::createRenderer):

2010-09-07  Vangelis Kokkevis  <vangelis@chromium.org>

        Reviewed by Darin Fisher.

        [chromium] Reset the owner of PlatformLayer's once the GraphicsLayer they are associated with
        gets destroyed.
        https://bugs.webkit.org/show_bug.cgi?id=45329

        Test: Fixes UI test failures downstream for all the Media tests when run on the buildbots (machines without GPUs).

        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::~GraphicsLayerChromium):

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

        Reviewed by Darin Adler.

        <rdar://problem/8381749> -Wcast-align warning emitted when building with clang

        Remove the -Wcast-align-warning since it isn't really useful, and clang is more aggressive about warning than gcc.

        * Configurations/Base.xcconfig:

2010-09-07  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Darin Adler.

        Remove redundant bounds check in originalText(). Add bounds check
        to previousCharacter(). No need of start() > 0 check since m_start
        is unsigned and we already do start() null check inside function.
        https://bugs.webkit.org/show_bug.cgi?id=45303

        Test: fast/text/one-letter-transform-crash.html

        * rendering/RenderTextFragment.cpp:
        (WebCore::RenderTextFragment::originalText):
        (WebCore::RenderTextFragment::previousCharacter):

2010-09-07  Kenneth Russell  <kbr@google.com>

        Reviewed by Dimitri Glazkov.

        Regression in JPEG texture uploads on Mac OS X
        https://bugs.webkit.org/show_bug.cgi?id=45316

        Fixed regression introduced in
        https://bugs.webkit.org/show_bug.cgi?id=44566 . Added regression
        test covering this case to gl-teximage.html in Khronos repository
        and synced test with WebKit's version.

        * platform/graphics/cg/GraphicsContext3DCG.cpp:
        (WebCore::GraphicsContext3D::getImageData):

2010-09-07  Martin Robinson  <mrobinson@igalia.com>

        Add rendering/ColumnInfo.h to the sources list.

        * GNUmakefile.am:

2010-09-07  David Hyatt  <hyatt@apple.com>

        Reviewed by Beth Dakin.

        https://bugs.webkit.org/show_bug.cgi?id=45317, encapsulate multi-column rectangle information.

        * WebCore.xcodeproj/project.pbxproj:
        * rendering/ColumnInfo.h: Added.
        (WebCore::ColumnInfo::ColumnInfo):
        (WebCore::ColumnInfo::desiredColumnWidth):
        (WebCore::ColumnInfo::setDesiredColumnWidth):
        (WebCore::ColumnInfo::desiredColumnCount):
        (WebCore::ColumnInfo::setDesiredColumnCount):
        (WebCore::ColumnInfo::columnCount):
        (WebCore::ColumnInfo::columnRectAt):
        (WebCore::ColumnInfo::clearColumns):
        (WebCore::ColumnInfo::addColumnRect):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintColumnRules):
        (WebCore::RenderBlock::paintColumnContents):
        (WebCore::RenderBlock::lowestPosition):
        (WebCore::RenderBlock::rightmostPosition):
        (WebCore::RenderBlock::leftmostPosition):
        (WebCore::RenderBlock::hitTestColumns):
        (WebCore::RenderBlock::setDesiredColumnCountAndWidth):
        (WebCore::RenderBlock::desiredColumnWidth):
        (WebCore::RenderBlock::desiredColumnCount):
        (WebCore::RenderBlock::columnInfo):
        (WebCore::RenderBlock::layoutColumns):
        (WebCore::RenderBlock::adjustPointToColumnContents):
        (WebCore::RenderBlock::adjustRectForColumns):
        (WebCore::RenderBlock::adjustForColumns):
        * rendering/RenderBlock.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paintChildLayerIntoColumns):
        (WebCore::RenderLayer::hitTestChildLayerColumns):

2010-09-07  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        <rdar://problem/7794761> Floats inside of multicol fail to hit test
        https://bugs.webkit.org/show_bug.cgi?id=44730

        Test: fast/multicol/hit-test-float.html

        Factored float hit-testing out of nodeAtPoint so that hitTestColumns could
        call it with column-adjusted coordinates.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::nodeAtPoint):
        (WebCore::RenderBlock::hitTestFloats):
        (WebCore::RenderBlock::hitTestColumns):
        * rendering/RenderBlock.h:

2010-09-07  François Sausset  <sausset@gmail.com>

        Reviewed by Beth Dakin.

        <math> element should be centered when display attribute set to block.
        https://bugs.webkit.org/show_bug.cgi?id=44206

        Test: mathml/presentation/attributes.xhtml

        * css/mathml.css:
        (math[display="block"]):

2010-09-07  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Darin Adler.

        Media elements should derive from ActiveDOMObjects
        https://bugs.webkit.org/show_bug.cgi?id=45306
        <rdar://problem/7929062>

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Initialize ActiveDOMObject
        (WebCore::HTMLMediaElement::stop): Call suspend, we want to do the same thing in both cases.
        (WebCore::HTMLMediaElement::suspend): Rename from documentWillBecomeInactive.
        (WebCore::HTMLMediaElement::resume): Rename from documentDidBecomeActive.
        (WebCore::HTMLMediaElement::hasPendingActivity): Return true if the event queue is not empty
        so the element can't be collected before they are sent.
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::canSuspend):

2010-09-07  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, rolling out r66886.
        http://trac.webkit.org/changeset/66886
        https://bugs.webkit.org/show_bug.cgi?id=45112

        Made

        * platform/chromium/GeolocationServiceChromium.cpp:
        * platform/chromium/GeolocationServiceChromium.h:

2010-09-07  Martin Robinson  <mrobinson@igalia.com>

        Small build fix. Remove libWebCoreJS from CLEAN_FILES, as it
        is no longer built.

        * GNUmakefile.am: Remove reference to libWebCoreJS.

2010-09-07  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] [REGRESSION] r66848 caused a crash in testwebview
        https://bugs.webkit.org/show_bug.cgi?id=45298

        No new tests as this fixes a test failure.

        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::setGtkAdjustments): Don't actually attach the
        scrollbar adjustments unless this is a main frame ScrollView. If we do
        Scrollbars will be cast incorrectly to MainFrameScrollbarGtk, causing
        a segfault.

2010-09-07  Kristian Monsen  <kristianm@google.com>

        Reviewed by Steve Block.

        Compile fix for Android.
        https://bugs.webkit.org/show_bug.cgi?id=45292
        Explicitly add needed header for 
        STRING_TO_V8PARAMETER_EXCEPTION_BLOCK as they do not get 
        included through other headers on Android.

        No new tests, just a compile fix.

        * bindings/scripts/CodeGeneratorV8.pm:

2010-09-07  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Fix some feature guards
        https://bugs.webkit.org/show_bug.cgi?id=45302

        No new tests as this is just a build change.

        * platform/graphics/gstreamer/DataSourceGStreamer.cpp: Guard with #if ENABLE(VIDEO)
        * platform/graphics/gstreamer/DataSourceGStreamer.h: Ditto.
        * platform/graphics/gstreamer/GOwnPtrGStreamer.cpp: Ditto.
        * platform/graphics/gstreamer/GOwnPtrGStreamer.h: Ditto.
        * platform/graphics/gstreamer/GStreamerGWorld.cpp: Ditto.
        * platform/graphics/gstreamer/GStreamerGWorld.h: Ditto.
        * platform/graphics/gstreamer/ImageGStreamer.h: Ditto.
        * platform/graphics/gstreamer/ImageGStreamerCG.mm: Ditto.
        * platform/graphics/gstreamer/ImageGStreamerCairo.cpp: Ditto.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp: Ditto.
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h: Ditto.
        * platform/graphics/gstreamer/PlatformVideoWindow.h: Ditto.
        * platform/graphics/gstreamer/PlatformVideoWindowEfl.cpp: Ditto.
        * platform/graphics/gstreamer/PlatformVideoWindowGtk.cpp: Ditto.
        * platform/graphics/gstreamer/VideoSinkGStreamer.cpp: Ditto.
        * platform/graphics/gstreamer/VideoSinkGStreamer.h: Ditto.
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp: Ditto.
        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.h: Ditto.
        * platform/gtk/GeolocationServiceGtk.cpp: Guard with ENABLE(GEOLOCATION)
        * platform/gtk/GeolocationServiceGtk.h: Ditto.

2010-09-07  Jonathan Dixon  <joth@chromium.org>

        Reviewed by Jeremy Orlow.

        Access to out-of-scope WebGeolocationServiceBridgeImpl
        https://bugs.webkit.org/show_bug.cgi?id=45112

        Add missing virtual destructor to the abstract base class.

        * platform/chromium/GeolocationServiceChromium.cpp:
        (WebCore::GeolocationServiceBridge::~GeolocationServiceBridge):
        * platform/chromium/GeolocationServiceChromium.h:

2010-09-07  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] [REGRESSION] r66848 caused a crash in testwebview
        https://bugs.webkit.org/show_bug.cgi?id=45298

        No new tests as this fixes a test failure.

        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::setGtkAdjustments): Don't actually attach the
        scrollbar adjustments unless this is a main frame ScrollView. If we do
        Scrollbars will be cast incorrectly to MainFrameScrollbarGtk, causing
        a segfault.

2010-09-07  Adam Langley  <agl@chromium.org>

        Reviewed by Tony Chang.

        [chromium] Fix complex text word spacing on Linux.

        I broke complex text word spacing with r66689. I misnamed a
        variable in the original code |glyphIndex| when it was
        actually indexing code points. That meant that I compared it
        against the wrong limit when working around Harfbuzz issues
        and neatly disabled word spacing.

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

        Test: fast/text/atsui-spacing-features.html

        * platform/graphics/chromium/FontLinux.cpp:
        (WebCore::TextRunWalker::setGlyphXPositions):

2010-09-07  Satish Sampath  <satish@chromium.org>

        Reviewed by Steve Block.

        Fix speech button's hit test logic for RTL rendering.
        https://bugs.webkit.org/show_bug.cgi?id=45288

        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::forwardEvent):

2010-09-07  Satish Sampath  <satish@chromium.org>

        Reviewed by Jeremy Orlow.

        Ignore programmatic clicks on speech input button for security reasons.
        https://bugs.webkit.org/show_bug.cgi?id=45181

        Test: fast/speech/speech-button-ignore-generated-events.html

        * rendering/TextControlInnerElements.cpp:
        (WebCore::InputFieldSpeechButtonElement::defaultEventHandler):

2010-09-07  Kent Hansen  <kent.hansen@nokia.com>

        Reviewed by Andreas Kling.

        [Qt] tst_QWebFrame::connectAndDisconnect() fails on WebKit trunk because __qt_sender__ is never set
        https://bugs.webkit.org/show_bug.cgi?id=44697

        When the signal handler is a JS function, __qt_sender__ is stuffed into a temporary
        object that's pushed onto the function's scope before the function is invoked, and
        popped again afterwards.

        We were pushing this new scope object _after_ calling JSFunction::getCallData(),
        and relying on JSC::call() to use the fresh scope chain from the function object.
        However, this is no longer the case; JSC::call() uses the scope chain passed in
        the CallData argument. Hence, we need to set up the scope before the function's
        CallData is queried.

        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::QtConnectionObject::execute):

2010-09-07  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Kent Tamura.

        Add ENABLE(INSPECTOR) guard in InspectorController::inspectorControllerForNode
        https://bugs.webkit.org/show_bug.cgi?id=45272

        Build fix.

        * inspector/InspectorController.h:
        (WebCore::InspectorController::inspectorControllerForNode):

2010-09-07  Joerg Bornemann  <joerg.bornemann@nokia.com>

        Reviewed by Ariya Hidayat.

        Fix QtWebKit linker error on Windows CE 6.
        https://bugs.webkit.org/show_bug.cgi?id=43442

        Doesn't affect any tests.

        * WebCore.pro:

2010-09-07  James Kozianski  <koz@chromium.org>

        Reviewed by Kent Tamura.

        Crash rendering <meter/> with percent padding
        https://bugs.webkit.org/show_bug.cgi?id=45081

        Avoids a crash caused by RenderMeter checking its own dimensions to
        determine whether it needs layout. The crash is avoided by removing
        the check and always calling setNeedsLayout(true).

        Test: fast/dom/HTMLMeterElement/meter-percent-size.html

        * rendering/RenderIndicator.cpp:
        (WebCore::RenderIndicator::updateFromElement):
        * rendering/RenderIndicator.h:

2010-09-06  Adam Barth  <abarth@webkit.org>

        Reviewed by Sam Weinig.

        OOB read with svg polyline
        https://bugs.webkit.org/show_bug.cgi?id=45279

        In principle, attributeChanged can do anything.  If we supported more
        DOM mutation events, it could even run JavaScript.  That means we need
        to be prepared for the attribute map to change when running
        attributeChanged.  This patch makes this loop resilient to the
        attribute map changing by storing the list of changed attributes on the
        stack.

        Test: fast/parser/changing-attrbutes-crash.html

        * dom/Element.cpp:
        (WebCore::Element::setAttributeMap):

2010-09-06  Oliver Hunt  <oliver@apple.com>

        Windows build fix

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::write):

2010-09-06  Oliver Hunt  <oliver@apple.com>

        Windows build fix

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneSerializer::write):

2010-09-05  Oliver Hunt  <oliver@apple.com>

        Reviewed by Sam Weinig.

        SerializedScriptValue needs to use a flat storage mechanism
        https://bugs.webkit.org/show_bug.cgi?id=45244

        Rewrite the old tree to tree serialization logic to use
        flat storage.  Unfortunately this basically required a
        complete rewrite.

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::CloneBase::CloneBase):
        (WebCore::CloneBase::shouldTerminate):
        (WebCore::CloneBase::ticksUntilNextCheck):
        (WebCore::CloneBase::didTimeOut):
        (WebCore::CloneBase::throwStackOverflow):
        (WebCore::CloneBase::throwInterruptedException):
        (WebCore::CloneBase::fail):
        (WebCore::CloneSerializer::serialize):
        (WebCore::CloneSerializer::CloneSerializer):
        (WebCore::CloneSerializer::isArray):
        (WebCore::CloneSerializer::startObject):
        (WebCore::CloneSerializer::startArray):
        (WebCore::CloneSerializer::endObject):
        (WebCore::CloneSerializer::getSparseIndex):
        (WebCore::CloneSerializer::getProperty):
        (WebCore::CloneSerializer::dumpImmediate):
        (WebCore::CloneSerializer::dumpString):
        (WebCore::CloneSerializer::dumpIfTerminal):
        (WebCore::CloneSerializer::write):
        (WebCore::CloneSerializer::writeLittleEndian):
        (WebCore::CloneSerializer::writeStringIndex):
        (WebCore::CloneDeserializer::deserializeString):
        (WebCore::CloneDeserializer::deserialize):
        (WebCore::CloneDeserializer::CloneDeserializer):
        (WebCore::CloneDeserializer::throwValidationError):
        (WebCore::CloneDeserializer::isValid):
        (WebCore::CloneDeserializer::readLittleEndian):
        (WebCore::CloneDeserializer::read):
        (WebCore::CloneDeserializer::readStringIndex):
        (WebCore::CloneDeserializer::readString):
        (WebCore::CloneDeserializer::readStringData):
        (WebCore::CloneDeserializer::readTag):
        (WebCore::CloneDeserializer::putProperty):
        (WebCore::CloneDeserializer::readFile):
        (WebCore::CloneDeserializer::readTerminal):
        (WebCore::SerializedScriptValue::~SerializedScriptValue):
        (WebCore::SerializedScriptValue::SerializedScriptValue):
        (WebCore::SerializedScriptValue::create):
        (WebCore::SerializedScriptValue::toString):
        (WebCore::SerializedScriptValue::deserialize):
        (WebCore::SerializedScriptValue::nullValue):
        * bindings/js/SerializedScriptValue.h:
        * dom/MessagePortChannel.cpp:
        (WebCore::MessagePortChannel::EventData::EventData):
        * workers/WorkerMessagingProxy.cpp:
        (WebCore::MessageWorkerContextTask::MessageWorkerContextTask):
        (WebCore::MessageWorkerTask::MessageWorkerTask):

2010-09-06  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] ScrollbarThemeGtk should be enabled for interior frame scrollbars
        https://bugs.webkit.org/show_bug.cgi?id=45046

        Make interior frame scrollbars "fully-fake," which means they do not rely
        at all on GTK+ for painting or behavior, but instead are typical WebCore
        scrollbars drawn according to the GTK+ theme. Move ScrollbarGtk to
        MainFrameScrollbarGtk and remove all logic in that file dealing with interior
        frame scrollbars.

        No new tests, as this is already covered by pixel tests for scrollbars,
        which were added in r66605.

        * GNUmakefile.am: Update sources list.
        * platform/ScrollView.h: Change the adjustment members to be smart pointers.
        * platform/Scrollbar.cpp: Enable THUMB_POSITION_AFFECTS_BUTTONS for GTK+ as well.
        * platform/gtk/MainFrameScrollbarGtk.cpp: Added.
        (MainFrameScrollbarGtk::create): Create a MainFrameScrollbarGtk instead of ScrollbarGtk.
        (MainFrameScrollbarGtk::MainFrameScrollbarGtk):
        (MainFrameScrollbarGtk::~MainFrameScrollbarGtk):
        (MainFrameScrollbarGtk::attachAdjustment):
        (MainFrameScrollbarGtk::detachAdjustment):
        (MainFrameScrollbarGtk::updateThumbPosition):
        (MainFrameScrollbarGtk::updateThumbProportion):
        (MainFrameScrollbarGtk::gtkValueChanged):
        (MainFrameScrollbarGtk::paint):
        * platform/gtk/MainFrameScrollbarGtk.h: Added.
        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::platformInit): Remove unnecessary initialization
        because of smart pointer change.
        (WebCore::ScrollView::createScrollbar): Instead of creating ScrollbarGtk for
        interior frame scrollbars, create a normal WebCore scrollbar.
        (WebCore::ScrollView::setGtkAdjustments): Added an extra assert which ensures
        that this method is never called with a non-null adjustment on an interior frame
        scrollbar.
        (WebCore::ScrollView::platformAddChild): Remove logic for interior frame scrollbars.
        (WebCore::ScrollView::platformRemoveChild): Remove logic for interior frame scrollbars.
        (WebCore::ScrollView::visibleContentRect): Use a more accurate guard for detecting
        transitionary states when accessing parent widgets. Explcitly guard against interior
        frame ScrollView's trying to determine size based on parent widgets.
        (WebCore::ScrollView::setScrollbarModes): This method was out of sync with the one
        it copy-and-pasted from. Update it and change the logic to do the right thing for
        interior frame scrollbars.
        * platform/gtk/ScrollbarGtk.cpp: Removed.
        * platform/gtk/ScrollbarGtk.h: Removed.

2010-09-06  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Nikolas Zimmermann.

        Make SVG PendingResources use RefPtr
        https://bugs.webkit.org/show_bug.cgi?id=43587

        Convert SVGDocumentExtensions::m_pendingResources to use a RefPtr for 
        pending elements instead of a raw pointer so that pending elements can't
        be freed prematurely.

        Test: svg/custom/use-invalid-pattern.svg

        * rendering/RenderSVGResourceContainer.cpp:
        (WebCore::RenderSVGResourceContainer::registerResource):
        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::addPendingResource):
        (WebCore::SVGDocumentExtensions::removePendingResource):
        * svg/SVGDocumentExtensions.h:
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::insertedIntoDocument):

2010-09-06  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] ScrollbarThemeGtk should support secondary steppers
        https://bugs.webkit.org/show_bug.cgi?id=44791

        Add support to ScrollbarThemeGtk for drawing alternate steppers. Adjust
        the algorithms for calculating forward and back button rects, if they
        are active in the theme. Expose this information via GtkScrollbarMetrics.

        * platform/gtk/ScrollbarThemeGtk.cpp:
        (WebCore::ScrollbarThemeGtk::updateThemeProperties): Access the secondary stepper properties
        of GtkScrollbarMetrics when updating the style cache.
        (WebCore::ScrollbarThemeGtk::backButtonRect): Account for alternate steppers.
        (WebCore::ScrollbarThemeGtk::forwardButtonRect): Ditto.
        (WebCore::ScrollbarThemeGtk::trackRect): Ditto.
        (WebCore::ScrollbarThemeGtk::paintButton): Ditto.
        * platform/gtk/ScrollbarThemeGtk.h:
        * platform/gtk/gtk2drawing.c: Expose whether or not the style uses alternate steppers
        via GtkScrollbarMetrics.
        * platform/gtk/gtkdrawing.h: Added fields to GtkScrollbarMetrics.

2010-09-06  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Adam Barth.

        Implement HTML5 definition of document.readyState
        https://bugs.webkit.org/show_bug.cgi?id=45119

        The legacy behavior was "loading" -> "loaded" -> "complete". The new
        HTML5 behavior is "loading" -> "interactive" -> "complete". There is
        some potential for this to cause compat problems if for instance a
        page expects readyState to be "loaded" during the DOMContentLoaded event.

        Test: fast/dom/Document/readystate.html

        * dom/Document.cpp:
        (WebCore::Document::Document): Initial value is Complete because according to http://www.whatwg.org/specs/web-apps/current-work/#dom-document-readystate,
        when a Document is created the initial value is "complete" unless it has a parser associated with it, in which case it is "loading".
        So the ctor starts it Complete, and when the parser is created it is flipped to Loading.
        (WebCore::Document::readyState):
        (WebCore::Document::setReadyState):
        (WebCore::Document::implicitOpen):
        (WebCore::Document::finishedParsing): Ensure that XML and HTML parser have transition to Stopping state.
        * dom/Document.h:
        * dom/DocumentParser.cpp:
        (WebCore::DocumentParser::prepareToStopParsing): Previously this was being called when parsing had stopped.
        It is better to ensure it is only called while parsing.
        * dom/XMLDocumentParser.cpp:
        (WebCore::XMLDocumentParser::end): Transition to stopping before calling document finishedParsiong().
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::prepareToStopParsing): Set state to interactive before running deferred scripts.
        This method is also called when parsing fragments, so we need to ensure it isn't done in that case.
        (WebCore::HTMLDocumentParser::attemptToRunDeferredScriptsAndEnd): Added. Break out this part s that notifyFinished doesn't go through
        the additional steps of pumping tokenizer, setting the state, etc.
        (WebCore::HTMLDocumentParser::notifyFinished): Now that prepareToStopParsing is split up, we must protect. It also makes sense to add a couple of ASSERTs.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopLoading): It looks like an aborted load should never transition to "complete" according the HTML5. I've left the legacy behavior for now though.
        (WebCore::FrameLoader::checkCompleted): The FrameLoader now sets the state on the Document instead of the Document polling the FrameLoader.

2010-09-06  Anton Muhin  <antonm@chromium.org>

        Reviewed by Adam Barth.

        [v8] Inline hot methods for V8 to WebCore and back conversions
        https://bugs.webkit.org/show_bug.cgi?id=45270

        Inline fast paths of hot functions performing conversions from V8 wrappers
        to WebCore native objects and back.
        That slightly increases the size of binary (within 0.1% for both Ubuntu
        and Windows, but those builds are slightly different from official ones),
        but gives performance boost (3--5% on Windows, up to 8% on Ubuntu).

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::initContextIfNeeded):
        * bindings/v8/V8DOMWindowShell.h:
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::getWrapperSlow):
        * bindings/v8/V8DOMWrapper.h:
        (WebCore::V8DOMWrapper::getWrapper):
        * bindings/v8/custom/V8NodeCustom.cpp:
        (WebCore::toV8Slow):

2010-09-06  Shane Stephens  <shanestephens@google.com>

        Reviewed by Dimitri Glazkov.

        [Crash] <animateMotion> element directly inside <symbol> element causes crash when referenced by <use>
        https://bugs.webkit.org/show_bug.cgi?id=44750

        Fixes crash by checking for null transforms and skipping update step
        when appropriate.

        Test: svg/dom/symbol-embeddedAnimation.svg

        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::applyResultsToTarget):

2010-09-06  Xan Lopez  <xlopez@igalia.com>

        Rubber-stamped by Tor Arne Vestbø.

        WebCore already generates a focus-{out,in} events on its setFocus
        method, there's no need to duplicate it here. Previously this was
        needed because we were not catching all possible names of focus
        events in PluginView::handleEvent and were missing the ones
        WebCore does, but this has been fixed in r66827.

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

2010-09-06  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r66823.
        http://trac.webkit.org/changeset/66823
        https://bugs.webkit.org/show_bug.cgi?id=45266

        Windows build fails with unknown reason (Requested by zherczeg
        on #webkit).

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderObject.h:
        * rendering/RenderSVGResourceFilterPrimitive.cpp: Removed.
        * rendering/RenderSVGResourceFilterPrimitive.h: Removed.
        * rendering/SVGRenderTreeAsText.cpp:
        (WebCore::writeSVGContainer):
        * svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::svgAttributeChanged):
        * svg/SVGFELightElement.cpp:
        (WebCore::SVGFELightElement::svgAttributeChanged):
        (WebCore::SVGFELightElement::childrenChanged):
        * svg/SVGFEOffsetElement.cpp:
        (WebCore::SVGFEOffsetElement::svgAttributeChanged):
        * svg/SVGFilterElement.h:
        (WebCore::SVGFilterElement::invalidateFilter):
        * svg/SVGFilterPrimitiveStandardAttributes.cpp:
        (WebCore::SVGFilterPrimitiveStandardAttributes::svgAttributeChanged):
        (WebCore::SVGFilterPrimitiveStandardAttributes::childrenChanged):
        * svg/SVGFilterPrimitiveStandardAttributes.h:
        (WebCore::SVGFilterPrimitiveStandardAttributes::rendererIsNeeded):

2010-09-06  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Provide Keyboard Events to Windowless plugins
        https://bugs.webkit.org/show_bug.cgi?id=44613

        Fix keyboard event delivery for windowless plugins.

        Based on a patch by Bharathwaaj.

        * plugins/PluginView.cpp:
        (WebCore::PluginView::handleEvent): also take into account
        focused{in,out} events
        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::handleKeyboardEvent): we want the keyval
        here, not the hardware keycode
        (WebCore::PluginView::handleMouseEvent): focus the pluginview on mouse events

2010-09-06  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        WebInspector: it'd be nice to be able to pass undefined argument as a callback to InspectorBackend functions.

        There are some places where callback is passing via some wrapper. In that case sendMessageToBackend
        will be called with additional argument for callback but with undefined value.

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

        * inspector/CodeGeneratorInspector.pm:

2010-09-06  Zoltan Herczeg  <zherczeg@webkit.org>

        Reviewed by Dirk Schulze.

        An individual renderer should be assigned to each SVGFE*Element class
        https://bugs.webkit.org/show_bug.cgi?id=43954

        RenderSVGResourceFilterPrimitive renderer is added to
        the project, and assigned to each object, which class is
        derived from SVGFilterPrimitiveStandardAttributes. The patch
        mainly contains build system changes, and it fixes one layout
        test in svg/dynamic-updates.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isSVGResourceFilterPrimitive):
        * rendering/RenderSVGResourceFilterPrimitive.cpp: Added.
        (WebCore::RenderSVGResourceFilterPrimitive::RenderSVGResourceFilterPrimitive):
        * rendering/RenderSVGResourceFilterPrimitive.h: Added.
        (WebCore::RenderSVGResourceFilterPrimitive::isSVGResourceFilterPrimitive):
        * rendering/SVGRenderTreeAsText.cpp:
        (WebCore::writeSVGContainer):
        * svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::svgAttributeChanged):
        * svg/SVGFELightElement.cpp:
        (WebCore::SVGFELightElement::svgAttributeChanged):
        (WebCore::SVGFELightElement::childrenChanged):
        * svg/SVGFEOffsetElement.cpp:
        (WebCore::SVGFEOffsetElement::svgAttributeChanged):
        * svg/SVGFilterElement.h:
        * svg/SVGFilterPrimitiveStandardAttributes.cpp:
        (WebCore::SVGFilterPrimitiveStandardAttributes::svgAttributeChanged):
        (WebCore::SVGFilterPrimitiveStandardAttributes::childrenChanged):
        (WebCore::SVGFilterPrimitiveStandardAttributes::createRenderer):
        * svg/SVGFilterPrimitiveStandardAttributes.h:
        (WebCore::SVGFilterPrimitiveStandardAttributes::invalidate):

2010-09-06  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Reviewed by Dirk Schulze.

        [WML] Use RenderImageResource in WMLImageElement.cpp
        https://bugs.webkit.org/show_bug.cgi?id=44952

        The hasImage() and setCachedImage() were moved to RenderImageResource class. 
        So, WML also should use the functions from RenderImageResource.

        * wml/WMLImageElement.cpp:
        (WebCore::WMLImageElement::attach):

2010-08-26  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Steve Block.

        Add index insertion support to IndexedDB.
        https://bugs.webkit.org/show_bug.cgi?id=44695

        Whenever you insert an item into an ObjectStore, it should use all
        indexes' key paths to insert corresponding entries into each index.
        Also data should be deleted out of the index when it goes away.

        Not much testing yet since there's no way to directly observe indexes.
        More will be in next patch.

        * storage/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::removeObjectStore):
        * storage/IDBFactoryBackendImpl.cpp:
        (WebCore::createTables):
        * storage/IDBIndex.idl:
        * storage/IDBIndexBackendImpl.cpp:
        (WebCore::whereClause):
        (WebCore::bindWhereClause):
        (WebCore::IDBIndexBackendImpl::addingKeyAllowed):
        * storage/IDBIndexBackendImpl.h:
        (WebCore::IDBIndexBackendImpl::id):
        * storage/IDBKey.cpp:
        (WebCore::IDBKey::whereSyntax):
        (WebCore::IDBKey::bind):
        (WebCore::IDBKey::bindWithNulls):
        * storage/IDBKey.h:
        * storage/IDBObjectStore.idl:
        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::whereClause):
        (WebCore::bindWhereClause):
        (WebCore::IDBObjectStoreBackendImpl::get):
        (WebCore::fetchKeyFromKeyPath):
        (WebCore::putObjectStoreData):
        (WebCore::putIndexData):
        (WebCore::IDBObjectStoreBackendImpl::put):
        (WebCore::IDBObjectStoreBackendImpl::remove):
        (WebCore::IDBObjectStoreBackendImpl::createIndex):
        (WebCore::doDelete):
        (WebCore::IDBObjectStoreBackendImpl::removeIndex):
        (WebCore::IDBObjectStoreBackendImpl::openCursor):
        * storage/IDBObjectStoreBackendImpl.h:

2010-09-06  Anton Muhin  <antonm@chromium.org>

        Reviewed by Adam Barth.

        [v8] bypass caches when query memory usage from post GC and in crash handler.
        https://bugs.webkit.org/show_bug.cgi?id=45036

        Add Chromium-specific API to query actual memory usage which bypasses any caches.

        * platform/chromium/ChromiumBridge.h:

2010-09-06  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Rename SecurityOrigin::canLoad to canDisplay
        https://bugs.webkit.org/show_bug.cgi?id=45214

        canLoad is a pretty opaque name.  This function is really about whether
        you can display the contents of the URL in an iframe, an image, or a
        plugin.

        * WebCore.exp.in:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::isSafeToLoadURL):
        * loader/Cache.cpp:
        (WebCore::Cache::requestResource):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadFrameRequest):
        * loader/PingLoader.cpp:
        (WebCore::PingLoader::loadImage):
        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::loadMediaPlayerProxyPlugin):
        (WebCore::SubframeLoader::createJavaAppletWidget):
        (WebCore::SubframeLoader::loadSubframe):
        (WebCore::SubframeLoader::loadPlugin):
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::create):
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::canDisplay):
        * page/SecurityOrigin.h:
        * plugins/PluginView.cpp:
        (WebCore::PluginView::load):

2010-08-31  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Joseph Pecoraro.

        Web Inspector: browser crashes on attempt to evaluate "alert(1)" while staying on a breakpoint
        https://bugs.webkit.org/show_bug.cgi?id=44943

        Test: inspector/debugger-suspend-active-dom-objects.html

        * page/PageGroupLoadDeferrer.cpp:
        (WebCore::PageGroupLoadDeferrer::PageGroupLoadDeferrer):

2010-09-05  Kenneth Russell  <kbr@google.com>

        Reviewed by Darin Fisher.

        Add unit tests for red-black tree and (POD) arena
        https://bugs.webkit.org/show_bug.cgi?id=45060

        * platform/graphics/gpu/PODArena.h: Made DefaultChunkSize public so unit tests can access it. Fixed copyright header.
        * platform/graphics/gpu/PODInterval.h: Fixed copyright header.
        * platform/graphics/gpu/PODIntervalTree.h: Fixed copyright header.
        * platform/graphics/gpu/PODRedBlackTree.h: Fixed copyright header.

2010-09-05  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Nate Chapin.

        Add the concept of class methods to bindings (for IndexedDB's IDBKeyRange).
        https://bugs.webkit.org/show_bug.cgi?id=45044

        IndexedDB's IDBKeyRange has what, in other languages, are called class
        methods. In javaScript terms, these are methods only accessible from their
        constructor and not instances. This change adds such support to V8. There
        are already other features required for IndexedDB that JSC doesn't yet
        support, so I'll add this to the list of todo items in the master bug
        for that.

        The bindings tests cover this. My next patch will change WebCore to use
        this and it'll have associated layout tests.

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/scripts/test/CPP/WebDOMTestObj.cpp:
        (WebDOMTestObj::classMethod):
        (WebDOMTestObj::classMethodWithOptional):
        * bindings/scripts/test/CPP/WebDOMTestObj.h:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        (webkit_dom_test_obj_class_method):
        (webkit_dom_test_obj_class_method_with_optional):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionStaticMethod):
        (WebCore::jsTestObjPrototypeFunctionStaticMethodWithOptional):
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.mm:
        (-[DOMTestObj classMethod]):
        (-[DOMTestObj classMethodWithOptional:]):
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjInternal::classMethodCallback):
        (WebCore::TestObjInternal::classMethodWithOptionalCallback):
        (WebCore::ConfigureV8TestObjTemplate):
        * storage/IDBKeyRange.idl:

2010-09-05  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Steve Block.

        Add IndexedDB objects' constructors to window
        https://bugs.webkit.org/show_bug.cgi?id=44599

        Also add a forgotten constant to IDBTransaction, and
        change IDBKeyRange over to using the V8Static attribute
        so it actually behaves as it's supposed to.

        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::iDBCursorEnabled):
        (WebCore::RuntimeEnabledFeatures::iDBDatabaseEnabled):
        (WebCore::RuntimeEnabledFeatures::iDBDatabaseErrorEnabled):
        (WebCore::RuntimeEnabledFeatures::iDBDatabaseExceptionEnabled):
        (WebCore::RuntimeEnabledFeatures::iDBErrorEventEnabled):
        (WebCore::RuntimeEnabledFeatures::iDBEventEnabled):
        (WebCore::RuntimeEnabledFeatures::iDBFactoryEnabled):
        (WebCore::RuntimeEnabledFeatures::iDBIndexEnabled):
        (WebCore::RuntimeEnabledFeatures::iDBKeyRangeEnabled):
        (WebCore::RuntimeEnabledFeatures::iDBObjectStoreEnabled):
        (WebCore::RuntimeEnabledFeatures::iDBRequestEnabled):
        (WebCore::RuntimeEnabledFeatures::iDBSuccessEventEnabled):
        (WebCore::RuntimeEnabledFeatures::iDBTransactionEnabled):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::clear):
        (WebCore::DOMWindow::indexedDB):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
        * storage/IDBKeyRange.idl:
        * storage/IDBTransaction.h:
        * storage/IDBTransaction.idl:

2010-09-04  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Nikolas Zimmermann.

        Prevent premature deletion of svg use shadow tree
        https://bugs.webkit.org/show_bug.cgi?id=43260

        Test: svg/custom/use-invalid-style.svg

        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::insertedIntoDocument):
        (WebCore::SVGUseElement::removedFromDocument):
        (WebCore::SVGUseElement::detach):

2010-09-03  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        Reviewed by Darin Adler.

        Add NetworkingContext to avoid layer violations
        https://bugs.webkit.org/show_bug.cgi?id=42292

        Create and provide access to NetworkingContext in FrameLoader.

        In the WebKit layer we added specific implementations of FrameNetworkingContext
        so each port's FrameLoaderClient can add any port specific information to NetworkingContext
        The NetworkingContext is, therefore, created by a FrameLoaderClient and stored
        in the FrameLoader for each frame created. People must always use it
        by calling FrameLoader::networkingContext() and never through their FrameLoaderClient.
        The lifetime cycle of NetworkingContext is kept by a RefPtr, so the object is RefCounted.

        It is still a preparation to NetworkingContext to be activated and
        work for all ports.

        * WebCore.exp.in:
        * loader/EmptyClients.h:
        (WebCore::EmptyFrameLoaderClient::createNetworkingContext):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::~FrameLoader):
        (WebCore::FrameLoader::init):
        (WebCore::FrameLoader::networkingContext):
        * loader/FrameLoader.h:
        * loader/FrameLoaderClient.h:

2010-09-03  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Darin Adler.

        V8/JS bindings should not perform type checks if the parameter has Callback attribute
        https://bugs.webkit.org/show_bug.cgi?id=45143

        No new tests, should not affect existing idls.

        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod5):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod):
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjInternal::overloadedMethod5Callback):
        (WebCore::TestObjInternal::overloadedMethodCallback):

2010-09-03  Kenneth Russell  <kbr@google.com>

        Unreviewed, Chromium build fix. Fix breakage on Windows after
        r66787 / https://bugs.webkit.org/show_bug.cgi?id=45223 .

        * platform/graphics/chromium/FontChromiumWin.cpp:
        (WebCore::Font::drawGlyphs):

2010-09-03  James Robinson  <jamesr@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Text sometimes fails to display in accelerated 2d canvases
        https://bugs.webkit.org/show_bug.cgi?id=45223

        Calls PlatformContextSkia::prepareForSoftwareDraw() before drawing glyphs
        using skia to ensure that the backing store state is consistent.

        * platform/graphics/chromium/FontChromiumWin.cpp:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/chromium/FontLinux.cpp:
        (WebCore::Font::drawGlyphs):

2010-09-03  Kenneth Russell  <kbr@google.com>

        Reviewed by Darin Fisher.

        Add thirdparty directory and incorporate GLU tessellator
        https://bugs.webkit.org/show_bug.cgi?id=44707

        This directory is intended to contain copies of third-party libraries used
        by WebCore, in particular those which may require some modification in
        order to incorporate.

        No tests at this time; these sources are being added in preparation for
        incorporating other code which uses them, at which point the code will be
        exercised and testable.

        * thirdparty: Added.
        * thirdparty/README.txt: Added.
        * thirdparty/glu: Added.
        * thirdparty/glu/LICENSE.txt: Added.
        * thirdparty/glu/README.webkit: Added.
        * thirdparty/glu/gluos.h: Added.
        * thirdparty/glu/internal_glu.h: Added.
        * thirdparty/glu/libtess: Added.
        * thirdparty/glu/libtess/GNUmakefile: Added.
        * thirdparty/glu/libtess/Imakefile: Added.
        * thirdparty/glu/libtess/README: Added.
        * thirdparty/glu/libtess/alg-outline: Added.
        * thirdparty/glu/libtess/dict-list.h: Added.
        * thirdparty/glu/libtess/dict.c: Added.
        * thirdparty/glu/libtess/dict.h: Added.
        * thirdparty/glu/libtess/geom.c: Added.
        * thirdparty/glu/libtess/geom.h: Added.
        * thirdparty/glu/libtess/memalloc.c: Added.
        * thirdparty/glu/libtess/memalloc.h: Added.
        * thirdparty/glu/libtess/mesh.c: Added.
        * thirdparty/glu/libtess/mesh.h: Added.
        * thirdparty/glu/libtess/normal.c: Added.
        * thirdparty/glu/libtess/normal.h: Added.
        * thirdparty/glu/libtess/priorityq-heap.c: Added.
        * thirdparty/glu/libtess/priorityq-heap.h: Added.
        * thirdparty/glu/libtess/priorityq-sort.h: Added.
        * thirdparty/glu/libtess/priorityq.c: Added.
        * thirdparty/glu/libtess/priorityq.h: Added.
        * thirdparty/glu/libtess/render.c: Added.
        * thirdparty/glu/libtess/render.h: Added.
        * thirdparty/glu/libtess/sweep.c: Added.
        * thirdparty/glu/libtess/sweep.h: Added.
        * thirdparty/glu/libtess/tess.c: Added.
        * thirdparty/glu/libtess/tess.h: Added.
        * thirdparty/glu/libtess/tessmono.c: Added.
        * thirdparty/glu/libtess/tessmono.h: Added.

2010-09-03  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r66781.
        http://trac.webkit.org/changeset/66781
        https://bugs.webkit.org/show_bug.cgi?id=45220

        Breaks the build. Adds a mac-specific file to
        platform/graphics without #if PLATFORM() guards and changes
        the GraphicsContext3D interface without updating all
        implementations (Requested by jamesr on #webkit).

        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * html/canvas/WebGLObject.cpp:
        (WebCore::WebGLObject::deleteObject):
        * platform/graphics/ANGLEWebKitBridge.h:
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/GraphicsContext3DOpenGL.cpp: Removed.
        * platform/graphics/mac/GraphicsContext3DMac.mm:
        (WebCore::GraphicsContext3D::validateAttributes):
        (WebCore::GraphicsContext3D::makeContextCurrent):
        (WebCore::GraphicsContext3D::paintRenderingResultsToCanvas):
        (WebCore::GraphicsContext3D::reshape):
        (WebCore::ensureContext):
        (WebCore::GraphicsContext3D::prepareTexture):
        (WebCore::GraphicsContext3D::activeTexture):
        (WebCore::GraphicsContext3D::attachShader):
        (WebCore::GraphicsContext3D::bindAttribLocation):
        (WebCore::GraphicsContext3D::bindBuffer):
        (WebCore::GraphicsContext3D::bindFramebuffer):
        (WebCore::GraphicsContext3D::bindRenderbuffer):
        (WebCore::GraphicsContext3D::bindTexture):
        (WebCore::GraphicsContext3D::blendColor):
        (WebCore::GraphicsContext3D::blendEquation):
        (WebCore::GraphicsContext3D::blendEquationSeparate):
        (WebCore::GraphicsContext3D::blendFunc):
        (WebCore::GraphicsContext3D::blendFuncSeparate):
        (WebCore::GraphicsContext3D::bufferData):
        (WebCore::GraphicsContext3D::bufferSubData):
        (WebCore::GraphicsContext3D::checkFramebufferStatus):
        (WebCore::GraphicsContext3D::clearColor):
        (WebCore::GraphicsContext3D::clear):
        (WebCore::GraphicsContext3D::clearDepth):
        (WebCore::GraphicsContext3D::clearStencil):
        (WebCore::GraphicsContext3D::colorMask):
        (WebCore::GraphicsContext3D::compileShader):
        (WebCore::GraphicsContext3D::copyTexImage2D):
        (WebCore::GraphicsContext3D::copyTexSubImage2D):
        (WebCore::GraphicsContext3D::cullFace):
        (WebCore::GraphicsContext3D::depthFunc):
        (WebCore::GraphicsContext3D::depthMask):
        (WebCore::GraphicsContext3D::depthRange):
        (WebCore::GraphicsContext3D::detachShader):
        (WebCore::GraphicsContext3D::disable):
        (WebCore::GraphicsContext3D::disableVertexAttribArray):
        (WebCore::GraphicsContext3D::drawArrays):
        (WebCore::GraphicsContext3D::drawElements):
        (WebCore::GraphicsContext3D::enable):
        (WebCore::GraphicsContext3D::enableVertexAttribArray):
        (WebCore::GraphicsContext3D::finish):
        (WebCore::GraphicsContext3D::flush):
        (WebCore::GraphicsContext3D::framebufferRenderbuffer):
        (WebCore::GraphicsContext3D::framebufferTexture2D):
        (WebCore::GraphicsContext3D::frontFace):
        (WebCore::GraphicsContext3D::generateMipmap):
        (WebCore::GraphicsContext3D::getActiveAttrib):
        (WebCore::GraphicsContext3D::getActiveUniform):
        (WebCore::GraphicsContext3D::getAttachedShaders):
        (WebCore::GraphicsContext3D::getAttribLocation):
        (WebCore::GraphicsContext3D::getContextAttributes):
        (WebCore::GraphicsContext3D::getError):
        (WebCore::GraphicsContext3D::getString):
        (WebCore::GraphicsContext3D::hint):
        (WebCore::GraphicsContext3D::isBuffer):
        (WebCore::GraphicsContext3D::isEnabled):
        (WebCore::GraphicsContext3D::isFramebuffer):
        (WebCore::GraphicsContext3D::isProgram):
        (WebCore::GraphicsContext3D::isRenderbuffer):
        (WebCore::GraphicsContext3D::isShader):
        (WebCore::GraphicsContext3D::isTexture):
        (WebCore::GraphicsContext3D::lineWidth):
        (WebCore::GraphicsContext3D::linkProgram):
        (WebCore::GraphicsContext3D::pixelStorei):
        (WebCore::GraphicsContext3D::polygonOffset):
        (WebCore::GraphicsContext3D::readPixels):
        (WebCore::GraphicsContext3D::releaseShaderCompiler):
        (WebCore::GraphicsContext3D::renderbufferStorage):
        (WebCore::GraphicsContext3D::sampleCoverage):
        (WebCore::GraphicsContext3D::scissor):
        (WebCore::GraphicsContext3D::shaderSource):
        (WebCore::GraphicsContext3D::stencilFunc):
        (WebCore::GraphicsContext3D::stencilFuncSeparate):
        (WebCore::GraphicsContext3D::stencilMask):
        (WebCore::GraphicsContext3D::stencilMaskSeparate):
        (WebCore::GraphicsContext3D::stencilOp):
        (WebCore::GraphicsContext3D::stencilOpSeparate):
        (WebCore::GraphicsContext3D::texParameterf):
        (WebCore::GraphicsContext3D::texParameteri):
        (WebCore::GraphicsContext3D::uniform1f):
        (WebCore::GraphicsContext3D::uniform1fv):
        (WebCore::GraphicsContext3D::uniform2f):
        (WebCore::GraphicsContext3D::uniform2fv):
        (WebCore::GraphicsContext3D::uniform3f):
        (WebCore::GraphicsContext3D::uniform3fv):
        (WebCore::GraphicsContext3D::uniform4f):
        (WebCore::GraphicsContext3D::uniform4fv):
        (WebCore::GraphicsContext3D::uniform1i):
        (WebCore::GraphicsContext3D::uniform1iv):
        (WebCore::GraphicsContext3D::uniform2i):
        (WebCore::GraphicsContext3D::uniform2iv):
        (WebCore::GraphicsContext3D::uniform3i):
        (WebCore::GraphicsContext3D::uniform3iv):
        (WebCore::GraphicsContext3D::uniform4i):
        (WebCore::GraphicsContext3D::uniform4iv):
        (WebCore::GraphicsContext3D::uniformMatrix2fv):
        (WebCore::GraphicsContext3D::uniformMatrix3fv):
        (WebCore::GraphicsContext3D::uniformMatrix4fv):
        (WebCore::GraphicsContext3D::useProgram):
        (WebCore::GraphicsContext3D::validateProgram):
        (WebCore::GraphicsContext3D::vertexAttrib1f):
        (WebCore::GraphicsContext3D::vertexAttrib1fv):
        (WebCore::GraphicsContext3D::vertexAttrib2f):
        (WebCore::GraphicsContext3D::vertexAttrib2fv):
        (WebCore::GraphicsContext3D::vertexAttrib3f):
        (WebCore::GraphicsContext3D::vertexAttrib3fv):
        (WebCore::GraphicsContext3D::vertexAttrib4f):
        (WebCore::GraphicsContext3D::vertexAttrib4fv):
        (WebCore::GraphicsContext3D::vertexAttribPointer):
        (WebCore::GraphicsContext3D::viewport):
        (WebCore::GraphicsContext3D::getBooleanv):
        (WebCore::GraphicsContext3D::getBufferParameteriv):
        (WebCore::GraphicsContext3D::getFloatv):
        (WebCore::GraphicsContext3D::getFramebufferAttachmentParameteriv):
        (WebCore::GraphicsContext3D::getIntegerv):
        (WebCore::GraphicsContext3D::getProgramiv):
        (WebCore::GraphicsContext3D::getProgramInfoLog):
        (WebCore::GraphicsContext3D::getRenderbufferParameteriv):
        (WebCore::GraphicsContext3D::getShaderiv):
        (WebCore::GraphicsContext3D::getShaderInfoLog):
        (WebCore::GraphicsContext3D::getShaderSource):
        (WebCore::GraphicsContext3D::getTexParameterfv):
        (WebCore::GraphicsContext3D::getTexParameteriv):
        (WebCore::GraphicsContext3D::getUniformfv):
        (WebCore::GraphicsContext3D::getUniformiv):
        (WebCore::GraphicsContext3D::getUniformLocation):
        (WebCore::GraphicsContext3D::getVertexAttribfv):
        (WebCore::GraphicsContext3D::getVertexAttribiv):
        (WebCore::GraphicsContext3D::getVertexAttribOffset):
        (WebCore::GraphicsContext3D::texImage2D):
        (WebCore::GraphicsContext3D::texSubImage2D):
        (WebCore::GraphicsContext3D::createBuffer):
        (WebCore::GraphicsContext3D::createFramebuffer):
        (WebCore::GraphicsContext3D::createProgram):
        (WebCore::GraphicsContext3D::createRenderbuffer):
        (WebCore::GraphicsContext3D::createShader):
        (WebCore::GraphicsContext3D::createTexture):
        (WebCore::GraphicsContext3D::deleteBuffer):
        (WebCore::GraphicsContext3D::deleteFramebuffer):
        (WebCore::GraphicsContext3D::deleteProgram):
        (WebCore::GraphicsContext3D::deleteRenderbuffer):
        (WebCore::GraphicsContext3D::deleteShader):
        (WebCore::GraphicsContext3D::deleteTexture):
        (WebCore::GraphicsContext3D::sizeInBytes):
        (WebCore::GraphicsContext3D::synthesizeGLError):

2010-09-03  James Robinson  <jamesr@chromium.org>

        Reviewed by Kenneth Russell.

        Force 2d canvases to be rendered in software when the composite operation isn't source-over
        https://bugs.webkit.org/show_bug.cgi?id=45216

        The current accelerated 2d canvas implementation is very slow for composite operations other
        than the default.  This patch forces a canvas to be rendered in software if any other operation
        is set until we accelerate the rest.

        Tested by any of the fast/canvas tests that use a non-default globalCompositeOperation.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setGlobalCompositeOperation):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::setSharedGraphicsContext3D):

2010-09-03  Paul Sawaya  <psawaya@apple.com>

        Reviewed by Chris Marrin.

        Refactored out Mac specific code for platform/graphics/mac/GraphicsContext3D.mm file.
        Left general OpenGL code in platform/graphics/GraphicsContext3DOpenGL.cpp.
        https://bugs.webkit.org/show_bug.cgi?id=30625

        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * html/canvas/WebGLObject.cpp:
        (WebCore::WebGLObject::deleteObject):
        * platform/graphics/ANGLEWebKitBridge.h:
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/GraphicsContext3DOpenGL.cpp: Copied from platform/graphics/mac/GraphicsContext3DMac.mm.
        (WebCore::GraphicsContext3D::prepareTexture):
        (WebCore::GraphicsContext3D::activeTexture):
        (WebCore::GraphicsContext3D::attachShader):
        (WebCore::GraphicsContext3D::bindAttribLocation):
        (WebCore::GraphicsContext3D::bindBuffer):
        (WebCore::GraphicsContext3D::bindFramebuffer):
        (WebCore::GraphicsContext3D::bindRenderbuffer):
        (WebCore::GraphicsContext3D::bindTexture):
        (WebCore::GraphicsContext3D::blendColor):
        (WebCore::GraphicsContext3D::blendEquation):
        (WebCore::GraphicsContext3D::blendEquationSeparate):
        (WebCore::GraphicsContext3D::blendFunc):
        (WebCore::GraphicsContext3D::blendFuncSeparate):
        (WebCore::GraphicsContext3D::bufferData):
        (WebCore::GraphicsContext3D::bufferSubData):
        (WebCore::GraphicsContext3D::checkFramebufferStatus):
        (WebCore::GraphicsContext3D::clearColor):
        (WebCore::GraphicsContext3D::clear):
        (WebCore::GraphicsContext3D::clearDepth):
        (WebCore::GraphicsContext3D::clearStencil):
        (WebCore::GraphicsContext3D::colorMask):
        (WebCore::GraphicsContext3D::compileShader):
        (WebCore::GraphicsContext3D::copyTexImage2D):
        (WebCore::GraphicsContext3D::copyTexSubImage2D):
        (WebCore::GraphicsContext3D::cullFace):
        (WebCore::GraphicsContext3D::depthFunc):
        (WebCore::GraphicsContext3D::depthMask):
        (WebCore::GraphicsContext3D::depthRange):
        (WebCore::GraphicsContext3D::detachShader):
        (WebCore::GraphicsContext3D::disable):
        (WebCore::GraphicsContext3D::disableVertexAttribArray):
        (WebCore::GraphicsContext3D::drawArrays):
        (WebCore::GraphicsContext3D::drawElements):
        (WebCore::GraphicsContext3D::enable):
        (WebCore::GraphicsContext3D::enableVertexAttribArray):
        (WebCore::GraphicsContext3D::finish):
        (WebCore::GraphicsContext3D::flush):
        (WebCore::GraphicsContext3D::framebufferRenderbuffer):
        (WebCore::GraphicsContext3D::framebufferTexture2D):
        (WebCore::GraphicsContext3D::frontFace):
        (WebCore::GraphicsContext3D::generateMipmap):
        (WebCore::GraphicsContext3D::getActiveAttrib):
        (WebCore::GraphicsContext3D::getActiveUniform):
        (WebCore::GraphicsContext3D::getAttachedShaders):
        (WebCore::GraphicsContext3D::getAttribLocation):
        (WebCore::GraphicsContext3D::getError):
        (WebCore::GraphicsContext3D::getString):
        (WebCore::GraphicsContext3D::hint):
        (WebCore::GraphicsContext3D::isBuffer):
        (WebCore::GraphicsContext3D::isEnabled):
        (WebCore::GraphicsContext3D::isFramebuffer):
        (WebCore::GraphicsContext3D::isProgram):
        (WebCore::GraphicsContext3D::isRenderbuffer):
        (WebCore::GraphicsContext3D::isShader):
        (WebCore::GraphicsContext3D::isTexture):
        (WebCore::GraphicsContext3D::lineWidth):
        (WebCore::GraphicsContext3D::linkProgram):
        (WebCore::GraphicsContext3D::pixelStorei):
        (WebCore::GraphicsContext3D::polygonOffset):
        (WebCore::GraphicsContext3D::readPixels):
        (WebCore::GraphicsContext3D::releaseShaderCompiler):
        (WebCore::GraphicsContext3D::renderbufferStorage):
        (WebCore::GraphicsContext3D::sampleCoverage):
        (WebCore::GraphicsContext3D::scissor):
        (WebCore::GraphicsContext3D::shaderSource):
        (WebCore::GraphicsContext3D::stencilFunc):
        (WebCore::GraphicsContext3D::stencilFuncSeparate):
        (WebCore::GraphicsContext3D::stencilMask):
        (WebCore::GraphicsContext3D::stencilMaskSeparate):
        (WebCore::GraphicsContext3D::stencilOp):
        (WebCore::GraphicsContext3D::stencilOpSeparate):
        (WebCore::GraphicsContext3D::texParameterf):
        (WebCore::GraphicsContext3D::texParameteri):
        (WebCore::GraphicsContext3D::uniform1f):
        (WebCore::GraphicsContext3D::uniform1fv):
        (WebCore::GraphicsContext3D::uniform2f):
        (WebCore::GraphicsContext3D::uniform2fv):
        (WebCore::GraphicsContext3D::uniform3f):
        (WebCore::GraphicsContext3D::uniform3fv):
        (WebCore::GraphicsContext3D::uniform4f):
        (WebCore::GraphicsContext3D::uniform4fv):
        (WebCore::GraphicsContext3D::uniform1i):
        (WebCore::GraphicsContext3D::uniform1iv):
        (WebCore::GraphicsContext3D::uniform2i):
        (WebCore::GraphicsContext3D::uniform2iv):
        (WebCore::GraphicsContext3D::uniform3i):
        (WebCore::GraphicsContext3D::uniform3iv):
        (WebCore::GraphicsContext3D::uniform4i):
        (WebCore::GraphicsContext3D::uniform4iv):
        (WebCore::GraphicsContext3D::uniformMatrix2fv):
        (WebCore::GraphicsContext3D::uniformMatrix3fv):
        (WebCore::GraphicsContext3D::uniformMatrix4fv):
        (WebCore::GraphicsContext3D::useProgram):
        (WebCore::GraphicsContext3D::validateProgram):
        (WebCore::GraphicsContext3D::vertexAttrib1f):
        (WebCore::GraphicsContext3D::vertexAttrib1fv):
        (WebCore::GraphicsContext3D::vertexAttrib2f):
        (WebCore::GraphicsContext3D::vertexAttrib2fv):
        (WebCore::GraphicsContext3D::vertexAttrib3f):
        (WebCore::GraphicsContext3D::vertexAttrib3fv):
        (WebCore::GraphicsContext3D::vertexAttrib4f):
        (WebCore::GraphicsContext3D::vertexAttrib4fv):
        (WebCore::GraphicsContext3D::vertexAttribPointer):
        (WebCore::GraphicsContext3D::viewport):
        (WebCore::GraphicsContext3D::getBooleanv):
        (WebCore::GraphicsContext3D::getBufferParameteriv):
        (WebCore::GraphicsContext3D::getFloatv):
        (WebCore::GraphicsContext3D::getFramebufferAttachmentParameteriv):
        (WebCore::GraphicsContext3D::getIntegerv):
        (WebCore::GraphicsContext3D::getProgramiv):
        (WebCore::GraphicsContext3D::getProgramInfoLog):
        (WebCore::GraphicsContext3D::getRenderbufferParameteriv):
        (WebCore::GraphicsContext3D::getShaderiv):
        (WebCore::GraphicsContext3D::getShaderInfoLog):
        (WebCore::GraphicsContext3D::getShaderSource):
        (WebCore::GraphicsContext3D::getTexParameterfv):
        (WebCore::GraphicsContext3D::getTexParameteriv):
        (WebCore::GraphicsContext3D::getUniformfv):
        (WebCore::GraphicsContext3D::getUniformiv):
        (WebCore::GraphicsContext3D::getUniformLocation):
        (WebCore::GraphicsContext3D::getVertexAttribfv):
        (WebCore::GraphicsContext3D::getVertexAttribiv):
        (WebCore::GraphicsContext3D::getVertexAttribOffset):
        (WebCore::GraphicsContext3D::texImage2D):
        (WebCore::GraphicsContext3D::texSubImage2D):
        (WebCore::GraphicsContext3D::createBuffer):
        (WebCore::GraphicsContext3D::createFramebuffer):
        (WebCore::GraphicsContext3D::createProgram):
        (WebCore::GraphicsContext3D::createRenderbuffer):
        (WebCore::GraphicsContext3D::createShader):
        (WebCore::GraphicsContext3D::createTexture):
        (WebCore::GraphicsContext3D::deleteBuffer):
        (WebCore::GraphicsContext3D::deleteFramebuffer):
        (WebCore::GraphicsContext3D::deleteProgram):
        (WebCore::GraphicsContext3D::deleteRenderbuffer):
        (WebCore::GraphicsContext3D::deleteShader):
        (WebCore::GraphicsContext3D::deleteTexture):
        * platform/graphics/mac/GraphicsContext3DMac.mm:
        (WebCore::GraphicsContext3D::ensureContext):
        (WebCore::GraphicsContext3D::isErrorGeneratedOnOutOfBoundsAccesses):

2010-09-03  James Robinson  <jamesr@chromium.org>

        Reviewed by Darin Fisher.

        [chromium] Implement ImageBufferSkia::draw on the GPU when possible
        https://bugs.webkit.org/show_bug.cgi?id=45207

        When drawing from an ImageBuffer into a GraphicsContext, attempt to do the
        draw in hardware when possible.  This is how canvas 2d's drawImage(canvas, ...)
        is implemented.  Adds new API to DrawingBuffer to request a texture containing
        the DrawingBuffer's current rendering results.

        Test: covered fast/canvas/drawImage.html and all other tests that draw from one
        2d canvas into another.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawImage):
        * platform/graphics/chromium/DrawingBufferChromium.cpp:
        (WebCore::DrawingBuffer::getRenderingResultsAsTexture):
        * platform/graphics/gpu/DrawingBuffer.h:
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageBuffer::draw):

2010-09-03  James Robinson  <jamesr@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Null out Canvas2DLayerChromium's back reference to DrawingBuffer on destruction
        https://bugs.webkit.org/show_bug.cgi?id=45187

        Canvas2DLayerChromium keeps a back reference to a DrawingBuffer.  This has to be a raw pointer
        because the DrawingBuffer holds a RefPtr to the Canvas2DLayerChromium.  Since the layer can
        outlive the buffer, this back reference has to be explicitly cleared when the DrawingBuffer
        is destroyed.

        * platform/graphics/chromium/Canvas2DLayerChromium.cpp:
        (WebCore::Canvas2DLayerChromium::setDrawingBuffer):
        * platform/graphics/chromium/Canvas2DLayerChromium.h:
        * platform/graphics/chromium/DrawingBufferChromium.cpp:
        (WebCore::DrawingBuffer::~DrawingBuffer):

2010-09-03  Kenneth Russell  <kbr@google.com>

        Reviewed by Darin Fisher.

        Add interval tree capable of holding plain old data (POD)
        https://bugs.webkit.org/show_bug.cgi?id=45160

        Adding an interval tree currently capable of holding types which
        do not require their destructors to be called. POD is a slight
        misnomer which will be corrected soon, hopefully by removing this
        restriction.

        This class is based on the augmentable property of the red/black
        tree integrated under bug 45059.

        Unit tests for the PODIntervalTree will be integrated separately
        under bug 45161.

        * WebCore.gypi:
        * platform/graphics/gpu/PODInterval.h: Added.
        (WebCore::PODInterval::PODInterval):
        (WebCore::PODInterval::low):
        (WebCore::PODInterval::high):
        (WebCore::PODInterval::data):
        (WebCore::PODInterval::overlaps):
        (WebCore::PODInterval::operator<):
        (WebCore::PODInterval::operator==):
        (WebCore::PODInterval::maxHigh):
        (WebCore::PODInterval::setMaxHigh):
        (WebCore::PODInterval::toString):
        * platform/graphics/gpu/PODIntervalTree.h: Added.
        (WebCore::PODIntervalTree::PODIntervalTree):
        (WebCore::PODIntervalTree::allOverlaps):
        (WebCore::PODIntervalTree::createInterval):
        (WebCore::PODIntervalTree::checkInvariants):
        (WebCore::PODIntervalTree::init):
        (WebCore::PODIntervalTree::searchForOverlapsFrom):
        (WebCore::PODIntervalTree::updateNode):
        (WebCore::PODIntervalTree::checkInvariantsFromNode):
        (WebCore::valueToString):

2010-09-02  Vangelis Kokkevis  <vangelis@chromium.org>

        Reviewed by Darin Fisher.

        [chromium] Gracefully switch over to software compositing if the accelerated
        compositor fails to initialize. LayerRendererChromium::create() will now return 0
        if the GLES2Context passed to it is NULL or the LayerRendererChromium failed to initialize
        hardware rendering.
        https://bugs.webkit.org/show_bug.cgi?id=45124
        
        Tested by forcing the creation of the gles2 context to fail and loading pages that normally trigger
        the compositor.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::create):
        (WebCore::LayerRendererChromium::LayerRendererChromium):
        (WebCore::LayerRendererChromium::makeContextCurrent):

2010-09-03  Peter Kasting  <pkasting@google.com>

        Reviewed by Simon Fraser.

        Report correct (unzoomed) image sizes for zoomed images.
        https://bugs.webkit.org/show_bug.cgi?id=42089

        Test: fast/images/zoomed-img-size.html

        * css/CSSPrimitiveValue.cpp: Factor rounding code out to a templatized function so it can be shared.
        (WebCore::CSSPrimitiveValue::computeLengthInt):
        (WebCore::CSSPrimitiveValue::computeLengthIntForLength):
        (WebCore::CSSPrimitiveValue::computeLengthShort):
        * css/CSSPrimitiveValue.h: Factor rounding code out to a templatized function so it can be shared.
        (WebCore::roundForImpreciseConversion):
        * html/HTMLImageElement.cpp: Report unzoomed size to script that queries an image's width or height.
        (WebCore::HTMLImageElement::width):
        (WebCore::HTMLImageElement::height):
        * loader/ImageDocument.cpp: Report unzoomed size in the page title when viewing a standalone image.
        (WebCore::ImageDocumentParser::finish):
        * rendering/RenderObject.h: Use shared rounding code from CSSPrimitiveValue to compensate for inexactness in zoomed sizes.
        (WebCore::adjustForAbsoluteZoom):

2010-09-03  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r66770.
        http://trac.webkit.org/changeset/66770
        https://bugs.webkit.org/show_bug.cgi?id=45200

        Broke Windows in a way I can't figure out now to fix
        (Requested by abarth on #webkit).

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/generic/BindingDOMWindow.h:
        (WebCore::::completeURL):
        * bindings/generic/BindingFrame.h: Removed.
        * bindings/generic/BindingLocation.h: Removed.
        * bindings/generic/GenericBinding.h:
        * bindings/js/JSBinding.h: Removed.
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::shouldAllowNavigation):
        (WebCore::toLexicalFrame):
        (WebCore::toDynamicFrame):
        (WebCore::processingUserGesture):
        (WebCore::completeURL):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::navigateIfAllowed):
        (WebCore::JSLocation::replace):
        * bindings/js/specialization/JSBindingState.cpp: Removed.
        * bindings/js/specialization/JSBindingState.h: Removed.
        * bindings/v8/V8Binding.h:
        * bindings/v8/V8Utilities.cpp:
        (WebCore::completeURL):
        (WebCore::navigateIfAllowed):
        * bindings/v8/custom/V8LocationCustom.cpp:
        (WebCore::V8Location::replaceCallback):
        * bindings/v8/specialization/V8BindingState.cpp:
        * bindings/v8/specialization/V8BindingState.h:

2010-09-03  Jian Li  <jianli@chromium.org>

        Reviewed by Darin Adler.

        REGRESSION (r66452): Sending of multipart forms with files is broken.
        https://bugs.webkit.org/show_bug.cgi?id=45159

        * platform/network/FormData.cpp:
        (WebCore::FormData::appendKeyValuePairItems):

2010-09-03  Dominic Cooney  <dominicc@google.com>

        Reviewed by Adam Barth.

        Moves location.replace bindings logic into bindings/generic and
        instantiates it for JSC and V8.

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

        Covered by existing location.replace tests.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/generic/BindingDOMWindow.h:
        (WebCore::::createWindow):
        (WebCore::::open):
        * bindings/generic/BindingFrame.h: Added.
        (WebCore::::navigateIfAllowed):
        * bindings/generic/BindingLocation.h: Added.
        (WebCore::::replace):
        * bindings/generic/GenericBinding.h:
        (WebCore::completeURL):
        * bindings/js/JSBinding.h: Added.
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::shouldAllowNavigation):
        (WebCore::toLexicalFrame):
        (WebCore::toDynamicFrame):
        (WebCore::processingUserGesture):
        (WebCore::completeURL):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::navigateIfAllowed):
        (WebCore::JSLocation::replace):
        * bindings/js/specialization/JSBindingState.cpp: Added.
        (WebCore::::getActiveFrame):
        (WebCore::::getFirstFrame):
        (WebCore::::processingUserGesture):
        (WebCore::::allowsAccessFromFrame):
        * bindings/js/specialization/JSBindingState.h: Added.
        * bindings/v8/V8Binding.h:
        * bindings/v8/V8Utilities.cpp:
        (WebCore::completeURL):
        (WebCore::navigateIfAllowed):
        * bindings/v8/custom/V8LocationCustom.cpp:
        (WebCore::V8Location::replaceCallback):
        * bindings/v8/specialization/V8BindingState.cpp:
        (WebCore::::allowsAccessFromFrame):
        * bindings/v8/specialization/V8BindingState.h:

2010-09-03  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Tony Chang.

        [Chromium] Make sure that the width of the menu list is always constant under layout tests.
        https://bugs.webkit.org/show_bug.cgi?id=45196

        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore::menuListButtonWidth): Added.
        (WebCore::RenderThemeChromiumWin::paintMenuList): Use menuListButtonWidth instead of always
          querying system metrics.

2010-09-03  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r66732.
        http://trac.webkit.org/changeset/66732
        https://bugs.webkit.org/show_bug.cgi?id=45195

        the patch is not matched with general publish/subscribe scheme
        implemented in the Inspector API (Requested by loislo on
        #webkit).

        * inspector/CodeGeneratorInspector.pm:
        * inspector/Inspector.idl:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::pushChildNodesToFrontend):
        (WebCore::InspectorDOMAgent::getChildNodes):
        * inspector/InspectorDOMAgent.h:
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMAgent.prototype.getChildNodesAsync.mycallback):
        (WebInspector.DOMAgent.prototype.getChildNodesAsync):
        * inspector/front-end/WorkersSidebarPane.js:
        (WebInspector.WorkersSidebarPane.prototype.reset):

2010-09-03  James Robinson  <jamesr@chromium.org>

        [chromium] Compile fixes for 66746

        * platform/graphics/gpu/SharedGraphicsContext3D.cpp:
        (WebCore::SharedGraphicsContext3D::texImage2D):
        (WebCore::SharedGraphicsContext3D::texSubImage2D):

2010-09-03  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Add AudioParam files
        https://bugs.webkit.org/show_bug.cgi?id=44995

        No new tests since audio API is not yet implemented.

        * webaudio: Added.
        * webaudio/AudioParam.h: Added.
        (WebCore::AudioParam::create):
        (WebCore::AudioParam::AudioParam):
        (WebCore::AudioParam::value):
        (WebCore::AudioParam::setValue):
        (WebCore::AudioParam::name):
        (WebCore::AudioParam::minValue):
        (WebCore::AudioParam::maxValue):
        (WebCore::AudioParam::defaultValue):
        (WebCore::AudioParam::units):
        (WebCore::AudioParam::smoothedValue):
        (WebCore::AudioParam::smooth):
        (WebCore::AudioParam::resetSmoothedValue):
        (WebCore::AudioParam::setSmoothingConstant):
        * webaudio/AudioParam.idl: Added.

2010-09-03  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        audio engine: add AudioChannel files
        https://bugs.webkit.org/show_bug.cgi?id=44921

        No new tests since audio API is not yet implemented.

        * platform/audio/AudioChannel.cpp: Added.
        (WebCore::AudioChannel::scale):
        (WebCore::AudioChannel::copyFrom):
        (WebCore::AudioChannel::copyFromRange):
        (WebCore::AudioChannel::sumFrom):
        (WebCore::AudioChannel::maxAbsValue):
        * platform/audio/AudioChannel.h: Added.
        (WebCore::AudioChannel::AudioChannel):
        (WebCore::AudioChannel::set):
        (WebCore::AudioChannel::length):
        (WebCore::AudioChannel::data):
        (WebCore::AudioChannel::zero):

2010-09-03  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Adam Roben.

        [WINCE] Remove usage of ce_textcodecs.h
        https://bugs.webkit.org/show_bug.cgi?id=45169

        ce_textcodecs.h was a non public header for (not required)
        additonal codecs in the original Torch Mobile port.

        * platform/text/wince/TextCodecWinCE.cpp:
        (WebCore::LanguageManager::LanguageManager):
        (WebCore::decode):

2010-09-03  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Initial patch for audio engine: AudioBus and helper classes
        https://bugs.webkit.org/show_bug.cgi?id=34452

        No new tests since audio API is not yet implemented.

        * platform/audio/AudioBus.cpp: Added.
        (WebCore::AudioBus::AudioBus):
        (WebCore::AudioBus::setChannelMemory):
        (WebCore::AudioBus::zero):
        (WebCore::AudioBus::channelByType):
        (WebCore::AudioBus::topologyMatches):
        (WebCore::AudioBus::createBufferFromRange):
        (WebCore::AudioBus::maxAbsValue):
        (WebCore::AudioBus::normalize):
        (WebCore::AudioBus::scale):
        (WebCore::AudioBus::copyFrom):
        (WebCore::AudioBus::sumFrom):
        (WebCore::AudioBus::processWithGainFromMonoStereo):
        (WebCore::AudioBus::processWithGainFrom):
        (WebCore::AudioBus::copyWithGainFrom):
        (WebCore::AudioBus::sumWithGainFrom):
        * platform/audio/AudioBus.h: Added.
        (WebCore::AudioBus::numberOfChannels):
        (WebCore::AudioBus::channel):
        (WebCore::AudioBus::length):
        (WebCore::AudioBus::sampleRate):
        (WebCore::AudioBus::setSampleRate):
        (WebCore::AudioBus::setGain):
        (WebCore::AudioBus::gain):
        (WebCore::AudioBus::reset):
        (WebCore::AudioBus::AudioBus):
        * platform/audio/AudioSourceProvider.h: Added.
        (WebCore::AudioSourceProvider::~AudioSourceProvider):

2010-09-03  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Add Panner files
        https://bugs.webkit.org/show_bug.cgi?id=45076

        No new tests since audio API is not yet implemented.

        * platform/audio/Panner.cpp: Added.
        (WebCore::Panner::create):
        * platform/audio/Panner.h: Added.
        (WebCore::Panner::~Panner):
        (WebCore::Panner::panningModel):
        (WebCore::Panner::Panner):

2010-09-03  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Add AudioListener files
        https://bugs.webkit.org/show_bug.cgi?id=45006

        No new tests since audio API is not yet implemented.

        * webaudio: Added.
        * webaudio/AudioListener.cpp: Added.
        (WebCore::AudioListener::AudioListener):
        * webaudio/AudioListener.h: Added.
        (WebCore::AudioListener::create):
        (WebCore::AudioListener::setPosition):
        (WebCore::AudioListener::position):
        (WebCore::AudioListener::setOrientation):
        (WebCore::AudioListener::orientation):
        (WebCore::AudioListener::setUpVector):
        (WebCore::AudioListener::upVector):
        (WebCore::AudioListener::setVelocity):
        (WebCore::AudioListener::velocity):
        (WebCore::AudioListener::setDopplerFactor):
        (WebCore::AudioListener::dopplerFactor):
        (WebCore::AudioListener::setSpeedOfSound):
        (WebCore::AudioListener::speedOfSound):
        * webaudio/AudioListener.idl: Added.

2010-09-03  Chris Rogers  <crogers@google.com>

        Unreviewed

        Add WebCore/webaudio and WebCore/platform/audio/mac directories in preparation for landing reviewed patches
        https://bugs.webkit.org/show_bug.cgi?id=45185

        * platform/audio/mac: Added.
        * webaudio: Added.

2010-09-03  James Robinson  <jamesr@chromium.org>

        Reviewed by Chris Marrin.

        Multiple accelerated 2D canvases should be able to use the same GraphicsContext3D
        https://bugs.webkit.org/show_bug.cgi?id=44926

        This allows many accelerated 2d canvases to render using a single underlying GraphicsContext3D.
        It introduces a new class SharedGraphicsContext3D that manages several callers.  This class could
        also cache the current state to avoid issuing redundant calls, although in this first cut it doesn't.
        The SharedGraphicsContext3D is provided through the ChromeClient so that its lifetime can be tied to that
        of the platform-specific compositor infrastructure.

        Accelerated 2d canvases maintain a reference to a SharedGraphicsContext3D and have ownership of a CanvasFramebuffer,
        which represents the canvas's rendering target.  The compositing layer for an accelerated 2d canvas is
        aware only of the canvas's CanvasFramebuffer.  This means that WebGL and 2d canvases are no longer treated
        as the same time of layer by the compositor.

        Covered by existing canvas tests.

        * WebCore.gypi:
        * html/canvas/CanvasRenderingContext.cpp:
        * html/canvas/CanvasRenderingContext.h:
        (WebCore::CanvasRenderingContext::paintsIntoCanvasBuffer):
        (WebCore::CanvasRenderingContext::platformLayer):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::CanvasRenderingContext2D):
        (WebCore::CanvasRenderingContext2D::paintsIntoCanvasBuffer):
        (WebCore::CanvasRenderingContext2D::reset):
        (WebCore::CanvasRenderingContext2D::didDraw):
        (WebCore::CanvasRenderingContext2D::platformLayer):
        * html/canvas/CanvasRenderingContext2D.h:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::paintsIntoCanvasBuffer):
        * html/canvas/WebGLRenderingContext.h:
        (WebCore::WebGLRenderingContext::graphicsContext3D):
        (WebCore::WebGLRenderingContext::platformLayer):
        * loader/EmptyClients.h:
        (WebCore::EmptyChromeClient::attachRootGraphicsLayer):
        (WebCore::EmptyChromeClient::setNeedsOneShotDrawingSynchronization):
        (WebCore::EmptyChromeClient::scheduleCompositingLayerSync):
        * page/ChromeClient.h:
        (WebCore::ChromeClient::getSharedGraphicsContext3D):
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::setSharedGraphicsContext3D):
        (WebCore::GraphicsContext::syncSoftwareCanvas):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/chromium/Canvas2DLayerChromium.cpp: Added.
        (WebCore::Canvas2DLayerChromium::create):
        (WebCore::Canvas2DLayerChromium::Canvas2DLayerChromium):
        (WebCore::Canvas2DLayerChromium::~Canvas2DLayerChromium):
        (WebCore::Canvas2DLayerChromium::updateContents):
        (WebCore::Canvas2DLayerChromium::setTextureChanged):
        (WebCore::Canvas2DLayerChromium::textureId):
        * platform/graphics/chromium/Canvas2DLayerChromium.h: Added.
        (WebCore::Canvas2DLayerChromium::drawsContent):
        * platform/graphics/chromium/CanvasLayerChromium.cpp:
        (WebCore::CanvasLayerChromium::CanvasLayerChromium):
        (WebCore::CanvasLayerChromium::~CanvasLayerChromium):
        (WebCore::CanvasLayerChromium::draw):
        * platform/graphics/chromium/CanvasLayerChromium.h:
        * platform/graphics/chromium/DrawingBufferChromium.cpp: Added.
        (WebCore::generateColorTexture):
        (WebCore::DrawingBuffer::DrawingBuffer):
        (WebCore::DrawingBuffer::~DrawingBuffer):
        (WebCore::DrawingBuffer::publishToPlatformLayer):
        (WebCore::DrawingBuffer::reset):
        (WebCore::DrawingBuffer::platformLayer):
        * platform/graphics/chromium/GLES2Canvas.cpp:
        (WebCore::GLES2Canvas::GLES2Canvas):
        (WebCore::GLES2Canvas::~GLES2Canvas):
        (WebCore::GLES2Canvas::bindFramebuffer):
        (WebCore::GLES2Canvas::clearRect):
        (WebCore::GLES2Canvas::fillRect):
        (WebCore::GLES2Canvas::drawTexturedRect):
        (WebCore::GLES2Canvas::drawTexturedRectTile):
        (WebCore::GLES2Canvas::drawQuad):
        (WebCore::GLES2Canvas::createTexture):
        (WebCore::GLES2Canvas::getTexture):
        * platform/graphics/chromium/GLES2Canvas.h:
        (WebCore::GLES2Canvas::context):
        (WebCore::GLES2Canvas::drawingBuffer):
        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::setContentsToCanvas):
        * platform/graphics/chromium/GraphicsLayerChromium.h:
        * platform/graphics/chromium/WebGLLayerChromium.cpp: Added.
        (WebCore::WebGLLayerChromium::create):
        (WebCore::WebGLLayerChromium::WebGLLayerChromium):
        (WebCore::WebGLLayerChromium::updateContents):
        (WebCore::WebGLLayerChromium::setContext):
        * platform/graphics/chromium/WebGLLayerChromium.h: Added.
        (WebCore::WebGLLayerChromium::drawsContent):
        * platform/graphics/gpu/DrawingBuffer.cpp: Added.
        (WebCore::DrawingBuffer::create):
        (WebCore::DrawingBuffer::bind):
        (WebCore::DrawingBuffer::setWillPublishCallback):
        * platform/graphics/gpu/DrawingBuffer.h: Added.
        (WebCore::DrawingBuffer::size):
        * platform/graphics/gpu/SharedGraphicsContext3D.cpp: Added.
        (WebCore::SharedGraphicsContext3D::create):
        (WebCore::SharedGraphicsContext3D::SharedGraphicsContext3D):
        (WebCore::SharedGraphicsContext3D::~SharedGraphicsContext3D):
        (WebCore::SharedGraphicsContext3D::makeContextCurrent):
        (WebCore::SharedGraphicsContext3D::scissor):
        (WebCore::SharedGraphicsContext3D::enable):
        (WebCore::SharedGraphicsContext3D::disable):
        (WebCore::SharedGraphicsContext3D::clearColor):
        (WebCore::SharedGraphicsContext3D::clear):
        (WebCore::SharedGraphicsContext3D::drawArrays):
        (WebCore::SharedGraphicsContext3D::getError):
        (WebCore::SharedGraphicsContext3D::getIntegerv):
        (WebCore::SharedGraphicsContext3D::createFramebuffer):
        (WebCore::SharedGraphicsContext3D::createTexture):
        (WebCore::SharedGraphicsContext3D::deleteFramebuffer):
        (WebCore::SharedGraphicsContext3D::deleteTexture):
        (WebCore::SharedGraphicsContext3D::framebufferTexture2D):
        (WebCore::SharedGraphicsContext3D::texParameteri):
        (WebCore::SharedGraphicsContext3D::texImage2D):
        (WebCore::SharedGraphicsContext3D::texSubImage2D):
        (WebCore::SharedGraphicsContext3D::readPixels):
        (WebCore::SharedGraphicsContext3D::supportsBGRA):
        (WebCore::SharedGraphicsContext3D::getTexture):
        (WebCore::SharedGraphicsContext3D::applyCompositeOperator):
        (WebCore::SharedGraphicsContext3D::useQuadVertices):
        (WebCore::SharedGraphicsContext3D::setActiveTexture):
        (WebCore::SharedGraphicsContext3D::bindTexture):
        (WebCore::SharedGraphicsContext3D::useFillSolidProgram):
        (WebCore::SharedGraphicsContext3D::useTextureProgram):
        (WebCore::SharedGraphicsContext3D::bindFramebuffer):
        (WebCore::SharedGraphicsContext3D::setViewport):
        (WebCore::SharedGraphicsContext3D::paintsIntoCanvasBuffer):
        * platform/graphics/gpu/SharedGraphicsContext3D.h: Added.
        * platform/graphics/gpu/Texture.cpp:
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::syncSoftwareCanvas):
        (WebCore::GraphicsContext::setSharedGraphicsContext3D):
        * platform/graphics/skia/ImageSkia.cpp:
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::~PlatformContextSkia):
        (WebCore::WillPublishCallbackImpl::create):
        (WebCore::WillPublishCallbackImpl::willPublish):
        (WebCore::WillPublishCallbackImpl::WillPublishCallbackImpl):
        (WebCore::PlatformContextSkia::setSharedGraphicsContext3D):
        (WebCore::PlatformContextSkia::uploadSoftwareToHardware):
        (WebCore::PlatformContextSkia::readbackHardwareToSoftware):
        * platform/graphics/skia/PlatformContextSkia.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerConfiguration):

2010-09-03  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Add audio distance effect files
        https://bugs.webkit.org/show_bug.cgi?id=44705

        No new tests since audio API is not yet implemented.

        * platform/audio/Distance.cpp: Added.
        (WebCore::DistanceEffect::DistanceEffect):
        (WebCore::DistanceEffect::gain):
        (WebCore::DistanceEffect::linearGain):
        (WebCore::DistanceEffect::inverseGain):
        (WebCore::DistanceEffect::exponentialGain):
        * platform/audio/Distance.h: Added.
        (WebCore::DistanceEffect::model):
        (WebCore::DistanceEffect::setModel):
        (WebCore::DistanceEffect::setRefDistance):
        (WebCore::DistanceEffect::setMaxDistance):
        (WebCore::DistanceEffect::setRolloffFactor):
        (WebCore::DistanceEffect::refDistance):
        (WebCore::DistanceEffect::maxDistance):
        (WebCore::DistanceEffect::rolloffFactor):

2010-09-03  Johnny Ding  <jnd@chromium.org>

        Reviewed by Adam Barth.

        Save the gesture state to track the user gesture state across async form submission.
        https://bugs.webkit.org/show_bug.cgi?id=44969

        fast/events/popup-blocked-to-post-blank.html can cover the test in WebKit.
        A UI test will be added in chromium to address chromium's bug.

        * loader/RedirectScheduler.cpp:
        (WebCore::ScheduledFormSubmission::ScheduledFormSubmission):
        (WebCore::ScheduledFormSubmission::fire):
        (WebCore::RedirectScheduler::scheduleFormSubmission):

2010-09-03  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        <rdar://problem/8392655> REGRESSION (r57215): Decomposed diacritics render incorrectly when preceded by stacked diacritics
        https://bugs.webkit.org/show_bug.cgi?id=45182

        Test: fast/text/decomposed-after-stacked-diacritics.html

        * platform/graphics/Font.cpp:
        (WebCore::Font::codePath): Do not bail out if the run contains stacked diacritics, since
        it may also contain characters that require the complex text code path.

2010-09-03  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Cleanup after r66117 - extract heap snapshot
        view styles into a dedicated .css

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

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/heapProfiler.css: Added.
        (.heap-snapshot-sidebar-tree-item .icon):
        (.heap-snapshot-sidebar-tree-item.small .icon):
        (.heap-snapshot-view):
        (.heap-snapshot-view.visible):
        (.heap-snapshot-view .data-grid):
        (.heap-snapshot-view .data-grid th.count-column):
        (.heap-snapshot-view .data-grid td.count-column):
        (.heap-snapshot-view .data-grid th.size-column):
        (.heap-snapshot-view .data-grid td.size-column):
        (.heap-snapshot-view .data-grid th.countDelta-column):
        (.heap-snapshot-view .data-grid td.countDelta-column):
        (.heap-snapshot-view .data-grid th.sizeDelta-column):
        (.heap-snapshot-view .data-grid td.sizeDelta-column):
        (#heap-snapshot-summary-container):
        (.heap-snapshot-summary):
        (.heap-snapshot-summary canvas.summary-graph):
        (.heap-snapshot-summary-label):
        * inspector/front-end/inspector.css:
        * inspector/front-end/inspector.html:

2010-09-03  Zaheer Ahmad <zaheer.mot@gmail.com>

        Reviewed by Darin Adler.

        [GTK] compilation issue with JSTimeRanges when video turned off
        https://bugs.webkit.org/show_bug.cgi?id=44249

        Move the JSTimeRanges outside ENABLE_VIDEO in GNUMakefile.am
        * WebCore/GNUMakefile.am

2010-09-03  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: cleanup inspector api. getChildNodes should return array of child nodes as an output value.

        The current implementation of the inspector api has some unnecessary complexity. 
        As example WebInspector is requesting child nodes of a node by getChildNodes
        but DOM agent is actually pushing the child nodes via setChildNodes event call and
        send back an empty response message.

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

        * inspector/CodeGeneratorInspector.pm:
        * inspector/Inspector.idl:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::getChildNodesArray):
        (WebCore::InspectorDOMAgent::pushChildNodesToFrontend):
        (WebCore::InspectorDOMAgent::getChildNodes):
        * inspector/InspectorDOMAgent.h:
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMAgent.prototype.getChildNodesAsync.mycallback):
        (WebInspector.DOMAgent.prototype.getChildNodesAsync):
        * inspector/front-end/WorkersSidebarPane.js:
        (WebInspector.WorkersSidebarPane.prototype.reset):

2010-09-03  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        SVG atlas map slider doesn't work properly
        https://bugs.webkit.org/show_bug.cgi?id=45107

        SVG 1.1 2nd edition relaxes hit testing rules. The outermost <svg> should react
        to mouse events, in standalone and compound documents, if the mouse location is
        within the intrinsic boundaries of the <svg> element.

        Tests: svg/custom/mouse-move-on-svg-container-standalone.svg
               svg/custom/mouse-move-on-svg-container.xhtml
               svg/custom/mouse-move-on-svg-root-standalone.svg
               svg/custom/mouse-move-on-svg-root.xhtml

        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::nodeAtPoint):

2010-09-03  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: provide more information to front-end when breaking on DOM event
        https://bugs.webkit.org/show_bug.cgi?id=44679

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::insertBefore):
        (WebCore::ContainerNode::parserInsertBefore):
        (WebCore::ContainerNode::replaceChild):
        (WebCore::ContainerNode::appendChild):
        (WebCore::ContainerNode::parserAddChild):
        (WebCore::notifyChildInserted):
        (WebCore::dispatchChildRemovalEvents):
        * dom/Element.cpp:
        (WebCore::Element::setAttribute):
        (WebCore::Element::removeAttribute):
        * inspector/Inspector.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::willInsertDOMNodeImpl):
        (WebCore::InspectorController::didInsertDOMNodeImpl):
        (WebCore::InspectorController::willRemoveDOMNodeImpl):
        (WebCore::InspectorController::didRemoveDOMNodeImpl):
        (WebCore::InspectorController::willModifyDOMAttrImpl):
        (WebCore::InspectorController::didModifyDOMAttrImpl):
        * inspector/InspectorController.h:
        (WebCore::InspectorController::willInsertDOMNode):
        (WebCore::InspectorController::didInsertDOMNode):
        (WebCore::InspectorController::willRemoveDOMNode):
        (WebCore::InspectorController::willModifyDOMAttr):
        (WebCore::InspectorController::didModifyDOMAttr):
        (WebCore::InspectorController::inspectorControllerForNode):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::~InspectorDOMAgent):
        (WebCore::InspectorDOMAgent::shouldBreakOnNodeInsertion):
        (WebCore::InspectorDOMAgent::shouldBreakOnNodeRemoval):
        (WebCore::InspectorDOMAgent::shouldBreakOnAttributeModification):
        (WebCore::InspectorDOMAgent::didInsertDOMNode):
        (WebCore::InspectorDOMAgent::didRemoveDOMNode):
        (WebCore::InspectorDOMAgent::didModifyDOMAttr):
        (WebCore::InspectorDOMAgent::createBreakpoint):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::InspectorDebuggerAgent):
        (WebCore::InspectorDebuggerAgent::~InspectorDebuggerAgent):
        (WebCore::InspectorDebuggerAgent::didPause):
        (WebCore::InspectorDebuggerAgent::breakProgram):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorValues.h:
        (WebCore::InspectorValue::isNull):
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.BreakpointItem):
        (WebInspector.BreakpointItem.prototype._enableChanged):
        * inspector/front-end/Script.js:
        (WebInspector.Script.prototype.get linesCount):
        * inspector/front-end/inspector.js:
        (WebInspector.pausedScript):

2010-08-31  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Steve Block.

        IDBCursor.continue() should reuse the .openCursor's IDBRequest object
        https://bugs.webkit.org/show_bug.cgi?id=44953

        This is to match the spec. This requires a modification to IDBRequest so
        that multiple events can be queued up.

        Note that the initial state for IDBRequest was removed from the spec.

        Test: modified existing test to verify new behavior.

        * storage/IDBAny.cpp:
        (WebCore::IDBAny::createInvalid):
        (WebCore::IDBAny::createNull):
        (WebCore::IDBAny::setNull):
        * storage/IDBAny.h:
        (WebCore::IDBAny::create):
        * storage/IDBCursor.cpp:
        (WebCore::IDBCursor::IDBCursor):
        (WebCore::IDBCursor::continueFunction):
        * storage/IDBCursor.h:
        (WebCore::IDBCursor::create):
        * storage/IDBCursor.idl:
        * storage/IDBRequest.cpp:
        (WebCore::IDBRequest::IDBRequest):
        (WebCore::IDBRequest::~IDBRequest):
        (WebCore::IDBRequest::resetReadyState):
        (WebCore::IDBRequest::onError):
        (WebCore::IDBRequest::onSuccess):
        (WebCore::IDBRequest::abort):
        (WebCore::IDBRequest::timerFired):
        (WebCore::IDBRequest::scheduleEvent):
        * storage/IDBRequest.h:
        * storage/IDBRequest.idl:

2010-09-03  Bharathwaaj Srinivasan  <bharathwaaj.s@gmail.com>

        Reviewed by Xan Lopez.

        Initialize keyboard events before passing plugins.
        https://bugs.webkit.org/show_bug.cgi?id=44771

        No new tests needed since this is a trivial fix.

        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::handleKeyboardEvent):

2010-09-03  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Fix Qt compilation.

        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::parametersForPlugin):

2010-09-03  Hironori Bono  <hbono@chromium.org>

        Reviewed by Kent Tamura.

        Adds textInputController.hasSpellingMarker() to avoid using pixel tests for spellchecking tests
        and implements it for Mac.
        https://bugs.webkit.org/show_bug.cgi?id=41832

        Tests: editing/spelling/spelling-contenteditable.html
               editing/spelling/spelling-textarea.html

        * WebCore.exp.in: Exported symbols used by [WebFrame hasSpellingMarker:length:].

2010-09-02  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        REGRESSION: Crash occurs at objc_msgSend when closing a window that is displaying the web inspector
        https://bugs.webkit.org/show_bug.cgi?id=44230

        * inspector/Inspector.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::inspectedPageDestroyed):
        (WebCore::InspectorController::close):
        * inspector/InspectorFrontendClient.h:
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::disconnectFromBackend): don't try to notify InspectorController
        that frontend closes if InspectorController triggered the action.
        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorFrontendHost.idl:
        * inspector/front-end/InspectorFrontendHostStub.js:
        (.WebInspector.InspectorFrontendHostStub.prototype.disconnectFromBackend):
        * inspector/front-end/inspector.js:
        (WebInspector.disconnectFromBackend):

2010-09-03  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed-by Simon Hausmann.

        Passing a 32-bit depth X pixmap to NPAPI windowless plugins is too inefficient. 
        Instead, pass a X Pixmap that has same depth as the screen depth since graphics 
        operations are optimized for this depth.

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

        * plugins/PluginPackage.cpp:
        (WebCore::PluginPackage::determineQuirks):

2010-09-02  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Kent Tamura.

        Add ENABLE(DATABASE) guard to DatabaseAuthorizer.cpp
        https://bugs.webkit.org/show_bug.cgi?id=45152

        DatabaseAuthorizer is used only with ENABLE(DATABASE).

        * storage/DatabaseAuthorizer.cpp:

2010-09-02  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: persist DOM breakpoints between page reloads
        https://bugs.webkit.org/show_bug.cgi?id=44837

        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.DOMBreakpointItem):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode.prototype.path):
        (WebInspector.DOMNode.prototype.setBreakpoint):
        (WebInspector.DOMNode.prototype.hasBreakpoint):
        (WebInspector.DOMNode.prototype.removeBreakpoint):
        (WebInspector.DOMNode.prototype.removeBreakpoints):
        (WebInspector.DOMAgent.prototype._setDocument):
        (WebInspector.DOMAgent.prototype._childNodeRemoved):
        (WebInspector.DOMAgent.prototype._removeBreakpoints):
        (WebInspector.DOMBreakpointManager):
        (WebInspector.DOMBreakpointManager.prototype.setBreakpoint):
        (WebInspector.DOMBreakpointManager.prototype.removeBreakpointsForNode):
        (WebInspector.DOMBreakpointManager.prototype._breakpointRemoved):
        (WebInspector.DOMBreakpointManager.prototype.restoreBreakpoints.restoreBreakpointsForNode):
        (WebInspector.DOMBreakpointManager.prototype.restoreBreakpoints):
        (WebInspector.DOMBreakpoint):
        (WebInspector.DOMBreakpoint.prototype.get nodeId):
        (WebInspector.DOMBreakpoint.prototype.get type):
        (WebInspector.DOMBreakpoint.prototype.set enabled):
        (WebInspector.DOMBreakpoint.prototype.remove):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.reset):
        (WebInspector.ElementsPanel.prototype.setDocument):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype._populateTagContextMenu):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._showPopup.showObjectPopup):

2010-09-02  Eric Seidel  <eric@webkit.org>

        Reviewed by Dimitri Glazkov.

        Move updateWidget into FrameView from RenderEmbeddedObject
        https://bugs.webkit.org/show_bug.cgi?id=45065

        I also made updateWidget() virtual on HTMLPlugInImageElement.
        I'm not yet sure that updateWidget belongs on HTMLElement since
        I'm not sure that HTMLMediaElement's use of the updateWidget
        infrastructure is correct.

        I also got rid of the strange !m_replacementText.isEmpty() checks
        by making a pluginCrashedOrWasMissing() call which seems to embody
        the idea behind that check and hides the screwy details.

        I noticed a couple methods on HTMLPlugInImageElement were public
        which did not need to be.  Fixed.

        No functional change, thus no tests.

        * html/HTMLEmbedElement.h:
        * html/HTMLObjectElement.h:
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::updateWidgetIfNecessary):
        * html/HTMLPlugInImageElement.h:
        (WebCore::HTMLPlugInImageElement::serviceType):
        (WebCore::HTMLPlugInImageElement::url):
        * page/FrameView.cpp:
        (WebCore::FrameView::updateWidget):
        (WebCore::FrameView::updateWidgets):
        * page/FrameView.h:
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::pluginCrashedOrWasMissing):
        (WebCore::RenderEmbeddedObject::paint):
        (WebCore::RenderEmbeddedObject::paintReplaced):
        * rendering/RenderEmbeddedObject.h:

2010-09-02  Eric Seidel  <eric@webkit.org>

        Reviewed by Dimitri Glazkov.

        Move updateWidget implementations into the DOM
        https://bugs.webkit.org/show_bug.cgi?id=45058

        Unfortunately it's not yet possible to share an updateWidget
        implementation between <embed> and <object>.  That would amount to
        (positive) functional changes for <embed> which I'd will separate
        into a later patch.  I will also have to untangle <object>'s <param>
        walk from its url/serviceType calculations.

        However after this patch it's slap-you-across-the-face obvious that
        RenderEmbeddedObject::updateWidget was the wrong place for this code.
        RenderEmbeddedObject::updateWidget still exists, but only as a
        pseudo-virtual-method dispatcher.  Unless we add updateWidget() to
        HTMLElement, we won't be able to use real virtual dispatch.

        I may need to consider making "having a widget" a has-a relationship
        with some sort of WidgetContainer object which Media and Plugin can
        share.  Or its also possible that Media's use of the widget code here
        is just wrong.  Certainly now that updateWidget was moved into HTMLMediaElement
        it becomes obvious that HTMLMediaElement has duplicate code for updating widgets.

        No functional changes, thus no tests.

        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::updateWidget):
        * html/HTMLEmbedElement.h:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::updateWidget):
        * html/HTMLMediaElement.h:
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::updateWidget):
        * html/HTMLObjectElement.h:
        (WebCore::HTMLObjectElement::useFallbackContent):
        * html/HTMLPlugInImageElement.h:
        (WebCore::HTMLPlugInImageElement::needsWidgetUpdate):
        (WebCore::HTMLPlugInImageElement::setNeedsWidgetUpdate):
        * loader/FrameLoader.cpp:
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::updateWidget):

2010-09-02  Eric Seidel  <eric@webkit.org>

        Reviewed by Dimitri Glazkov.

        Move more code from RenderEmbeddedObject into the DOM
        https://bugs.webkit.org/show_bug.cgi?id=45055

        No logic changes here, just taking the code which
        I ripped out of RenderEmbeddedObject::updateWidget
        into static methods before and moving it into
        the applicable DOM classes.

        HTMLObjectElement::parametersForPlugin does too much
        but in order to fix it I may need to add a PluginParameters
        class so we can ask things about the parameters. <object>
        needs to get multiple bits of information out of its parameters
        array.  Right now it does it all in one walk.  In order to share
        code with HTMLEmbedElement, we need the "generate the params array"
        code to be separate from the "make advanced <object> specific decision
        from the params array".  But that will need to be in a later patch.

        No functional changes, thus no tests.

        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::parametersForPlugin):
        * html/HTMLEmbedElement.h:
        * html/HTMLObjectElement.cpp:
        (WebCore::createClassIdToTypeMap):
        (WebCore::serviceTypeForClassId):
        (WebCore::mapDataParamToSrc):
        (WebCore::HTMLObjectElement::parametersForPlugin):
        (WebCore::HTMLObjectElement::hasFallbackContent):
        * html/HTMLObjectElement.h:
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::allowedToLoadFrameURL):
        (WebCore::HTMLPlugInImageElement::wouldLoadAsNetscapePlugin):
        (WebCore::HTMLPlugInImageElement::detach): 
        (WebCore::HTMLPlugInImageElement::updateWidgetIfNecessary):
        (WebCore::HTMLPlugInImageElement::updateWidgetCallback):
        * html/HTMLPlugInImageElement.h:
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::updateWidgetForObjectElement):
        (WebCore::updateWidgetForEmbedElement):
        (WebCore::RenderEmbeddedObject::updateWidget):

2010-09-02  François Sausset  <sausset@gmail.com>

        Reviewed by Darin Adler.

        MathML mo element should render "hyphen-minus" as "minus sign" (Unicode glyph names).
        https://bugs.webkit.org/show_bug.cgi?id=43629

        Test: mathml/presentation/mo.xhtml

        * mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::RenderMathMLOperator):
        (WebCore::RenderMathMLOperator::updateFromElement):
        * mathml/RenderMathMLOperator.h:
        (WebCore::convertHyphenMinusToMinusSign):
        * platform/text/CharacterNames.h:

2010-09-02  Kenneth Russell  <kbr@google.com>

        Reviewed by Darin Fisher.

        Add red-black tree capable of holding plain old data (POD)
        https://bugs.webkit.org/show_bug.cgi?id=45059

        Adding an augmentable red-black tree capable of holding Plain Old
        Data (POD), or classes bottoming out into only POD, and an
        associated PODArena. Note that the PODArena will be used by other
        classes to allocate temporary structures, which is why it is not
        just an implementation detail of the red-black tree.

        These classes are being placed under WebCore/platform/graphics/gpu
        for the time being. If they are generalized to hold even data
        types which internally perform dynamic memory allocation, we may
        consider moving them to WTF in the future.

        Unit tests for the PODRedBlackTree will be integrated separately
        under bug 45060.

        * WebCore.gypi:
        * platform/graphics/gpu/PODArena.h: Added.
        (WebCore::PODArena::Allocator::~Allocator):
        (WebCore::PODArena::FastMallocAllocator::create):
        (WebCore::PODArena::FastMallocAllocator::allocate):
        (WebCore::PODArena::FastMallocAllocator::free):
        (WebCore::PODArena::FastMallocAllocator::FastMallocAllocator):
        (WebCore::PODArena::create):
        (WebCore::PODArena::allocateObject):
        (WebCore::PODArena::~PODArena):
        (WebCore::PODArena::PODArena):
        (WebCore::PODArena::minAlignment):
        (WebCore::PODArena::roundUp):
        (WebCore::PODArena::Chunk::Chunk):
        (WebCore::PODArena::Chunk::~Chunk):
        (WebCore::PODArena::Chunk::allocate):
        * platform/graphics/gpu/PODRedBlackTree.h: Added.
        (WebCore::PODRedBlackTree::Visitor::~Visitor):
        (WebCore::PODRedBlackTree::PODRedBlackTree):
        (WebCore::PODRedBlackTree::~PODRedBlackTree):
        (WebCore::PODRedBlackTree::add):
        (WebCore::PODRedBlackTree::remove):
        (WebCore::PODRedBlackTree::contains):
        (WebCore::PODRedBlackTree::visitInorder):
        (WebCore::PODRedBlackTree::size):
        (WebCore::PODRedBlackTree::setNeedsFullOrderingComparisons):
        (WebCore::PODRedBlackTree::checkInvariants):
        (WebCore::PODRedBlackTree::dump):
        (WebCore::PODRedBlackTree::setVerboseDebugging):
        (WebCore::PODRedBlackTree::Node::Node):
        (WebCore::PODRedBlackTree::Node::~Node):
        (WebCore::PODRedBlackTree::Node::color):
        (WebCore::PODRedBlackTree::Node::setColor):
        (WebCore::PODRedBlackTree::Node::data):
        (WebCore::PODRedBlackTree::Node::copyFrom):
        (WebCore::PODRedBlackTree::Node::left):
        (WebCore::PODRedBlackTree::Node::setLeft):
        (WebCore::PODRedBlackTree::Node::right):
        (WebCore::PODRedBlackTree::Node::setRight):
        (WebCore::PODRedBlackTree::Node::parent):
        (WebCore::PODRedBlackTree::Node::setParent):
        (WebCore::PODRedBlackTree::root):
        (WebCore::PODRedBlackTree::updateNode):
        (WebCore::PODRedBlackTree::treeSearch):
        (WebCore::PODRedBlackTree::treeSearchNormal):
        (WebCore::PODRedBlackTree::treeSearchFullComparisons):
        (WebCore::PODRedBlackTree::treeInsert):
        (WebCore::PODRedBlackTree::treeSuccessor):
        (WebCore::PODRedBlackTree::treeMinimum):
        (WebCore::PODRedBlackTree::propagateUpdates):
        (WebCore::PODRedBlackTree::leftRotate):
        (WebCore::PODRedBlackTree::rightRotate):
        (WebCore::PODRedBlackTree::insertNode):
        (WebCore::PODRedBlackTree::deleteFixup):
        (WebCore::PODRedBlackTree::deleteNode):
        (WebCore::PODRedBlackTree::visitInorderImpl):
        (WebCore::PODRedBlackTree::Counter::Counter):
        (WebCore::PODRedBlackTree::Counter::visit):
        (WebCore::PODRedBlackTree::Counter::count):
        (WebCore::PODRedBlackTree::checkInvariantsFromNode):
        (WebCore::PODRedBlackTree::logIfVerbose):
        (WebCore::PODRedBlackTree::dumpFromNode):

2010-09-02  Rafael Antognolli  <antognolli@profusion.mobi>

        Reviewed by Martin Robinson.

        [Cairo] Remove glib dependency (caused by use of GOwnPtr)
        https://bugs.webkit.org/show_bug.cgi?id=45053

        Use OwnPtr instead of GOwnPtr to keep track of Fc* references
        in FontCacheCairo.cpp.

        No features added, so no new tests.

        * CMakeListsEfl.txt: Updating build system to look for GOwnPtrCairo.*
        * GNUmakefile.am: Ditto.
        * platform/graphics/cairo/FontCacheCairo.cpp: Using OwnPtr instead of GOwnPtr.
        (WebCore::FontCache::createFontPlatformData):
        * platform/graphics/cairo/GOwnPtrCairo.cpp: Removed.
        * platform/graphics/cairo/GOwnPtrCairo.h: Removed.
        * platform/graphics/cairo/OwnPtrCairo.cpp: Added.
        (WTF::FcPattern):
        (WTF::FcObjectSet):
        (WTF::FcFontSet):
        * platform/graphics/cairo/OwnPtrCairo.h: Added.

2010-09-02  Kinuko Yasuda  <kinuko@chromium.org>

        Unreviewed, updating binding-tests expectations (for changeset 66521).

        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjInternal::stringAttrAttrSetter):
        (WebCore::TestObjInternal::reflectedStringAttrAttrSetter):
        (WebCore::TestObjInternal::reflectedURLAttrAttrSetter):
        (WebCore::TestObjInternal::reflectedNonEmptyURLAttrAttrSetter):
        (WebCore::TestObjInternal::reflectedCustomURLAttrAttrSetter):
        (WebCore::TestObjInternal::reflectedCustomNonEmptyURLAttrAttrSetter):
        (WebCore::TestObjInternal::stringAttrWithGetterExceptionAttrSetter):
        (WebCore::TestObjInternal::stringAttrWithSetterExceptionAttrSetter):

2010-09-02  Adam Langley  <agl@chromium.org>

        Reviewed by Adam Barth.

        [chromium] fix memory corruption in Khmer rendering.

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

        Test: fast/text/khmer-crash.html

        * platform/graphics/chromium/FontLinux.cpp:
        (WebCore::TextRunWalker::shapeGlyphs):
          The Khmer shaper has a bug where it would request larger output
          buffers, but request a zero increase in size. Because of this we add
          one to the requested size.
        (WebCore::TextRunWalker::setGlyphXPositions):
          The Khmer shaper is outputing cluster logs which suggest that some
          output glyphs appear from nowhere (i.e. have no input codepoints). I
          don't know Khmer, so maybe that's correct, but it broke the
          assumptions of this code, causing a read out-of-bounds.
        * platform/graphics/chromium/HarfbuzzSkia.cpp:
        (WebCore::stringToGlyphs):
          The Harfbuzz interfaces aren't documented, but it appears that the
          output array to stringToGlyphs isn't sized and that Harfbuzz expects
          us to detect when the input is too long.

2010-09-02  Adam Roben  <aroben@apple.com>

        Fill the scroll corner with white when shouldPaintCustomScrollbars is
        false

        Previously we were only filling with white when
        shouldPaintCustomScrollbars was true but the ChromeClient didn't paint
        any custom scrollbars.

        Reviewed by Sam Weinig.

        * platform/ScrollbarThemeComposite.cpp:
        (WebCore::ScrollbarThemeComposite::paintScrollCorner):

2010-09-02  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r66671.
        http://trac.webkit.org/changeset/66671
        https://bugs.webkit.org/show_bug.cgi?id=45115

        http/tests/misc/redirect-to-about-blank.html is failing on
        several platforms (Requested by japhet on #webkit).

        * WebCore.exp.in:
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::updateURLForPushOrReplaceState):
        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::begin):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::iconURL):
        (WebCore::FrameLoader::didOpenURL):
        (WebCore::FrameLoader::didExplicitOpen):
        (WebCore::FrameLoader::receivedFirstData):
        (WebCore::FrameLoader::setURL):
        (WebCore::FrameLoader::startIconLoader):
        (WebCore::FrameLoader::commitIconURLToIconDatabase):
        (WebCore::FrameLoader::finishedParsing):
        (WebCore::FrameLoader::checkIfDisplayInsecureContent):
        (WebCore::FrameLoader::checkIfRunInsecureContent):
        (WebCore::FrameLoader::updateFirstPartyForCookies):
        (WebCore::FrameLoader::loadInSameDocument):
        (WebCore::FrameLoader::commitProvisionalLoad):
        (WebCore::FrameLoader::open):
        (WebCore::FrameLoader::shouldScrollToAnchor):
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::url):

2010-09-01  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        Roll ANGLE under webkit to r402
        https://bugs.webkit.org/show_bug.cgi?id=45004

        * platform/graphics/mac/GraphicsContext3DMac.mm: Update the code to use newer ANGLE interface.
        (WebCore::GraphicsContext3D::GraphicsContext3D):

2010-09-02  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        WebInspector: Timeline instrumentation code can crash browser.

        Steps:
        1) load the site
        2) open inspector
        3) start timeline recording
        4) reload inspected page
        got NPE

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

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::didReceiveResponse):
        (WebCore::ResourceLoader::didReceiveData):

2010-09-02  Nate Chapin  <japhet@chromium.org>

        Reviewed by Adam Barth.

        Remove m_URL from FrameLoader and instead depend on Document's url.
        FrameLoader::url() will be removed in a later patch.

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

        No new tests, since this predominantly a refactor. Updating
        fast/dom/early-frame-url.html.

        * WebCore.exp.in:
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::updateURLForPushOrReplaceState):
        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::begin):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::iconURL):
        (WebCore::FrameLoader::didOpenURL):
        (WebCore::FrameLoader::didExplicitOpen):
        (WebCore::FrameLoader::receivedFirstData):
        (WebCore::FrameLoader::url):
        (WebCore::FrameLoader::setOutgoingReferrer):
        (WebCore::FrameLoader::startIconLoader):
        (WebCore::FrameLoader::commitIconURLToIconDatabase):
        (WebCore::FrameLoader::finishedParsing):
        (WebCore::FrameLoader::checkIfDisplayInsecureContent):
        (WebCore::FrameLoader::checkIfRunInsecureContent):
        (WebCore::FrameLoader::updateFirstPartyForCookies):
        (WebCore::FrameLoader::loadInSameDocument):
        (WebCore::FrameLoader::commitProvisionalLoad):
        (WebCore::FrameLoader::open):
        (WebCore::FrameLoader::shouldScrollToAnchor):
        * loader/FrameLoader.h:

2010-09-01  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Adam Barth.

        Support <script defer> as specified by HTML5
        https://bugs.webkit.org/show_bug.cgi?id=40934

        Tests: fast/dom/HTMLScriptElement/defer-double-defer-write.html
               fast/dom/HTMLScriptElement/defer-double-write.html
               fast/dom/HTMLScriptElement/defer-inline-script.html
               fast/dom/HTMLScriptElement/defer-onbeforeload.html
               fast/dom/HTMLScriptElement/defer-script-invalid-url.html
               fast/dom/HTMLScriptElement/defer-write.html
               fast/dom/HTMLScriptElement/two-defer-writes.html
               http/tests/misc/script-defer-after-slow-stylesheet.html
               http/tests/misc/script-defer.html

        * dom/Document.cpp:
        (WebCore::Document::open): Allow implicit open for writes() while executing deferred scripts.
        * dom/DocumentParser.cpp:
        (WebCore::DocumentParser::DocumentParser):
        (WebCore::DocumentParser::startParsing):
        (WebCore::DocumentParser::prepareToStopParsing): If called when stopped or detached, it shouldn't reset to stopping.
        (WebCore::DocumentParser::stopParsing):
        (WebCore::DocumentParser::detach):
        * dom/DocumentParser.h:
        (WebCore::DocumentParser::isParsing):
        (WebCore::DocumentParser::isActive):
        (WebCore::DocumentParser::isStopping):
        (WebCore::DocumentParser::isDetached):
        * dom/RawDataDocumentParser.h:
        (WebCore::RawDataDocumentParser::finish):
        * dom/XMLDocumentParser.cpp:
        (WebCore::XMLDocumentParser::append):
        (WebCore::XMLDocumentParser::exitText):
        * dom/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::doWrite):
        (WebCore::XMLDocumentParser::startElementNs):
        (WebCore::XMLDocumentParser::endElementNs):
        (WebCore::XMLDocumentParser::characters):
        (WebCore::XMLDocumentParser::error):
        (WebCore::XMLDocumentParser::processingInstruction):
        (WebCore::XMLDocumentParser::cdataBlock):
        (WebCore::XMLDocumentParser::comment):
        (WebCore::XMLDocumentParser::internalSubset):
        (WebCore::XMLDocumentParser::initializeParserContext):
        (WebCore::XMLDocumentParser::doEnd):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::prepareToStopParsing):
        (WebCore::HTMLDocumentParser::pumpTokenizerIfPossible):
        (WebCore::HTMLDocumentParser::pumpTokenizer):
        (WebCore::HTMLDocumentParser::insert):
        (WebCore::HTMLDocumentParser::append):
        (WebCore::HTMLDocumentParser::end):
        (WebCore::HTMLDocumentParser::attemptToEnd):
        (WebCore::HTMLDocumentParser::endIfDelayed):
        (WebCore::HTMLDocumentParser::notifyFinished):
        * html/parser/HTMLDocumentParser.h:
        * html/parser/HTMLScriptRunner.cpp:
        (WebCore::HTMLScriptRunner::~HTMLScriptRunner):
        (WebCore::HTMLScriptRunner::executeParsingBlockingScript):
        (WebCore::HTMLScriptRunner::executePendingScriptAndDispatchEvent):
        (WebCore::HTMLScriptRunner::executeScriptsWaitingForParsing):
        (WebCore::HTMLScriptRunner::requestDeferredScript):
        (WebCore::HTMLScriptRunner::runScript):
        * html/parser/HTMLScriptRunner.h:
        * loader/ImageDocument.cpp:
        (WebCore::ImageDocumentParser::finish):

2010-09-02  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: HAR converter fails on POST requests with non-form content type
        https://bugs.webkit.org/show_bug.cgi?id=45109

        * inspector/front-end/HAREntry.js:
        (WebInspector.HAREntry.prototype._buildPostData):

2010-09-02  Andreas Kling  <andreas.kling@nokia.com>

        Rubber-stamped by Simon Hausmann.

        [Qt] REGRESSION(r62898): tst_QWebFrame crashing
        https://bugs.webkit.org/show_bug.cgi?id=43039

        Rolling out the offending change <http://trac.webkit.org/changeset/62898>

        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtInstance::markAggregate):

2010-09-02  Anton Muhin  <antonm@chromium.org>

        Reviewed by Tony Chang.

        Fix indentation.
        https://bugs.webkit.org/show_bug.cgi?id=44678

        * bindings/scripts/CodeGeneratorV8.pm:

2010-09-02  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r66655.
        http://trac.webkit.org/changeset/66655
        https://bugs.webkit.org/show_bug.cgi?id=45104

        broke some editing tests (Requested by kling on #webkit).

        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::collapse):
        (WebCore::DOMSelection::selectAllChildren):

2010-09-02  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r66649.
        http://trac.webkit.org/changeset/66649
        https://bugs.webkit.org/show_bug.cgi?id=45103

        It broke ~2000 tests on Qt bot (Requested by Ossy on #webkit).

        * dom/Document.cpp:
        (WebCore::Document::open):
        * dom/DocumentParser.cpp:
        (WebCore::DocumentParser::DocumentParser):
        (WebCore::DocumentParser::detach):
        * dom/DocumentParser.h:
        (WebCore::DocumentParser::isDetached):
        (WebCore::DocumentParser::stopParsing):
        * dom/RawDataDocumentParser.h:
        (WebCore::RawDataDocumentParser::finish):
        * dom/XMLDocumentParser.cpp:
        (WebCore::XMLDocumentParser::append):
        (WebCore::XMLDocumentParser::exitText):
        * dom/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::doWrite):
        (WebCore::XMLDocumentParser::startElementNs):
        (WebCore::XMLDocumentParser::endElementNs):
        (WebCore::XMLDocumentParser::characters):
        (WebCore::XMLDocumentParser::error):
        (WebCore::XMLDocumentParser::processingInstruction):
        (WebCore::XMLDocumentParser::cdataBlock):
        (WebCore::XMLDocumentParser::comment):
        (WebCore::XMLDocumentParser::internalSubset):
        (WebCore::XMLDocumentParser::initializeParserContext):
        (WebCore::XMLDocumentParser::doEnd):
        * dom/XMLDocumentParserQt.cpp:
        (WebCore::XMLDocumentParser::initializeParserContext):
        (WebCore::XMLDocumentParser::doEnd):
        (WebCore::XMLDocumentParser::parse):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::pumpTokenizerIfPossible):
        (WebCore::HTMLDocumentParser::pumpTokenizer):
        (WebCore::HTMLDocumentParser::insert):
        (WebCore::HTMLDocumentParser::append):
        (WebCore::HTMLDocumentParser::end):
        (WebCore::HTMLDocumentParser::attemptToEnd):
        (WebCore::HTMLDocumentParser::endIfDelayed):
        (WebCore::HTMLDocumentParser::notifyFinished):
        * html/parser/HTMLDocumentParser.h:
        * html/parser/HTMLScriptRunner.cpp:
        (WebCore::HTMLScriptRunner::~HTMLScriptRunner):
        (WebCore::HTMLScriptRunner::executeParsingBlockingScript):
        (WebCore::HTMLScriptRunner::executePendingScriptAndDispatchEvent):
        (WebCore::HTMLScriptRunner::runScript):
        * html/parser/HTMLScriptRunner.h:
        * loader/ImageDocument.cpp:
        (WebCore::ImageDocumentParser::finish):

2010-09-02  Eric Seidel  <eric@webkit.org>

        Reviewed by Dimitri Glazkov.

        Share more code between HTMLObjectElement and HTMLEmbedElement
        https://bugs.webkit.org/show_bug.cgi?id=45054

        This pushes more of HTMLObjectElement code down into
        HTMLPlugInImageElement so that it can be shared with
        HTMLEmbedElement.

        The most notable changes are:
        - HTMLEmbedElement now "delays" updating the widget until
          all of its children are parsed (this matches HTMLObjectElement).
          However, since HTMLEmbedElement can't have children, this is actually
          no delay.
        - useFallbackContent is now virtual, allowing HTMLEmbedElement and
          HTMLObjectElement to share the same code paths, and the <embed>
          case to just always return false for useFallbackContent().

        This is the final (fourth) part of this change.

        No functional change, thus no tests.

        * html/HTMLEmbedElement.cpp:
        * html/HTMLEmbedElement.h:
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::rendererIsNeeded):
        * html/HTMLObjectElement.h:
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::HTMLPlugInImageElement):
        (WebCore::HTMLPlugInImageElement::recalcStyle):
        (WebCore::HTMLPlugInImageElement::attach):
        (WebCore::HTMLPlugInImageElement::detach):
        (WebCore::HTMLPlugInImageElement::finishParsingChildren):
        * html/HTMLPlugInImageElement.h:

2010-09-02  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Move takeAllChildrenFrom to ContainerNode
        https://bugs.webkit.org/show_bug.cgi?id=45066

        We're going to reuse this method for XMLDocumentLoader, so it's better
        to put it in a more general location.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::takeAllChildrenFrom):
        * dom/ContainerNode.h:
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::FragmentParsingContext::finished):

2010-09-01  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Darin Adler.

        DOM Selection: collapse() and selectAllChildren() should throw WRONG_DOCUMENT_ERR if node belongs to other document
        https://bugs.webkit.org/show_bug.cgi?id=44595

        Spec links:
        http://www.whatwg.org/specs/web-apps/current-work/#dom-selection-collapse
        http://www.whatwg.org/specs/web-apps/current-work/#dom-selection-selectallchildren

        Test: fast/dom/Selection/wrong-document-err.html

        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::collapse):
        (WebCore::DOMSelection::selectAllChildren):

2010-09-02  Eric Seidel  <eric@webkit.org>

        Reviewed by Dimitri Glazkov.

        Share more code between HTMLObjectElement and HTMLEmbedElement
        https://bugs.webkit.org/show_bug.cgi?id=45054

        This pushes more of HTMLObjectElement code down into
        HTMLPlugInImageElement so that it can be shared with HTMLEmbedElement.

        This patch was originally written in one piece and reviewed by Dimitri.
        I'm landing it as four separate changes for easier readability and less
        chance of regression.

        No functional change, thus no tests.

        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::HTMLEmbedElement):
        (WebCore::HTMLEmbedElement::create):
        * html/HTMLEmbedElement.h:
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::HTMLObjectElement):
        * html/HTMLObjectElement.h:
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::HTMLPlugInImageElement):
        (WebCore::HTMLPlugInImageElement::detach):
        (WebCore::HTMLPlugInImageElement::finishParsingChildren):
        * html/HTMLPlugInImageElement.h:
        * html/HTMLTagNames.in:

2010-09-02  Eric Seidel  <eric@webkit.org>

        Reviewed by Dimitri Glazkov.

        Share more code between HTMLObjectElement and HTMLEmbedElement
        https://bugs.webkit.org/show_bug.cgi?id=45054

        This pushes more of HTMLObjectElement code down into
        HTMLPlugInImageElement so that it can be shared with HTMLEmbedElement.

        I also moved a little code from HTMLPluginElement to HTMLPlugInImageElement
        since HTMLAppletElement does not need to share this same widget update logic.
        This is a small correction from the previous change.

        This patch was originally written in one piece and reviewed by Dimitri.
        I'm landing it as three separate changes for easier readability and less
        chance of regression.

        No functional change, thus no tests.

        * html/HTMLEmbedElement.cpp:
        * html/HTMLEmbedElement.h:
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::attach):
        (WebCore::HTMLObjectElement::finishParsingChildren):
        (WebCore::HTMLObjectElement::detach):
        (WebCore::HTMLObjectElement::recalcStyle):
        (WebCore::HTMLObjectElement::childrenChanged):
        (WebCore::HTMLObjectElement::renderFallbackContent):
        * html/HTMLObjectElement.h:
        (WebCore::HTMLObjectElement::useFallbackContent):
        * html/HTMLPlugInElement.cpp:
        * html/HTMLPlugInElement.h:
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::createRenderer):
        (WebCore::HTMLPlugInImageElement::updateWidget):
        (WebCore::HTMLPlugInImageElement::updateWidgetCallback):
        * html/HTMLPlugInImageElement.h:
        (WebCore::HTMLPlugInImageElement::canLazyAttach):
        (WebCore::HTMLPlugInImageElement::useFallbackContent):

2010-09-02  Jer Noble  <jer.noble@apple.com>

        Reviewed by Darin Adler.

        WebKit should not accept PDFs as video.
        https://bugs.webkit.org/show_bug.cgi?id=45013

        The code in MediaPlayerPrivate::createQTMovie has been re-arranged.
        First, the component disabling is done only once. In 64-bit QTKit will
        store the list of disabled components and disable them once QTKitServer
        starts, so there is no need to disable them repeatedly.  However,
        because of a bug in 64-bit QTKit, additional requests of the exact same
        component description will be ignored if QTKitServer is not yet running.
        To work around this, we must provide the exact component flags for each
        eat/PDF and grip/PDF component we wish to disable.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::disableComponentsOnce): Added.
        (WebCore::MediaPlayerPrivate::createQTMovie): Moved the component
            disabling code into disableComponentsOnce.

2010-09-02  Philippe Normand  <pnormand@igalia.com>

        Unreviewed, GTK build fix.

        * platform/graphics/gstreamer/GStreamerGWorld.cpp:
        (WebCore::GStreamerGWorld::enterFullscreen):

2010-09-02  Eric Seidel  <eric@webkit.org>

        Reviewed by Dimitri Glazkov.

        Share more code between HTMLObjectElement and HTMLEmbedElement
        https://bugs.webkit.org/show_bug.cgi?id=45054

        This pushes more of HTMLObjectElement code down into
        HTMLPlugInImageElement so that it can be shared with HTMLEmbedElement.

        I also moved a little code from HTMLPluginElement to HTMLPlugInImageElement
        since HTMLAppletElement does not need to share this same widget update logic.
        This is a small correction from the previous change.

        This patch was originally written in one piece and reviewed by Dimitri.
        I'm landing it as two separate changes for easier readability and less
        chance of regression.

        No functional change, thus no tests.

        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::HTMLEmbedElement):
        (WebCore::HTMLEmbedElement::mapToEntry):
        (WebCore::HTMLEmbedElement::parseMappedAttribute):
        (WebCore::HTMLEmbedElement::rendererIsNeeded):
        (WebCore::HTMLEmbedElement::attach):
        (WebCore::HTMLEmbedElement::updateWidget):
        (WebCore::HTMLEmbedElement::insertedIntoDocument):
        (WebCore::HTMLEmbedElement::removedFromDocument):
        (WebCore::HTMLEmbedElement::attributeChanged):
        * html/HTMLEmbedElement.h:
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::HTMLObjectElement):
        (WebCore::HTMLObjectElement::parseMappedAttribute):
        (WebCore::HTMLObjectElement::rendererIsNeeded):
        (WebCore::HTMLObjectElement::attach):
        (WebCore::HTMLObjectElement::updateWidget):
        (WebCore::HTMLObjectElement::finishParsingChildren):
        (WebCore::HTMLObjectElement::detach):
        (WebCore::HTMLObjectElement::insertedIntoDocument):
        (WebCore::HTMLObjectElement::removedFromDocument):
        (WebCore::HTMLObjectElement::recalcStyle):
        (WebCore::HTMLObjectElement::childrenChanged):
        (WebCore::HTMLObjectElement::renderFallbackContent):
        * html/HTMLObjectElement.h:
        * html/HTMLPlugInElement.cpp:
        * html/HTMLPlugInElement.h:
        * html/HTMLPlugInImageElement.cpp:
        (WebCore::HTMLPlugInImageElement::HTMLPlugInImageElement):
        (WebCore::HTMLPlugInImageElement::renderEmbeddedObject):
        * html/HTMLPlugInImageElement.h:
        (WebCore::HTMLPlugInImageElement::needsWidgetUpdate):
        (WebCore::HTMLPlugInImageElement::setNeedsWidgetUpdate):
        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::requestObject):
        (WebCore::SubframeLoader::loadPlugin):
        * loader/SubframeLoader.h:
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::updateWidgetForObjectElement):
        (WebCore::updateWidgetForEmbedElement):

2010-09-02  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Adam Barth.

        Support <script defer> as specified by HTML5
        https://bugs.webkit.org/show_bug.cgi?id=40934

        Tests: fast/dom/HTMLScriptElement/defer-double-defer-write.html
               fast/dom/HTMLScriptElement/defer-double-write.html
               fast/dom/HTMLScriptElement/defer-inline-script.html
               fast/dom/HTMLScriptElement/defer-onbeforeload.html
               fast/dom/HTMLScriptElement/defer-script-invalid-url.html
               fast/dom/HTMLScriptElement/defer-write.html
               fast/dom/HTMLScriptElement/two-defer-writes.html
               http/tests/misc/script-defer-after-slow-stylesheet.html
               http/tests/misc/script-defer.html

        * dom/Document.cpp:
        (WebCore::Document::open): Allow implicit open for writes() while executing deferred scripts.
        * dom/DocumentParser.cpp:
        (WebCore::DocumentParser::DocumentParser):
        (WebCore::DocumentParser::startParsing):
        (WebCore::DocumentParser::prepareToStopParsing): If called when stopped or detached, it shouldn't reset to stopping.
        (WebCore::DocumentParser::stopParsing):
        (WebCore::DocumentParser::detach):
        * dom/DocumentParser.h:
        (WebCore::DocumentParser::isParsing):
        (WebCore::DocumentParser::isActive):
        (WebCore::DocumentParser::isStopping):
        (WebCore::DocumentParser::isDetached):
        * dom/RawDataDocumentParser.h:
        (WebCore::RawDataDocumentParser::finish):
        * dom/XMLDocumentParser.cpp:
        (WebCore::XMLDocumentParser::append):
        (WebCore::XMLDocumentParser::exitText):
        * dom/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::doWrite):
        (WebCore::XMLDocumentParser::startElementNs):
        (WebCore::XMLDocumentParser::endElementNs):
        (WebCore::XMLDocumentParser::characters):
        (WebCore::XMLDocumentParser::error):
        (WebCore::XMLDocumentParser::processingInstruction):
        (WebCore::XMLDocumentParser::cdataBlock):
        (WebCore::XMLDocumentParser::comment):
        (WebCore::XMLDocumentParser::internalSubset):
        (WebCore::XMLDocumentParser::initializeParserContext):
        (WebCore::XMLDocumentParser::doEnd):
        * html/parser/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::prepareToStopParsing):
        (WebCore::HTMLDocumentParser::pumpTokenizerIfPossible):
        (WebCore::HTMLDocumentParser::pumpTokenizer):
        (WebCore::HTMLDocumentParser::insert):
        (WebCore::HTMLDocumentParser::append):
        (WebCore::HTMLDocumentParser::end):
        (WebCore::HTMLDocumentParser::attemptToEnd):
        (WebCore::HTMLDocumentParser::endIfDelayed):
        (WebCore::HTMLDocumentParser::notifyFinished):
        * html/parser/HTMLDocumentParser.h:
        * html/parser/HTMLScriptRunner.cpp:
        (WebCore::HTMLScriptRunner::~HTMLScriptRunner):
        (WebCore::HTMLScriptRunner::executeParsingBlockingScript):
        (WebCore::HTMLScriptRunner::executePendingScriptAndDispatchEvent):
        (WebCore::HTMLScriptRunner::executeScriptsWaitingForParsing):
        (WebCore::HTMLScriptRunner::requestDeferredScript):
        (WebCore::HTMLScriptRunner::runScript):
        * html/parser/HTMLScriptRunner.h:
        * loader/ImageDocument.cpp:
        (WebCore::ImageDocumentParser::finish):

2010-09-02  Ilya Sherman  <isherman@google.com>

        Reviewed by Eric Seidel.

        Decompose computing an element's inherited language, expose this
        capability to clients (in particular, for Chromium).
        https://bugs.webkit.org/show_bug.cgi?id=44803

        No new tests -- just refactoring + exposing code.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector):
        * dom/Element.cpp:
        (WebCore::Element::computeInheritedLang):
        * dom/Element.h:

2010-08-31  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Eric Carlson.

        [GStreamer] can't play m4v videos
        https://bugs.webkit.org/show_bug.cgi?id=44951

        Fixed registration of the m4v media type in the hashtable used by
        the player to report if it supports a given media type.

        Test: media/media-can-play-mpeg4-video.html

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mimeTypeCache):

2010-09-01  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] warning: unused variable "queryResult"
        https://bugs.webkit.org/show_bug.cgi?id=44998

        Fix the misbehavior introduced in r66573. The gst_element_query()
        call needs to be done whatever the GStreamer version used.

        * platform/graphics/gstreamer/GStreamerGWorld.cpp:
        (WebCore::GStreamerGWorld::enterFullscreen):

2010-09-01  Jia Pu  <jpu@apple.com>

        Reviewed by Dan Bernstein.

        Add support for autocorrection UI on Mac OS X.
        https://bugs.webkit.org/show_bug.cgi?id=44958
        <rdar://problem/7326847>

        Several new member methods are added to EditorClient for communication
        between WebCore and WebKit. A new handler, executeCancelOperation(), is
        added to EditorCommand.cpp so that WebCore can intercept the ESC key event
        to dismiss autocorrection UI. A new DocumentMarker value, RejectedCorrection,
        is added to keep track of the corrections that user has rejected, so that it
        will not be suggested again later. The autocorrection is driven by a timer.
        Every time the editor inserts a new letter, the timer is reset. If the timer
        fires, it means neither has user entered any new letter for current word, nor
        has he entered whitespace or punctuation to complete the word. In this case,
        we query for autocorrection.

        * WebCore.exp.in: Updated

        * dom/DocumentMarker.h: Added RejectedCorrection to indicate word on which user
          has rejected autocorrection.

        * editing/Editor.cpp:
        (WebCore::Editor::Editor): Initialize autocorrection timer.
        (WebCore::Editor::~Editor): Make sure autocorrection UI is dismissed before
          destroying Editor object.
        (WebCore::Editor::markMisspellingsAfterTypingToPosition): Adopted new signature
          of markAllMisspellingsAndBadGrammarInRanges().
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges): Consolidated all
          boolean arguments into one bitfield. This improves readability and allows us to
          pass in a bit to indicate whether we want to show autocorrection UI. Also added
          code to show autocorrection UI if it is necessary.
        (WebCore::Editor::markMisspellingsAndBadGrammar): Adopted new signature of
          markAllMisspellingsAndBadGrammarInRanges().
        (WebCore::Editor::correctionPanelTimerFired): Check to see if we should show
          autocorrection UI when user pauses during typing.
        (WebCore::Editor::handleRejectedCorrection): Update user dictionary when an autocorrection is rejected.
        (WebCore::Editor::startCorrectionPanelTimer): Start autocorrection timer.
        (WebCore::Editor::handleCancelOperation): Dismiss autocorrection UI when ESC key is pressed.

        * editing/Editor.h: Added autocorrection related member methods and variables.

        * editing/EditorCommand.cpp:
        (WebCore::executeCancelOperation): Handle ESC key event. Dismiss autocorrection UI.
        (WebCore::createCommandMap): Updated for executeCancelOperation().

        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::markMisspellingsAfterTyping): Reset autocorrection timer after insertion.

        * loader/EmptyClients.h:
        (WebCore::EmptyEditorClient::showCorrectionPanel): Dummy implementation.
        (WebCore::EmptyEditorClient::dismissCorrectionPanel): Ditto

        * page/EditorClient.h: Added methods for communication between WebCore and WebKit regarding autocorrection.

        * page/Frame.cpp:
        (WebCore::Frame::respondToChangedSelection): Remove Replacement marker where we used to only remove Spelling
          mark, because whenever we need to remove spelling underline we also should remove autocorrection underline.

        * platform/graphics/GraphicsContext.h: Added enum TextCheckingLineStyle to specify the underline
          for different type of text checking result. Replaced drawLineForMisspellingOrBadGrammar() with
          drawLineForTextChecking(), which allows autocorrection to have different indication from misspelling
          and grammatical error.

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawLineForTextChecking): Replaced drawLineForMisspellingOrBadGrammar() with drawLineForTextChecking().

        * platform/graphics/haiku/GraphicsContextHaiku.cpp:
        (WebCore::GraphicsContext::drawLineForTextChecking): Ditto

        * platform/graphics/mac/GraphicsContextMac.mm:
        (WebCore::GraphicsContext::drawLineForTextChecking): Ditto

        * platform/graphics/openvg/GraphicsContextOpenVG.cpp:
        (WebCore::GraphicsContext::drawLineForTextChecking): Ditto

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

        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::drawLineForTextChecking): Ditto

        * platform/graphics/win/GraphicsContextCGWin.cpp:
        (WebCore::GraphicsContext::drawLineForTextChecking): Ditto

        * platform/graphics/wince/GraphicsContextWince.cpp:
        (WebCore::GraphicsContext::drawLineForTextChecking): Ditto

        * platform/graphics/wx/GraphicsContextWx.cpp:
        (WebCore::GraphicsContext::drawLineForTextChecking): Ditto

        * rendering/InlineTextBox.cpp:
        (WebCore::textCheckingLineStyleForMarkerType): Return line style for a given document marker type.
        (WebCore::InlineTextBox::paintSpellingOrGrammarMarker):  Replaced drawLineForMisspellingOrBadGrammar() with drawLineForTextChecking().
        (WebCore::InlineTextBox::paintDocumentMarkers): Handle new marker value, RejectedCorrection.

2010-09-01  Kinuko Yasuda  <kinuko@google.com>

        Reviewed by Adam Barth.

        [V8] Support readonly Date attribute
        https://bugs.webkit.org/show_bug.cgi?id=43943

        Adds Date to non_wrapper_types in CodeGeneratorV8.pm.

        New tests will be added for Metadata when we add FileSystem implementation.

        * bindings/scripts/CodeGeneratorV8.pm:
        * fileapi/Metadata.h:
        * fileapi/Metadata.idl:

2010-09-01  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Chris Marrin.

        animations/suspend-resume-animation.html does not pass when accelerated compositing is off
        https://bugs.webkit.org/show_bug.cgi?id=45057

        Fix incorrect logic when resuming the animation (KeyframeAnimation::startAnimation
        and RenderLayerBacking::startAnimation return true when running an accelerated
        animation).

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::updateStateMachine):

2010-09-01  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Darin Adler.

        Question mark QuickTime icon when navigating to this MP3 file
        https://bugs.webkit.org/show_bug.cgi?id=44846

        Do not disable 'tmet' movie tracks, they carry meta data.

        No DRT test because I am not sure it is possible to have one of these tracks in 
        non-streaming movie. I will add a test later if I figure out how to create a movie.

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

2010-09-01  Eric Seidel  <eric@webkit.org>

        Reviewed by Dimitri Glazkov.

        Remove rendering types from SubframeLoader and split RenderEmbeddedObject::updateWidget in preparation for moving to DOM
        https://bugs.webkit.org/show_bug.cgi?id=45007

        This is just moving around code (and attempting to make it more sane).
        I also tried to use more specific types where possible.
        The SubframeLoader no longer uses any rendering types in its API.

        I split RenderEmbeddedObject::updateWidget into a bunch of functions.
        It was obvious before, but now super-obvious after the split that these
        new functions do not belong in RenderEmbeddedObject.  Instead they
        need to be moved to their respective DOM classes.  I've added FIXMEs
        next to each of the functions which should be moved, but I've not moved
        any of the logic out of RenderEmbeddedObject.cpp yet in an effort to
        keep this patch as simple as possible.

        No functional change, thus no tests.

        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::updateWidget):
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::attach):
        (WebCore::HTMLFrameElementBase::width):
        (WebCore::HTMLFrameElementBase::height):
        * html/HTMLFrameOwnerElement.cpp:
        (WebCore::HTMLFrameOwnerElement::renderPart):
        * html/HTMLFrameOwnerElement.h:
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::renderWidgetForJSBindings):
        (WebCore::HTMLObjectElement::createRenderer):
        (WebCore::HTMLObjectElement::updateWidget):
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::renderEmbeddedObject):
        * html/HTMLPlugInElement.h:
        * loader/PluginDocument.cpp:
        (WebCore::PluginDocumentParser::appendBytes):
        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::requestObject):
        (WebCore::SubframeLoader::document):
        (WebCore::SubframeLoader::loadPlugin):
        * loader/SubframeLoader.h:
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::isNetscapePlugin):
        (WebCore::hasFallbackContent):
        (WebCore::parametersFromObject):
        (WebCore::updateWidgetForObjectElement):
        (WebCore::parametersFromEmbed):
        (WebCore::updateWidgetForEmbedElement):
        (WebCore::updateWidgetForMediaElement):
        (WebCore::RenderEmbeddedObject::updateWidget):
        * rendering/RenderEmbeddedObject.h:
        (WebCore::RenderEmbeddedObject::setHasFallbackContent):
        * rendering/RenderLayerCompositor.h:

2010-09-01  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Jian Li.

        Add more FileError and FileException code for FileWriter and FileSystem API
        https://bugs.webkit.org/show_bug.cgi?id=45048

        Adding SYNTAX_ERR for FileWriter.
        http://dev.w3.org/2009/dap/file-system/file-writer.html

        Adding INVALID_STATE_ERR, INVALID_MODIFICATION_ERR and QUOTA_EXCEEDED_ERR for FileSystem.
        http://dev.w3.org/2009/dap/file-system/file-dir-sys.html

        Adding NO_MODIFICATION_ALLOWED_ERR (to FileException) for both.

        * fileapi/FileError.idl:
        * fileapi/FileException.idl:

2010-09-01  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Brady Eidson.

        popstate event is not fired until document opts in by calling pushstate.
        https://bugs.webkit.org/show_bug.cgi?id=41372

        Fire popstate even when we don't have a state object when a page is 
        loaded (for both regular loads and those from the page cache). Also
        fire popstate when doing in-document navigation via fragment changes.
        This is consistent with both Gecko and recent the HTML5 spec change:
        http://html5.org/tools/web-apps-tracker?from=5376&to=5377

        Tests: fast/loader/stateobjects/popstate-fires-on-history-traversal.html
               fast/loader/stateobjects/popstate-fires-with-page-cache.html

        * bindings/js/SerializedScriptValue.cpp:
        * bindings/js/SerializedScriptValue.h:
        (WebCore::SerializedScriptValue::create):
        * bindings/v8/SerializedScriptValue.cpp:
        * bindings/v8/SerializedScriptValue.h:
        * dom/Document.cpp:
        (WebCore::Document::implicitClose):
        * dom/Document.h:
        * history/CachedFrame.cpp:
        (WebCore::CachedFrameBase::restore):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadInSameDocument):
        (WebCore::FrameLoader::transitionToCommitted):
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::pushState):
        (WebCore::HistoryController::replaceState):

2010-09-01  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Dimitri Glazkov.

        REGRESSION(r66431): WebCore::Editor::selectionStartCSSPropertyValue crashes if no background color is specified
        https://bugs.webkit.org/show_bug.cgi?id=45068

        The crash was caused by the assumption that every node has an ancestor with some background color,
        which was obviously false. Fixed this by adding a null for ancestor.

        Test: editing/execCommand/backcolor-crash.html

        * editing/Editor.cpp:
        (WebCore::Editor::selectionStartCSSPropertyValue):

2010-08-31  Jer Noble  <jer.noble@apple.com>

        Reviewed by Darin Adler.

        WebKit should not accept PDFs as video.
        https://bugs.webkit.org/show_bug.cgi?id=45013
        
        QuickTime will accept a PDF as the source for a movie, and happily
        convert that PDF into a .mov.  WebKit should disable the eat and grip
        PDF components which allow this.

        Test: http/tests/media/pdf-served-as-pdf.html

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::createQTMovie): Add PDF eat and grip
        components to the components which are disabled before opening a 
        QTMovie.

2010-09-01  Rob Buis  <rwlbuis@gmail.com>

        Reviewed by Darin Adler.

        Support for Percentage Values in border-radius
        https://bugs.webkit.org/show_bug.cgi?id=38354

        Support percentage values on the border-radius family
        of CSS properties.

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::getBorderRadiusCornerValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        (WebCore::CSSParser::parseBorderRadius):
        * css/CSSPrimitiveValue.cpp:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::ensurePropertyMap):
        * platform/Length.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::repaintAfterLayoutIfNeeded):
        * rendering/style/BorderData.h:
        (WebCore::BorderData::BorderData):
        (WebCore::BorderData::hasBorderRadius):
        (WebCore::BorderData::topLeft):
        (WebCore::BorderData::topRight):
        (WebCore::BorderData::bottomLeft):
        (WebCore::BorderData::bottomRight):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::getBorderRadiiForRect):
        (WebCore::RenderStyle::getInnerBorderRadiiForRectWithBorderWidths):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::borderTopLeftRadius):
        (WebCore::InheritedFlags::borderTopRightRadius):
        (WebCore::InheritedFlags::borderBottomLeftRadius):
        (WebCore::InheritedFlags::borderBottomRightRadius):
        (WebCore::InheritedFlags::setBorderTopLeftRadius):
        (WebCore::InheritedFlags::setBorderTopRightRadius):
        (WebCore::InheritedFlags::setBorderBottomLeftRadius):
        (WebCore::InheritedFlags::setBorderBottomRightRadius):
        (WebCore::InheritedFlags::setBorderRadius):
        (WebCore::InheritedFlags::initialBorderRadius):

2010-09-01  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: webInspector.inspectedWindow.evaluate() should not fail if not passed callback.
        https://bugs.webkit.org/show_bug.cgi?id=45037

        * inspector/front-end/ExtensionAPI.js:
        (WebInspector.injectedExtensionAPI.InspectedWindow.prototype.evaluate):

2010-09-01  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein and Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=44963, overhanging floats aren't positioned properly when they occur
        in multi-column layout.  Don't let floats overhang in multi-column blocks, since they are part of the column layout.
        
        fast/multicol/float-pagination-failure now succeeds, so will rename and move it.

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

2010-08-31  Kenneth Russell  <kbr@google.com>

        Reviewed by Simon Fraser.

        Add helpers to FloatRect to compute bounding box from points
        https://bugs.webkit.org/show_bug.cgi?id=45015

        Added fitToPoints, including a few overloaded variants for the
        cases of two, three and four points. I opted not to add a
        generalized version taking const FloatRect* or Vector<FloatRect>
        at the present time because for my own purposes they are
        unnecessary, and the specific versions can be more tightly coded.
        Also added left() and top() for symmetry with right() and bottom().
        These changes have been tested with new code to be added later.

        * platform/graphics/FloatRect.cpp:
        (WebCore::FloatRect::intersect):
        (WebCore::FloatRect::unite):
        (WebCore::FloatRect::fitToPoints):
        * platform/graphics/FloatRect.h:
        (WebCore::FloatRect::left):
        (WebCore::FloatRect::top):
        (WebCore::FloatRect::setLocationAndSizeFromEdges):

2010-09-01  Anton Muhin  <antonm@chromium.org>

        Reviewed by Dimitri Glazkov.

        [v8] Use Vector and DEFINE_STATIC_LOCAL instead of plain static array.
        https://bugs.webkit.org/show_bug.cgi?id=45040

        By code guidelines all the statics should be wrapped into appropriate macro.

        * bindings/v8/V8Binding.cpp:
        (WebCore::int32ToWebCoreString):

2010-09-01  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        [Gtk] very slow page scrolling on big -webkit-box-shadow areas
        https://bugs.webkit.org/show_bug.cgi?id=39582

        Add a new drawTiledShadow method to render a big shadow doing
        tiling of parts of a smaller shadow. We create the minimum shadow
        required to get the tiles we will use to render the real shadow
        and we use drawPattern with those tiles to create the shadow.

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cairo/FontCairo.cpp:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::drawPathShadow):
        (WebCore::drawBorderlessRectShadow):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::applyPlatformShadow):
        (WebCore::GraphicsContext::createShadowMask):
        (WebCore::getPhase):
        (WebCore::GraphicsContext::drawTiledShadow):
        (WebCore::GraphicsContext::fillRoundedRect):
        * platform/graphics/cairo/ImageCairo.cpp:
        (WebCore::BitmapImage::draw):

2010-09-01  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector, Extension API: Panel.onSelectionChanged event is never fired
        Added command line API to the lexical context of code evaluated by webInspector.inspectedWindow.evaluate()
        Fixed webInspector.inspectedWindow.evaluate() to return object rather than its stringified representation
        https://bugs.webkit.org/show_bug.cgi?id=44957

        Test: inspector/extensions-eval.html

        * inspector/front-end/ExtensionAPI.js:
        (WebInspector.injectedExtensionAPI.InspectedWindow.prototype.evaluate):
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._onEvaluateOnInspectedPage):

2010-08-27  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Xan Lopez.

        [GStreamer] ImageGStreamer doesn't need to hold a Cairo surface
        https://bugs.webkit.org/show_bug.cgi?id=44757

        Pass the cairo surface to the BitmapImage constructor which will
        handle its life-cycle.

        * platform/graphics/gstreamer/ImageGStreamer.h:
        * platform/graphics/gstreamer/ImageGStreamerCairo.cpp:
        (ImageGStreamer::ImageGStreamer):
        (ImageGStreamer::~ImageGStreamer):

2010-08-30  Patrick Gansterer  <paroga@paroga.com>

         Reviewed by Dirk Schulze.

         RenderImage::imageChanged invalidates wrong area
         https://bugs.webkit.org/show_bug.cgi?id=43779

         Remove RenderImage inheritance from RenderSVGImage, it now inherits from RenderSVGModelObject.

         * rendering/RenderSVGImage.cpp:
         (WebCore::RenderSVGImage::RenderSVGImage):
         (WebCore::RenderSVGImage::~RenderSVGImage):
         (WebCore::RenderSVGImage::layout):
         (WebCore::RenderSVGImage::paint):
         (WebCore::RenderSVGImage::imageChanged):
         * rendering/RenderSVGImage.h:
         (WebCore::RenderSVGImage::imageResource):
         * rendering/RenderSVGModelObject.h:
         * svg/SVGImageElement.cpp:

2010-09-01  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Add culling to RenderSVGContainer
        https://bugs.webkit.org/show_bug.cgi?id=44896

        Cache object/strokeBoundingBox and repaintRectInLocalCoordinates() in RenderSVGContainer & RenderSVGRoot, just like it's done in RenderPath.
        Propagate boundary changes up the render tree, in layout phase, in order to notify parents that they should update their cached boundaries.

        This is a huge speed benefit when interacting with an already layouted document, as there's no need anymore to traverse all children
        of any container or <svg> element, just to retrieve the repaint rect.

        * rendering/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::layout): Propagate boundary changes to parent, if neeeded.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::setNeedsBoundariesUpdate): Ditto.
        * rendering/RenderObject.h:
        * rendering/RenderObjectChildList.cpp:
        (WebCore::RenderObjectChildList::removeChildNode): Ditto.
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::layout): Ditto.
        (WebCore::RenderPath::paint): Use new helper function to intersect the paintInfo.rect with the repaintRectInLocalCoordinates().
        * rendering/RenderPath.h: Remove styleWillChange(), it's in RenderSVGModelObject now.
        (WebCore::RenderPath::setNeedsBoundariesUpdate): Mark as virtual, just like in RenderObject.
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::RenderSVGContainer): Initialize m_needsBoundariesUpdate to true.
        (WebCore::RenderSVGContainer::layout): Only update cached boundaries, if needed, once by traversing the child tree.
        (WebCore::RenderSVGContainer::paint): Use new helper function to intersect the paintInfo.rect with the repaintRectInLocalCoordinates().
        (WebCore::RenderSVGContainer::updateCachedBoundaries): Ask children for their boundaries, and cache them.
        * rendering/RenderSVGContainer.h:
        (WebCore::RenderSVGContainer::setNeedsBoundariesUpdate): Set m_needsBoundariesUpdate when called.
        (WebCore::RenderSVGContainer::objectBoundingBox): Inlined, just returns a member variable now.
        (WebCore::RenderSVGContainer::strokeBoundingBox): Ditto.
        (WebCore::RenderSVGContainer::repaintRectInLocalCoordinates): Ditto.
        (WebCore::RenderSVGContainer::calculateLocalTransform): Changed to return a boolean, wheter the transform was modified.
        * rendering/RenderSVGGradientStop.h:
        (WebCore::RenderSVGGradientStop::strokeBoundingBox): Add missing default implementation, return just FloatRect().
        * rendering/RenderSVGHiddenContainer.cpp: Remove repaintRectInLocalCoordinates() override, it's now needed for painting markers.
        * rendering/RenderSVGHiddenContainer.h:
        (WebCore::RenderSVGHiddenContainer::clippedOverflowRectForRepaint): Inlined, returning IntRect().
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::layout): Propagate boundary changes to parent, if neeeded.
        * rendering/RenderSVGRoot.cpp: Cache boundaries here as well, just like in RenderSVGContainer.
        (WebCore::RenderSVGRoot::RenderSVGRoot):
        (WebCore::RenderSVGRoot::layout):
        (WebCore::RenderSVGRoot::updateCachedBoundaries):
        * rendering/RenderSVGRoot.h:
        (WebCore::RenderSVGRoot::setNeedsBoundariesUpdate):
        (WebCore::RenderSVGRoot::setNeedsTransformUpdate):
        (WebCore::RenderSVGRoot::objectBoundingBox):
        (WebCore::RenderSVGRoot::strokeBoundingBox):
        (WebCore::RenderSVGRoot::repaintRectInLocalCoordinates):
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::layout): Propagate boundary changes to parent, if neeeded.
        * rendering/RenderSVGTransformableContainer.cpp:
        (WebCore::RenderSVGTransformableContainer::calculateLocalTransform): Return true, if the localTransform changed.
        * rendering/RenderSVGTransformableContainer.h:
        * rendering/RenderSVGViewportContainer.cpp:
        (WebCore::RenderSVGViewportContainer::calcViewport): Propagate boundary changes to parent, if neeeded.
        * rendering/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::computeContainerBoundingBoxes): Helper function calculating object/strokeBoundingBox and repaintRectInLocalCoordinates in one shot.
        (WebCore::SVGRenderSupport::paintInfoIntersectsRepaintRect): Moved from RenderPath to share the culling functionality.
        * rendering/SVGRenderSupport.h:

2010-09-01  Mahesh Kulkarni  <mahesh.kulkarni@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] QWebPage::allowGeolocationRequest should be async API
        https://bugs.webkit.org/show_bug.cgi?id=41364

        Adding GeolocationPermissionClientQt.cpp/h to build script

        * WebCore.pro:

2010-09-01  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Darin Adler.

        DOM Selection: collapseToStart() and collapseToEnd() should throw INVALID_STATE_ERR if there's no selection
        https://bugs.webkit.org/show_bug.cgi?id=44598

        Spec links:
        http://www.whatwg.org/specs/web-apps/current-work/#dom-selection-collapsetostart
        http://www.whatwg.org/specs/web-apps/current-work/#dom-selection-collapsetoend

        Test: fast/dom/Selection/collapseToX-empty-selection.html

        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::collapseToEnd):
        (WebCore::DOMSelection::collapseToStart):
        * page/DOMSelection.h:
        * page/DOMSelection.idl:

2010-09-01  Kinuko Yasuda  <kinuko@chromium.org>

        Unreviewed; another build fix.

        * WebCore.pri:

2010-09-01  Kinuko Yasuda  <kinuko@chromium.org>

        Unreviewed; qt build fix.

        * CMakeLists.txt:

2010-08-31  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Adam Barth.

        Move FileSystem related files from WebCore/html to WebCore/fileapi.
        https://bugs.webkit.org/show_bug.cgi?id=44925

        No new tests; there should be no functional changes.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * fileapi/DOMFilePath.cpp: Renamed from WebCore/storage/DOMFilePath.cpp.
        * fileapi/DOMFilePath.h: Renamed from WebCore/storage/DOMFilePath.h.
        * fileapi/DOMFileSystem.cpp: Renamed from WebCore/storage/DOMFileSystem.cpp.
        * fileapi/DOMFileSystem.h: Renamed from WebCore/storage/DOMFileSystem.h.
        * fileapi/DOMFileSystem.idl: Renamed from WebCore/storage/DOMFileSystem.idl.
        * fileapi/DirectoryEntry.cpp: Renamed from WebCore/storage/DirectoryEntry.cpp.
        * fileapi/DirectoryEntry.h: Renamed from WebCore/storage/DirectoryEntry.h.
        * fileapi/DirectoryEntry.idl: Renamed from WebCore/storage/DirectoryEntry.idl.
        * fileapi/DirectoryReader.cpp: Renamed from WebCore/storage/DirectoryReader.cpp.
        * fileapi/DirectoryReader.h: Renamed from WebCore/storage/DirectoryReader.h.
        * fileapi/DirectoryReader.idl: Renamed from WebCore/storage/DirectoryReader.idl.
        * fileapi/EntriesCallback.h: Renamed from WebCore/storage/EntriesCallback.h.
        * fileapi/EntriesCallback.idl: Renamed from WebCore/storage/EntriesCallback.idl.
        * fileapi/Entry.cpp: Renamed from WebCore/storage/Entry.cpp.
        * fileapi/Entry.h: Renamed from WebCore/storage/Entry.h.
        * fileapi/Entry.idl: Renamed from WebCore/storage/Entry.idl.
        * fileapi/EntryArray.cpp: Renamed from WebCore/storage/EntryArray.cpp.
        * fileapi/EntryArray.h: Renamed from WebCore/storage/EntryArray.h.
        * fileapi/EntryArray.idl: Renamed from WebCore/storage/EntryArray.idl.
        * fileapi/EntryCallback.h: Renamed from WebCore/storage/EntryCallback.h.
        * fileapi/EntryCallback.idl: Renamed from WebCore/storage/EntryCallback.idl.
        * fileapi/ErrorCallback.h: Renamed from WebCore/storage/ErrorCallback.h.
        * fileapi/ErrorCallback.idl: Renamed from WebCore/storage/ErrorCallback.idl.
        * fileapi/FileEntry.cpp: Renamed from WebCore/storage/FileEntry.cpp.
        * fileapi/FileEntry.h: Renamed from WebCore/storage/FileEntry.h.
        * fileapi/FileEntry.idl: Renamed from WebCore/storage/FileEntry.idl.
        * fileapi/FileSystemCallback.h: Renamed from WebCore/storage/FileSystemCallback.h.
        * fileapi/FileSystemCallback.idl: Renamed from WebCore/storage/FileSystemCallback.idl.
        * fileapi/FileSystemCallbacks.cpp: Renamed from WebCore/storage/FileSystemCallbacks.cpp.
        * fileapi/FileSystemCallbacks.h: Renamed from WebCore/storage/FileSystemCallbacks.h.
        * fileapi/Flags.h: Renamed from WebCore/storage/Flags.h.
        * fileapi/Flags.idl: Renamed from WebCore/storage/Flags.idl.
        * fileapi/LocalFileSystem.cpp: Renamed from WebCore/storage/LocalFileSystem.cpp.
        * fileapi/LocalFileSystem.h: Renamed from WebCore/storage/LocalFileSystem.h.
        * fileapi/Metadata.h: Renamed from WebCore/storage/Metadata.h.
        * fileapi/Metadata.idl: Renamed from WebCore/storage/Metadata.idl.
        * fileapi/MetadataCallback.h: Renamed from WebCore/storage/MetadataCallback.h.
        * fileapi/MetadataCallback.idl: Renamed from WebCore/storage/MetadataCallback.idl.

2010-08-31  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Prepare RenderSVGContainer culling patch
        https://bugs.webkit.org/show_bug.cgi?id=44955

        Add styleWillChange methods for all SVG renderers, that call setNeedsBoundariesUpdate().
        It's currently a no-op, but will be used once the containers cache their boundaries, which
        happens in a follow-up patch.

        * rendering/RenderSVGBlock.cpp:
        (WebCore::RenderSVGBlock::styleWillChange): Call setNeedsBoundariesUpdate().
        * rendering/RenderSVGBlock.h:
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::styleWillChange): Ditto.
        * rendering/RenderSVGImage.h:
        * rendering/RenderSVGInline.cpp:
        (WebCore::RenderSVGInline::styleWillChange): Ditto.
        * rendering/RenderSVGInline.h:
        * rendering/RenderSVGModelObject.cpp:
        (WebCore::RenderSVGModelObject::styleWillChange): Ditto.
        * rendering/RenderSVGModelObject.h:
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::styleWillChange): Ditto.
        * rendering/RenderSVGRoot.h:
        * rendering/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::computeContainerBoundingBox): Skip hidden containers, not necessary to traverse them.
        * rendering/style/SVGRenderStyle.cpp:
        (WebCore::SVGRenderStyle::diff): svg-shadow changes need to cause relayouts, not only repaints, once container bounds are cached.

2010-08-31  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Dan Bernstein.
        
        https://bugs.webkit.org/show_bug.cgi?id=44915
        Need to handle CSSValueAuto in CSSPrimitiveValue::operator ETextAlign()
        
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue): Map TAAUTO to -webkit-auto.  "auto" is
        not a valid text-align value.  We use TAAUTO internally for the nameless value that acts
        as left if direction:ltr and right for direction:rtl.

2010-08-31  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Reviewed by Martin Robinson.

        [EFL] Add PlatformVideoWindowEfl.cpp for WebKit EFL
        https://bugs.webkit.org/show_bug.cgi?id=44508

        Add PlatformVideoWindowEfl.cpp in order to use gstreamer by 
        WebKit EFL.

        * platform/graphics/gstreamer/PlatformVideoWindow.h:
        (WebCore::PlatformVideoWindow::window):
        (WebCore::PlatformVideoWindow::videoWindowId):
        * platform/graphics/gstreamer/PlatformVideoWindowEfl.cpp: Added.
        (PlatformVideoWindow::PlatformVideoWindow):
        (PlatformVideoWindow::~PlatformVideoWindow):
        * platform/graphics/gstreamer/PlatformVideoWindowGtk.cpp: Include <gtk/gtk.h> directly.

2010-08-31  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=44863, disentangle style recalc from layout, so that
        the former can occur in more places without having to do the latter.

        * WebCore.exp.in:
        * page/FocusController.cpp:
        (WebCore::FocusController::setActive):
        * page/Frame.cpp:
        (WebCore::Frame::Frame):
        * page/Frame.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::enterCompositingMode):
        (WebCore::FrameView::layout):
        (WebCore::FrameView::needsLayout):
        (WebCore::FrameView::updateLayoutAndStyleIfNeededRecursive):
        * page/FrameView.h:
        * page/Page.cpp:
        (WebCore::Page::scheduleForcedStyleRecalcForAllPages):
        * page/Page.h:
        * page/Settings.cpp:
        (WebCore::setNeedsRecalcStyleInAllFrames):
        (WebCore::setLoadsImagesAutomaticallyInAllFrames):
        (WebCore::Settings::setStandardFontFamily):
        (WebCore::Settings::setFixedFontFamily):
        (WebCore::Settings::setSerifFontFamily):
        (WebCore::Settings::setSansSerifFontFamily):
        (WebCore::Settings::setCursiveFontFamily):
        (WebCore::Settings::setFantasyFontFamily):
        (WebCore::Settings::setMinimumFontSize):
        (WebCore::Settings::setMinimumLogicalFontSize):
        (WebCore::Settings::setDefaultFontSize):
        (WebCore::Settings::setDefaultFixedFontSize):
        (WebCore::Settings::setLoadsImagesAutomatically):
        (WebCore::Settings::setTextAreasAreResizable):
        (WebCore::Settings::setAuthorAndUserStylesEnabled):
        (WebCore::Settings::setFontRenderingMode):
        (WebCore::Settings::setZoomMode):
        (WebCore::Settings::setAcceleratedCompositingEnabled):
        (WebCore::Settings::setShowDebugBorders):
        (WebCore::Settings::setShowRepaintCounter):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::platformColorsDidChange):

2010-08-31  Jeremy Moskovich  <jeremy@chromium.org>

        Reviewed by Dimitri Glazkov.

        Unfork Chromium's FontPlatformDataChromiumMac.mm.

        Modified FontPlatformDataCocoa to provide hooks needed by Chromium.
        Moved Chromium's mechanics for OOP font loading to CrossProcessFontLoading.mm.
        Added ::create() function to MemoryActivatedFont to match new guidelines for
        RefCounted<> classes.

        Not possible to test due to sandbox interaction.

        * WebCore.gypi: Update files for chromium build.
        * platform/graphics/chromium/CrossProcessFontLoading.h: Added.
        (WebCore::MemoryActivatedFont::cgFont):
        (WebCore::MemoryActivatedFont::atsFontRef):
        * platform/graphics/chromium/CrossProcessFontLoading.mm: Added.
        (WebCore::MemoryActivatedFont::create):
        (WebCore::MemoryActivatedFont::MemoryActivatedFont):
        (WebCore::MemoryActivatedFont::~MemoryActivatedFont):
        (WebCore::FontPlatformData::loadFont):
        * platform/graphics/chromium/FontPlatformDataChromiumMac.mm: Removed.
        * platform/graphics/cocoa/FontPlatformData.h:
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm:
        (WebCore::FontPlatformData::loadFont):
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::operator=):
        (WebCore::FontPlatformData::setFont):

2010-08-31  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Adam Barth.

        [GTK] warning: unused variable "queryResult"
        https://bugs.webkit.org/show_bug.cgi?id=44998

        No new tests as functionality has not changed.

        * platform/graphics/gstreamer/GStreamerGWorld.cpp:
        (WebCore::GStreamerGWorld::enterFullscreen): Move queryResult within the gstreamer
        version guards, where it is used.

2010-08-31  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Adam Roben.

        Refinement to previous checkin for pagination of block-level replaced elements.  Don't bother to
        paginate floating block-level replaced elements for now.

        Added fast/multicol/float-pagination-failure.html

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

2010-08-31  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Jian Li.

        Add LocalFileSystem.requestFileSystem interface to DOMWindow
        https://bugs.webkit.org/show_bug.cgi?id=44734

        No new tests; tests will be added later.

        * bindings/generic/RuntimeEnabledFeatures.cpp:
        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::fileSystemEnabled):
        (WebCore::RuntimeEnabledFeatures::setFileSystemEnabled):
        (WebCore::RuntimeEnabledFeatures::requestFileSystemEnabled):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::requestFileSystem):
        * page/DOMWindow.h:
        (WebCore::DOMWindow::):
        * page/DOMWindow.idl:
        * page/Settings.cpp:
        (WebCore::Settings::setFileSystemRootPath):
        * page/Settings.h:
        (WebCore::Settings::fileSystemRootPath):

2010-08-31  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Adam Barth.

        [BREWMP] Add PLATFORM(BREWMP) guard to PluginViewNone
        https://bugs.webkit.org/show_bug.cgi?id=44768

        Build fix. Add PLATFORM(BREWMP) guard to add dummy PluginView::privateBrowsingStateChanged
        and PluginView::setJavaScriptPaused.

        * plugins/PluginViewNone.cpp:

2010-08-31  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=40947
        <rdar://problem/8124723> REGRESSION (r57544): XMLHttpRequest POSTed multipart/form-data
        wrongfully gets a charset appended

        Test: http/tests/xmlhttprequest/post-with-boundary.html

        * xml/XMLHttpRequest.cpp:
        (WebCore::replaceCharsetInMediaType): Changed to only set charset if it was already present,
        and never append.
        (WebCore::XMLHttpRequest::send): Updated for replaceCharsetInMediaType renaming.

2010-08-31  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by Tony Chang.

        [chromium] Implement Readable/Writable versions of ChromiumDataObjectNew
        https://bugs.webkit.org/show_bug.cgi?id=44917

        This is the second of several patches to update Chromium to support
        arbitrary data types in event.dataTransfer.
        ReadableDataObject simply calls through to several Chromium IPCs to
        retrieve the appropriate data.
        WritableDataObject ostensibly buffers arbitrary data internally until
        a call is made to flush the data to the platform-specific abstraction;
        unfortunately, a special exception is currently made for pasteboard
        handling due to how it is handled in WebCore.

        No new tests.

        * WebCore.gypi:
        * platform/chromium/ChromiumDataObjectNew.h: Removed.
        * platform/chromium/ClipboardChromium.cpp:
        * platform/chromium/ClipboardMimeTypes.cpp: Added.
        * platform/chromium/ClipboardMimeTypes.h: Added.
        * platform/chromium/ReadableDataObject.cpp: Added.
        (WebCore::clipboardBuffer):
        (WebCore::ReadableDataObject::create):
        (WebCore::ReadableDataObject::ReadableDataObject):
        (WebCore::ReadableDataObject::hasData):
        (WebCore::ReadableDataObject::types):
        (WebCore::ReadableDataObject::getData):
        (WebCore::ReadableDataObject::getURL):
        (WebCore::ReadableDataObject::getHTML):
        (WebCore::ReadableDataObject::hasFilenames):
        (WebCore::ReadableDataObject::filenames):
        (WebCore::ReadableDataObject::ensureTypeCacheInitialized):
        * platform/chromium/ReadableDataObject.h: Added.
        * platform/chromium/WritableDataObject.cpp: Added.
        (WebCore::WritableDataObject::create):
        (WebCore::WritableDataObject::WritableDataObject):
        (WebCore::WritableDataObject::clearData):
        (WebCore::WritableDataObject::clearAllExceptFiles):
        (WebCore::WritableDataObject::clearAll):
        (WebCore::WritableDataObject::setData):
        (WebCore::WritableDataObject::setURL):
        (WebCore::WritableDataObject::setHTML):
        (WebCore::WritableDataObject::dataMap):
        (WebCore::WritableDataObject::urlTitle):
        (WebCore::WritableDataObject::htmlBaseURL):
        (WebCore::WritableDataObject::fileExtension):
        (WebCore::WritableDataObject::fileContentFilename):
        (WebCore::WritableDataObject::fileContent):
        (WebCore::WritableDataObject::setFileExtension):
        (WebCore::WritableDataObject::setFileContentFilename):
        (WebCore::WritableDataObject::setFileContent):
        * platform/chromium/WritableDataObject.h: Added.

2010-08-31  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Null-deref when decoding web archive with no data key in LegacyWebArchive::createResource
        https://bugs.webkit.org/show_bug.cgi?id=45000

        Test: webarchive/loading/missing-data.html

        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::createResource): Use wrapCFData instead of CFDataGetBytePtr/GetLength,
        which is both more efficient, and can handle null. Also fixed incorrect use of ParsedURLString,
        since the string is coming from a file and so there are no guarantees about its format.

2010-08-31  Kenneth Russell  <kbr@google.com>

        Reviewed by Chris Marrin.

        Add length and related operations to FloatPoint and FloatSize
        https://bugs.webkit.org/show_bug.cgi?id=44994

        Added length and squared length operations to both FloatPoint and
        FloatSize, and added set(x, y), dot and normalize operations to
        FloatPoint. These changes have been tested with new code to be
        added later.

        * platform/graphics/FloatPoint.cpp:
        (WebCore::FloatPoint::normalize):
        (WebCore::FloatPoint::length):
        * platform/graphics/FloatPoint.h:
        (WebCore::FloatPoint::set):
        (WebCore::FloatPoint::dot):
        (WebCore::FloatPoint::lengthSquared):
        (WebCore::operator*):
        * platform/graphics/FloatSize.cpp:
        (WebCore::FloatSize::diagonalLength):
        * platform/graphics/FloatSize.h:
        (WebCore::FloatSize::diagonalLengthSquared):

2010-08-31  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        gl-teximage.html and tex-image-and-sub-image-2d-with-image.html failed on Chromium Mac bots (10.5)
        https://bugs.webkit.org/show_bug.cgi?id=44993

        * platform/graphics/cg/GraphicsContext3DCG.cpp:
        (WebCore::GraphicsContext3D::getImageData): Take into consideration the source image pixel row alignment.

2010-08-31  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Kenneth Rohde Christiansen.

        [CMake] Unify GENERATE_DOM_NAMES code
        https://bugs.webkit.org/show_bug.cgi?id=44842

        * CMakeLists.txt: Added property svn:eol-style.

2010-08-31  Beth Dakin  <bdakin@apple.com>

        Rubber-stamped by Dan Bernstein..

        Variable name change. m_shouldFirePostLayoutTimer is now 
        m_hasPendingPostLayoutTasks

        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::~FrameView):
        (WebCore::FrameView::reset):
        (WebCore::FrameView::layout):
        (WebCore::FrameView::performPostLayoutTasks):
        * page/FrameView.h:

2010-08-31  Beth Dakin  <bdakin@apple.com>

        Reviewed by Dave Hyatt.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=44828 FrameView 
        should make more calls to postLayoutTasks() using the timer
        -and corresponding-
        <rdar://problem/8064938>

        This change only allows synchronous calls to postLayoutTasks() if 
        we are not already in a synchronous call to postLayoutTasks(). 
        Furthermore, it de-couples the notion of "the post layout timer 
        should fire" from m_postLayoutTasksTimer.isActive(), instead using 
        a boolean to track the need to use the timer.

        * page/FrameView.cpp:
        (WebCore::FrameView::FrameView):
        (WebCore::FrameView::~FrameView):
        (WebCore::FrameView::reset):
        (WebCore::FrameView::layout):
        (WebCore::FrameView::unscheduleRelayout):
        (WebCore::FrameView::performPostLayoutTasks):
        * page/FrameView.h:

2010-08-30  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Fix 32-bit WebKit2 build.

        * WebCore.exp.in:

2010-08-31  Nate Chapin  <japhet@chromium.org>

        Reviewed by Darin Fisher.

        Regression in r63528: Custom http headers for loads of type
        FrameLoadTypeReloadFromOrigin are not being correctly
        propagated to subresource loads.

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

        No tests, since DRT doesn't seem to have a way to trigger a
        FrameLoadTypeReloadFromOrigin load.

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

2010-08-31  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Add ability to count text matches without marking
        https://bugs.webkit.org/show_bug.cgi?id=43996

        Safari needs to be able to count text matches without triggering lots of repainting.
        Rename markAllMatchesForText() to countMatchesForText() and add a markMatches parameter.

        * WebCore.exp.in:
        * page/Frame.cpp:
        (WebCore::Frame::countMatchesForText):
        * page/Frame.h:
        * page/Page.cpp:
        (WebCore::Page::markAllMatchesForText):

2010-08-31  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Darin Adler.

        canPlayType("application/octet-stream") must return ""
        https://bugs.webkit.org/show_bug.cgi?id=44985

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::supportsType): Always return IsNotSupported for application/octet-stream

2010-08-31  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] ScrollbarThemeGtk should respond to theme changes
        https://bugs.webkit.org/show_bug.cgi?id=44782

        Scrollbar is currently written with the assumption that scrollbars never change
        thickness. In GTK+ changing the current theme can alter scrollbar thickness. This
        change manually resizes interior frame scrollbar widgets when the GTK+ theme changes.
        Since we are now tracking style changes, we may also cache theme properties to avoid
        having to call moz_gtk_get_scrollbar_metrics repeatedly during rendering.

        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::gtkScrollbar): Added accessor for the Mozilla theming code's
        scrollbar widget. We access it here, because RenderThemGtk takes care of initializing
        the Mozilla code.
        * platform/gtk/RenderThemeGtk.h: Added accessor declaration.
        * platform/gtk/ScrollbarThemeGtk.cpp:
        (WebCore::ScrollbarThemeGtk::ScrollbarThemeGtk): Update the style property cache during construction.
        (WebCore::ScrollbarThemeGtk::registerScrollbar): Track all interior frame scrollbars.
        (WebCore::ScrollbarThemeGtk::unregisterScrollbar): Ditto.
        (WebCore::ScrollbarThemeGtk::updateThemeProperties): Added this method which updates the style cache.
        (WebCore::gtkStyleSetCallback): Added this signal handler for when the style changes.
        (WebCore::ScrollbarThemeGtk::backButtonRect): Use the style cache instead of calling moz_gtk_get_scrollbar_metrics.
        (WebCore::ScrollbarThemeGtk::forwardButtonRect): Ditto.
        (WebCore::ScrollbarThemeGtk::trackRect): Ditto.
        (WebCore::ScrollbarThemeGtk::paintTrackBackground): Ditto.
        (WebCore::ScrollbarThemeGtk::thumbRect): Ditto.
        (WebCore::ScrollbarThemeGtk::paint): Ditto.
        (WebCore::ScrollbarThemeGtk::scrollbarThickness): Ditto.
        (WebCore::ScrollbarThemeGtk::buttonSize): Ditto.
        (WebCore::ScrollbarThemeGtk::minimumThumbLength): Ditto.
        * platform/gtk/ScrollbarThemeGtk.h: Added new method declarations.

2010-08-31  Darin Adler  <darin@apple.com>

        Reviewed by Anders Carlsson.

        Web archives are created with a size of 0 due to PassRefPtr mistake
        https://bugs.webkit.org/show_bug.cgi?id=44984
        rdar://problem/8042283

        * loader/archive/ArchiveResource.cpp:
        (WebCore::ArchiveResource::ArchiveResource): Merge the three constructors into one.
        (WebCore::ArchiveResource::create): Merge the two create functions into one, and
        fix the logic so there is no use of a PassRefPtr after it has been passed.
        * loader/archive/ArchiveResource.h: Use default arguments instead of overloading
        to cut down from three create functions to two. Remove two of the constructors.

2010-08-31  Jian Li  <jianli@chromium.org>

        Reviewed by David Levin.

        Expose WorkerContext.createBlobURL and WorkerContext.revokeBlobURL.
        https://bugs.webkit.org/show_bug.cgi?id=44972

        Test: fast/files/workers/worker-apply-blob-url-to-xhr.html

        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::canRequest):
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::createBlobURL):
        (WebCore::WorkerContext::revokeBlobURL):
        * workers/WorkerContext.h:
        * workers/WorkerContext.idl:

2010-08-31  Darin Adler  <darin@apple.com>

        Reviewed by Anders Carlsson.

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::handleTextBox):
        Added a cast so we can mix int and unsigned in a single ?: expression.
        This warns with clang, but strangely not with gcc.

        * html/parser/HTMLTreeBuilder.cpp: Removed unused functions.
        The clang compiler notices and complains about these. If we need them
        later we should use Subversion to bring them back.

2010-08-31  Kenneth Russell  <kbr@google.com>

        Reviewed by Simon Fraser.

        Add cross product and arithmetic operations to FloatPoint3D
        https://bugs.webkit.org/show_bug.cgi?id=44970

        Added set, move, and scale operations similar to FloatPoint's,
        addition and subtraction operators, length, lengthSquared and
        cross product. These changes have been tested with new code to be
        added later.

        * platform/graphics/FloatPoint3D.cpp:
        (WebCore::FloatPoint3D::normalize):
        (WebCore::FloatPoint3D::length):
        * platform/graphics/FloatPoint3D.h:
        (WebCore::FloatPoint3D::set):
        (WebCore::FloatPoint3D::move):
        (WebCore::FloatPoint3D::scale):
        (WebCore::FloatPoint3D::dot):
        (WebCore::FloatPoint3D::cross):
        (WebCore::FloatPoint3D::lengthSquared):
        (WebCore::operator +=):
        (WebCore::operator -=):
        (WebCore::operator+):
        (WebCore::operator-):
        (WebCore::operator*):

2010-08-31  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] Isolate all GTK+ typedefs into one file
        https://bugs.webkit.org/show_bug.cgi?id=44900

        * platform/graphics/gtk/CairoUtilities.h: Remove GTK+ typedefs.
        * platform/gtk/ClipboardGtk.h: Ditto.
        * platform/gtk/DataObjectGtk.h: Ditto.
        * platform/gtk/GOwnPtrGtk.h: Ditto.
        * platform/gtk/GRefPtrGtk.h: Ditto.
        * platform/gtk/PasteboardHelper.h: Ditto.
        * platform/gtk/PopupMenuGtk.h: Ditto.
        * platform/gtk/RenderThemeGtk.h: Ditto.
        * platform/gtk/ScrollbarGtk.h: Ditto.
        * platform/gtk/gtk2drawing.c: Remove unused Assertions.h.

2010-08-31  Tony Chang  <tony@chromium.org>

        Unreviewed, fix chromium compile.

        * bindings/v8/custom/V8DeviceOrientationEventCustom.cpp:

2010-08-31  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        audio engine: add FFTConvolver class
        https://bugs.webkit.org/show_bug.cgi?id=34907

        No new tests since audio API is not yet implemented.

        * platform/audio: Added.
        * platform/audio/FFTConvolver.cpp: Added.
        (WebCore::FFTConvolver::FFTConvolver):
        (WebCore::FFTConvolver::process):
        (WebCore::FFTConvolver::reset):
        * platform/audio/FFTConvolver.h: Added.
        (WebCore::FFTConvolver::fftSize):

2010-08-31  Jian Li  <jianli@chromium.org>

        Reviewed by Darin Fisher and David Levin.

        Fix ThreadableBlobRegistry methods not to rely on WorkerContext.
        https://bugs.webkit.org/show_bug.cgi?id=44971

        We could hit an ASSERT when we're performing some blob related cleanup
        in ScriptExecutionContext destructor when WorkerContext dies. The fix
        is to use isMainThread and callOnMainThread.

        * fileapi/ThreadableBlobRegistry.cpp:
        (WebCore::BlobRegistryContext::BlobRegistryContext):
        (WebCore::registerBlobURLTask):
        (WebCore::ThreadableBlobRegistry::registerBlobURL):
        (WebCore::registerBlobURLFromTask):
        (WebCore::unregisterBlobURLTask):
        (WebCore::ThreadableBlobRegistry::unregisterBlobURL):

2010-08-31  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] Fix 'make dist' in preparation of the 1.3.3 release
        https://bugs.webkit.org/show_bug.cgi?id=44978

        * GNUmakefile.am: Add missing and moved headers to the sources list.

2010-08-31  Ryuan Choi  <ryuan.choi@samsung.com>

        Reviewed by Antonio Gomes.

        [EFL] crashes while dragging any contents
        https://bugs.webkit.org/show_bug.cgi?id=44940

        Fix crashes caused by returning newly assigned value instead of adoptRef
        value.

        * page/efl/EventHandlerEfl.cpp:
        (WebCore::EventHandler::createDraggingClipboard):
        * platform/efl/ClipboardEfl.cpp:
        (WebCore::Editor::newGeneralClipboard):
        * platform/efl/ClipboardEfl.h:
        (WebCore::ClipboardEfl::create):

2010-08-31  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        WebInspector: The parser of Inspector protocol messages should be covered by a test.

        The inspector protocol is based on messages in JSON format.
        Each message should be a JSON object with a number of properties.
        InspectorBackendDispatcher is parsing these messages and should be
        able to detect wrong formatted messages.
        It has these functionality but no tests for it.

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


        * inspector/CodeGeneratorInspector.pm:

2010-08-31  Anton Muhin  <antonm@chromium.org>

        Reviewed by Adam Barth.

        [v8] More correct and faster error handling when converting v8 objects to various WebCore strings
        https://bugs.webkit.org/show_bug.cgi?id=44678

        Split v8 object conversion into two phase: 1st, which can throw an exception, and
        2nd, which must always succeed.  That allows to report correctly the case when exception
        happens.

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/V8Binding.cpp:
        (WebCore::int32ToWebCoreString):
        (WebCore::v8NonStringValueToWebCoreString):
        * bindings/v8/V8Binding.h:
        (WebCore::V8ParameterBase::operator String):
        (WebCore::V8ParameterBase::operator AtomicString):
        (WebCore::V8ParameterBase::V8ParameterBase):
        (WebCore::V8ParameterBase::prepareBase):
        (WebCore::V8ParameterBase::object):
        (WebCore::V8ParameterBase::setString):
        (WebCore::V8ParameterBase::toString):
        (WebCore::):
        (WebCore::::prepare):
        * bindings/v8/custom/V8BindingMacros.h:
        * bindings/v8/custom/V8DeviceMotionEventCustom.cpp:
        (WebCore::V8DeviceMotionEvent::initDeviceMotionEventCallback):
        * bindings/v8/cstom/V8DeviceOrientationEventCustom.cpp:
        (WebCore::V8DeviceMotionEvent::initDeviceOrientationEventCallback):

2010-08-30  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Joseph Pecoraro.

        WebInspector: it'd be better to introduce inspector API related tests.

        As far as we have some kind of API for Inspector
        it'd be better to have API related tests. This is the test
        for API wrappers. These wrappers are tracking the types of arguments
        of API functions.

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

        Test: inspector/protocol-error.html

        * inspector/CodeGeneratorInspector.pm:
        * inspector/front-end/inspector.js:
        (WebInspector_syncDispatch):
        (WebInspector.reportProtocolError):

2010-08-31  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r66484.
        http://trac.webkit.org/changeset/66484
        https://bugs.webkit.org/show_bug.cgi?id=44966

        Broke EFL build (Requested by acidx on #webkit).

        * CMakeLists.txt:

2010-08-31  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Tony Chang.

        deduplicate code from Node::checkReplaceChild and Node::checkAddChild
        https://bugs.webkit.org/show_bug.cgi?id=44962

        Remove duplicate code in preparation for fixing https://bugs.webkit.org/show_bug.cgi?id=19524
        No new tests since there is no change in functionality.

        * dom/Node.cpp:
        (WebCore::isChildTypeAllowed):
        (WebCore::Node::canReplaceChild):
        (WebCore::checkAcceptChild):
        (WebCore::transferOwnerDocument):
        (WebCore::Node::checkReplaceChild):
        (WebCore::Node::checkAddChild):

2010-08-30  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        [Chromium] bindTexture(TEXTURE_CUBE_MAP) shouldn't generate errors with valid cubemap texture
        https://bugs.webkit.org/show_bug.cgi?id=44922

        * html/canvas/WebGLRenderingContext.cpp: Remove TEXTURE_WRAP_R code.
        (WebCore::WebGLRenderingContext::bindTexture):
        * html/canvas/WebGLTexture.cpp: Remove the code for tracking TEXTURE_WRAP_R.
        (WebCore::WebGLTexture::WebGLTexture):
        * html/canvas/WebGLTexture.h: Ditto.

2010-08-31  Jian Li  <jianli@chromium.org>

        Rubber-stamped by David Levin.

        Rename addTwoCStrings to concatenateTwoCStrings.

        * fileapi/BlobBuilder.cpp:
        (WebCore::concatenateTwoCStrings):
        (WebCore::BlobBuilder::append):

2010-08-31  Jian Li  <jianli@chromium.org>

        Reviewed by Darin Fisher.

        Improve BlobBuilder to combine adjacent strings.
        https://bugs.webkit.org/show_bug.cgi?id=44884

        * fileapi/BlobBuilder.cpp:
        (WebCore::addTwoCStrings):
        (WebCore::BlobBuilder::append):

2010-08-31  Darin Adler  <darin@apple.com>

        Reviewed by Simon Fraser.

        Make DOM classes start with a reference count of 1, like all other RefCounted
        https://bugs.webkit.org/show_bug.cgi?id=28068

        * dom/Document.cpp:
        (WebCore::Document::accessSVGExtensions): Use adoptPtr instead of set.

        * dom/Document.h: Removed initialRefCount in Node constructor. It's always 1 now.

        * dom/Node.h: Removed CreateWithZeroRefCountFlag, CreateStyledElementZeroRefCount,
        CreateSVGElementZeroRefCount, and initialRefCount.

        * platform/TreeShared.h: Removed initialRefCount argument. It's always 1 now.

        * rendering/RenderSVGShadowTreeRootContainer.cpp:
        (WebCore::RenderSVGShadowTreeRootContainer::updateFromElement): Use create
        instead of new.

        * rendering/SVGResources.h: Inherit from Noncopyable.

        * rendering/SVGResourcesCache.cpp:
        (WebCore::SVGResourcesCache::~SVGResourcesCache): Removed unneeded special
        case code.

        * rendering/SVGShadowTreeElements.cpp:
        (WebCore::SVGShadowTreeContainerElement::create): Added.
        (WebCore::SVGShadowTreeRootElement::SVGShadowTreeRootElement): Made argument
        type more specific.
        (WebCore::SVGShadowTreeRootElement::create): Added.
        * rendering/SVGShadowTreeElements.h: Added create functions, and made the
        argument type more specific.

        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::SVGDocumentExtensions): Use adoptPtr.
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged): Use adoptPtr instead of set.

        * svg/SVGElement.cpp:
        (WebCore::SVGElement::SVGElement): Use CreateSVGElement instead of
        CreateSVGElementZeroRefCount.
        (WebCore::SVGElement::create): Use adoptRef.

        * wml/WMLElement.cpp:
        (WebCore::WMLElement::WMLElement): Use CreateStyledElement instead of
        CreateStyledElementZeroRefCount.
        (WebCore::WMLElement::create): Use adoptRef.

        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::create):
        * svg/SVGAltGlyphElement.cpp:
        (WebCore::SVGAltGlyphElement::create):
        * svg/SVGAnimateColorElement.cpp:
        (WebCore::SVGAnimateColorElement::create):
        * svg/SVGAnimateElement.cpp:
        (WebCore::SVGAnimateElement::create):
        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::create):
        * svg/SVGAnimateTransformElement.cpp:
        (WebCore::SVGAnimateTransformElement::create):
        * svg/SVGCircleElement.cpp:
        (WebCore::SVGCircleElement::create):
        * svg/SVGClipPathElement.cpp:
        (WebCore::SVGClipPathElement::create):
        * svg/SVGCursorElement.cpp:
        (WebCore::SVGCursorElement::create):
        * svg/SVGDefsElement.cpp:
        (WebCore::SVGDefsElement::create):
        * svg/SVGDescElement.cpp:
        (WebCore::SVGDescElement::create):
        * svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::create):
        * svg/SVGFEBlendElement.cpp:
        (WebCore::SVGFEBlendElement::create):
        * svg/SVGFEColorMatrixElement.cpp:
        (WebCore::SVGFEColorMatrixElement::create):
        * svg/SVGFEComponentTransferElement.cpp:
        (WebCore::SVGFEComponentTransferElement::create):
        * svg/SVGFECompositeElement.cpp:
        (WebCore::SVGFECompositeElement::create):
        * svg/SVGFEConvolveMatrixElement.cpp:
        (WebCore::SVGFEConvolveMatrixElement::create):
        * svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::create):
        * svg/SVGFEDisplacementMapElement.cpp:
        (WebCore::SVGFEDisplacementMapElement::create):
        * svg/SVGFEDistantLightElement.cpp:
        (WebCore::SVGFEDistantLightElement::create):
        * svg/SVGFEFloodElement.cpp:
        (WebCore::SVGFEFloodElement::create):
        * svg/SVGFEFuncAElement.cpp:
        (WebCore::SVGFEFuncAElement::create):
        * svg/SVGFEFuncBElement.cpp:
        (WebCore::SVGFEFuncBElement::create):
        * svg/SVGFEFuncGElement.cpp:
        (WebCore::SVGFEFuncGElement::create):
        * svg/SVGFEFuncRElement.cpp:
        (WebCore::SVGFEFuncRElement::create):
        * svg/SVGFEGaussianBlurElement.cpp:
        (WebCore::SVGFEGaussianBlurElement::create):
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::create):
        * svg/SVGFEMergeElement.cpp:
        (WebCore::SVGFEMergeElement::create):
        * svg/SVGFEMergeNodeElement.cpp:
        (WebCore::SVGFEMergeNodeElement::create):
        * svg/SVGFEMorphologyElement.cpp:
        (WebCore::SVGFEMorphologyElement::create):
        * svg/SVGFEOffsetElement.cpp:
        (WebCore::SVGFEOffsetElement::create):
        * svg/SVGFEPointLightElement.cpp:
        (WebCore::SVGFEPointLightElement::create):
        * svg/SVGFESpecularLightingElement.cpp:
        (WebCore::SVGFESpecularLightingElement::create):
        * svg/SVGFESpotLightElement.cpp:
        (WebCore::SVGFESpotLightElement::create):
        * svg/SVGFETileElement.cpp:
        (WebCore::SVGFETileElement::create):
        * svg/SVGFETurbulenceElement.cpp:
        (WebCore::SVGFETurbulenceElement::create):
        * svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::create):
        * svg/SVGFontElement.cpp:
        (WebCore::SVGFontElement::create):
        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::create):
        * svg/SVGFontFaceFormatElement.cpp:
        (WebCore::SVGFontFaceFormatElement::create):
        * svg/SVGFontFaceNameElement.cpp:
        (WebCore::SVGFontFaceNameElement::create):
        * svg/SVGFontFaceSrcElement.cpp:
        (WebCore::SVGFontFaceSrcElement::create):
        * svg/SVGFontFaceUriElement.cpp:
        (WebCore::SVGFontFaceUriElement::create):
        * svg/SVGForeignObjectElement.cpp:
        (WebCore::SVGForeignObjectElement::create):
        * svg/SVGGElement.cpp:
        (WebCore::SVGGElement::create):
        * svg/SVGGlyphElement.cpp:
        (WebCore::SVGGlyphElement::create):
        * svg/SVGHKernElement.cpp:
        (WebCore::SVGHKernElement::create):
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::create):
        * svg/SVGLineElement.cpp:
        (WebCore::SVGLineElement::create):
        * svg/SVGLinearGradientElement.cpp:
        (WebCore::SVGLinearGradientElement::create):
        * svg/SVGMPathElement.cpp:
        (WebCore::SVGMPathElement::create):
        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::create):
        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::create):
        * svg/SVGMetadataElement.cpp:
        (WebCore::SVGMetadataElement::create):
        * svg/SVGMissingGlyphElement.cpp:
        (WebCore::SVGMissingGlyphElement::create):
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::create):
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::create):
        * svg/SVGPolygonElement.cpp:
        (WebCore::SVGPolygonElement::create):
        * svg/SVGPolylineElement.cpp:
        (WebCore::SVGPolylineElement::create):
        * svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::create):
        * svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::create):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::create):
        (WebCore::SVGSVGElement::currentView):
        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::create):
        * svg/SVGSetElement.cpp:
        (WebCore::SVGSetElement::create):
        * svg/SVGStopElement.cpp:
        (WebCore::SVGStopElement::create):
        * svg/SVGStyleElement.cpp:
        (WebCore::SVGStyleElement::create):
        * svg/SVGSwitchElement.cpp:
        (WebCore::SVGSwitchElement::create):
        * svg/SVGSymbolElement.cpp:
        (WebCore::SVGSymbolElement::create):
        * svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefElement::create):
        * svg/SVGTSpanElement.cpp:
        (WebCore::SVGTSpanElement::create):
        * svg/SVGTextElement.cpp:
        (WebCore::SVGTextElement::create):
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::create):
        * svg/SVGTitleElement.cpp:
        (WebCore::SVGTitleElement::create):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::create):
        (WebCore::SVGUseElement::expandUseElementsInShadowTree):
        * svg/SVGVKernElement.cpp:
        (WebCore::SVGVKernElement::create):
        * svg/SVGViewElement.cpp:
        (WebCore::SVGViewElement::create):
        * wml/WMLAElement.cpp:
        (WebCore::WMLAElement::create):
        * wml/WMLAccessElement.cpp:
        (WebCore::WMLAccessElement::create):
        * wml/WMLAnchorElement.cpp:
        (WebCore::WMLAnchorElement::create):
        * wml/WMLBRElement.cpp:
        (WebCore::WMLBRElement::create):
        * wml/WMLCardElement.cpp:
        (WebCore::WMLCardElement::create):
        * wml/WMLDoElement.cpp:
        (WebCore::WMLDoElement::create):
        * wml/WMLDocument.h:
        (WebCore::WMLDocument::create):
        * wml/WMLFieldSetElement.cpp:
        (WebCore::WMLFieldSetElement::create):
        * wml/WMLFormControlElement.cpp:
        (WebCore::WMLFormControlElement::create):
        * wml/WMLGoElement.cpp:
        (WebCore::WMLGoElement::create):
        * wml/WMLImageElement.cpp:
        (WebCore::WMLImageElement::create):
        * wml/WMLInputElement.cpp:
        (WebCore::WMLInputElement::create):
        * wml/WMLInsertedLegendElement.cpp:
        (WebCore::WMLInsertedLegendElement::create):
        * wml/WMLIntrinsicEvent.cpp:
        (WebCore::WMLIntrinsicEvent::create):
        * wml/WMLMetaElement.cpp:
        (WebCore::WMLMetaElement::create):
        * wml/WMLNoopElement.cpp:
        (WebCore::WMLNoopElement::create):
        * wml/WMLOnEventElement.cpp:
        (WebCore::WMLOnEventElement::create):
        * wml/WMLOptGroupElement.cpp:
        (WebCore::WMLOptGroupElement::create):
        * wml/WMLOptionElement.cpp:
        (WebCore::WMLOptionElement::create):
        * wml/WMLPElement.cpp:
        (WebCore::WMLPElement::create):
        * wml/WMLPostfieldElement.cpp:
        (WebCore::WMLPostfieldElement::create):
        * wml/WMLPrevElement.cpp:
        (WebCore::WMLPrevElement::create):
        * wml/WMLRefreshElement.cpp:
        (WebCore::WMLRefreshElement::create):
        * wml/WMLSelectElement.cpp:
        (WebCore::WMLSelectElement::create):
        * wml/WMLSetvarElement.cpp:
        (WebCore::WMLSetvarElement::create):
        * wml/WMLTableElement.cpp:
        (WebCore::WMLTableElement::create):
        * wml/WMLTaskElement.cpp:
        (WebCore::WMLTaskElement::create):
        * wml/WMLTemplateElement.cpp:
        (WebCore::WMLTemplateElement::create):
        * wml/WMLTimerElement.cpp:
        (WebCore::WMLTimerElement::create):
        Use adoptRef.

2010-08-31  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Nate Chapin.

        Local frame loads should check against origin (not referrer)
        https://bugs.webkit.org/show_bug.cgi?id=44888

        Test: fast/frames/iframe-no-src-local-origin-allow.html

        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::loadSubframe):

2010-08-25  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        Passing premultiplyAlpha=false to tex{Sub}Image2D loses information (cg)
        https://bugs.webkit.org/show_bug.cgi?id=44566

        * platform/graphics/cg/GraphicsContext3DCG.cpp:
        (WebCore::GraphicsContext3D::getImageData): Fix the premultiplyAlpha issue for cg.

2010-08-31  Dave Hyatt  <hyatt@apple.com>

        Reviewed by Adam Roben.

        https://bugs.webkit.org/show_bug.cgi?id=44956, paginate block-level replaced elements.
       <rdar://problem/8000991> Images with display:block get split between columns or pages

        Added fast/multicol/paginate-block-replaced.html

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

2010-08-31  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=36515
        CSS style definitions are ignored if they just follow a "@charset" which appears in lines
        other than the first line in stylesheet.

        Test: fast/css/misplaced-charset.html

        * css/CSSGrammar.y: Ignore a misplaced charset rule without consuming extra characters and
        thus breaking subsequent rules.

2010-08-31  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Antonio Gomes.

        [CMake] Add IF (ENABLE_MATHML) around MathML sources
        https://bugs.webkit.org/show_bug.cgi?id=44927

        * CMakeLists.txt:

2010-08-31  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Kenneth Rohde Christiansen.

        [CMake] Unify GENERATE_DOM_NAMES code
        https://bugs.webkit.org/show_bug.cgi?id=44842

        * CMakeLists.txt: Added property svn:eol-style.

2010-08-31  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by Tony Chang.

        [chromium] Add an interface for platform copy/paste drag/drop data objects
        https://bugs.webkit.org/show_bug.cgi?id=44914

        Currently, Chromium only supports a few hardcoded data types in
        event.dataTransfer. This is the first of several patches to add support
        for arbitrary data types.

        No new tests.

        * WebCore.gypi:
        * platform/chromium/ChromiumDataObjectNew.h: Added.
        * platform/chromium/ClipboardChromium.cpp:

2010-08-30  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: add audits support to extension API
        Exposed (late) adding of categories from AuditPanel.
        Removed indexOfObjectInListSortedByFunction in favor of
        insertionIndexForObjectInListSortedByFunction (the former had
        weird interface always returning negative numbers and was only used in
        the latter).
        https://bugs.webkit.org/show_bug.cgi?id=44518

        Tests: inspector/extensions-audits-api.html
               inspector/extensions-audits.html

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/AuditFormatters.js: Added.
        (WebInspector.applyFormatters):
        (WebInspector.AuditFormatters.text):
        (WebInspector.AuditFormatters.snippet):
        (WebInspector.AuditFormatters.concat):
        (WebInspector.AuditFormatters.url):
        * inspector/front-end/AuditLauncherView.js:
        (WebInspector.AuditLauncherView):
        (WebInspector.AuditLauncherView.prototype.addCategory.compareCategories):
        (WebInspector.AuditLauncherView.prototype.addCategory):
        (WebInspector.AuditLauncherView.prototype._launchButtonClicked):
        (WebInspector.AuditLauncherView.prototype._selectAllClicked):
        (WebInspector.AuditLauncherView.prototype._categoryClicked):
        (WebInspector.AuditLauncherView.prototype._createCategoryElement):
        (WebInspector.AuditLauncherView.prototype._createLauncherUI):
        * inspector/front-end/AuditResultView.js:
        (WebInspector.AuditCategoryResultPane.prototype._appendResult):
        * inspector/front-end/AuditsPanel.js:
        (WebInspector.AuditsPanel):
        (WebInspector.AuditsPanel.prototype.addCategory):
        (WebInspector.AuditsPanel.prototype.getCategory):
        (WebInspector.AuditsPanel.prototype._executeAudit):
        (WebInspector.AuditCategory.prototype.run):
        * inspector/front-end/ExtensionAPI.js:
        (WebInspector.injectedExtensionAPI):
        (WebInspector.injectedExtensionAPI.EventSinkImpl.prototype.addListener):
        (WebInspector.injectedExtensionAPI.EventSinkImpl.prototype._fire):
        (WebInspector.injectedExtensionAPI.EventSinkImpl.prototype._dispatch):
        (WebInspector.injectedExtensionAPI.EventSink):
        (WebInspector.injectedExtensionAPI.InspectorExtensionAPI):
        (WebInspector.injectedExtensionAPI.Panels.prototype.create):
        (WebInspector.injectedExtensionAPI.Audits):
        (WebInspector.injectedExtensionAPI.Audits.prototype.addCategory):
        (WebInspector.injectedExtensionAPI.AuditCategory.customDispatch):
        (WebInspector.injectedExtensionAPI.AuditCategory):
        (WebInspector.injectedExtensionAPI.AuditCategoryImpl):
        (WebInspector.injectedExtensionAPI.AuditResult):
        (WebInspector.injectedExtensionAPI.AuditResult.prototype.get Severity):
        (WebInspector.injectedExtensionAPI.AuditResultImpl):
        (WebInspector.injectedExtensionAPI.AuditResultImpl.prototype.addResult):
        (WebInspector.injectedExtensionAPI.AuditResultImpl.prototype.createResult):
        (WebInspector.injectedExtensionAPI.AuditResultImpl.prototype.done):
        (WebInspector.injectedExtensionAPI.AuditResultImpl.prototype._nodeFactory):
        (WebInspector.injectedExtensionAPI.AuditResultNode):
        (WebInspector.injectedExtensionAPI.AuditResultNode.prototype.addChild):
        * inspector/front-end/ExtensionAuditCategory.js: Added.
        (WebInspector.ExtensionAuditCategory):
        (WebInspector.ExtensionAuditCategory.prototype.get id):
        (WebInspector.ExtensionAuditCategory.prototype.get displayName):
        (WebInspector.ExtensionAuditCategory.prototype.get ruleCount):
        (WebInspector.ExtensionAuditCategory.prototype.run):
        (WebInspector.ExtensionAuditCategoryResults):
        (WebInspector.ExtensionAuditCategoryResults.prototype.get complete):
        (WebInspector.ExtensionAuditCategoryResults.prototype.cancel):
        (WebInspector.ExtensionAuditCategoryResults.prototype.addResult):
        (WebInspector.ExtensionAuditCategoryResults.prototype._addNode):
        (WebInspector.ExtensionAuditCategoryResults.prototype._addResult):
        * inspector/front-end/ExtensionCommon.js: Added.
        (WebInspector.commonExtensionSymbols):
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer):
        (WebInspector.ExtensionServer.prototype.startAuditRun):
        (WebInspector.ExtensionServer.prototype.stopAuditRun):
        (WebInspector.ExtensionServer.prototype._postNotification):
        (WebInspector.ExtensionServer.prototype._onAddAuditCategory):
        (WebInspector.ExtensionServer.prototype._onAddAuditResult):
        (WebInspector.ExtensionServer.prototype._onStopAuditCategoryRun):
        (WebInspector.ExtensionServer.prototype._addExtensions):
        (WebInspector.ExtensionServer.prototype._buildExtensionAPIInjectedScript):
        (WebInspector.ExtensionStatus):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:
        * inspector/front-end/utilities.js:
        ():

2010-08-31  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Nate Chapin.

        Remove unused canReferToParentFrameEncoding() function from FrameLoader.cpp
        https://bugs.webkit.org/show_bug.cgi?id=44895

        No new tests; no behavior changed.

        * loader/FrameLoader.cpp:

2010-08-31  Jeremy Orlow  <jorlow@chromium.org>

        Build fix.

        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::openCursor):

2010-08-24  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Steve Block.

        Implement the rest of IDBCursors + make them persistent
        https://bugs.webkit.org/show_bug.cgi?id=44546

        Because the old (memory only) backend didn't support ranges, IDBCursors
        were never really finished.  This completes them on top of SQLite like
        the rest of IndexedDB.

        Test: storage/indexeddb/objectstore-cursor.html

        * storage/IDBCursor.cpp:
        (WebCore::IDBCursor::value):
        * storage/IDBCursorBackendImpl.cpp:
        (WebCore::IDBCursorBackendImpl::IDBCursorBackendImpl):
        (WebCore::IDBCursorBackendImpl::key):
        (WebCore::IDBCursorBackendImpl::value):
        (WebCore::IDBCursorBackendImpl::update):
        (WebCore::IDBCursorBackendImpl::continueFunction):
        (WebCore::IDBCursorBackendImpl::remove):
        (WebCore::IDBCursorBackendImpl::loadCurrentRow):
        * storage/IDBCursorBackendImpl.h:
        (WebCore::IDBCursorBackendImpl::create):
        * storage/IDBCursorBackendInterface.h:
        * storage/IDBKey.cpp:
        (WebCore::IDBKey::isEqual):
        * storage/IDBKey.h:
        * storage/IDBKeyRange.cpp:
        (WebCore::IDBKeyRange::leftBound):
        (WebCore::IDBKeyRange::rightBound):
        (WebCore::IDBKeyRange::bound):
        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::cursorWhereFragment):
        (WebCore::IDBObjectStoreBackendImpl::openCursor):

2010-08-27  John Gregg  <johnnyg@google.com>

        Reviewed by David Levin.

        Notifications should support a click event
        https://bugs.webkit.org/show_bug.cgi?id=44800

        Test: fast/notifications/notifications-click-event.html

        * notifications/Notification.h:
        * notifications/Notification.idl:

2010-08-31  Kent Tamura  <tkent@chromium.org>

        Reviewed by Adam Barth.

        [V8] Custom binding for "dataset"
        https://bugs.webkit.org/show_bug.cgi?id=44930

        * WebCore.gyp/WebCore.gyp: Remove the exclusion of DOMStringMap.idl.
        * WebCore.gypi: Add V8DOMStringMapCustom.cpp.
        * bindings/v8/custom/V8DOMStringMapCustom.cpp: Added.
        (WebCore::V8DOMStringMap::namedPropertyQuery):
        (WebCore::V8DOMStringMap::namedPropertyGetter):
        (WebCore::V8DOMStringMap::namedPropertyEnumerator):
        (WebCore::V8DOMStringMap::namedPropertyDeleter):
        (WebCore::V8DOMStringMap::namedPropertySetter):
        * dom/Element.idl: Remove V8 exclusion.
        * page/DOMWindow.idl: ditto.

2010-08-31  Jian Li  <jianli@chromium.org>

        Fix chromium build break.

        * page/DOMWindow.h:

2010-08-31  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Stale document crashes at multiple URLs (with new parser)
        https://bugs.webkit.org/show_bug.cgi?id=44885

        We're not supposed to load resources in detached documents.  According
        to several locations I examined, it's the job of the caller of
        DocLoader to check this invariant.  Like most code dealing with
        detached documents, this check isn't overly consistent.  At some point,
        we'll need to rationalize all the different patterns here.  However, at
        this point, this patch appears correct because it matches what we do
        for <link rel="stylesheet">.

        Test: fast/dom/HTMLLinkElement/prefetch-detached.html

        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::process):
        * loader/DocLoader.cpp:
        (WebCore::DocLoader::requestLinkPrefetch):

2010-08-31  Jian Li  <jianli@chromium.org>

        Reviewed by David Levin.

        Expose window.createBlobURL and window.revokeBlobURL.
        https://bugs.webkit.org/show_bug.cgi?id=44908

        Tests: fast/files/apply-blob-url-to-img.html
               fast/files/apply-blob-url-to-xhr.html

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::createBlobURL):
        (WebCore::DOMWindow::revokeBlobURL):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::createRequest):

2010-08-31  Jian Li  <jianli@chromium.org>

        Reviewed by David Levin.

        Support FileReaderSync in workers.
        https://bugs.webkit.org/show_bug.cgi?id=44657

        Also add FileException interface and make Blob/File/FileError useable in
        workers.

        Tests: fast/files/workers/worker-read-blob-async.html
               fast/files/workers/worker-read-blob-sync.html
               fast/files/workers/worker-read-file-async.html
               fast/files/workers/worker-read-file-sync.html

        * DerivedSources.cpp:
        * DerivedSources.make:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * fileapi/Blob.idl: Added NoStaticTables attribute.
        * fileapi/File.idl: Added NoStaticTables attribute.
        * fileapi/FileError.idl: Added NoStaticTables attribute.
        * fileapi/FileException.h: Added.
        * fileapi/FileException.idl: Added.
        * fileapi/FileReaderSync.cpp: Added.
        * fileapi/FileReaderSync.h: Added.
        * fileapi/FileReaderSync.idl: Added.
        * workers/WorkerContext.idl: Expose FileReaderSync and BlodBuilder in workers.

2010-08-30  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Buffered ranges drawing support
        https://bugs.webkit.org/show_bug.cgi?id=44869

        Refactored the media slider track painting code to support
        multiple buffered ranges painting. This change introduces no
        functional regression.

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

2010-08-30  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Adam Barth.

        HISTORY_ALWAYS_ASYNC should be removed (history should always be async)
        https://bugs.webkit.org/show_bug.cgi?id=44315

        Remove check in RedirectScheduler::scheduleHistoryNavigation that would
        dispatch some navigations synchronously.

        Test: fast/history/history-traversal-is-asynchronous.html

        * loader/RedirectScheduler.cpp:
        (WebCore::RedirectScheduler::scheduleHistoryNavigation):

2010-08-30  Jian Li  <jianli@chromium.org>

        Try to fix break again.

        * fileapi/ThreadableBlobRegistry.cpp:
        (WebCore::ThreadableBlobRegistry::registerBlobURL):
        (WebCore::ThreadableBlobRegistry::unregisterBlobURL):

2010-08-30  Jian Li  <jianli@chromium.org>

        Fix another build break. Also fix directory upload test break.

        * fileapi/File.cpp:
        (WebCore::File::File):
        * fileapi/ThreadableBlobRegistry.cpp:

2010-08-30  Jian Li  <jianli@chromium.org>

        Fix build break.

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

2010-08-30  Jian Li  <jianli@chromium.org>

        Fix qt/gtk build break.

        * platform/network/BlobRegistryImpl.cpp:

2010-08-30  Jian Li  <jianli@chromium.org>

        Reviewed by Darin Fisher.

        Switch the Blob implementation to using the blob data registration model
        https://bugs.webkit.org/show_bug.cgi?id=44389

        Tests: fast/files/read-blob-async.html
               fast/files/read-file-async.html

        With this switch, File/Blob/BlobBuilder are changed to register the blob
        data. FileReader is changed to route through loading the blob resource.
        FormData is also updated to take BlobData. The WebKit mac implementation
        is updated to resolve the blob references in the BlobData.

        * CMakeLists.txt: Update the project file to remove BlobItem.*.
        * GNUmakefile.am: Update the project file to remove BlobItem.*.
        * WebCore.gypi: Update the project file to remove BlobItem.*.
        * WebCore.pro: Update the project file to remove BlobItem.*.
        * WebCore.vcproj/WebCore.vcproj: Update the project file to remove BlobItem.*.
        * WebCore.xcodeproj/project.pbxproj: Update the project file to remove BlobItem.*.
        * fileapi/Blob.cpp: Switch to using BlobData.
        (WebCore::Blob::Blob):
        (WebCore::Blob::slice):
        * fileapi/Blob.h: Switch to using BlobData.
        (WebCore::Blob::create):
        (WebCore::Blob::size):
        (WebCore::Blob::isFile):
        * fileapi/BlobBuilder.cpp: Switch to using BlobData.
        (WebCore::BlobBuilder::BlobBuilder):
        (WebCore::BlobBuilder::append):
        (WebCore::BlobBuilder::getBlob):
        * fileapi/BlobBuilder.h: Switch to using BlobData.
        * fileapi/BlobURL.cpp: Add a new helper method used in FormData.
        (WebCore::BlobURL::getIdentifier):
        * fileapi/BlobURL.h:
        * fileapi/File.cpp: Switch to using BlobData.
        (WebCore::createBlobDataForFile):
        (WebCore::File::File):
        (WebCore::File::size):
        (WebCore::File::captureSnapshot):
        * fileapi/File.h: Switch to using BlobData.
        (WebCore::File::create):
        (WebCore::File::path):
        (WebCore::File::name):
        (WebCore::File::webkitRelativePath):
        * fileapi/FileReader.cpp: Change the reading to route through blob resource loading.
        (WebCore::FileReader::FileReader):
        (WebCore::FileReader::readAsBinaryString):
        (WebCore::FileReader::readAsText):
        (WebCore::FileReader::readAsDataURL):
        (WebCore::delayedStart):
        (WebCore::FileReader::readInternal):
        (WebCore::FileReader::terminate):
        (WebCore::FileReader::start):
        (WebCore::FileReader::didReceiveResponse):
        (WebCore::FileReader::didReceiveData):
        (WebCore::FileReader::didFinishLoading):
        (WebCore::FileReader::didFail):
        (WebCore::FileReader::failed):
        (WebCore::FileReader::httpStatusCodeToExceptionCode):
        (WebCore::FileReader::result):
        (WebCore::FileReader::convertToDataURL):
        * fileapi/FileReader.h:
        * html/FormDataList.cpp: Account to BlobData change.
        (WebCore::FormDataList::appendString):
        (WebCore::FormDataList::appendBlob):
        * html/FormDataList.h: Account to BlobData change.
        (WebCore::FormDataList::appendBlob):
        (WebCore::FormDataList::Item::Item):
        (WebCore::FormDataList::Item::data):
        (WebCore::FormDataList::Item::blob):
        (WebCore::FormDataList::items):
        * loader/FormSubmission.cpp: Account to BlobData change.
        (WebCore::FormSubmission::create):
        * platform/BlobItem.cpp: Removed.
        * platform/BlobItem.h: Removed.
        * platform/network/BlobRegistryImpl.cpp: Add the implementations for resource loading.
        (WebCore::BlobRegistryImpl::createResourceHandle):
        (WebCore::BlobRegistryImpl::loadResourceSynchronously):
        * platform/network/BlobResourceHandle.cpp: Fix a bug that the ref is not added.
        (WebCore::BlobResourceHandle::BlobResourceHandle):
        * platform/network/FormData.cpp: Account to BlobData change.
        (WebCore::FormData::create):
        (WebCore::FormData::createMultiPart):
        (WebCore::FormData::deepCopy):
        (WebCore::FormData::appendFile):
        (WebCore::FormData::appendKeyValuePairItems):
        * platform/network/FormData.h: Account to BlobData change.
        * platform/network/mac/FormDataStreamMac.mm: Resolve blob references in the form data.
        (WebCore::closeCurrentStream):
        (WebCore::advanceCurrentStream):
        (WebCore::formCreate):
        (WebCore::formRead):
        (WebCore::setHTTPBody):
        * xml/XMLHttpRequest.cpp: Account to BlobData change.
        (WebCore::XMLHttpRequest::send):

2010-08-30  Eric Seidel  <eric@webkit.org>

        Unreviewed, rolling out r66418.
        http://trac.webkit.org/changeset/66418
        https://bugs.webkit.org/show_bug.cgi?id=44896

        Adam tried to roll this out with:
        https://bugs.webkit.org/show_bug.cgi?id=44924
        but we hit a commit-queue edgecase and it failed, trying again.

        Causing test failures on multiple bots

        * rendering/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::layout):
        * rendering/RenderObject.cpp:
        * rendering/RenderObject.h:
        (WebCore::RenderObject::setNeedsBoundariesUpdate):
        * rendering/RenderObjectChildList.cpp:
        (WebCore::RenderObjectChildList::removeChildNode):
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::layout):
        (WebCore::RenderPath::paint):
        (WebCore::RenderPath::styleWillChange):
        * rendering/RenderPath.h:
        (WebCore::RenderPath::setNeedsBoundariesUpdate):
        * rendering/RenderSVGBlock.cpp:
        * rendering/RenderSVGBlock.h:
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::RenderSVGContainer):
        (WebCore::RenderSVGContainer::layout):
        (WebCore::RenderSVGContainer::paint):
        (WebCore::RenderSVGContainer::objectBoundingBox):
        (WebCore::RenderSVGContainer::strokeBoundingBox):
        (WebCore::RenderSVGContainer::repaintRectInLocalCoordinates):
        * rendering/RenderSVGContainer.h:
        (WebCore::RenderSVGContainer::calculateLocalTransform):
        * rendering/RenderSVGGradientStop.h:
        * rendering/RenderSVGHiddenContainer.cpp:
        (WebCore::RenderSVGHiddenContainer::clippedOverflowRectForRepaint):
        (WebCore::RenderSVGHiddenContainer::objectBoundingBox):
        (WebCore::RenderSVGHiddenContainer::repaintRectInLocalCoordinates):
        * rendering/RenderSVGHiddenContainer.h:
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::layout):
        * rendering/RenderSVGImage.h:
        * rendering/RenderSVGInline.cpp:
        * rendering/RenderSVGInline.h:
        * rendering/RenderSVGModelObject.cpp:
        * rendering/RenderSVGModelObject.h:
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::RenderSVGRoot):
        (WebCore::RenderSVGRoot::layout):
        (WebCore::RenderSVGRoot::objectBoundingBox):
        (WebCore::RenderSVGRoot::strokeBoundingBox):
        (WebCore::RenderSVGRoot::repaintRectInLocalCoordinates):
        * rendering/RenderSVGRoot.h:
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::layout):
        * rendering/RenderSVGTransformableContainer.cpp:
        (WebCore::RenderSVGTransformableContainer::calculateLocalTransform):
        * rendering/RenderSVGTransformableContainer.h:
        * rendering/RenderSVGViewportContainer.cpp:
        (WebCore::RenderSVGViewportContainer::calcViewport):
        * rendering/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::computeContainerBoundingBox):
        * rendering/SVGRenderSupport.h:
        * rendering/style/SVGRenderStyle.cpp:
        (WebCore::SVGRenderStyle::diff):

2010-08-30  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Implement CDATASection state for the HTMLTokenizer
        https://bugs.webkit.org/show_bug.cgi?id=44923

        In the spec, this state refers back to the HTMLTreeBuilder from the
        HTMLTokenizer.  Rather that introduce that (backwards) dependencies, we
        have the tree builder set a bit on the tokenizer.

        * html/parser/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::reset):
        (WebCore::HTMLTokenizer::nextToken):
        * html/parser/HTMLTokenizer.h:
        (WebCore::HTMLTokenizer::shouldAllowCDATA):
        (WebCore::HTMLTokenizer::setShouldAllowCDATA):
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::constructTreeFromToken):

2010-08-30  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Enable HTML5lib's test_innerHTML01.dat
        https://bugs.webkit.org/show_bug.cgi?id=44919

        These tests provoked two branches that we hadn't implemented yet.

        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTag):
        (WebCore::HTMLTreeBuilder::processEndTag):

2010-08-30  Mark Rowe  <mrowe@apple.com>

        Reviewed by Darin Adler.

        Stop using a QuickDraw function that was only used for debugging purposes.

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

2010-08-30  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        queryCommandValue("BackColor") returns rgb(0,0,0) for elements with transparent background
        https://bugs.webkit.org/show_bug.cgi?id=21680

        The bug was caused by WebKit's using the computed style to obtain the background color,
        which is rgba(0,0,0,0) for nodes with transparent background color. While this is correct
        in the accordance to CSS2 because background-color is not inherited by default,
        it is not desirable for editing purposes where the background color in effect is expected.

        Modified valueStyle in EditorCommand.cpp to call Editor::selectionStartCSSPropertyValue,
        instead of Frame::selectionStartStylePropertyValue, which traverses common ancestors of
        the selected range or caret to retrieve the effective background color of the selected region
        instead of the background color at the start of the selection.
        This takes effect when the original background color is transparent or the selection is range
        (to avoid picking up the background color only present at the start of paragraph).

        Removed selectionStartStylePropertyValue and migrated it to Editor::selectionStartCSSPropertyValue.

        Test: editing/execCommand/query-command-value-background-color.html

        * editing/Editor.cpp:
        (WebCore::hasTransparentBackgroundColor): Checks whether the specified style's background color is transparent or not.
        (WebCore::Editor::selectionStartCSSPropertyValue): Migrated the contents of selectionStartStylePropertyValue and
          added the special case for background color.
        * editing/Editor.h: Added the prototype for selectionStartCSSPropertyValue.
        * editing/EditorCommand.cpp:
        (WebCore::valueStyle): Calls Editor::selectionStartCSSPropertyValue.
        * page/Frame.cpp: Removed selectionStartStylePropertyValue.
        * page/Frame.h: Ditto.

2010-08-30  Lei Zhang  <thestig@chromium.org>

        Reviewed by Shinichiro Hamaji.

        Defer printing until the FrameLoader finishes loading.
        https://bugs.webkit.org/show_bug.cgi?id=43658

        * manual-tests/print-before-load.html: Added.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::finishedLoading):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::DOMWindow):
        (WebCore::DOMWindow::print):
        * page/DOMWindow.h:
        (WebCore::DOMWindow::printDeferred):

2010-08-30  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        audio engine: add ReverbConvolver class
        https://bugs.webkit.org/show_bug.cgi?id=34912

        No new tests since audio API is not yet implemented.

        * platform/audio: Added.
        * platform/audio/ReverbAccumulationBuffer.cpp: Added.
        (WebCore::ReverbAccumulationBuffer::ReverbAccumulationBuffer):
        (WebCore::ReverbAccumulationBuffer::readAndClear):
        (WebCore::ReverbAccumulationBuffer::updateReadIndex):
        (WebCore::ReverbAccumulationBuffer::accumulate):
        (WebCore::ReverbAccumulationBuffer::reset):
        * platform/audio/ReverbAccumulationBuffer.h: Added.
        (WebCore::ReverbAccumulationBuffer::readIndex):
        (WebCore::ReverbAccumulationBuffer::readTimeFrame):
        * platform/audio/ReverbConvolver.cpp: Added.
        (WebCore::backgroundThreadEntry):
        (WebCore::ReverbConvolver::ReverbConvolver):
        (WebCore::ReverbConvolver::~ReverbConvolver):
        (WebCore::ReverbConvolver::backgroundThreadEntry):
        (WebCore::ReverbConvolver::process):
        (WebCore::ReverbConvolver::reset):
        * platform/audio/ReverbConvolver.h: Added.
        (WebCore::ReverbConvolver::impulseResponseLength):
        (WebCore::ReverbConvolver::inputBuffer):
        (WebCore::ReverbConvolver::useBackgroundThreads):
        * platform/audio/ReverbConvolverStage.cpp: Added.
        (WebCore::ReverbConvolverStage::ReverbConvolverStage):
        (WebCore::ReverbConvolverStage::processInBackground):
        (WebCore::ReverbConvolverStage::process):
        (WebCore::ReverbConvolverStage::reset):
        * platform/audio/ReverbConvolverStage.h: Added.
        (WebCore::ReverbConvolverStage::inputReadIndex):
        * platform/audio/ReverbInputBuffer.cpp: Added.
        (WebCore::ReverbInputBuffer::ReverbInputBuffer):
        (WebCore::ReverbInputBuffer::write):
        (WebCore::ReverbInputBuffer::directReadFrom):
        (WebCore::ReverbInputBuffer::reset):
        * platform/audio/ReverbInputBuffer.h: Added.
        (WebCore::ReverbInputBuffer::writeIndex):

2010-08-30  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Add culling to RenderSVGContainer
        https://bugs.webkit.org/show_bug.cgi?id=44896

        Cache object/strokeBoundingBox and repaintRectInLocalCoordinates() in RenderSVGContainer & RenderSVGRoot, just like it's done in RenderPath.
        Propagate boundary changes up the render tree, in layout phase, in order to notify parents that they should update their cached boundaries.

        This is a huge speed benefit when interacting with an already layouted document, as there's no need anymore to traverse all children
        of any container or <svg> element, just to retrieve the repaint rect.

        * rendering/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::layout):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::setNeedsBoundariesUpdate):
        * rendering/RenderObject.h:
        * rendering/RenderObjectChildList.cpp:
        (WebCore::RenderObjectChildList::removeChildNode):
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::layout):
        (WebCore::RenderPath::paint):
        * rendering/RenderPath.h:
        (WebCore::RenderPath::path):
        (WebCore::RenderPath::setNeedsBoundariesUpdate):
        * rendering/RenderSVGBlock.cpp:
        (WebCore::RenderSVGBlock::styleWillChange):
        * rendering/RenderSVGBlock.h:
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::RenderSVGContainer):
        (WebCore::RenderSVGContainer::layout):
        (WebCore::RenderSVGContainer::paint):
        (WebCore::RenderSVGContainer::updateCachedBoundaries):
        * rendering/RenderSVGContainer.h:
        (WebCore::RenderSVGContainer::setNeedsBoundariesUpdate):
        (WebCore::RenderSVGContainer::objectBoundingBox):
        (WebCore::RenderSVGContainer::strokeBoundingBox):
        (WebCore::RenderSVGContainer::repaintRectInLocalCoordinates):
        (WebCore::RenderSVGContainer::calculateLocalTransform):
        * rendering/RenderSVGGradientStop.h:
        (WebCore::RenderSVGGradientStop::strokeBoundingBox):
        * rendering/RenderSVGHiddenContainer.cpp:
        * rendering/RenderSVGHiddenContainer.h:
        (WebCore::RenderSVGHiddenContainer::clippedOverflowRectForRepaint):
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::layout):
        (WebCore::RenderSVGImage::styleWillChange):
        * rendering/RenderSVGImage.h:
        * rendering/RenderSVGInline.cpp:
        (WebCore::RenderSVGInline::styleWillChange):
        * rendering/RenderSVGInline.h:
        * rendering/RenderSVGModelObject.cpp:
        (WebCore::RenderSVGModelObject::styleWillChange):
        * rendering/RenderSVGModelObject.h:
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::RenderSVGRoot):
        (WebCore::RenderSVGRoot::layout):
        (WebCore::RenderSVGRoot::styleWillChange):
        (WebCore::RenderSVGRoot::updateCachedBoundaries):
        * rendering/RenderSVGRoot.h:
        (WebCore::RenderSVGRoot::setNeedsBoundariesUpdate):
        (WebCore::RenderSVGRoot::setNeedsTransformUpdate):
        (WebCore::RenderSVGRoot::objectBoundingBox):
        (WebCore::RenderSVGRoot::strokeBoundingBox):
        (WebCore::RenderSVGRoot::repaintRectInLocalCoordinates):
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::layout):
        * rendering/RenderSVGTransformableContainer.cpp:
        (WebCore::RenderSVGTransformableContainer::calculateLocalTransform):
        * rendering/RenderSVGTransformableContainer.h:
        * rendering/RenderSVGViewportContainer.cpp:
        (WebCore::RenderSVGViewportContainer::calcViewport):
        * rendering/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::computeContainerBoundingBoxes):
        (WebCore::SVGRenderSupport::paintInfoIntersectsRepaintRect):
        * rendering/SVGRenderSupport.h:
        * rendering/style/SVGRenderStyle.cpp:
        (WebCore::SVGRenderStyle::diff):

2010-08-30  Leandro Pereira  <leandro@profusion.mobi>

        [EFL] Unreviewed. Build fix when ENABLE_WEB_SOCKETS=ON.

        EFL port does not yet support automated tests.

        * CMakeLists.txt: Add missing files.
        * CMakeListsEfl.txt: Ditto.

2010-08-30  Kenneth Russell  <kbr@google.com>

        Reviewed by Chris Marrin.

        Expose Vector3 and associated operations
        https://bugs.webkit.org/show_bug.cgi?id=44666

        Rolling out earlier patch exposing Vector3 class in
        TransformationMatrix.h. A different approach will be taken under
        another bug.

        * platform/graphics/transforms/TransformationMatrix.cpp:
        (WebCore::v3Length):
        (WebCore::v3Scale):
        (WebCore::v3Dot):
        (WebCore::v3Combine):
        (WebCore::v3Cross):
        (WebCore::decompose):
        * platform/graphics/transforms/TransformationMatrix.ha:

2010-08-30  Jer Noble  <jer.noble@apple.com>

        Build fix; Unreviewed.

        Added a export symbol to the WebCore.exp.in list.

        * WebCore.exp.in:

2010-08-30  Chris Rogers  <crogers@google.com>

        Reviewed by Kenneth Russell.

        Add audio cone effect files.  The cone effect operates as defined in the OpenAL specification.
        https://bugs.webkit.org/show_bug.cgi?id=44712

        No new tests since audio API not implemented yet.

        * platform/audio: Added.
        * platform/audio/Cone.cpp: Added.
        (WebCore::ConeEffect::ConeEffect):
        (WebCore::ConeEffect::gain):
        * platform/audio/Cone.h: Added.
        (WebCore::ConeEffect::setInnerAngle):
        (WebCore::ConeEffect::innerAngle):
        (WebCore::ConeEffect::setOuterAngle):
        (WebCore::ConeEffect::outerAngle):
        (WebCore::ConeEffect::setOuterGain):
        (WebCore::ConeEffect::outerGain):

2010-08-30  Chris Rogers  <crogers@google.com>

        Reviewed by Chris Marrin.

        audio engine: add Reverb class
        https://bugs.webkit.org/show_bug.cgi?id=36466

        No new tests since audio API is not yet implemented.

        * platform/audio: Added.
        * platform/audio/Reverb.cpp: Added.
        (WebCore::calculateNormalizationScale):
        (WebCore::Reverb::Reverb):
        (WebCore::Reverb::initialize):
        (WebCore::Reverb::process):
        (WebCore::Reverb::reset):
        * platform/audio/Reverb.h: Added.
        (WebCore::Reverb::):
        (WebCore::Reverb::impulseResponseLength):

2010-08-30  Chris Rogers  <crogers@google.com>

        Unreviewed

        Add WebCore/platform/audio directory
        in preparation for landing: https://bugs.webkit.org/show_bug.cgi?id=36466

        * platform/audio: Added.

2010-08-27  Jer Noble  <jer.noble@apple.com>

        Reviewed by Eric Carlson.

        text/plain non-video files cause <video> to hang (while reading them?)
        https://bugs.webkit.org/show_bug.cgi?id=44212
        
        Disable all the QuickTime components which ingest .txt files.

        New tests: 
        * http/tests/media/video-served-as-text.html: Added.
        * http/tests/media/text-served-as-text.html: Added.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::createQTMovie): Disable all four text
            'eat' components.
        * platform/mac/WebCoreSystemInterface.h: Add wkQTMovieDisableComponent.
        * platform/mac/WebCoreSystemInterface.mm: Add wkQTMovieDisableComponent.

2010-08-30  Robert Hogan  <robert@webkit.org>

        Reviewed by Simon Hausmann.

        allow ports with windowed plugins to support windowless plugin tests

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

        Ports that implement plugins windowed by default need to have a way of
        supporting plugin tests that assume the plugin is windowless. Add this
        feature to the tests and support it in the webkit test plugin. Also
        add mouse and keyboard event logging to the webkit-test plugin on Unix.

        Unskip the following tests on Qt:

        plugins/mouse-events.html
        plugins/keyboard-events.html
        plugins/mouse-events-fixedpos.html

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

2010-08-30  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Darin Fisher.

        Add DOMFileSystem implementation to support Entry manipulation operations
        https://bugs.webkit.org/show_bug.cgi?id=44732

        No new tests; tests will be added later.

        * storage/DOMFileSystem.cpp:
        (WebCore::DOMFileSystem::root):
        (WebCore::checkValidityForForCopyOrMove): Added.
        (WebCore::DOMFileSystem::getMetadata): Added.
        (WebCore::DOMFileSystem::move): Added.
        (WebCore::DOMFileSystem::copy): Added.
        (WebCore::DOMFileSystem::remove): Added.
        (WebCore::DOMFileSystem::getParent): Added.
        (WebCore::DOMFileSystem::getFile): Added.
        (WebCore::DOMFileSystem::getDirectory): Added.
        (WebCore::DOMFileSystem::readDirectory): Added.
        * storage/DirectoryEntry.cpp:
        (WebCore::DirectoryEntry::getFile): Added implementation.
        (WebCore::DirectoryEntry::getDirectory): Added implementation.
        * storage/DirectoryReader.cpp:
        (WebCore::DirectoryReader::DirectoryReader): Added implementation.
        (WebCore::DirectoryReader::readEntries): Added implementation.
        * storage/DirectoryReader.h:
        * storage/Entry.cpp:
        (WebCore::Entry::getMetadata): Added implementation.
        (WebCore::Entry::moveTo): Added implementation.
        (WebCore::Entry::copyTo): Added implementation.
        (WebCore::Entry::remove): Added implementation.
        (WebCore::Entry::getParent): Added implementation.
        * storage/Entry.h:
        * storage/FileEntry.h:

        Added a helper template to schedule callbacks.
        * storage/DOMFileSystem.h:
        (WebCore::DOMFileSystem::DispatchCallbackTask): Added to schedule callbacks.
        (WebCore::DOMFileSystem::scheduleCallback): Added to schedule callbacks.

        Changed to fire callbacks asynchronously.
        * storage/LocalFileSystem.cpp:
        (WebCore::LocalFileSystem::requestFileSystem):

2010-08-30  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Xan Lopez.

        Fixed compilation error, now that we have included the
        GtkVersioning.h we have to remove some version dependent code from
        EventSender.

        * platform/gtk/GtkVersioning.c:
        (gdk_window_get_root_coords):
        * platform/gtk/GtkVersioning.h:

2010-08-30  Beth Dakin  <bdakin@apple.com>

        Reviewed by Sam Weinig.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=44804 Crashes in 
        RenderMathMLRoot::layout() and RenderMathMLRoot::paint()
        -and corresponding-
        <rdar://problem/8342055>

        All of the calls to firstChild() and lastChild() in 
        RenderMathMLRoot::layout() and RenderMathMLRoot::paint() need to be 
        null checked.

        * mathml/RenderMathMLRoot.cpp:
        (WebCore::RenderMathMLRoot::paint):
        (WebCore::RenderMathMLRoot::layout):

2010-08-30  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=44801 Crash in 
        RenderMathMLSubSup::layout()
        -and corresponding-
        <rdar://problem/8325203>

        Null-check m_scripts. It is null-checked everywhere else in the 
        class and can legitimately be null.

        * mathml/RenderMathMLSubSup.cpp:
        (WebCore::RenderMathMLSubSup::layout):

2010-08-30  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Martin Robinson.

        [Gtk] gdk_display_get_core_pointer and gdk_device_get_core_pointer
        are deprecated
        https://bugs.webkit.org/show_bug.cgi?id=44787

        We have replaced GtkVersioning.cpp with GtkVersioning.c and
        created a function (getDefaultGDKPointerDevice) to get the pointer
        of the window with the new APIs. We added that function to DRT and
        copyandpaste unit test.

        * GNUmakefile.am:
        * platform/gtk/GtkVersioning.c: Added.
        (gtk_adjustment_set_value):
        (gtk_adjustment_configure):
        (getDefaultGDKPointerDevice):
        * platform/gtk/GtkVersioning.cpp: Removed.
        * platform/gtk/GtkVersioning.h:

2010-08-30  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Make SVG constructors private to make sure callers all use create
        https://bugs.webkit.org/show_bug.cgi?id=44872

        Made as many members private and protected as possible, and got rid of many
        unneeded empty constructor and destructor definitions, in some cases changing
        a class to be non-polymorphic. Made some functions inline. Used the word document
        instead of the abbreviation doc. Removed unneeded explicit base class
        initialization in cases where it is no different from the default behavior.

        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::SVGAElement):
        (WebCore::SVGAElement::childShouldCreateRenderer):
        * svg/SVGAElement.h:
        * svg/SVGAltGlyphElement.cpp:
        (WebCore::SVGAltGlyphElement::SVGAltGlyphElement):
        * svg/SVGAltGlyphElement.h:
        * svg/SVGAngle.cpp:
        * svg/SVGAngle.h:
        * svg/SVGAnimateColorElement.cpp:
        (WebCore::SVGAnimateColorElement::SVGAnimateColorElement):
        * svg/SVGAnimateColorElement.h:
        * svg/SVGAnimateElement.cpp:
        (WebCore::SVGAnimateElement::SVGAnimateElement):
        * svg/SVGAnimateElement.h:
        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::SVGAnimateMotionElement):
        * svg/SVGAnimateMotionElement.h:
        * svg/SVGAnimateTransformElement.cpp:
        (WebCore::SVGAnimateTransformElement::SVGAnimateTransformElement):
        * svg/SVGAnimateTransformElement.h:
        * svg/SVGAnimatedPathData.cpp:
        * svg/SVGAnimatedPathData.h:
        * svg/SVGAnimatedPoints.cpp:
        * svg/SVGAnimatedPoints.h:
        * svg/SVGAnimationElement.cpp:
        (WebCore::SVGAnimationElement::SVGAnimationElement):
        * svg/SVGAnimationElement.h:
        * svg/SVGCircleElement.cpp:
        (WebCore::SVGCircleElement::SVGCircleElement):
        * svg/SVGCircleElement.h:
        * svg/SVGClipPathElement.cpp:
        (WebCore::SVGClipPathElement::SVGClipPathElement):
        * svg/SVGClipPathElement.h:
        * svg/SVGColor.cpp:
        * svg/SVGColor.h:
        * svg/SVGComponentTransferFunctionElement.cpp:
        (WebCore::SVGComponentTransferFunctionElement::SVGComponentTransferFunctionElement):
        * svg/SVGComponentTransferFunctionElement.h:
        * svg/SVGCursorElement.cpp:
        (WebCore::SVGCursorElement::SVGCursorElement):
        * svg/SVGCursorElement.h:
        * svg/SVGDefsElement.cpp:
        (WebCore::SVGDefsElement::SVGDefsElement):
        * svg/SVGDefsElement.h:
        * svg/SVGDescElement.cpp:
        (WebCore::SVGDescElement::SVGDescElement):
        * svg/SVGDescElement.h:
        * svg/SVGDocument.cpp:
        * svg/SVGDocument.h:
        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::SVGDocumentExtensions):
        (WebCore::SVGDocumentExtensions::reportWarning):
        (WebCore::SVGDocumentExtensions::reportError):
        * svg/SVGDocumentExtensions.h:
        * svg/SVGElement.h:
        * svg/SVGElementInstanceList.h:
        * svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::SVGEllipseElement):
        * svg/SVGEllipseElement.h:
        * svg/SVGExternalResourcesRequired.cpp:
        * svg/SVGExternalResourcesRequired.h:
        * svg/SVGFEBlendElement.cpp:
        (WebCore::SVGFEBlendElement::SVGFEBlendElement):
        * svg/SVGFEBlendElement.h:
        * svg/SVGFEColorMatrixElement.cpp:
        (WebCore::SVGFEColorMatrixElement::SVGFEColorMatrixElement):
        * svg/SVGFEColorMatrixElement.h:
        * svg/SVGFEComponentTransferElement.cpp:
        (WebCore::SVGFEComponentTransferElement::SVGFEComponentTransferElement):
        * svg/SVGFEComponentTransferElement.h:
        * svg/SVGFECompositeElement.cpp:
        (WebCore::SVGFECompositeElement::SVGFECompositeElement):
        * svg/SVGFECompositeElement.h:
        * svg/SVGFEConvolveMatrixElement.cpp:
        (WebCore::SVGFEConvolveMatrixElement::SVGFEConvolveMatrixElement):
        * svg/SVGFEConvolveMatrixElement.h:
        * svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::SVGFEDiffuseLightingElement):
        * svg/SVGFEDiffuseLightingElement.h:
        * svg/SVGFEDisplacementMapElement.cpp:
        (WebCore::SVGFEDisplacementMapElement::SVGFEDisplacementMapElement):
        * svg/SVGFEDisplacementMapElement.h:
        * svg/SVGFEDistantLightElement.cpp:
        (WebCore::SVGFEDistantLightElement::SVGFEDistantLightElement):
        * svg/SVGFEDistantLightElement.h:
        * svg/SVGFEFloodElement.cpp:
        (WebCore::SVGFEFloodElement::SVGFEFloodElement):
        * svg/SVGFEFloodElement.h:
        * svg/SVGFEFuncAElement.cpp:
        (WebCore::SVGFEFuncAElement::SVGFEFuncAElement):
        * svg/SVGFEFuncAElement.h:
        * svg/SVGFEFuncBElement.cpp:
        (WebCore::SVGFEFuncBElement::SVGFEFuncBElement):
        * svg/SVGFEFuncBElement.h:
        * svg/SVGFEFuncGElement.cpp:
        (WebCore::SVGFEFuncGElement::SVGFEFuncGElement):
        * svg/SVGFEFuncGElement.h:
        * svg/SVGFEFuncRElement.cpp:
        (WebCore::SVGFEFuncRElement::SVGFEFuncRElement):
        * svg/SVGFEFuncRElement.h:
        * svg/SVGFEGaussianBlurElement.cpp:
        (WebCore::SVGFEGaussianBlurElement::SVGFEGaussianBlurElement):
        * svg/SVGFEGaussianBlurElement.h:
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::SVGFEImageElement):
        * svg/SVGFEImageElement.h:
        * svg/SVGFELightElement.cpp:
        (WebCore::SVGFELightElement::SVGFELightElement):
        * svg/SVGFELightElement.h:
        * svg/SVGFEMergeElement.cpp:
        (WebCore::SVGFEMergeElement::SVGFEMergeElement):
        * svg/SVGFEMergeElement.h:
        * svg/SVGFEMergeNodeElement.cpp:
        (WebCore::SVGFEMergeNodeElement::SVGFEMergeNodeElement):
        * svg/SVGFEMergeNodeElement.h:
        * svg/SVGFEMorphologyElement.cpp:
        (WebCore::SVGFEMorphologyElement::SVGFEMorphologyElement):
        * svg/SVGFEMorphologyElement.h:
        * svg/SVGFEOffsetElement.cpp:
        (WebCore::SVGFEOffsetElement::SVGFEOffsetElement):
        * svg/SVGFEOffsetElement.h:
        * svg/SVGFEPointLightElement.cpp:
        (WebCore::SVGFEPointLightElement::SVGFEPointLightElement):
        (WebCore::SVGFEPointLightElement::lightSource):
        * svg/SVGFEPointLightElement.h:
        * svg/SVGFESpecularLightingElement.cpp:
        (WebCore::SVGFESpecularLightingElement::SVGFESpecularLightingElement):
        * svg/SVGFESpecularLightingElement.h:
        * svg/SVGFESpotLightElement.cpp:
        (WebCore::SVGFESpotLightElement::SVGFESpotLightElement):
        * svg/SVGFESpotLightElement.h:
        * svg/SVGFETileElement.cpp:
        (WebCore::SVGFETileElement::SVGFETileElement):
        * svg/SVGFETileElement.h:
        * svg/SVGFETurbulenceElement.cpp:
        (WebCore::SVGFETurbulenceElement::SVGFETurbulenceElement):
        * svg/SVGFETurbulenceElement.h:
        * svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::SVGFilterElement):
        * svg/SVGFilterElement.h:
        * svg/SVGFilterPrimitiveStandardAttributes.cpp:
        (WebCore::SVGFilterPrimitiveStandardAttributes::SVGFilterPrimitiveStandardAttributes):
        * svg/SVGFilterPrimitiveStandardAttributes.h:
        * svg/SVGFitToViewBox.cpp:
        * svg/SVGFitToViewBox.h:
        * svg/SVGFontData.cpp:
        * svg/SVGFontData.h:
        * svg/SVGFontElement.cpp:
        (WebCore::SVGFontElement::SVGFontElement):
        * svg/SVGFontElement.h:
        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::SVGFontFaceElement):
        * svg/SVGFontFaceElement.h:
        * svg/SVGFontFaceFormatElement.cpp:
        (WebCore::SVGFontFaceFormatElement::SVGFontFaceFormatElement):
        * svg/SVGFontFaceFormatElement.h:
        * svg/SVGFontFaceNameElement.cpp:
        (WebCore::SVGFontFaceNameElement::SVGFontFaceNameElement):
        * svg/SVGFontFaceNameElement.h:
        * svg/SVGFontFaceSrcElement.cpp:
        (WebCore::SVGFontFaceSrcElement::SVGFontFaceSrcElement):
        * svg/SVGFontFaceSrcElement.h:
        * svg/SVGFontFaceUriElement.cpp:
        (WebCore::SVGFontFaceUriElement::SVGFontFaceUriElement):
        * svg/SVGFontFaceUriElement.h:
        * svg/SVGForeignObjectElement.cpp:
        (WebCore::SVGForeignObjectElement::SVGForeignObjectElement):
        * svg/SVGForeignObjectElement.h:
        * svg/SVGGElement.cpp:
        (WebCore::SVGGElement::SVGGElement):
        * svg/SVGGElement.h:
        * svg/SVGGlyphElement.cpp:
        (WebCore::SVGGlyphElement::SVGGlyphElement):
        * svg/SVGGlyphElement.h:
        * svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::SVGGradientElement):
        * svg/SVGGradientElement.h:
        * svg/SVGHKernElement.cpp:
        (WebCore::SVGHKernElement::SVGHKernElement):
        * svg/SVGHKernElement.h:
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::SVGImageElement):
        * svg/SVGImageElement.h:
        * svg/SVGImageLoader.cpp:
        * svg/SVGImageLoader.h:
        * svg/SVGLangSpace.cpp:
        * svg/SVGLangSpace.h:
        * svg/SVGLengthList.cpp:
        * svg/SVGLengthList.h:
        * svg/SVGLineElement.cpp:
        (WebCore::SVGLineElement::SVGLineElement):
        * svg/SVGLineElement.h:
        * svg/SVGLinearGradientElement.cpp:
        (WebCore::SVGLinearGradientElement::SVGLinearGradientElement):
        * svg/SVGLinearGradientElement.h:
        * svg/SVGLocatable.cpp:
        * svg/SVGLocatable.h:
        * svg/SVGMPathElement.cpp:
        (WebCore::SVGMPathElement::SVGMPathElement):
        * svg/SVGMPathElement.h:
        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::SVGMarkerElement):
        * svg/SVGMarkerElement.h:
        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::SVGMaskElement):
        * svg/SVGMaskElement.h:
        * svg/SVGMetadataElement.cpp:
        (WebCore::SVGMetadataElement::SVGMetadataElement):
        * svg/SVGMetadataElement.h:
        * svg/SVGMissingGlyphElement.cpp:
        (WebCore::SVGMissingGlyphElement::SVGMissingGlyphElement):
        * svg/SVGMissingGlyphElement.h:
        * svg/SVGNumberList.cpp:
        * svg/SVGNumberList.h:
        * svg/SVGPaint.cpp:
        * svg/SVGPaint.h:
        * svg/SVGParserUtilities.cpp:
        (WebCore::genericParseNumber):
        (WebCore::parseNumber):
        * svg/SVGPathBlender.cpp:
        * svg/SVGPathBlender.h:
        * svg/SVGPathBuilder.h:
        * svg/SVGPathByteStreamBuilder.h:
        * svg/SVGPathByteStreamSource.cpp:
        * svg/SVGPathByteStreamSource.h:
        * svg/SVGPathConsumer.h:
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::SVGPathElement):
        * svg/SVGPathElement.h:
        * svg/SVGPathParser.cpp:
        * svg/SVGPathParser.h:
        * svg/SVGPathSeg.cpp:
        * svg/SVGPathSeg.h:
        * svg/SVGPathSegArc.h:
        * svg/SVGPathSegClosePath.cpp:
        * svg/SVGPathSegClosePath.h:
        * svg/SVGPathSegCurvetoCubic.h:
        * svg/SVGPathSegCurvetoCubicSmooth.h:
        * svg/SVGPathSegCurvetoQuadratic.h:
        * svg/SVGPathSegCurvetoQuadraticSmooth.h:
        * svg/SVGPathSegLineto.h:
        * svg/SVGPathSegLinetoHorizontal.h:
        * svg/SVGPathSegLinetoVertical.h:
        * svg/SVGPathSegList.cpp:
        * svg/SVGPathSegList.h:
        * svg/SVGPathSegListBuilder.h:
        * svg/SVGPathSegListSource.cpp:
        * svg/SVGPathSegListSource.h:
        * svg/SVGPathSegMoveto.h:
        * svg/SVGPathSource.h:
        * svg/SVGPathStringBuilder.cpp:
        * svg/SVGPathStringBuilder.h:
        * svg/SVGPathStringSource.cpp:
        * svg/SVGPathStringSource.h:
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::SVGPatternElement):
        * svg/SVGPatternElement.h:
        * svg/SVGPointList.cpp:
        * svg/SVGPointList.h:
        * svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::SVGPolyElement):
        * svg/SVGPolyElement.h:
        * svg/SVGPolygonElement.cpp:
        (WebCore::SVGPolygonElement::SVGPolygonElement):
        * svg/SVGPolygonElement.h:
        * svg/SVGPolylineElement.cpp:
        (WebCore::SVGPolylineElement::SVGPolylineElement):
        * svg/SVGPolylineElement.h:
        * svg/SVGPreserveAspectRatio.cpp:
        * svg/SVGPreserveAspectRatio.h:
        * svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::SVGRadialGradientElement):
        * svg/SVGRadialGradientElement.h:
        * svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::SVGRectElement):
        * svg/SVGRectElement.h:
        * svg/SVGSVGElement.h:
        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::SVGScriptElement):
        * svg/SVGScriptElement.h:
        * svg/SVGSetElement.cpp:
        (WebCore::SVGSetElement::SVGSetElement):
        * svg/SVGSetElement.h:
        * svg/SVGStopElement.cpp:
        (WebCore::SVGStopElement::SVGStopElement):
        * svg/SVGStopElement.h:
        * svg/SVGStringList.cpp:
        * svg/SVGStringList.h:
        * svg/SVGStylable.cpp:
        * svg/SVGStylable.h:
        * svg/SVGStyleElement.cpp:
        (WebCore::SVGStyleElement::SVGStyleElement):
        * svg/SVGStyleElement.h:
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::SVGStyledElement):
        * svg/SVGStyledElement.h:
        * svg/SVGStyledLocatableElement.cpp:
        (WebCore::SVGStyledLocatableElement::SVGStyledLocatableElement):
        * svg/SVGStyledLocatableElement.h:
        * svg/SVGStyledTransformableElement.cpp:
        (WebCore::SVGStyledTransformableElement::SVGStyledTransformableElement):
        * svg/SVGStyledTransformableElement.h:
        * svg/SVGSwitchElement.cpp:
        (WebCore::SVGSwitchElement::SVGSwitchElement):
        (WebCore::SVGSwitchElement::childShouldCreateRenderer):
        * svg/SVGSwitchElement.h:
        * svg/SVGSymbolElement.cpp:
        (WebCore::SVGSymbolElement::SVGSymbolElement):
        * svg/SVGSymbolElement.h:
        * svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefElement::SVGTRefElement):
        * svg/SVGTRefElement.h:
        * svg/SVGTSpanElement.cpp:
        (WebCore::SVGTSpanElement::SVGTSpanElement):
        * svg/SVGTests.cpp:
        * svg/SVGTests.h:
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::SVGTextContentElement):
        * svg/SVGTextContentElement.h:
        * svg/SVGTextElement.cpp:
        (WebCore::SVGTextElement::SVGTextElement):
        * svg/SVGTextElement.h:
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::SVGTextPathElement):
        * svg/SVGTextPathElement.h:
        * svg/SVGTextPositioningElement.cpp:
        (WebCore::SVGTextPositioningElement::SVGTextPositioningElement):
        * svg/SVGTextPositioningElement.h:
        * svg/SVGTitleElement.cpp:
        (WebCore::SVGTitleElement::SVGTitleElement):
        * svg/SVGTransform.cpp:
        * svg/SVGTransform.h:
        * svg/SVGTransformable.cpp:
        * svg/SVGTransformable.h:
        * svg/SVGURIReference.cpp:
        * svg/SVGURIReference.h:
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::SVGUseElement):
        (WebCore::SVGUseElement::expandSymbolElementsInShadowTree):
        * svg/SVGUseElement.h:
        * svg/SVGViewElement.cpp:
        (WebCore::SVGViewElement::SVGViewElement):
        * svg/SVGViewElement.h:
        * svg/SVGViewSpec.cpp:
        (WebCore::SVGViewSpec::SVGViewSpec):
        * svg/SVGViewSpec.h:
        * svg/SVGZoomAndPan.cpp:
        * svg/SVGZoomAndPan.h:
        * svg/SVGZoomEvent.cpp:
        * svg/SVGZoomEvent.h:

2010-08-30  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Dan Bernstein.

        Disable automatic looping
        https://bugs.webkit.org/show_bug.cgi?id=44844

        Test: media/video-does-not-loop.html

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::createQTMovie): Disable QuickTime automatic looping.

        * platform/graphics/win/QTMovie.cpp:
        (QTMoviePrivate::createMovieController): Ditto.

2010-08-30  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        ApplyStyleCommand::applyInlineStyle needs cleanup
        https://bugs.webkit.org/show_bug.cgi?id=44458

        Cleanup:
        1. Isolated code to find the highest ancestor with embedding style, and deployed it in
           ApplyStyleCommand::applyInlineStyle.
        2. Combined the code to remove embedding style up to enclosing block and the code to
           remove unicode-bidi and direction properties between start and end nodes.
        3. Simplified the conditionals to apply embedding styles.

        No new tests are added since this is a cleanup.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::highestEmbeddingAncestor): Added.
        (WebCore::ApplyStyleCommand::applyInlineStyle): See above.

2010-08-30  Martin Robinson  <mrobinson@igalia.com>

        Build fix. Add the new fileapi directory to the IDL vpath.

        * GNUmakefile.am:

2010-08-30  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] WebKit DOM bindings build should not depend on output GNUMakefile
        https://bugs.webkit.org/show_bug.cgi?id=44805

        Move WebKit DOM bindings build rules to bindings/gobject/GNUmakefile.am to
        prevent full WebKit API rebuilds when the automake files change.

        No new tests as this is just a build change.

        * bindings/gobject/GNUmakefile.am: Added.

2010-08-30  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: event listener properties are rendered as [object Object].
        https://bugs.webkit.org/show_bug.cgi?id=44779

        * inspector/front-end/EventListenersSidebarPane.js:

2010-08-30  Ryuan Choi  <ryuan.choi@samsung.com>

        Unreviewed build fix with Blob Support

        [EFL] Build break with Blob support
        https://bugs.webkit.org/show_bug.cgi?id=44858

        No new features added, so no new tests.

        * CMakeLists.txt:

2010-08-30  Andras Becsi  <abecsi@webkit.org>

        Unreviewed trivial fix.

        [Qt] Let qmake know about HTML parser headers.

        No new tests needed.

        * WebCore.pro:

2010-08-30  Andras Becsi  <abecsi@webkit.org>

        Unreviewed build fix.

        [Qt] Fix fileapi header paths to fix warnings after r66365.

        No new tests needed.

        * WebCore.pro:

2010-08-30  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Kent Tamura.

        REGRESSION(r66355): Fix warnings in html/DateComponents.cpp
        https://bugs.webkit.org/show_bug.cgi?id=44855

        * html/DateComponents.cpp:
        (WebCore::DateComponents::setMillisecondsSinceEpochForWeek): Suggested parentheses added around && within ||

2010-08-30  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Darin Adler.

        REGRESSION(r66324): Fix warnings in editing/ApplyStyleCommand.cpp
        https://bugs.webkit.org/show_bug.cgi?id=44843

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::removeImplicitlyStyledElement): Suggested parentheses added around && within ||

2010-08-30  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r66198.
        http://trac.webkit.org/changeset/66198
        https://bugs.webkit.org/show_bug.cgi?id=44856

        It made tests crash on Qt bot (Requested by Ossy_ on #webkit).

        * inspector/Inspector.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::inspectedPageDestroyed):
        (WebCore::InspectorController::close):
        * inspector/InspectorFrontendClient.h:
        * inspector/InspectorFrontendHost.cpp:
        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorFrontendHost.idl:
        * inspector/front-end/InspectorFrontendHostStub.js:
        * inspector/front-end/inspector.js:
        (WebInspector.inspectedPageDestroyed):

2010-08-30  Marc-Antoine Ruel  <maruel@chromium.org>

        Reviewed by Kent Tamura.

        Split webcore_svg off webcore_remaining. webcore_svg contains all svg
        sources files.
        https://bugs.webkit.org/show_bug.cgi?id=44840

        * WebCore.gyp/WebCore.gyp:

2010-08-13  MORITA Hajime  <morrita@google.com>

        Reviewed by Kent Tamura.

        https://bugs.webkit.org/show_bug.cgi?id=43960
        [Chromium] styled scroll bar on the window is painted badly.

        WebKit assumes outermost scrollbar always painted. 
        So force their style to have the  background color if it isn't 
        given by the stylesheet.
        
        Test: scrollbars/custom-scrollbar-with-incomplete-style.html

        * rendering/RenderObject.h:
        (WebCore::RenderObject::hasBackground): Extracted body to RenderStyle for sharing.
        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::getScrollbarPseudoStyle): Added the workaround as mentioned above.
        * rendering/RenderScrollbar.h:
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::hasBackground): Extracted from RenderObject.

2010-08-30  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        WebCore::RenderBlock::addChild* NULL ptrs
        https://bugs.webkit.org/show_bug.cgi?id=43722

        Also includes some cleanup of comments and ASSERTs.

        Test: fast/ruby/before-doesnt-crash.html

        * rendering/RenderRuby.cpp:
        (WebCore::RenderRubyAsInline::addChild):

2010-08-30  Marc-Antoine Ruel  <maruel@chromium.org>

        Reviewed by Kent Tamura

        Move most dependencies to webcore_prerequisites
        https://bugs.webkit.org/show_bug.cgi?id=44814

        * WebCore.gyp/WebCore.gyp:

2010-08-30  Adam Barth  <abarth@webkit.org>

        Move AsyncImageResizer back to html to fix Chromium build.

        * WebCore.gypi:

2010-08-30  Adam Barth  <abarth@webkit.org>

        Fix silly typo that breaks the build.

        * WebCore.pro:

2010-08-30  Adam Barth  <abarth@webkit.org>

        Attempt to fix the Qt build.

        * WebCore.pri:

2010-08-30  Adam Barth  <abarth@webkit.org>

        Attempt to fix Chromium build.

        * WebCore.gyp/WebCore.gyp:

2010-08-29  Adam Barth  <abarth@webkit.org>

        Rubber-stamped by Maciej Stachowiak.

        Move File and Blob related files from WebCore/html to WebCore/fileapi.

        * Android.mk:
        * CMakeLists.txt:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/WebCoreCommon.vsprops:
        * WebCore.xcodeproj/project.pbxproj:
        * fileapi: Added.
        * fileapi/AsyncFileWriter.h: Copied from WebCore/html/AsyncFileWriter.h.
        * fileapi/Blob.cpp: Copied from WebCore/html/Blob.cpp.
        * fileapi/Blob.h: Copied from WebCore/html/Blob.h.
        * fileapi/Blob.idl: Copied from WebCore/html/Blob.idl.
        * fileapi/BlobBuilder.cpp: Copied from WebCore/html/BlobBuilder.cpp.
        * fileapi/BlobBuilder.h: Copied from WebCore/html/BlobBuilder.h.
        * fileapi/BlobBuilder.idl: Copied from WebCore/html/BlobBuilder.idl.
        * fileapi/BlobURL.cpp: Copied from WebCore/html/BlobURL.cpp.
        * fileapi/BlobURL.h: Copied from WebCore/html/BlobURL.h.
        * fileapi/File.cpp: Copied from WebCore/html/File.cpp.
        * fileapi/File.h: Copied from WebCore/html/File.h.
        * fileapi/File.idl: Copied from WebCore/html/File.idl.
        * fileapi/FileError.h: Copied from WebCore/html/FileError.h.
        * fileapi/FileError.idl: Copied from WebCore/html/FileError.idl.
        * fileapi/FileList.cpp: Copied from WebCore/html/FileList.cpp.
        * fileapi/FileList.h: Copied from WebCore/html/FileList.h.
        * fileapi/FileList.idl: Copied from WebCore/html/FileList.idl.
        * fileapi/FileReader.cpp: Copied from WebCore/html/FileReader.cpp.
        * fileapi/FileReader.h: Copied from WebCore/html/FileReader.h.
        * fileapi/FileReader.idl: Copied from WebCore/html/FileReader.idl.
        * fileapi/FileStreamProxy.cpp: Copied from WebCore/html/FileStreamProxy.cpp.
        * fileapi/FileStreamProxy.h: Copied from WebCore/html/FileStreamProxy.h.
        * fileapi/FileThread.cpp: Copied from WebCore/html/FileThread.cpp.
        * fileapi/FileThread.h: Copied from WebCore/html/FileThread.h.
        * fileapi/FileThreadTask.h: Copied from WebCore/html/FileThreadTask.h.
        * fileapi/FileWriter.cpp: Copied from WebCore/html/FileWriter.cpp.
        * fileapi/FileWriter.h: Copied from WebCore/html/FileWriter.h.
        * fileapi/FileWriter.idl: Copied from WebCore/html/FileWriter.idl.
        * fileapi/FileWriterClient.h: Copied from WebCore/html/FileWriterClient.h.
        * fileapi/ThreadableBlobRegistry.cpp: Copied from WebCore/html/ThreadableBlobRegistry.cpp.
        * fileapi/ThreadableBlobRegistry.h: Copied from WebCore/html/ThreadableBlobRegistry.h.
        * html/AsyncFileWriter.h: Removed.
        * html/Blob.cpp: Removed.
        * html/Blob.h: Removed.
        * html/Blob.idl: Removed.
        * html/BlobBuilder.cpp: Removed.
        * html/BlobBuilder.h: Removed.
        * html/BlobBuilder.idl: Removed.
        * html/BlobURL.cpp: Removed.
        * html/BlobURL.h: Removed.
        * html/File.cpp: Removed.
        * html/File.h: Removed.
        * html/File.idl: Removed.
        * html/FileError.h: Removed.
        * html/FileError.idl: Removed.
        * html/FileList.cpp: Removed.
        * html/FileList.h: Removed.
        * html/FileList.idl: Removed.
        * html/FileReader.cpp: Removed.
        * html/FileReader.h: Removed.
        * html/FileReader.idl: Removed.
        * html/FileStreamProxy.cpp: Removed.
        * html/FileStreamProxy.h: Removed.
        * html/FileThread.cpp: Removed.
        * html/FileThread.h: Removed.
        * html/FileThreadTask.h: Removed.
        * html/FileWriter.cpp: Removed.
        * html/FileWriter.h: Removed.
        * html/FileWriter.idl: Removed.
        * html/FileWriterClient.h: Removed.
        * html/ThreadableBlobRegistry.cpp: Removed.
        * html/ThreadableBlobRegistry.h: Removed.

2010-08-29  Marc-Antoine Ruel  <maruel@chromium.org>

        Reviewed by Kent Tamura.

        Move more common settings to webcore_prerequisites
        https://bugs.webkit.org/show_bug.cgi?id=44812

        * WebCore.gyp/WebCore.gyp:

2010-08-29  Darin Adler  <darin@apple.com>

        Reviewed by Maciej Stachowiak.

        Create SVG and WML elements with create functions instead of direct invocations of new
        https://bugs.webkit.org/show_bug.cgi?id=44851

        Added the create functions, made some existing constructors protected and private,
        made some other member functions protected and and private, added some missing virtual
        keywords for clarity to functions that already were overriding virtual functions,
        fixed some inconsistent indentation, and removed some unneeded empty destructors.

        In the future, it will be good to have the constructors all be private so we don't
        use them by accident. Then we'll change the reference count rule globally and add
        all the necessary calls to adoptRef.

        The SVG changes are compiled and tested. The WML changes are speculative and untested.

        * dom/make_names.pl: Removed supportfor the createWithNew keyword.
        * svg/svgtags.in: Removed all the createWithNew keywords.
        * wml/WMLTagNames.in: Ditto.

        * svg/SVGAElement.cpp:
        (WebCore::SVGAElement::create): Added.
        * svg/SVGAElement.h:
        * svg/SVGAltGlyphElement.cpp:
        (WebCore::SVGAltGlyphElement::create): Added.
        * svg/SVGAltGlyphElement.h:
        * svg/SVGAnimateColorElement.cpp:
        (WebCore::SVGAnimateColorElement::create): Added.
        * svg/SVGAnimateColorElement.h:
        * svg/SVGAnimateElement.cpp:
        (WebCore::SVGAnimateElement::create): Added.
        * svg/SVGAnimateElement.h:
        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::create): Added.
        * svg/SVGAnimateMotionElement.h:
        * svg/SVGAnimateTransformElement.cpp:
        (WebCore::SVGAnimateTransformElement::create): Added.
        * svg/SVGAnimateTransformElement.h:
        * svg/SVGCircleElement.cpp:
        (WebCore::SVGCircleElement::create): Added.
        * svg/SVGCircleElement.h:
        * svg/SVGClipPathElement.cpp:
        (WebCore::SVGClipPathElement::create): Added.
        * svg/SVGClipPathElement.h:
        * svg/SVGCursorElement.cpp:
        (WebCore::SVGCursorElement::create): Added.
        * svg/SVGCursorElement.h:
        * svg/SVGDefsElement.cpp:
        (WebCore::SVGDefsElement::create): Added.
        * svg/SVGDefsElement.h:
        * svg/SVGDescElement.cpp:
        (WebCore::SVGDescElement::create): Added.
        * svg/SVGDescElement.h:
        * svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::create): Added.
        * svg/SVGEllipseElement.h:
        * svg/SVGFEBlendElement.cpp:
        (WebCore::SVGFEBlendElement::create): Added.
        * svg/SVGFEBlendElement.h:
        * svg/SVGFEColorMatrixElement.cpp:
        (WebCore::SVGFEColorMatrixElement::create): Added.
        * svg/SVGFEColorMatrixElement.h:
        * svg/SVGFEComponentTransferElement.cpp:
        (WebCore::SVGFEComponentTransferElement::create): Added.
        * svg/SVGFEComponentTransferElement.h:
        * svg/SVGFECompositeElement.cpp:
        (WebCore::SVGFECompositeElement::create): Added.
        * svg/SVGFECompositeElement.h:
        * svg/SVGFEConvolveMatrixElement.cpp:
        (WebCore::SVGFEConvolveMatrixElement::create): Added.
        * svg/SVGFEConvolveMatrixElement.h:
        * svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::create): Added.
        * svg/SVGFEDiffuseLightingElement.h:
        * svg/SVGFEDisplacementMapElement.cpp:
        (WebCore::SVGFEDisplacementMapElement::create): Added.
        * svg/SVGFEDisplacementMapElement.h:
        * svg/SVGFEDistantLightElement.cpp:
        (WebCore::SVGFEDistantLightElement::create): Added.
        * svg/SVGFEDistantLightElement.h:
        * svg/SVGFEFloodElement.cpp:
        (WebCore::SVGFEFloodElement::create): Added.
        * svg/SVGFEFloodElement.h:
        * svg/SVGFEFuncAElement.cpp:
        (WebCore::SVGFEFuncAElement::create): Added.
        * svg/SVGFEFuncAElement.h:
        * svg/SVGFEFuncBElement.cpp:
        (WebCore::SVGFEFuncBElement::create): Added.
        * svg/SVGFEFuncBElement.h:
        * svg/SVGFEFuncGElement.cpp:
        (WebCore::SVGFEFuncGElement::create): Added.
        * svg/SVGFEFuncGElement.h:
        * svg/SVGFEFuncRElement.cpp:
        (WebCore::SVGFEFuncRElement::create): Added.
        * svg/SVGFEFuncRElement.h:
        * svg/SVGFEGaussianBlurElement.cpp:
        (WebCore::SVGFEGaussianBlurElement::create): Added.
        * svg/SVGFEGaussianBlurElement.h:
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::create): Added.
        * svg/SVGFEImageElement.h:
        * svg/SVGFEMergeElement.cpp:
        (WebCore::SVGFEMergeElement::create): Added.
        * svg/SVGFEMergeElement.h:
        * svg/SVGFEMergeNodeElement.cpp:
        (WebCore::SVGFEMergeNodeElement::create): Added.
        * svg/SVGFEMergeNodeElement.h:
        * svg/SVGFEMorphologyElement.cpp:
        (WebCore::SVGFEMorphologyElement::create): Added.
        * svg/SVGFEMorphologyElement.h:
        * svg/SVGFEOffsetElement.cpp:
        (WebCore::SVGFEOffsetElement::create): Added.
        * svg/SVGFEOffsetElement.h:
        * svg/SVGFEPointLightElement.cpp:
        (WebCore::SVGFEPointLightElement::create): Added.
        * svg/SVGFEPointLightElement.h:
        * svg/SVGFESpecularLightingElement.cpp:
        (WebCore::SVGFESpecularLightingElement::create): Added.
        * svg/SVGFESpecularLightingElement.h:
        * svg/SVGFESpotLightElement.cpp:
        (WebCore::SVGFESpotLightElement::create): Added.
        * svg/SVGFESpotLightElement.h:
        * svg/SVGFETileElement.cpp:
        (WebCore::SVGFETileElement::create): Added.
        * svg/SVGFETileElement.h:
        * svg/SVGFETurbulenceElement.cpp:
        (WebCore::SVGFETurbulenceElement::create): Added.
        * svg/SVGFETurbulenceElement.h:
        * svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::create): Added.
        * svg/SVGFilterElement.h:
        * svg/SVGFontElement.cpp:
        (WebCore::SVGFontElement::create): Added.
        * svg/SVGFontElement.h:
        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::create): Added.
        * svg/SVGFontFaceElement.h:
        * svg/SVGFontFaceFormatElement.cpp:
        (WebCore::SVGFontFaceFormatElement::create): Added.
        * svg/SVGFontFaceFormatElement.h:
        * svg/SVGFontFaceNameElement.cpp:
        (WebCore::SVGFontFaceNameElement::create): Added.
        * svg/SVGFontFaceNameElement.h:
        * svg/SVGFontFaceSrcElement.cpp:
        (WebCore::SVGFontFaceSrcElement::create): Added.
        * svg/SVGFontFaceSrcElement.h:
        * svg/SVGFontFaceUriElement.cpp:
        (WebCore::SVGFontFaceUriElement::create): Added.
        * svg/SVGFontFaceUriElement.h:
        * svg/SVGForeignObjectElement.cpp:
        (WebCore::SVGForeignObjectElement::create): Added.
        * svg/SVGForeignObjectElement.h:
        * svg/SVGGElement.cpp:
        (WebCore::SVGGElement::create): Added.
        * svg/SVGGElement.h:
        * svg/SVGGlyphElement.cpp:
        (WebCore::SVGGlyphElement::create): Added.
        * svg/SVGGlyphElement.h:
        * svg/SVGHKernElement.cpp:
        (WebCore::SVGHKernElement::create): Added.
        * svg/SVGHKernElement.h:
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::create): Added.
        * svg/SVGImageElement.h:
        * svg/SVGLineElement.cpp:
        (WebCore::SVGLineElement::create): Added.
        * svg/SVGLineElement.h:
        * svg/SVGLinearGradientElement.cpp:
        (WebCore::SVGLinearGradientElement::create): Added.
        * svg/SVGLinearGradientElement.h:
        * svg/SVGMPathElement.cpp:
        (WebCore::SVGMPathElement::create): Added.
        * svg/SVGMPathElement.h:
        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::create): Added.
        * svg/SVGMarkerElement.h:
        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::create): Added.
        * svg/SVGMaskElement.h:
        * svg/SVGMetadataElement.cpp:
        (SVGMetadataElement::create): Added.
        * svg/SVGMetadataElement.h:
        * svg/SVGMissingGlyphElement.cpp:
        (WebCore::SVGMissingGlyphElement::create): Added.
        * svg/SVGMissingGlyphElement.h:
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::create): Added.
        * svg/SVGPathElement.h:
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::create): Added.
        * svg/SVGPatternElement.h:
        * svg/SVGPolygonElement.cpp:
        (WebCore::SVGPolygonElement::create): Added.
        * svg/SVGPolygonElement.h:
        * svg/SVGPolylineElement.cpp:
        (WebCore::SVGPolylineElement::create): Added.
        * svg/SVGPolylineElement.h:
        * svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::create): Added.
        * svg/SVGRadialGradientElement.h:
        * svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::create): Added.
        * svg/SVGRectElement.h:
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::create): Added.
        * svg/SVGSVGElement.h:
        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::create): Added.
        * svg/SVGScriptElement.h:
        * svg/SVGSetElement.cpp:
        (WebCore::SVGSetElement::create): Added.
        * svg/SVGSetElement.h:
        * svg/SVGStopElement.cpp:
        (WebCore::SVGStopElement::create): Added.
        * svg/SVGStopElement.h:
        (WebCore::SVGStyleElement::create): Added.
        * svg/SVGStyleElement.h:
        * svg/SVGSwitchElement.cpp:
        (WebCore::SVGSwitchElement::create): Added.
        * svg/SVGSwitchElement.h:
        * svg/SVGSymbolElement.cpp:
        (WebCore::SVGSymbolElement::create): Added.
        * svg/SVGSymbolElement.h:
        * svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefElement::create): Added.
        * svg/SVGTRefElement.h:
        * svg/SVGTSpanElement.cpp:
        (WebCore::SVGTSpanElement::create): Added.
        * svg/SVGTSpanElement.h:
        * svg/SVGTextContentElement.h:
        * svg/SVGTextElement.cpp:
        (WebCore::SVGTextElement::create): Added.
        * svg/SVGTextElement.h:
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::create): Added.
        * svg/SVGTextPathElement.h:
        * svg/SVGTextPositioningElement.h:
        * svg/SVGTitleElement.cpp:
        (WebCore::SVGTitleElement::create): Added.
        * svg/SVGTitleElement.h:
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::create): Added.
        * svg/SVGUseElement.h:
        * svg/SVGVKernElement.cpp:
        (WebCore::SVGVKernElement::create): Added.
        * svg/SVGVKernElement.h:
        * svg/SVGViewElement.cpp:
        (WebCore::SVGViewElement::create): Added.
        * svg/SVGViewElement.h:
        * wml/WMLAElement.cpp:
        (WebCore::WMLAElement::create): Added.
        * wml/WMLAElement.h:
        * wml/WMLAccessElement.cpp:
        (WebCore::WMLAccessElement::create): Added.
        * wml/WMLAccessElement.h:
        * wml/WMLAnchorElement.cpp:
        (WebCore::WMLAnchorElement::create): Added.
        * wml/WMLAnchorElement.h:
        * wml/WMLBRElement.cpp:
        (WebCore::WMLBRElement::create): Added.
        * wml/WMLBRElement.h:
        * wml/WMLCardElement.cpp:
        (WebCore::WMLCardElement::create): Added.
        * wml/WMLCardElement.h:
        * wml/WMLDoElement.cpp:
        (WebCore::WMLDoElement::create): Added.
        * wml/WMLDoElement.h:
        * wml/WMLFieldSetElement.cpp:
        (WebCore::WMLFieldSetElement::create): Added.
        * wml/WMLFieldSetElement.h:
        * wml/WMLFormControlElement.cpp:
        (WebCore::WMLFormControlElement::create): Added.
        * wml/WMLGoElement.cpp:
        (WebCore::WMLGoElement::create): Added.
        * wml/WMLGoElement.h:
        * wml/WMLImageElement.cpp:
        (WebCore::WMLImageElement::create): Added.
        * wml/WMLImageElement.h:
        * wml/WMLInputElement.cpp:
        (WebCore::WMLInputElement::create): Added.
        * wml/WMLInputElement.h:
        * wml/WMLInsertedLegendElement.cpp:
        (WebCore::WMLInsertedLegendElement::create): Added.
        * wml/WMLInsertedLegendElement.h:
        * wml/WMLIntrinsicEvent.cpp:
        (WebCore::WMLIntrinsicEvent::create): Added.
        * wml/WMLMetaElement.cpp:
        (WebCore::WMLMetaElement::create): Added.
        * wml/WMLMetaElement.h:
        * wml/WMLNoopElement.cpp:
        (WebCore::WMLNoopElement::create): Added.
        * wml/WMLNoopElement.h:
        * wml/WMLOnEventElement.cpp:
        (WebCore::WMLOnEventElement::create): Added.
        * wml/WMLOnEventElement.h:
        * wml/WMLOptGroupElement.cpp:
        (WebCore::WMLOptGroupElement::create): Added.
        * wml/WMLOptGroupElement.h:
        * wml/WMLOptionElement.cpp:
        (WebCore::WMLOptionElement::create): Added.
        * wml/WMLOptionElement.h:
        * wml/WMLPElement.cpp:
        (WebCore::WMLPElement::create): Added.
        * wml/WMLPElement.h:
        * wml/WMLPostfieldElement.cpp:
        (WebCore::WMLPostfieldElement::create): Added.
        * wml/WMLPostfieldElement.h:
        * wml/WMLPrevElement.cpp:
        (WebCore::WMLPrevElement::create): Added.
        * wml/WMLPrevElement.h:
        * wml/WMLRefreshElement.cpp:
        (WebCore::WMLRefreshElement::create): Added.
        * wml/WMLRefreshElement.h:
        * wml/WMLSelectElement.cpp:
        (WebCore::WMLSelectElement::create): Added.
        * wml/WMLSelectElement.h:
        * wml/WMLSetvarElement.cpp:
        (WebCore::WMLSetvarElement::create): Added.
        * wml/WMLSetvarElement.h:
        * wml/WMLTableElement.cpp:
        (WebCore::WMLTableElement::create): Added.
        * wml/WMLTableElement.h:
        * wml/WMLTaskElement.cpp:
        (WebCore::WMLTaskElement::create): Added.
        * wml/WMLTaskElement.h:
        * wml/WMLTemplateElement.cpp:
        (WebCore::WMLTemplateElement::create): Added.
        * wml/WMLTemplateElement.h:
        * wml/WMLTimerElement.cpp:
        (WebCore::WMLTimerElement::create): Added.
        * wml/WMLTimerElement.h:

2010-08-29  Marc-Antoine Ruel  <maruel@chromium.org>

        Reviewed by Kent Tamura.

        Rename webcore to 'webcore_remaining'.
        https://bugs.webkit.org/show_bug.cgi?id=44796

        Create a meta-target webcore that inherits from every webcore_XXX targets. (Currently 1)
        Move direct_dependent_settings and export_dependent_settings from webcore_remaining to webcore

        Obviously, there will be other webcore_XXX targets. Keeping the change as small as possible.

        * WebCore.gyp/WebCore.gyp:

2010-08-29  Jeremy Moskovich  <jeremy@chromium.org>

        Reviewed by Dimitri Glazkov.

        First step in unforking Chrome's FontPlatformDataMac.mm.
        Move files from platform/graphics/mac to platform/graphics/cocoa

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

        Just moving files around so no new tests.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/chromium/FontPlatformDataChromiumMac.mm:
        * platform/graphics/cocoa/FontPlatformData.h: Copied from WebCore/platform/graphics/mac/FontPlatformData.h.
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm: Copied from WebCore/platform/graphics/mac/FontPlatformDataMac.mm.
        * platform/graphics/mac/FontPlatformData.h: Removed.
        * platform/graphics/mac/FontPlatformDataMac.mm: Removed.

2010-08-29  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Introduce isValidValue(const String&) of HTMLInputElement and HTMLTextAreaElement
        https://bugs.webkit.org/show_bug.cgi?id=43537

        isValidValue() is useful for browser implementations to propose
        form field values without breaking form validity.
        No new tests because these functions are not exposed to JavaScript.

        * html/HTMLFormControlElement.h:
        (WebCore::HTMLTextFormControlElement::):
         Remove virtual valueMissing(), patternMismatch(), and tooLong().
        * html/HTMLInputElement.cpp:
        (WebCore::isValidColorString): Moved from ValidityState.
        (WebCore::isValidEmailAddress): ditto.
        (WebCore::HTMLInputElement::isValidValue): Added.
        (WebCore::HTMLInputElement::typeMismatch): Add a String parameter.
        (WebCore::HTMLInputElement::valueMissing): Add a String parameter.
        (WebCore::HTMLInputElement::patternMismatch): Add a String parameter.
        (WebCore::HTMLInputElement::tooLong): Add String and NeedsToCheckDirtyFlag parameters.
        (WebCore::HTMLInputElement::rangeUnderflow): Add a String parameter.
        (WebCore::HTMLInputElement::rangeOverflow): Add a String parameter.
        (WebCore::HTMLInputElement::stepMismatch): Add a String parameter.
        * html/HTMLInputElement.h:
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::tooLong): Add String and NeedsToCheckDirtyFlag parameters.
        (WebCore::HTMLTextAreaElement::isValidValue): Added.
        * html/HTMLTextAreaElement.h:
        (WebCore::HTMLTextAreaElement::valueMissing):
        * html/ValidityState.cpp:
        (WebCore::ValidityState::valueMissing): Calls valueMissing() of HTMLInputElement or HTMLTextAreaElement.
        (WebCore::ValidityState::typeMismatch): Passes value() to HTMLInputElement::typeMismatch().
        (WebCore::ValidityState::patternMismatch): Calls patternMismatch() of HTMLInputElement.
        (WebCore::ValidityState::tooLong): Calls valueMissing() of HTMLInputElement or HTMLTextAreaElement.
        (WebCore::ValidityState::rangeUnderflow): Passes value() to HTMLInputElement::rangeUnderflow().
        (WebCore::ValidityState::rangeOverflow): Passes value() to HTMLInputElement::rangeUnderflow().
        (WebCore::ValidityState::stepMismatch): Passes value() to HTMLInputElement::stepMismatch().
        * html/ValidityState.h:

2010-08-29  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Change lower and higher limits of date/datetime/datetime-local/month/week types
        https://bugs.webkit.org/show_bug.cgi?id=39737

        According to the latest draft of HTML5, ISO-8601 dates in HTML5
        should support A.D.0001 in Gregorian calendar though Gregorian
        calendar started in 1582. So, we change the lower limits of
        date&time types to 0001-01-01T00:00.

        We also introduce the common higher limit, 275760-09-13T00:00. It
        is the higher limit of Date type of ECMAScript.

        * html/DateComponents.cpp:
        (WebCore::DateComponents::parseYear):
         Rejects years less than A.D.1 and years greater than 275760.
        (WebCore::withinHTMLDateLimits):
         Helper functions to check lower and higher limits.
        (WebCore::DateComponents::addDay):
         - Remove an overflow check. 'year' can't be so large number because
           parseYear() rejects such numbers.
         - Add withinHTMLDateLimits() calls.
        (WebCore::DateComponents::addMinute):
         - Add an assertion for the base date.
         - Add withinHTMLDateLimits() calls.
        (WebCore::DateComponents::parseMonth):
         Add withinHTMLDateLimits() call.
        (WebCore::DateComponents::parseDate): ditto.
        (WebCore::DateComponents::parseWeek): ditto.
        (WebCore::DateComponents::parseDateTimeLocal): ditto.
        (WebCore::DateComponents::parseDateTime): ditto.
        (WebCore::DateComponents::setMillisecondsSinceEpochForDate): ditto.
        (WebCore::DateComponents::setMillisecondsSinceEpochForDateTime): ditto.
        (WebCore::DateComponents::setMillisecondsSinceEpochForMonth): ditto.
        (WebCore::DateComponents::setMonthsSinceEpoch):
         Add year range check and withinHTMLDateLimits() call.
        (WebCore::DateComponents::setMillisecondsSinceEpochForWeek):
         Add year range check and week range check.
        * html/DateComponents.h:
         Update minimum/maximum constant values.
        (WebCore::DateComponents::minimumDate):
        (WebCore::DateComponents::minimumDateTime):
        (WebCore::DateComponents::minimumMonth):
        (WebCore::DateComponents::minimumWeek):
        (WebCore::DateComponents::maximumDate):
        (WebCore::DateComponents::maximumDateTime):
        (WebCore::DateComponents::maximumMonth):
        (WebCore::DateComponents::maximumWeek):

2010-08-29  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Kent Tamura.

        [BREWMP] Port SharedBuffer::createWithContentsOfFile
        https://bugs.webkit.org/show_bug.cgi?id=34412

        Implement SharedBuffer::createWithContentsOfFile with IFile.

        * platform/brew/SharedBufferBrew.cpp: Added.
        (WebCore::SharedBuffer::createWithContentsOfFile):

2010-08-29  Enrica Casucci  <enrica@apple.com>

        Reviewed by Adele Peterson.

        Crash when dragging text in Google Docs
        https://bugs.webkit.org/show_bug.cgi?id=20471
        <rdar://problem/7783629>
        
        This fixes the crash but also fixes the generated markup when
        performing a replacement at the border with an inline, to avoid the 
        new content being merged into the inline.
        The crash is happening when doApply detects the need of merging
        the start and the end of the new paragraph and the destination position
        is moved inside an inline.
        
        I've added new test cases to an existing layout test.
        
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply): When the situation described above is detected,
        we insert a placeholder to avoid merging into the inline.

2010-08-29  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Implement HTML5's fakepath
        https://bugs.webkit.org/show_bug.cgi?id=29000

        The HTML 5 spec says to prepend C:\fakepath\ to the value of an
        <input type="file"> control, so that's what we do now.

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

2010-08-29  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r66329.
        http://trac.webkit.org/changeset/66329
        https://bugs.webkit.org/show_bug.cgi?id=44845

        broke chromium mac (Requested by jamesr on #webkit).

        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/mac/FontPlatformData.h: Renamed from WebCore/platform/graphics/cocoa/FontPlatformData.h.
        (WebCore::toCTFontRef):
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::isHashTableDeletedValue):
        (WebCore::FontPlatformData::size):
        (WebCore::FontPlatformData::syntheticBold):
        (WebCore::FontPlatformData::syntheticOblique):
        (WebCore::FontPlatformData::hash):
        (WebCore::FontPlatformData::operator==):
        (WebCore::FontPlatformData::font):
        (WebCore::FontPlatformData::isColorBitmapFont):
        (WebCore::FontPlatformData::cgFont):
        (WebCore::FontPlatformData::hashTableDeletedFontValue):
        * platform/graphics/mac/FontPlatformDataMac.mm: Renamed from WebCore/platform/graphics/cocoa/FontPlatformDataCocoa.mm.
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::~FontPlatformData):
        (WebCore::FontPlatformData::operator=):
        (WebCore::FontPlatformData::setFont):
        (WebCore::FontPlatformData::roundsGlyphAdvances):
        (WebCore::FontPlatformData::allowsLigatures):
        (WebCore::FontPlatformData::ctFont):
        (WebCore::FontPlatformData::description):

2010-08-29  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.

        Fix RenderStyle::addCursor to use a StyleImage, not a CachedImage
        https://bugs.webkit.org/show_bug.cgi?id=44719
        
        Modernize the CSS cursor code to use a StyleImage, rather
        than a CachedImage in the CursorData, and handle the loading
        of pending images for the cursor property.

        Covered by manual tests in WebCore/manual-tests

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        (WebCore::CSSStyleSelector::loadPendingImages):
        * html/canvas/WebGLRenderingContext.cpp:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::selectCursor):
        * rendering/style/CursorData.h:
        (WebCore::CursorData::CursorData):
        (WebCore::CursorData::image):
        (WebCore::CursorData::setImage):
        * rendering/style/CursorList.h:
        (WebCore::CursorList::operator[]):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::addCursor):
        * rendering/style/RenderStyle.h:

2010-08-29  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.

        When properties are missing from animation keyframes, interpolate between those keyframes that specify them
        https://bugs.webkit.org/show_bug.cgi?id=40794
        
        When a property does not appear in all keyframes of a keyframe animation, we currently use the
        value of that property from the unanimated style. That forces the author to use additional
        keyframes for properties that need to "skip a keyframe", which is laborious.
        
        With this change, properties are interpolated between the keyframes in which they appear.
        This is equivalent to splitting each property out into its own set of keyframes.

        Tests: animations/missing-keyframe-properties-repeating.html
               animations/missing-keyframe-properties-timing-function.html
               animations/missing-keyframe-properties.html

        * css/CSSStyleSelector.h:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::styleForKeyframe): Pass a KeyframeValue in so that we can
        collect which properties are represented per keyframe.
        (WebCore::CSSStyleSelector::keyframeStylesForAnimation): Keyframes are inserted into a
        KeyframeList by object now, rather than by key and style.

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::progress): Use AnimationDirectionAlternate for readability.

        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::fetchIntervalEndpointsForProperty): Renamed from getKeyframeAnimationInterval.
        Use fractionalTime etc to match AnimationBase::progress(), and do lookups per-property.
        Simplify the code that finds the relevant keyframe to do less work.
        (WebCore::KeyframeAnimation::animate): Call fetchIntervalEndpointsForProperty() for each property, rather than just once for the
        entire keyframe.
        (WebCore::KeyframeAnimation::getAnimatedStyle): Ditto.
        (WebCore::KeyframeAnimation::hasAnimationForProperty): FIXME comment.

        * page/animation/KeyframeAnimation.h: Rename getKeyframeAnimationInterval() to fetchIntervalEndpointsForProperty().

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::startAnimation): For hardware animations, only insert values
        for keyframes which contain the property.

        (WebCore::KeyframeList::KeyframeList): insert() takes a KeyframeValue now.
        * rendering/style/KeyframeList.cpp:
        (WebCore::KeyframeList::operator==):
        (WebCore::KeyframeList::insert): Fix insert/replace logic, and ensure we maintain the
        m_properties hash.

        * rendering/style/KeyframeList.h:
        (WebCore::KeyframeValue::KeyframeValue): Make members private, with accessors.
        Add a m_properties HashSet for the properties animated in this keyframe.


2010-08-29  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Darin Adler.

        REGRESSION(r66324): Fix warnings in editing/ApplyStyleCommand.cpp
        https://bugs.webkit.org/show_bug.cgi?id=44843

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::removeImplicitlyStyledElement): Suggested parentheses added around && within ||

2010-08-29  Darin Adler  <darin@apple.com>

        Try to fix Mac build.

        * WebCore.xcodeproj/project.pbxproj: Mark CounterContent.h Private instead of Project.

2010-08-29  Pawel Hajdan  <phajdan.jr@chromium.org>

        Reviewed by Darin Adler.

        Fix libxml workarounds to work with recent versions of libxml.
        I was testing locally with libxml2-2.7.6.
        https://bugs.webkit.org/show_bug.cgi?id=30508

        Based on patch by Philippe Normand <pnormand@igalia.com>.

        This also fixes a Chromium bug:
        http://code.google.com/p/chromium/issues/detail?id=29333

        * dom/XMLDocumentParserLibxml2.cpp:
        (WebCore::switchToUTF16):
        (WebCore::XMLParserContext::createStringParser):
        (WebCore::XMLDocumentParser::doWrite):
        (WebCore::startDocumentHandler):

2010-08-29  Darin Adler  <darin@apple.com>

        Try to fix Windows build.

        * rendering/style/ContentData.h: Added include of CounterContent.h.

        * css/CSSStyleSelector.cpp: Removed include of CounterContent.h.
        * rendering/style/ContentData.cpp: Ditto.
        * rendering/style/RenderStyle.cpp: Ditto.

2010-08-29  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Deploy OwnPtr, PassOwnPtr, and adoptPtr in some CSS-related files
        https://bugs.webkit.org/show_bug.cgi?id=44834

        * css/CSSFunctionValue.cpp:
        (WebCore::CSSFunctionValue::CSSFunctionValue): Updated since
        CSSParserFunction::args is an OwnPtr.
        (WebCore::CSSFunctionValue::parserValue): Ditto.

        * css/CSSGrammar.y: Added leakPtr calls for putting MediaQueryExp*
        into the media query expression list, which is a vector of raw pointers
        that are deleted explicitly.

        * css/CSSImportRule.cpp:
        (WebCore::CSSImportRule::setCSSStyleSheet): Updated to use document instead of doc.
        (WebCore::CSSImportRule::insertedIntoParent): Ditto.
        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::setNeedsStyleRecalc): Ditto.

        * css/CSSNamespace.h: Took the "m_" off the names of the data members of
        this structure. Used OwnPtr for the parent data member. Rewrote the
        namespaceForPrefix function so it's iterative instead of recursive.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::CSSParser): Update since m_mediaQuery, m_floatingMediaQuery,
        m_floatingMediaQueryExp, and m_floatingMediaQueryExpList are now all OwnPtr and
        thus don't need to be initialized.
        (WebCore::CSSParser::~CSSParser): Update to not delete the above OwnPtr.
        (WebCore::CSSParser::parseMediaQuery): Replaced the code that sets m_mediaQuery
        to 0 with an assertion. Also use release when passing the media query to
        appendMediaQuery.
        (WebCore::CSSParser::document): Updated to use document instead of doc and to
        use early return instead of a nested if.
        (WebCore::CSSParser::parseContent): Added a get() call needed since
        CSSParserFunction::args is an OwnPtr.
        (WebCore::CSSParser::parseAnimationTimingFunction): Ditto.
        (WebCore::CSSParser::parseDashboardRegions): Ditto.
        (WebCore::CSSParser::parseShape): Ditto.
        (WebCore::isValidFormatFunction): Ditto.
        (WebCore::CSSParser::parseFontFaceSrc): Ditto.
        (WebCore::CSSParser::parseColorParameters): Ditto.
        (WebCore::CSSParser::parseHSLParameters): Ditto.
        (WebCore::parseGradientColorStop): Ditto.
        (WebCore::CSSParser::parseGradient): Ditto.
        (WebCore::CSSParser::parseCanvas): Ditto.
        (WebCore::CSSParser::parseTransform): Ditto.
        (WebCore::CSSParser::createFloatingMediaQueryExp): Updated to use adoptPtr and
        remove the explicit deletion.
        (WebCore::CSSParser::sinkFloatingMediaQueryExp): Updated to use release.
        (WebCore::CSSParser::createFloatingMediaQueryExpList): Ditto.
        (WebCore::CSSParser::sinkFloatingMediaQueryExpList): Ditto.
        (WebCore::CSSParser::createFloatingMediaQuery): Ditto.
        (WebCore::CSSParser::sinkFloatingMediaQuery): Ditto.
        (WebCore::CSSParser::checkForVariables): Use get for CSSParserFunction::args.

        * css/CSSParser.h: Made return values for sinkFloatingMediaQueryExp,
        sinkFloatingMediaQueryExpList, and sinkFloatingMediaQuery be PassOwnPtr.
        Made createFloatingMediaQuery take a PassOwnPtr. Made m_mediaQuery,
        m_floatingMediaQuery, m_floatingMediaQueryExp, and m_floatingMediaQueryExpList
        be OwnPtr.

        * css/CSSParserValues.h: Made args be an OwnPtr.

        * css/CSSStyleSelector.cpp: Made CSSRuleSet m_universalRules and m_pageRules
        be OwnPtr.
        (WebCore::CSSStyleSelector::CSSStyleSelector): Use document instead of doc.
        Got rid of the init function, only called here, because it did nothing that
        wasn't already done. Eliminated unneeded code to set m_userStyle to 0, since
        it's now an OwnPtr and will be 0 automatically. Use adoptPtr when initializing
        m_medium, m_authorStyle, and m_useStyle.
        (WebCore::CSSStyleSelector::~CSSStyleSelector): Got rid of unneeded delete of
        m_medium, m_authorStyle, and m_userStyle, and unneded clear of m_keyframesRuleMap.
        (WebCore::CSSStyleSelector::styleForElement): Use get with m_userStyle and
        m_authorStyle.
        (WebCore::CSSStyleSelector::pseudoStyleForElement): Ditto.
        (WebCore::CSSStyleSelector::styleForPage): Ditto.
        (WebCore::CSSStyleSelector::pseudoStyleRulesForElement): Ditto.
        (WebCore::CSSRuleSet::CSSRuleSet): Got rid of unneeded initialization of
        m_universalRules and m_pageRules.
        (WebCore::CSSRuleSet::~CSSRuleSet): Got rid of unneeed deletion of same.
        (WebCore::CSSRuleSet::addRule): Use adoptPtr to initialize m_universalRules.
        (WebCore::CSSRuleSet::addPageRule): Use adoptPtr to initialize m_pageRules.
        (WebCore::CSSStyleSelector::applyProperty): Use adopPtr to create counter
        context object.

        * css/CSSStyleSelector.h: Made m_authorStyle, m_userStyle, and m_medium use
        OwnPtr. Got rid of init function.

        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::CSSStyleSheet): Updatd for name change from m_doc
        and doc to m_document and document. Eliminated unneeded initialization of
        m_namespaces now that it is an OwnPtr.
        (WebCore::CSSStyleSheet::~CSSStyleSheet): Got rid of unneeded deletion of same.
        (WebCore::CSSStyleSheet::cssRules): Updated doc to document.
        (WebCore::CSSStyleSheet::addNamespace): Added adopPtr when setting m_namespaces.
        (WebCore::CSSStyleSheet::determineNamespace): Updated for changes to the
        CSSNamespace class, using uri data member instead of function.
        (WebCore::CSSStyleSheet::styleSheetChanged): Use document instead of doc.

        * css/CSSStyleSheet.h: Renamed doc and m_doc to document and m_document.
        Made m_namespaces an OwnPtr.

        * css/CSSValueList.cpp:
        (WebCore::CSSValueList::CSSValueList): Clean up logic a bit.
        (WebCore::CSSValueList::createParserValueList): Clean up logic a bit and
        return a PassOwnPtr.

        * css/CSSValueList.h: Changed createParserValueList to return a PassOwnPtr.

        * css/CSSVariablesDeclaration.cpp:
        (WebCore::CSSVariablesDeclaration::setNeedsStyleRecalc): Updated to use
        document instead of doc.

        * css/MediaList.cpp:
        (WebCore::MediaList::deleteMedium): Use OwnPtr instead of a boolean to
        make sure the newly-created query here is deleted.
        (WebCore::MediaList::appendMediaQuery): Updated to take PassOwnPtr.

        * css/MediaList.h: Changed appendMediaQuery to take a PassOwnPtr.

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::getStyleSheet): Use document instead of doc.
        (WebCore::InspectorDOMAgent::getRuleRanges): Ditto.
        (WebCore::InspectorDOMAgent::buildObjectForStyleSheet): Ditto.

        * rendering/style/ContentData.cpp:
        (WebCore::ContentData::clear): Update since data members are OwnPtr.
        Also, fixed iterative deletion algorithm to be much simpler.
        (WebCore::ContentData::dataEquivalent): Added FIXMEs and tweaked formatting.
        (WebCore::ContentData::deleteContent): Tweaked formatting.

        * rendering/style/ContentData.h: Changed m_next to an OwnPtr.
        Added assertions to getters to check that we get the correct type.
        Use leakRef instead of releaseRef. Changed setCounter and setNext functions
        to take PassOwnPtr arguments.

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::prepareToSetContent): Refactored common part of the
        into a shared function so the three setContent functions don't have to repeat
        the logic. Used an OwnPtr to avoid confusing logic and leakPtr.
        (WebCore::RenderStyle::setContent): Changed argument to PassOwnPtr.

        * rendering/style/RenderStyle.h: Changed setContent argument to a PassOwnPtr.
        Added declaration of prepareToSetContent helper function.

2010-08-29  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Adam Roben.

        [WINCE] Port ScrollbarThemeWin to WinCE
        https://bugs.webkit.org/show_bug.cgi?id=44818

        Add a #ifdef around usage of unsupported DFCS_FLAT.

        * platform/win/ScrollbarThemeWin.cpp:
        (WebCore::ScrollbarThemeWin::paintButton):

2010-08-29  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Adam Roben.

        [WINCE] Port SystemInfo to WinCE
        https://bugs.webkit.org/show_bug.cgi?id=44817

        * platform/win/SystemInfo.cpp:
        (WebCore::isRunningOnVistaOrLater):

2010-08-28  Jeremy Moskovich  <jeremy@chromium.org>

        Reviewed by Dimitri Glazkov.

        First step in unforking Chrome's FontPlatformDataMac.mm.
        Move files from platform/graphics/mac to platform/graphics/cocoa

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

        Just moving files around so no new tests.

        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/cocoa: Added.
        * platform/graphics/cocoa/FontPlatformData.h: Copied from WebCore/platform/graphics/mac/FontPlatformData.h.
        * platform/graphics/cocoa/FontPlatformDataCocoa.mm: Copied from WebCore/platform/graphics/mac/FontPlatformDataMac.mm.
        * platform/graphics/mac/FontPlatformData.h: Removed.
        * platform/graphics/mac/FontPlatformDataMac.mm: Removed.

2010-08-28  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Some IDL attributes don't reflect URL content attributes properly
        https://bugs.webkit.org/show_bug.cgi?id=43650

        * dom/Document.cpp:
        (WebCore::Document::processBaseElement): Added. Implements the rules for base elements
        from the HTML5 specification. Handles multiple base elements in the same document.

        * dom/Document.h: Removed setBaseElementURL and setBaseElementTarget, replacing them
        with processBaseElement.

        * html/HTMLBaseElement.cpp:
        (WebCore::HTMLBaseElement::parseMappedAttribute): Call the new processBaseElement
        function.
        (WebCore::HTMLBaseElement::insertedIntoDocument): Ditto.
        (WebCore::HTMLBaseElement::removedFromDocument): Ditto.
        (WebCore::HTMLBaseElement::isURLAttribute): Added.
        (WebCore::HTMLBaseElement::target): Moved here from the .h file and changed to not
        realy on an m_target local variable.

        * html/HTMLBaseElement.h: Added an override of the isURLAttribute function. Removed
        unneeded process function. Removed declaration of nonexistent setHref and setTarget
        functions. Removed unneeded m_hrefAttrValue, m_href, and m_target. Moved
        implementation of target function into the .cpp file.

        * html/HTMLBaseElement.idl: Marked the href attribute as URL.

        * html/HTMLBlockquoteElement.cpp:
        (WebCore::HTMLBlockquoteElement::isURLAttribute): Added.
        * html/HTMLBlockquoteElement.h: Added isURLAttribute.
        * html/HTMLBlockquoteElement.idl: Marked the cite attribute as URL.

        * html/HTMLEmbedElement.idl: Marked the src attribute as URL.

        * html/HTMLFormElement.cpp: Added a comment about the action function, which should
        be removed.

        * html/HTMLFormElement.idl: Marked the action attribute as URL.

        * html/HTMLHtmlElement.cpp:
        (WebCore::HTMLHtmlElement::isURLAttribute): Added.
        (WebCore::HTMLHtmlElement::insertedIntoDocument): Tweaked a bit.
        * html/HTMLHtmlElement.h: Added isURLAttribute.
        * html/HTMLHtmlElement.idl: Marked the manifest attribute as URL.

        * html/HTMLIFrameElement.idl: Marked the src attribute a URL.

        * html/HTMLModElement.cpp:
        (WebCore::HTMLModElement::isURLAttribute): Added.
        * html/HTMLModElement.h: Added isURLAttribute.
        * html/HTMLModElement.idl: Marked the cite attribute as URL.

        * html/HTMLQuoteElement.cpp:
        (WebCore::HTMLQuoteElement::isURLAttribute): Added.
        * html/HTMLQuoteElement.h: Added isURLAttribute.
        * html/HTMLQuoteElement.idl: Marked the cite attribute as URL.

        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::processTagToken): Changed code to create a base
        element instead of calling setBaseElementURL directly.
        (WebCore::HTMLViewSourceDocument::addSpanWithClassName): Use AtomicString instead of String.
        (WebCore::HTMLViewSourceDocument::addLine): Ditto.
        (WebCore::HTMLViewSourceDocument::addText): Ditto.
        (WebCore::HTMLViewSourceDocument::addBase): Added. Creates a base element and inserts it.
        (WebCore::HTMLViewSourceDocument::addLink): Use AtomicString instead of String.
 
        * html/HTMLViewSourceDocument.h: Updated function declarations as above.

        * bindings/scripts/test/CPP/WebDOMTestCallback.h:
        * bindings/scripts/test/CPP/WebDOMTestInterface.h:
        * bindings/scripts/test/CPP/WebDOMTestObj.h:
        * bindings/scripts/test/GObject/WebKitDOMTestCallback.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        Updated results, which changed due to the fixes for at
        least these bugs, and perhaps a few more:
        https://bugs.webkit.org/show_bug.cgi?id=42115
        https://bugs.webkit.org/show_bug.cgi?id=44597
        https://bugs.webkit.org/show_bug.cgi?id=44738

        * bindings/scripts/test/TestObj.idl:
        * html/HTMLAnchorElement.idl:
        * html/HTMLAreaElement.idl:
        * html/HTMLEmbedElement.idl:
        * html/HTMLFormElement.cpp:
        * html/HTMLFormElement.idl:
        * html/HTMLFrameElement.idl:
        * html/HTMLIFrameElement.idl:
        * html/HTMLImageElement.idl:
        * html/HTMLInputElement.idl:
        * html/HTMLLinkElement.idl:
        * html/HTMLMediaElement.idl:
        * html/HTMLObjectElement.idl:
        * html/HTMLScriptElement.idl:
        * html/HTMLSourceElement.idl:
        * html/HTMLVideoElement.idl:
        Tweaked formatting.

2010-08-28  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        The logic to escape entities in appendEscapedContent and appendAttributeValue should be merged
        https://bugs.webkit.org/show_bug.cgi?id=44831

        Added appendCharactersReplacingEntities to escape &, <, >, ", and nbsp based on the mask.
        Removed escapeContentText because it was only used in appendText, which now directly calls
        appendCharactersReplacingEntities. Replaced appendEscapedContent, ucharRange, and appendUCharRange
        by appendNodeValue.

        No new tests are added since this is a cleanup.

        * editing/markup.cpp:
        (WebCore::):
        (WebCore::appendCharactersReplacingEntities): Added.
        (WebCore::MarkupAccumulator::appendAttributeValue): Calls appendCharactersReplacingEntities.
        (WebCore::MarkupAccumulator::appendNodeValue): Added.
        (WebCore::MarkupAccumulator::appendText): Calls appendNodeValue and appendCharactersReplacingEntities.
        (WebCore::urlToMarkup): Calls escapeEntities.

2010-08-27  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        cannot remove text-decoration when style is added by u or s
        https://bugs.webkit.org/show_bug.cgi?id=44560

        The bug was caused by WebKit not pushing down implicitly added styles to descendent nodes.
        Fixed the bug by pushing down all elements that implicitly add style.

        extractInlineStyleToPushDown now calls removeImplicitlyStyledElement, which was modified to extract
        the style implicitly added by the element to extractStyle.

        This revealed a bug in applyInlineStyleToPushDown where applyInlineStyleIfNeeded could add
        an implicitly styled element inside an element with a conflicting style, thereby overriding the style of the element.
        Fixed this by extending the logic to honor the existing inline style declaration used in
        the case of rewriting inline style declaration to all cases including the one calling addInlineStyleIfNeeded.

        Also fixed a bug in removeInlineStyle where pushDownInlineStyleAroundNode was called on a text node
        outside of selection if start was at the end of the text node.

        Test: editing/style/push-down-implicit-styles.html

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::removeImplicitlyStyledElement): Added extractedStyle, which receives
        the style implicitly added by the element being removed.
        (WebCore::ApplyStyleCommand::extractInlineStyleToPushDown): Calls removeImplicitlyStyledElement
        to remove the implicitly styled element and extract the inline style added by the element.
        (WebCore::ApplyStyleCommand::applyInlineStyleToPushDown): Fixed a bug that addInlineStyleIfNeeded
        could override the inline style declaration style of the node.
        (WebCore::ApplyStyleCommand::pushDownInlineStyleAroundNode): Uses extractInlineStyleToPushDown
        (WebCore::ApplyStyleCommand::removeInlineStyle): See above.
        * editing/ApplyStyleCommand.h: Prototype changes.

2010-08-27  Mark Rowe  <mrowe@apple.com>

        Reviewed by Adam Barth.

        <http://webkit.org/b/44802> REGRESSION (r65351): WebCore build fails due to attempting to directly access WebKitTools/Scripts

        Move create-html-entity-table in to WebCore so that the build is again self-contained.
        The script is also updated to take input as a CSV file rather than JSON as the former
        can be parsed without requiring a third-party Python module be installed.

        * CMakeLists.txt:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.pri:
        * WebCore.xcodeproj/project.pbxproj: Stop copying the input file in to the WebCore framework wrapper.
        * html/parser/HTMLEntityNames.in: Added.
        * html/parser/HTMLEntityNames.json: Removed.
        * html/parser/create-html-entity-table: Renamed from WebKitTools/Scripts/create-html-entity-table.

2010-08-28  Daniel Bates  <dbates@rim.com>

        Attempt to fix Chromium Mac Release bot after changeset 66305 <http://trac.webkit.org/changeset/66305>.

        * accessibility/chromium/AXObjectCacheChromium.cpp:
        (WebCore::AXObjectCache::postPlatformNotification): Added case statements for missing enum values.
        These case statements simply fall through to a "break" statement.

2010-08-26  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Nikolas Zimmermann.

        Add explicit destructor for C++ DOM bindings to avoid memory leaks when using SWIG.
        https://bugs.webkit.org/attachment.cgi?bugid=44738

        * bindings/scripts/CodeGeneratorCPP.pm:

2010-08-28  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Dan Bernstein.

        Add WebM MIME types to type registry
        https://bugs.webkit.org/show_bug.cgi?id=44826

        * platform/MIMETypeRegistry.cpp:
        (WebCore::TypeExtensionPair::): Add "video/webm" and "audio/webm" types.

2010-08-28  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        Crash reloading fast/events/tabindex-focus-blur-all.html test
        https://bugs.webkit.org/show_bug.cgi?id=44743

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::asyncEventTimerFired): If m_isWaitingToDecrementLoadEventDelayCount
        is true, call setShouldDelayLoadEvent(false) and set the timer to fire the pending events
        on the next idle.
        (WebCore::HTMLMediaElement::setShouldDelayLoadEvent): Don't clear the delay from within a
        media engine callback because document 'load' event handlers that cause the page to become
        inactive will delete the media engine. 
        * html/HTMLMediaElement.h: Add m_isWaitingToDecrementLoadEventDelayCount.

2010-08-28  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Sam Weinig.

        When properties are missing from animation keyframes, interpolate between those keyframes that specify them
        https://bugs.webkit.org/show_bug.cgi?id=40794

        Some preliminary cleanup; for vectors, prefer indexed access rather than using iterators.
        
        No behavior changes.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::keyframeStylesForAnimation):
        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::getKeyframeAnimationInterval):
        (WebCore::KeyframeAnimation::validateTransformFunctionList):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::startAnimation):
        * rendering/style/KeyframeList.h:
        (WebCore::KeyframeList::at):
        (WebCore::KeyframeList::keyframes):

2010-08-28  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        Speculative fix for <rdar://problem/7275077> Crash in InlineBox::root() under RenderTextControl::textWithHardLineBreaks()
        https://bugs.webkit.org/show_bug.cgi?id=44816

        No test because I could not reproduce the crash.

        In a common variant of the crash, InlineBox::root() is called with this == 12. This suggests that
        a RenderInline* was cast into a RenderBox*, so RenderBox::inlineBoxWrapper() interpreted the
        m_lineHeight and m_verticalPosition members of a RenderInline as a pointer to an InlineBox.

        The cast into RenderBox* in textWithHardLineBreaks() was introduced in r40881 with no exaplanation.

        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::textWithHardLineBreaks): Fetch the first line directly from the inner
        text block instead of relying on the first child being a text node.

2010-08-28  Moritz Lipp  <mlq@pwmt.org>

        Reviewed by Xan Lopez.

        [GTK] Improper webkit_dom_document_evaluate implementation.
        https://bugs.webkit.org/show_bug.cgi?id=42115

        The generated webkit_dom_document_evaluate() function does not meet the
        evaluate interface described in the W3 Documentation
        http://www.w3.org/TR/DOM-Level-3-XPath/xpath.html#XPathEvaluator-evaluate
        "If this is specified as nullor the implementation does not reuse the
        specified result,...". The current implementation did not accept the
        result parameter to be NULL.

        * bindings/scripts/CodeGeneratorGObject.pm:

2010-08-28  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        HTMLTreeBuilder needs to call HTMLFormElement::setDemoted
        https://bugs.webkit.org/show_bug.cgi?id=44781

        This patch teaches the HTMLTreeBuilder about demoted form elements.
        Demoting a form element magically stops the form element from
        rendering.  Demoted form elements are a concept from the
        LegacyHTMLTreeBuilder, but they are somewhat of a hack because
        rendering should be DOM-based.  We'll likely look for a better solution
        in a future patch.

        * html/parser/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::insertHTMLFormElement):
        * html/parser/HTMLConstructionSite.h:
        * html/parser/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTagForInTable):

2010-08-28  Chris Guillory   <chris.guillory@google.com>

        Reviewed by Chris Fleizach.

        Add AX notification for childrenChanged
        https://bugs.webkit.org/show_bug.cgi?id=44472

        Test by running platform/chromium/accessibility/children-changed-notification.html within chromium's DRT

        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::childrenChanged):
        * accessibility/chromium/AXObjectCacheChromium.cpp:
        (WebCore::AXObjectCache::postPlatformNotification):
        * page/chromium/ChromeClientChromium.h:

2010-08-28  Eric Uhrhane  <ericu@chromium.org>

        Reviewed by Darin Fisher.

        Implement the DOM FileWriter class
        https://bugs.webkit.org/show_bug.cgi?id=44362

        No new tests until the delegate class has an implementation; bug logged.

        Build file additions.
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:

        The AsyncFileWriter is an abstract interface to which FileWriter delegates all the hard work.
        * html/AsyncFileWriter.h: Added.

        The FileWriterClient is the interface for communications back from the AsyncFileWriter [success/failure, progress events].
        * html/FileWriterClient.h: Added.
        (WebCore::FileWriterClient::~FileWriterClient):

        Added all delegation, state tracking, and progress event processing.
        * html/FileWriter.cpp:
        (WebCore::FileWriter::FileWriter):
        (WebCore::FileWriter::initialize):
        (WebCore::FileWriter::~FileWriter):
        ActiveDomObject stuff
        (WebCore::FileWriter::hasPendingActivity):
        (WebCore::FileWriter::stop):
        (WebCore::FileWriter::write):
        FileWriter public interface
        (WebCore::FileWriter::seek):
        (WebCore::FileWriter::truncate):
        (WebCore::FileWriter::abort):
        FileWriterClient interface
        (WebCore::FileWriter::didWrite):
        (WebCore::FileWriter::didTruncate):
        (WebCore::FileWriter::didFail):
        Progress events
        (WebCore::FileWriter::fireEvent):
        * html/FileWriter.h:

2010-08-28  Marc-Antoine Ruel  <maruel@chromium.org>

        Reviewed by Dimitri Glazkov.

        Preparatory patch to split libwebcore in multiple libraries.

        Start with a webcore_prerequisites pseudo-target what will be the common
        target for all the other ones.

        * WebCore.gyp/WebCore.gyp:

2010-08-28  Pratik Solanki  <psolanki@apple.com>

        Reviewed by Dan Bernstein.

        Add an ENABLE define for purgeable memory support
        https://bugs.webkit.org/show_bug.cgi?id=44777

        * platform/PurgeableBuffer.h:
        * platform/mac/PurgeableBufferMac.cpp:

2010-08-28  Lucas De Marchi  <lucas.demarchi@profusion.mobi>

        Reviewed by Kenneth Rohde Christiansen.

        [EFL] Fix error message when theme loading fails
        https://bugs.webkit.org/show_bug.cgi?id=44775

        Parameters for logging were in the wrong order.

        No new functionality so no new tests.

        * platform/efl/ScrollbarEfl.cpp:
        (ScrollbarEfl::setParent): exchange argument order in log function
        call

2010-08-27  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        REGRESSION: some tests no longer painting
        https://bugs.webkit.org/show_bug.cgi?id=44773

        Fix regression from the RenderImageResource introduction, fast/canvas/canvas-as-image.html
        and fast/canvas/canvas-as-image-incremental-repaint.html pixel tests did not work anymore.

        * rendering/RenderImageResource.h:
        (WebCore::RenderImageResource::hasImage): Make hasImage virtual.
        * rendering/RenderImageResourceStyleImage.h:
        (WebCore::RenderImageResourceStyleImage::hasImage): Always return true, just like RenderImageGeneratedContent did.

2010-08-27  Kimmo Kinnunen  <kimmo.t.kinnunen@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Cache plugin info to a persistent database

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

        Implement a cache of NPAPI plugin metadata. Write the metadata to aa
        file that gets rewritten if any plugin is added / removed.  Compilation
        of the feature is controlled by #if ENABLE(NETSCAPE_PLUGIN_METADATA_CACHE)

        Currently only enabled for Qt UNIX flavors.

        * WebCore.pro:  Enable NETSCAPE_PLUGIN_METADATA_CACHE for UNIX builds
        * platform/qt/FileSystemQt.cpp:
        (WebCore::openFile): Added.
        (WebCore::readFromFile): Added.
        * plugins/PluginDatabase.cpp:
        (WebCore::persistentPluginMetadataCachePath): Static accessor for the path
        (WebCore::PluginDatabase::PluginDatabase): Add instance variable.
        (WebCore::PluginDatabase::refresh):
        (WebCore::PluginDatabase::pluginForMIMEType): Ensure returned plugin is loaded.
        (WebCore::PluginDatabase::MIMETypeForExtension): Ensure returned plugin is loaded.
        (WebCore::PluginDatabase::clear):
        (WebCore::fillBufferWithContentsOfFile): Static helper function.
        (WebCore::readUTF8String): Static helper function.
        (WebCore::readTime): Static helper function.
        (WebCore::PluginDatabase::loadPersistentMetadataCache):
        (WebCore::writeUTF8String): Static helper function.
        (WebCore::writeTime): Static helper function.
        (WebCore::PluginDatabase::updatePersistentMetadataCache): Added.
        (WebCore::PluginDatabase::isPersistentMetadataCacheEnabled): Added.
        (WebCore::PluginDatabase::setPersistentMetadataCacheEnabled):Added.
        (WebCore::PluginDatabase::persistentMetadataCachePath): Added.
        (WebCore::PluginDatabase::setPersistentMetadataCachePath): Added.
        * plugins/PluginDatabase.h:
        * plugins/PluginPackage.cpp:
        (WebCore::PluginPackage::PluginPackage): Add instance variable.
        (WebCore::PluginPackage::createPackageFromCache): Added.
        (WebCore::PluginPackage::ensurePluginLoaded): Added.
        * plugins/PluginPackage.h:
        (WebCore::PluginPackage::fullMIMEDescription): Added.
        * plugins/qt/PluginPackageQt.cpp:
        (WebCore::PluginPackage::fetchInfo): Split mime parsing.
        (WebCore::PluginPackage::setMIMEDescription): Added. Mime parsing.

2010-08-27  Daniel Bates  <dbates@rim.com>

        Reviewed by Darin Adler.

        Implement symbolic CSS3 list-style-types
        https://bugs.webkit.org/show_bug.cgi?id=36734

        Implements all of the symbolic CSS3 list-style-types as per
        section 4.5 of the CSS3 Lists module <http://www.w3.org/TR/css3-lists/#symbolic>.

        Test: fast/lists/w3-css3-list-styles-symbolic.html

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue): Added list style types Asterisks and Footnotes.
        * css/CSSValueKeywords.in: Ditto.
        * inspector/front-end/SourceCSSTokenizer.re2js: Ditto.
        * rendering/RenderListMarker.cpp:
        (WebCore::toAlphabeticOrNumeric): Changed type of parameter sequenceSize from int to unsigned.
        (WebCore::toSymbolic): Added.
        (WebCore::toAlphabetic): Changed type of parameter alphabetSize from int to unsigned.
        (WebCore::toNumeric): Changed type of parameter numeralsSize from int to unsigned.
        (WebCore::effectiveListMarkerType): Added.
        (WebCore::listMarkerSuffix): Added list style types Asterisks and Footnotes.
        (WebCore::listMarkerText): Ditto.
        (WebCore::RenderListMarker::paint): Ditto.
        (WebCore::RenderListMarker::calcPrefWidths): Ditto.
        (WebCore::RenderListMarker::getRelativeMarkerRect): Ditto.
        * rendering/style/RenderStyleConstants.h: Ditto.
        (WebCore::):

2010-08-27  Vincent Scheib  <scheib@chromium.org>

        Reviewed by Darin Fisher.

        CanvasRenderingContext2D::willDraw changed to didDraw

        Solves issue with canvas to canvas draw calls, and simplifies
        mixed software and GPU acceleration of GraphicsContext implementations
        which must track dirty rects for backing stores.

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

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::didDraw):
        * html/HTMLCanvasElement.h:
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::fill):
        (WebCore::CanvasRenderingContext2D::stroke):
        (WebCore::CanvasRenderingContext2D::clearRect):
        (WebCore::CanvasRenderingContext2D::fillRect):
        (WebCore::CanvasRenderingContext2D::strokeRect):
        (WebCore::CanvasRenderingContext2D::drawImage):
        (WebCore::CanvasRenderingContext2D::drawImageFromRect):
        (WebCore::CanvasRenderingContext2D::didDraw):
        (WebCore::CanvasRenderingContext2D::putImageData):
        (WebCore::CanvasRenderingContext2D::drawTextInternal):
        * html/canvas/CanvasRenderingContext2D.h:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::markContextChanged):

2010-08-27  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by Tony Chang.

        [chromium] Add new WebClipboard method for setting generic data in copy/cut handlers.
        https://bugs.webkit.org/show_bug.cgi?id=42121

        No new tests.

        * platform/chromium/ChromiumBridge.h:

2010-08-27  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Adam Roben.

        Remove unnecessary AlphaBlend in PasteboardWin.
        https://bugs.webkit.org/show_bug.cgi?id=44720

        Replacing AlphaBlend with BitBlt is safe because testing showed that alpha
        never survives copy-and-paste on Windows in any browser, and StretchBlt 
        was a overkill since the source and destination size are always equal.

        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::writeImage):

2010-08-26  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        Passing premultiplyAlpha=false to tex{Sub}Image2D loses information (skia)
        https://bugs.webkit.org/show_bug.cgi?id=38282

        * platform/graphics/skia/GraphicsContext3DSkia.cpp: Dealing with the case of texImage2D with HTMLCanvasElement input.
        (WebCore::GraphicsContext3D::getImageData):

2010-08-26  Vangelis Kokkevis  <vangelis@chromium.org>

        Reviewed by Darin Fisher.

        [chromium] Working around compile issue in LayerRendererChromium.cpp
        when DEBUG_GL_CALLS=1
        https://bugs.webkit.org/show_bug.cgi?id=44739

        No new functionality, no new tests.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::drawLayerIntoStencilBuffer):

2010-08-27  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Adam Roben.

        [WINCE] Port SoftLinking to WinCE
        https://bugs.webkit.org/show_bug.cgi?id=44693

        WinCE provides GetProcAddressW and GetProcAddressA for softlinking.
        Unfortunately WinNT provides only GetProcAddress (without A or W).

        Add a platform dependent macro for GetProcAddress.

        * platform/win/SoftLinking.h:

2010-08-27  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] ScrollbarThemeGtk should account for the trough_under_steppers property
        https://bugs.webkit.org/show_bug.cgi?id=44742

        No new tests until this code is activated, at which point pixel tests will
        test the scrollbar rendering.

        * platform/gtk/ScrollbarThemeGtk.cpp:
        (WebCore::ScrollbarThemeGtk::paintTrackBackground): Only inflate the track background
        if the style specifies trough_under_steppers.
        (WebCore::ScrollbarThemeGtk::paint): If the theme specifies trough_under_steppers,
        a dirty stepper also triggers a repaint of the trough region.

2010-08-27  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Alexey Proskuryakov.

        Extra Events triggered by <input> on focus
        https://bugs.webkit.org/show_bug.cgi?id=44731

        Tests: fast/events/input-focus-no-duplicate-events.html
               fast/events/input-tab-focus-no-duplicate-events.html

        * dom/Element.cpp:
        (WebCore::Element::focus): do not continue and update the appearance of the element if it was not focused.
        * page/FocusController.cpp:
        (WebCore::FocusController::setFocusedNode): respect the return value of Document::setFocusedNode.

2010-08-26  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Pavel Feldman.

        Web Inspector: attribute nodes don't get rendered in the console
        https://bugs.webkit.org/show_bug.cgi?id=44736

        Extended Test: inspector/console-format.html

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForNode): add "name" and "value" properties for Attribute nodes.
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode): add "name" and "value" properties for Attribute nodes.
        * inspector/front-end/ElementsTreeOutline.js: display html for Attribute nodes.

2010-08-27  Adam Barth  <abarth@webkit.org>

        Rubber-stamped by Eric Seidel.

        Finshing moving the HTML parser into WebCore/html/parser.

        * Android.derived.mk:
        * Android.mk:
        * CMakeLists.txt:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/CSSPreloadScanner.cpp: Removed.
        * html/CSSPreloadScanner.h: Removed.
        * html/HTMLConstructionSite.cpp: Removed.
        * html/HTMLConstructionSite.h: Removed.
        * html/HTMLDocumentParser.cpp: Removed.
        * html/HTMLDocumentParser.h: Removed.
        * html/HTMLEntityNames.json: Removed.
        * html/HTMLEntityParser.cpp: Removed.
        * html/HTMLEntityParser.h: Removed.
        * html/HTMLEntitySearch.cpp: Removed.
        * html/HTMLEntitySearch.h: Removed.
        * html/HTMLEntityTable.h: Removed.
        * html/HTMLFormattingElementList.cpp: Removed.
        * html/HTMLFormattingElementList.h: Removed.
        * html/HTMLParserScheduler.cpp: Removed.
        * html/HTMLParserScheduler.h: Removed.
        * html/HTMLPreloadScanner.cpp: Removed.
        * html/HTMLPreloadScanner.h: Removed.
        * html/HTMLScriptRunner.cpp: Removed.
        * html/HTMLScriptRunner.h: Removed.
        * html/HTMLScriptRunnerHost.h: Removed.
        * html/HTMLTokenizer.cpp: Removed.
        * html/HTMLTokenizer.h: Removed.
        * html/HTMLViewSourceParser.cpp: Removed.
        * html/HTMLViewSourceParser.h: Removed.
        * html/parser/CSSPreloadScanner.cpp: Copied from WebCore/html/CSSPreloadScanner.cpp.
        * html/parser/CSSPreloadScanner.h: Copied from WebCore/html/CSSPreloadScanner.h.
        * html/parser/HTMLConstructionSite.cpp: Copied from WebCore/html/HTMLConstructionSite.cpp.
        * html/parser/HTMLConstructionSite.h: Copied from WebCore/html/HTMLConstructionSite.h.
        * html/parser/HTMLDocumentParser.cpp: Copied from WebCore/html/HTMLDocumentParser.cpp.
        * html/parser/HTMLDocumentParser.h: Copied from WebCore/html/HTMLDocumentParser.h.
        * html/parser/HTMLEntityNames.json: Copied from WebCore/html/HTMLEntityNames.json.
        * html/parser/HTMLEntityParser.cpp: Copied from WebCore/html/HTMLEntityParser.cpp.
        * html/parser/HTMLEntityParser.h: Copied from WebCore/html/HTMLEntityParser.h.
        * html/parser/HTMLEntitySearch.cpp: Copied from WebCore/html/HTMLEntitySearch.cpp.
        * html/parser/HTMLEntitySearch.h: Copied from WebCore/html/HTMLEntitySearch.h.
        * html/parser/HTMLEntityTable.h: Copied from WebCore/html/HTMLEntityTable.h.
        * html/parser/HTMLFormattingElementList.cpp: Copied from WebCore/html/HTMLFormattingElementList.cpp.
        * html/parser/HTMLFormattingElementList.h: Copied from WebCore/html/HTMLFormattingElementList.h.
        * html/parser/HTMLParserScheduler.cpp: Copied from WebCore/html/HTMLParserScheduler.cpp.
        * html/parser/HTMLParserScheduler.h: Copied from WebCore/html/HTMLParserScheduler.h.
        * html/parser/HTMLPreloadScanner.cpp: Copied from WebCore/html/HTMLPreloadScanner.cpp.
        * html/parser/HTMLPreloadScanner.h: Copied from WebCore/html/HTMLPreloadScanner.h.
        * html/parser/HTMLScriptRunner.cpp: Copied from WebCore/html/HTMLScriptRunner.cpp.
        * html/parser/HTMLScriptRunner.h: Copied from WebCore/html/HTMLScriptRunner.h.
        * html/parser/HTMLScriptRunnerHost.h: Copied from WebCore/html/HTMLScriptRunnerHost.h.
        * html/parser/HTMLTokenizer.cpp: Copied from WebCore/html/HTMLTokenizer.cpp.
        * html/parser/HTMLTokenizer.h: Copied from WebCore/html/HTMLTokenizer.h.
        * html/parser/HTMLViewSourceParser.cpp: Copied from WebCore/html/HTMLViewSourceParser.cpp.
        * html/parser/HTMLViewSourceParser.h: Copied from WebCore/html/HTMLViewSourceParser.h.

2010-08-27  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Tony Chang.

        Insertion point does not show when dragging text into an editable area
        https://bugs.webkit.org/show_bug.cgi?id=44295
        
        r65681 caused the caret to use the last-computed caret rect when
        painting, rather than forcing a style update. Because of this,
        we now need to eagerly update the caret rect when changing
        the drag selection.
        
        Not testable in DRT because the drag selection is always cleared
        before EventSender returns, so the drag caret can never show in
        the pixel results.

        Tested by running editing/selection/drag-in-iframe.html manually.

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

2010-08-27  Adam Barth  <abarth@webkit.org>

        Attempt to fix the Windows build.

        * WebCore.vcproj/WebCoreCommon.vsprops:

2010-08-27  Adam Barth  <abarth@webkit.org>

        Attempt to fix the Qt build.

        * WebCore.pro:

2010-08-27  Adam Barth  <abarth@webkit.org>

        Rubber-stamped by Eric Seidel.

        Move HTMLTreeBuilder and HTMLElementStack to WebCore/html/parser.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLElementStack.cpp: Removed.
        * html/HTMLElementStack.h: Removed.
        * html/HTMLTreeBuilder.cpp: Removed.
        * html/HTMLTreeBuilder.h: Removed.
        * html/parser/HTMLElementStack.cpp: Copied from WebCore/html/HTMLElementStack.cpp.
        * html/parser/HTMLElementStack.h: Copied from WebCore/html/HTMLElementStack.h.
        * html/parser/HTMLTreeBuilder.cpp: Copied from WebCore/html/HTMLTreeBuilder.cpp.
        * html/parser/HTMLTreeBuilder.h: Copied from WebCore/html/HTMLTreeBuilder.h.

2010-08-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Create WebCore/html/parser
        https://bugs.webkit.org/show_bug.cgi?id=44792

        This patch begins the process of moving the HTML parser code to the
        WebCore/html/parser directory.  This patch moves a single header file.
        More files will follow in future patches.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/WebCoreCommon.vsprops:
        * WebCore.xcodeproj/project.pbxproj:
        * html/parser/HTMLToken.h: Renamed from WebCore/html/HTMLToken.h.

2010-08-27  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=42862
        WebGL in CSS Canvas crashes

        This fixes the crash, which was a simple null pointer deref. But this
        revealed that -webkit-canvas no longer works for WebGL. I believe this
        is due to the recent ImageBuffer optimizations done by Dave Hyatt
        (https://bugs.webkit.org/show_bug.cgi?id=43507). This changed ImageBuffer
        from always keeping a copy of the pixels to doing a copy to get them
        when needed. Since We need to get pixels out of the WebGL drawing buffer
        to use them as a CSS background, I had to change when I return those
        pixels to the ImageBuffer.

        Tests: fast/canvas/webgl/css-webkit-canvas-repaint.html
               fast/canvas/webgl/css-webkit-canvas.html

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::copiedImage): Add logic to get image from WebGL so it works with new ImageBuffer logic (see above)
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::create): Fixed null pointer deref

2010-08-27  James Robinson  <jamesr@chromium.org>

        Reviewed by Dimitri Glazkov.

        Move Shader class from platform/graphics/chromium to platform/graphics/gpu
        https://bugs.webkit.org/show_bug.cgi?id=44793

        The Shader class and its subclasses are not chromium-specific.  This moves
        them to a common location so they can be re-used on all platforms.  Also
        moves the Shader subclasses into their own .h/.cpp files.

        Refactor, no new tests.

        * WebCore.gypi:
        * platform/graphics/chromium/GLES2Canvas.cpp:
        * platform/graphics/chromium/Shader.cpp: Removed.
        * platform/graphics/chromium/Shader.h: Removed.
        * platform/graphics/gpu/Shader.cpp: Added.
        (WebCore::Shader::affineTo3x3):
        (WebCore::Shader::loadShader):
        (WebCore::Shader::loadProgram):
        (WebCore::Shader::Shader):
        (WebCore::Shader::~Shader):
        * platform/graphics/gpu/Shader.h: Added.
        * platform/graphics/gpu/SolidFillShader.cpp: Added.
        (WebCore::SolidFillShader::SolidFillShader):
        (WebCore::SolidFillShader::create):
        (WebCore::SolidFillShader::use):
        * platform/graphics/gpu/SolidFillShader.h: Added.
        * platform/graphics/gpu/TexShader.cpp: Added.
        (WebCore::TexShader::TexShader):
        (WebCore::TexShader::create):
        (WebCore::TexShader::use):
        * platform/graphics/gpu/TexShader.h: Added.

2010-08-27  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Darin Fisher.

        Add AsyncFileSystem interface for platform-dependent FileSystem API implementation
        https://bugs.webkit.org/show_bug.cgi?id=44433

        No new tests; tests will be added later.

        * CMakeLists.txt:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/AsyncFileSystem.cpp: Added.
        * platform/AsyncFileSystem.h: Added.
        * platform/AsyncFileSystemCallbacks.h: Added.
        * storage/DOMFileSystem.cpp:
        (WebCore::DOMFileSystem::DOMFileSystem):
        (WebCore::DOMFileSystem::~DOMFileSystem):
        (WebCore::DOMFileSystem::stop):
        (WebCore::DOMFileSystem::hasPendingActivity):
        (WebCore::DOMFileSystem::contextDestroyed):
        * storage/DOMFileSystem.h:
        (WebCore::DOMFileSystem::create):
        * storage/FileSystemCallbacks.cpp:
        (WebCore::FileSystemCallbacksBase::didFail):
        (WebCore::FileSystemCallbacks::FileSystemCallbacks):
        (WebCore::FileSystemCallbacks::didOpenFileSystem):
        * storage/FileSystemCallbacks.h:
        * storage/LocalFileSystem.cpp: Added.
        * storage/LocalFileSystem.h: Added.

        * storage/Flags.h: Nits fix.

2010-07-27  Jer Noble  <jer.noble@apple.com>

        Reviewed by Eric Carlson.

        Add JavaScript API to allow a page to go fullscreen.
        rdar://problem/6867795
        https://bugs.webkit.org/show_bug.cgi?id=43099
        
        Mozilla has proposed a new set of JavaScript APIs which allow any element in
        a document to go full-screen.  The current revision of their proposal can be 
        found here:
        <https://wiki.mozilla.org/index.php?title=Gecko:FullScreenAPI&oldid=243429>
        
        The proposed specification includes the following:
        
        Document:
        - Three new methods on Document:
            + void requestFullScreen()
            + void requestFullScreenWithKeys()
            + void cancelFullScreen()
        - Three new attributes of Document:
            + readonly attribute boolean fullScreen
            + readonly attribute boolean fullScreenWithKeys
            + (optional) readonly attribute Element currentFullScreenElement
            
        Element:
        - Two new methods on Element:
            + void requestFullScreen()
            + void requestFullScreenWithKeys()
        
        Events:
        - One new event:
            + fullScreenChange
        
        CSS Pseudo-classes:
        - Three new Pseudo-classes:
            + :full-screen
            + :full-screen-doc
            + :full-screen-root-with-target
        
        For WebKit's initial implementation, all the above new APIs will be prefixed with 
        "webkit" or "-webkit" where appropriate.
        
        New tests:
        LayoutTests/fullscreen/full-screen-api.html
        LayoutTests/fullscreen/full-screen-css.html
        LayoutTests/fullscreen/full-screen-request.html

        Project file changes:
        * Configurations/FeatureDefines.xcconfig: Added an ENABLE_FULLSCREEN_API entry.
        * DerivedSources.make: Added rules for fullscreen.css and WebCore.FullScreen.exp.
        * WebCore.FullScreen.exp: Added export symbols for Document and Element functions.
        * WebCore.xcodeproj/project.pbxproj: New source files added to the project.

        IDL changes:
        * dom/Document.idl: Added the new full-screen API to the Document's javascript interface.
        * dom/Element.idl: Added the new full-screen API to the Element's javascript interface.

        Source changes:
        * bindings/objc/PublicDOMInterfaces.h: Exposed Document and Element fullscreen functions in the DOM classes.
        * css/CSSSelector.cpp: Added new FullScreen pseudo-classes.
        * css/CSSSelector.h: Added new full-screen pseudo classes to the PseudoType enum.
        * css/CSSStyleSelector.cpp: 
        (WebCore::loadFullDefaultStyle): Pull the fullscreen.css sheet into the defaultStyle and the defaultQuirksStyle sheets.
        (WebCore::loadSimpleDefaultStyle): Pull the fullscreen.css sheet into the defaultStyle sheet.
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector): Check for the new FullScreen pseudo classes.
        * dom/Document.cpp:
        (WebCore::Document::createEvent): Support creating a "WebKitFullScreenChange" event.
        (WebCore::Document::addListenerTypeIfNeeded): Support listening for a "webKitFullScreenChangeEvent"
        (WebCore::Document::webkitRequestFullScreenForElement): Passes request to the chrome client to enter full screen mode.
        (WebCore::Document::webkitCancelFullScreen): Passes request to the chrome client to exit full screen mode.
        (WebCore::Document::webkitWillEnterFullScreenForElement): Sets the FullScreen pseudo-classes on the full-screen element and its document.
        (WebCore::Document::webkitDidEnterFullScreenForElement): Currently a no-op.
        (WebCore::Document::webkitWillExitFullScreenForElement): Currently a no-op.
        (WebCore::Document::webkitDidExitFullScreenForElement): Clears the FullScreen pseudo-classes on the full-screen element and its document.
        * dom/Document.h: Added const accessors for new full-screen instance variables.
        (WebCore::Document::):
        (WebCore::Document::webkitIsFullScreen): Accessor for m_isFullScreen.
        (WebCore::Document::webkitIsFullScreenWithKeysEnabled): Accessor for m_isFullScren and m_areKeysEnabled.
        (WebCore::Document::webkitCurrentFullScreenElement): Accessor for m_fullScreenElement.
        * dom/Element.cpp:
        (WebCore::Element::webkitRequestFullScreen): Calls Document::webkitRequestFullScreenForElement. 
        * dom/Element.h:
        * dom/EventNames.h: Add a webkitfullscreenchange event name.
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::parseMappedAttribute): Parse the new "onwebkitfullscreenchange" attribute and register a listener.
        * page/ChromeClient.h:
        (WebCore::ChromeClient::supportsFullscreenForElement): Pass through to the current UI delegate.
        (WebCore::ChromeClient::enterFullscreenForElement): Create a WebKitFullScreenListener and pass through to the current UI delegate.
        (WebCore::ChromeClient::exitFullscreenForElement): Create a WebKitFullScreenListener and pass through to the current UI delegate.
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h: Add a new setting to control runtime support for full screen mode (defaults to off)
        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlFullscreenButtonElement::defaultEventHandler): The full screen button now toggles full screen mode (previously, it only entered).
        * rendering/style/RenderStyleConstants.h: Added new style constants.

2010-08-27  James Robinson  <jamesr@chromium.org>

        Reviewed by Darin Fisher.

        Move Texture class from p/g/chromium to p/g/gpu
        https://bugs.webkit.org/show_bug.cgi?id=44783

        This class and its support were developed in platform/graphics/chromium but are not chromium-specific
        in any way.  This patch moves them to a common location so they can be shared by all platforms.

        Pure refactor, so no new tests.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * platform/graphics/chromium/GLES2Canvas.cpp:
        (WebCore::GLES2Canvas::drawTexturedRect):
        (WebCore::GLES2Canvas::drawTexturedRectTile):
        (WebCore::GLES2Canvas::createTexture):
        (WebCore::GLES2Canvas::getTexture):
        * platform/graphics/chromium/GLES2Canvas.h:
        * platform/graphics/chromium/GLES2Texture.cpp: Removed.
        * platform/graphics/chromium/GLES2Texture.h: Removed.
        * platform/graphics/gpu/Texture.cpp: Added.
        (WebCore::Texture::Texture):
        (WebCore::Texture::~Texture):
        (WebCore::convertFormat):
        (WebCore::Texture::create):
        (WebCore::copySubRect):
        (WebCore::Texture::load):
        (WebCore::Texture::bindTile):
        * platform/graphics/gpu/Texture.h: Added.
        (WebCore::Texture::):
        (WebCore::Texture::format):
        (WebCore::Texture::tiles):
        * platform/graphics/gpu/TilingData.cpp: Renamed from WebCore/platform/graphics/chromium/TilingData.cpp.
        (WebCore::computeNumTiles):
        (WebCore::TilingData::TilingData):
        (WebCore::TilingData::tileXIndexFromSrcCoord):
        (WebCore::TilingData::tileYIndexFromSrcCoord):
        (WebCore::TilingData::tileBounds):
        (WebCore::TilingData::tileBoundsWithBorder):
        (WebCore::TilingData::tileBoundsNormalized):
        (WebCore::TilingData::tilePositionX):
        (WebCore::TilingData::tilePositionY):
        (WebCore::TilingData::tileSizeX):
        (WebCore::TilingData::tileSizeY):
        (WebCore::TilingData::overlappedTileIndices):
        (WebCore::TilingData::intersectDrawQuad):
        * platform/graphics/gpu/TilingData.h: Renamed from WebCore/platform/graphics/chromium/TilingData.h.
        (WebCore::TilingData::maxTextureSize):
        (WebCore::TilingData::totalSizeX):
        (WebCore::TilingData::totalSizeY):
        (WebCore::TilingData::numTiles):
        (WebCore::TilingData::numTilesX):
        (WebCore::TilingData::numTilesY):
        (WebCore::TilingData::tileIndex):
        (WebCore::TilingData::tileXIndex):
        (WebCore::TilingData::tileYIndex):
        (WebCore::TilingData::TilingData):
        (WebCore::TilingData::assertTile):
        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::drawBitmapGLES2):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::uploadSoftwareToHardware):
        * platform/graphics/skia/PlatformContextSkia.h:

2010-08-27  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=44788, implement HTML5-compliant doctype switching.

        Rename the various modes to match the HTML5 specification:
            ParseMode -> CompatibilityMode
            CompatMode -> QuirksMode
            AlmostStrictMode -> LimitedQuirksMode
            StrictMode -> NoQuirksMode
            
        Remove the htmlHacks() accessor from RenderStyle and make rendering code just go to the document
        instead.  This makes switching modes avoid forcing all RenderStyles to detect as changed.
        
        Clean up user stylesheets to minimize style recalculation when the mode is switched.
        
        Fix bugs with the propagation of correct modes in the HTML5 parser.  Make sure the
        dummy document created for fragment parsing properly inherits the real document's CompatibilityMode.
        Make sure the tree builder properly changes the insertion mode to "BeforeHTML" after handling
        a doctype token.
        
        determineParseMode -> setCompatibilityModeFromDoctype, and it now implements the HTML5 algorithm
        precisely.
        
        * WebCore.exp.in:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::styleForDocument):
        (WebCore::CSSStyleSelector::applyProperty):
        (WebCore::CSSStyleSelector::fontSizeForKeyword):
        * dom/ClassNodeList.cpp:
        (WebCore::ClassNodeList::ClassNodeList):
        * dom/DecodedDataDocumentParser.cpp:
        (WebCore::DecodedDataDocumentParser::appendBytes):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::setCompatibilityMode):
        (WebCore::Document::setDocType):
        (WebCore::Document::unscheduleStyleRecalc):
        (WebCore::Document::recalcStyle):
        (WebCore::Document::updateStyleIfNeeded):
        (WebCore::Document::createStyleSelector):
        (WebCore::Document::implicitOpen):
        (WebCore::Document::pageUserSheet):
        (WebCore::Document::clearPageUserSheet):
        (WebCore::Document::updatePageUserSheet):
        (WebCore::Document::pageGroupUserSheets):
        (WebCore::Document::clearPageGroupUserSheets):
        (WebCore::Document::updatePageGroupUserSheets):
        (WebCore::Document::findAnchor):
        * dom/Document.h:
        (WebCore::Document::):
        (WebCore::Document::setCompatibilityModeFromDoctype):
        (WebCore::Document::lockCompatibilityMode):
        (WebCore::Document::compatibilityMode):
        (WebCore::Document::inQuirksMode):
        (WebCore::Document::inLimitedQuirksMode):
        (WebCore::Document::inNoQuirksMode):
        * dom/Element.cpp:
        (WebCore::Element::clientWidth):
        (WebCore::Element::clientHeight):
        (WebCore::Element::webkitMatchesSelector):
        * dom/NamedNodeMap.cpp:
        (WebCore::NamedNodeMap::setClass):
        * dom/Node.cpp:
        (WebCore::Node::querySelector):
        (WebCore::Node::querySelectorAll):
        * dom/OptionElement.cpp:
        (WebCore::OptionElement::collectOptionLabelOrText):
        * dom/SelectorNodeList.cpp:
        (WebCore::createSelectorNodeList):
        * dom/StyleElement.cpp:
        (WebCore::StyleElement::createSheet):
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::createInlineStyleDecl):
        (WebCore::StyledElement::parseMappedAttribute):
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::shouldRemoveEndBR):
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::createLinkDecl):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext):
        * html/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::insertDoctype):
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::HTMLDocument):
        (WebCore::HTMLDocument::compatMode):
        (WebCore::HTMLDocument::setCompatibilityModeFromDoctype):
        * html/HTMLDocument.h:
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::setCSSStyleSheet):
        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::HTMLTreeBuilder):
        (WebCore::HTMLTreeBuilder::FragmentParsingContext::FragmentParsingContext):
        (WebCore::HTMLTreeBuilder::processDoctypeToken):
        (WebCore::HTMLTreeBuilder::processStartTagForInBody):
        (WebCore::HTMLTreeBuilder::defaultForInitial):
        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::HTMLViewSourceDocument):
        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::replaceDocument):
        (WebCore::DocumentWriter::reportDataReceived):
        * loader/DocumentWriter.h:
        * loader/ImageDocument.cpp:
        (WebCore::ImageDocument::ImageDocument):
        * loader/MediaDocument.cpp:
        (WebCore::MediaDocument::MediaDocument):
        * loader/PluginDocument.cpp:
        (WebCore::PluginDocument::PluginDocument):
        * loader/SinkDocument.cpp:
        (WebCore::SinkDocument::SinkDocument):
        * loader/TextDocument.cpp:
        (WebCore::TextDocument::TextDocument):
        * page/Page.cpp:
        (WebCore::Page::userStyleSheetLocationChanged):
        * page/PageGroup.cpp:
        (WebCore::PageGroup::resetUserStyleCacheInAllFrames):
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setEnforceCSSMIMETypeInNoQuirksMode):
        * page/Settings.h:
        (WebCore::Settings::enforceCSSMIMETypeInNoQuirksMode):
        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::recalcColumn):
        * rendering/FixedTableLayout.cpp:
        (WebCore::FixedTableLayout::calcPrefWidths):
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paintBoxDecorations):
        (WebCore::InlineFlowBox::paintMask):
        (WebCore::InlineFlowBox::paintTextDecorations):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::isSelfCollapsingBlock):
        (WebCore::RenderBlock::collapseMargins):
        (WebCore::RenderBlock::handleBottomOfBlock):
        (WebCore::RenderBlock::calcInlinePrefWidths):
        (WebCore::RenderBlock::calcBlockPrefWidths):
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::createInlineBoxForRenderer):
        (WebCore::RenderBlock::findNextLineBreak):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calcPercentageHeight):
        (WebCore::RenderBox::calcAbsoluteHorizontal):
        (WebCore::RenderBox::calcAbsoluteHorizontalReplaced):
        * rendering/RenderBox.h:
        (WebCore::RenderBox::stretchesToViewHeight):
        * rendering/RenderListItem.cpp:
        (WebCore::getParentOfFirstLineBox):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::layout):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::calcRowHeight):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::verticallyAlignBoxes):
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::diff):
        * rendering/style/RenderStyle.h:
        (WebCore::):
        (WebCore::InheritedFlags::setBitDefaults):

2010-08-27  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Bug 44745 - Number.toFixed/toExponential/toPrecision are inaccurate.

        These methods should be using a version of dtoa that can generate results accurate
        to the requested precision, whereas our version of dtoa is only currently able to
        support producing results sufficiently accurate to distinguish the value from any
        other IEEE-754 double precision number.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::serializeForNumberType):
            doubleToStringInJavaScriptFormat renamed to numberToString.

2010-08-27  Michael Nordman  <michaeln@google.com>

        Reviewed by David Levin.

        https://bugs.webkit.org/show_bug.cgi?id=44133
        IDL bindings for XmlHttpRequest.responseBlob support, doesn't do anything yet.
        Adds two new attributes, asBlob and responseBlob.
        Runtime disabled by default, also behind a new ENABLE_XHR_RESPONSE_BLOB compile time guard.
        
        No new tests, just adding some stubs.

        * bindings/generic/RuntimeEnabledFeatures.cpp:
        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setResponseBlobEnabled):
        (WebCore::RuntimeEnabledFeatures::responseBlobEnabled):
        (WebCore::RuntimeEnabledFeatures::asBlobEnabled):
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::responseText): Changed to allow an exceptional return path.
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::V8XMLHttpRequest::responseTextAccessorGetter): Changed to allow an exceptional return path.
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::responseText): Changed to raise an exception when accessed with asBlob set to true.
        (WebCore::XMLHttpRequest::responseXML): Changed to raise an exception when accessed with asBlob set to true.
        (WebCore::XMLHttpRequest::responseBlob): Added stub method, returns 0 for now.
        (WebCore::XMLHttpRequest::setAsBlob): Sets the asBlob attribute, raises exception if called at an inappropriate time.
        (WebCore::XMLHttpRequest::open): Resets asBlob to false, the default value.
        (WebCore::XMLHttpRequest::abort): Clears m_responseBlob.
        (WebCore::XMLHttpRequest::clearResponse): Clears m_responseBlob.
        (WebCore::XMLHttpRequest::didFinishLoading): Added a FIXME to populate m_responseBlob.
        * xml/XMLHttpRequest.h:
        (WebCore::XMLHttpRequest::asBlob):
        * xml/XMLHttpRequest.idl:

2010-08-27  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Tony Chang.

        Crash in CSSStyleSelector.cpp
        https://bugs.webkit.org/show_bug.cgi?id=44780
        
        Need to null-check the images when replacing pending images, because a later
        rule may have replaced an image with 'none'.

        Test: fast/css/pending-images-crash.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::loadPendingImages):
        * page/FrameView.cpp:
        (WebCore::FrameView::paintContents): Fix unrelated log message.

2010-08-27  Andrey Kosyakov  <caseq@chromium.org>

        Unreviewed. Revert r66218 & r66220 due to GTK test failures.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/AuditLauncherView.js:
        (WebInspector.AuditLauncherView.categorySortFunction):
        (WebInspector.AuditLauncherView):
        (WebInspector.AuditLauncherView.prototype._launchButtonClicked):
        (WebInspector.AuditLauncherView.prototype._selectAllClicked):
        (WebInspector.AuditLauncherView.prototype._categoryClicked):
        (WebInspector.AuditLauncherView.prototype._createCategoryElement):
        (WebInspector.AuditLauncherView.prototype._createLauncherUI):
        * inspector/front-end/AuditResultView.js:
        (WebInspector.AuditCategoryResultPane.prototype._appendResult):
        * inspector/front-end/AuditsPanel.js:
        (WebInspector.AuditsPanel):
        (WebInspector.AuditsPanel.prototype._executeAudit):
        (WebInspector.AuditCategory.prototype.runRules):
        * inspector/front-end/ExtensionAPI.js:
        (injectedExtensionAPI):
        (injectedExtensionAPI.EventSinkImpl.prototype.addListener):
        (injectedExtensionAPI.EventSinkImpl.prototype._fire):
        (injectedExtensionAPI.EventSink):
        (injectedExtensionAPI.InspectorExtensionAPI):
        (injectedExtensionAPI.Panels.prototype.create):
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer):
        (WebInspector.ExtensionServer.prototype._postNotification):
        (WebInspector.ExtensionServer.prototype._addExtensions):
        (WebInspector.ExtensionStatus):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:
        * inspector/front-end/utilities.js:
        ():

2010-08-27  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Darin Fisher.

        Crash in HistoryController::recursiveGoToItem when navigating in a frame
        while another frame has a custom window name
        https://bugs.webkit.org/show_bug.cgi?id=44183
        
        Fix up HistoryController::recursiveGoToItem to better check whether the
        current document frames, the curent history item frames, and the
        destination history frames match up.
        
        Test: fast/history/history-subframe-with-name.html

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::childItemWithDocumentSequenceNumber): Add linear
        lookup of child by document sequence number
        (WebCore::HistoryItem::hasSameDocuments): Remove assumption that the
        other item has the children in the same order (it doesn't seem to be
        true)
        (WebCore::HistoryItem::hasSameFrames): Add recursive comparison of child
        frames.
        * history/HistoryItem.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadItem): Compare full set of documents in 
        history items, not just the topmost ones. Otherwise when going between
        framesets where only one of the subframes changed we wouldn't trigger a
        load.
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::recursiveGoToItem): Also check that the
        two history items have the same frames
        (WebCore::HistoryController::currentFramesMatchItem): Refactor 
        childFramesMatchItem to also check the top-most frame, to make 
        recursiveGoToItem easier to read.
        * loader/HistoryController.h:

2010-08-27  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Nikolas Zimmermann.

        [WINCE] Buildfix for graphics code after r65449
        https://bugs.webkit.org/show_bug.cgi?id=44510

        * platform/graphics/wince/GraphicsContextWince.cpp:
        * platform/graphics/wince/ImageBufferWince.cpp:
        (WebCore::ImageBuffer::drawsUsingCopy):
        (WebCore::ImageBuffer::copyImage):
        (WebCore::ImageBuffer::clip):
        (WebCore::ImageBuffer::draw):
        (WebCore::ImageBuffer::drawPattern):

2010-08-27  Dawit Alemayehu  <adawit@kde.org>

        Reviewed by Simon Hausmann.

        [Qt] Search the Windows registry for the location of the Java plugin DLL.
        https://bugs.webkit.org/show_bug.cgi?id=38911

        This change, in addition to the ones 34539 and 38911, is needed to
        make Java applet work in QtWebKit on the Windows platform.

        * plugins/win/PluginDatabaseWin.cpp:
        (WebCore::addJavaPluginDirectory):
        (WebCore::PluginDatabase::defaultPluginDirectories):

2010-08-27  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: color-code property values in object notation.
        https://bugs.webkit.org/show_bug.cgi?id=44766

        * inspector/front-end/ObjectPropertiesSection.js:
        (WebInspector.ObjectPropertyTreeElement.prototype.update):

2010-08-27  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Nikolas Zimmermann.

        [WINCE] Buildfix for FontPlatformData after r65021
        https://bugs.webkit.org/show_bug.cgi?id=44467

        * platform/graphics/wince/FontPlatformData.h:

2010-08-27  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Nikolas Zimmermann.

        RenderImage::imageChanged invalidates wrong area
        https://bugs.webkit.org/show_bug.cgi?id=43779

        At the moment RenderSVGImage inherits from RenderImage, which makes non-SVG compatible
        assumptions about repainting, and thus has to be fixed to inherit from RenderSVGModelObject.

        This patch moves the CachedImage from RenderImage into a separate class.
        The new class contains the common behavior of RenderImage and RenderSVGImage.
        An additional patch will remove the inheritance of RenderImage at RenderSVGImage.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::createRenderer):
        (WebCore::HTMLEmbedElement::attach):
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::createRenderer):
        (WebCore::HTMLImageElement::attach):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::createRenderer):
        (WebCore::HTMLInputElement::attach):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::createRenderer):
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::attach):
        (WebCore::HTMLVideoElement::parseMappedAttribute):
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::setImage):
        (WebCore::ImageLoader::updateFromElement):
        (WebCore::ImageLoader::renderImageResource):
        (WebCore::ImageLoader::updateRenderer):
        * loader/ImageLoader.h:
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::RenderImage):
        (WebCore::RenderImage::~RenderImage):
        (WebCore::RenderImage::setImageResource):
        (WebCore::RenderImage::imageChanged):
        (WebCore::RenderImage::notifyFinished):
        (WebCore::RenderImage::paintReplaced):
        (WebCore::RenderImage::paintIntoRect):
        (WebCore::RenderImage::minimumReplacedHeight):
        (WebCore::RenderImage::calcReplacedWidth):
        (WebCore::RenderImage::calcReplacedHeight):
        (WebCore::RenderImage::calcAspectRatioWidth):
        (WebCore::RenderImage::calcAspectRatioHeight):
        * rendering/RenderImage.h:
        (WebCore::RenderImage::imageResource):
        (WebCore::RenderImage::cachedImage):
        (WebCore::RenderImage::intrinsicSizeChanged):
        (WebCore::toRenderImage):
        * rendering/RenderImageGeneratedContent.cpp: Removed.
        * rendering/RenderImageGeneratedContent.h: Removed.
        * rendering/RenderImageResource.cpp: Added.
        (WebCore::RenderImageResource::RenderImageResource):
        (WebCore::RenderImageResource::~RenderImageResource):
        (WebCore::RenderImageResource::initialize):
        (WebCore::RenderImageResource::shutdown):
        (WebCore::RenderImageResource::setCachedImage):
        (WebCore::RenderImageResource::resetAnimation):
        (WebCore::RenderImageResource::setImageContainerSize):
        (WebCore::RenderImageResource::nullImage):
        * rendering/RenderImageResource.h: Added.
        (WebCore::RenderImageResource::create):
        (WebCore::RenderImageResource::cachedImage):
        (WebCore::RenderImageResource::hasImage):
        (WebCore::RenderImageResource::image):
        (WebCore::RenderImageResource::errorOccurred):
        (WebCore::RenderImageResource::usesImageContainerSize):
        (WebCore::RenderImageResource::imageHasRelativeWidth):
        (WebCore::RenderImageResource::imageHasRelativeHeight):
        (WebCore::RenderImageResource::imageSize):
        (WebCore::RenderImageResource::imagePtr):
        * rendering/RenderImageResourceStyleImage.cpp: Added.
        (WebCore::RenderImageResourceStyleImage::RenderImageResourceStyleImage):
        (WebCore::RenderImageResourceStyleImage::~RenderImageResourceStyleImage):
        (WebCore::RenderImageResourceStyleImage::initialize):
        (WebCore::RenderImageResourceStyleImage::shutdown):
        * rendering/RenderImageResourceStyleImage.h: Added.
        (WebCore::RenderImageResourceStyleImage::create):
        (WebCore::RenderImageResourceStyleImage::image):
        (WebCore::RenderImageResourceStyleImage::errorOccurred):
        (WebCore::RenderImageResourceStyleImage::setImageContainerSize):
        (WebCore::RenderImageResourceStyleImage::usesImageContainerSize):
        (WebCore::RenderImageResourceStyleImage::imageHasRelativeWidth):
        (WebCore::RenderImageResourceStyleImage::imageHasRelativeHeight):
        (WebCore::RenderImageResourceStyleImage::imageSize):
        (WebCore::RenderImageResourceStyleImage::imagePtr):
        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::RenderMedia):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::createObject):
        * rendering/RenderObjectChildList.cpp:
        (WebCore::RenderObjectChildList::updateBeforeAfterContent):
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::RenderSVGImage):
        (WebCore::RenderSVGImage::layout):
        (WebCore::RenderSVGImage::paint):
        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::calculateIntrinsicSize):
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::attach):
        * wml/WMLImageElement.cpp:
        (WebCore::WMLImageElement::createRenderer):

2010-08-27  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Elements panel breaks after calling "Edit as HTML" on <body>
        https://bugs.webkit.org/show_bug.cgi?id=44765

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::setOuterHTML):

2010-08-25  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Steve Block.

        Add setVersion to IndexedDB
        https://bugs.webkit.org/show_bug.cgi?id=44630

        * storage/IDBDatabase.cpp:
        (WebCore::IDBDatabase::setVersion):
        * storage/IDBDatabase.h:
        * storage/IDBDatabase.idl:
        * storage/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::removeObjectStore):
        (WebCore::IDBDatabaseBackendImpl::setVersion):
        * storage/IDBDatabaseBackendImpl.h:
        * storage/IDBDatabaseBackendInterface.h:

2010-08-26  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: use context menu items with checkbox for setting and removing DOM breakpoints
        https://bugs.webkit.org/show_bug.cgi?id=44687

        * English.lproj/localizedStrings.js:
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.DOMBreakpointItem):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMBreakpointManager.prototype.findBreakpoint):
        (WebInspector.DOMBreakpoint.labelForType):
        (WebInspector.DOMBreakpoint.contextMenuLabelForType):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype._populateTagContextMenu):
        * inspector/front-end/inspector.js:
        (WebInspector.pausedScript):

2010-08-27  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        Calls to IndexedDB methods from V8Proxy::didLeaveScriptContext() are missing enable guards
        https://bugs.webkit.org/show_bug.cgi?id=44760

        No new tests, build fix only.

        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::didLeaveScriptContext):

2010-08-27  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        getPointAtLength returns incorrect values for paths closed with the closepath command
        https://bugs.webkit.org/show_bug.cgi?id=44197
        
        The closepath segment was traversed by the wrong direction. Swap starting point and
        end point for closeSubpath.

        Test: svg/dom/path-pointAtLength.html

        * platform/graphics/PathTraversalState.cpp:
        (WebCore::PathTraversalState::closeSubpath):

2010-08-27  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        SVG Filter with wrong results on repaint for non-CG platforms
        https://bugs.webkit.org/show_bug.cgi?id=44706
        
        The result of SVG Filter is transformed to linearRGB on every repaint. 
        Transform the result just once, right after creating it.

        Test: svg/repaint/filter-repaint.svg

        * rendering/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::postApplyResource):

2010-08-27  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        REGRESSION: Crash occurs at objc_msgSend when closing a window that is displaying the web inspector
        https://bugs.webkit.org/show_bug.cgi?id=44230

        * inspector/Inspector.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::inspectedPageDestroyed):
        (WebCore::InspectorController::close):
        * inspector/InspectorFrontendClient.h:
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::disconnectFromBackend): don't try to notify InspectorController
        that frontend closes if InspectorController triggered the action.
        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorFrontendHost.idl:
        * inspector/front-end/InspectorFrontendHostStub.js:
        (.WebInspector.InspectorFrontendHostStub.prototype.disconnectFromBackend):
        * inspector/front-end/inspector.js:
        (WebInspector.disconnectFromBackend):

2010-08-27  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r66188.
        http://trac.webkit.org/changeset/66188
        https://bugs.webkit.org/show_bug.cgi?id=44756

        "Graphic libraries handle segement length differently. Fixing
        one platform might break another one. Rolling out this patch
        and think about another solution to get getPointAtLength"
        (Requested by krit on #webkit).

        * platform/graphics/PathTraversalState.cpp:
        (WebCore::PathTraversalState::closeSubpath):

2010-08-27  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Nikolas Zimmermann.

        r66141 caused fast/forms/select-style.html to fail on mac:
        https://bugs.webkit.org/show_bug.cgi?id=44737

        Handle the fact that a CSSImageValue may have a value of CSSValueNone,
        in which case we should not return a pending image.

        * css/CSSImageValue.cpp:
        (WebCore::CSSImageValue::cachedOrPendingImage):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::cachedOrPendingFromValue):

2010-08-27  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Dan Bernstein.

        drawGDIGlyphs checks if the offset is empty incorrectly causing
        problems with the shadow
        https://bugs.webkit.org/show_bug.cgi?id=44619

        Removed the offset empty condition, now we just check if we have
        offset or blur.

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

2010-08-27  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        getPointAtLength returns incorrect values for paths closed with the closepath command
        https://bugs.webkit.org/show_bug.cgi?id=44197
        
        The closepath segment was traversed by the wrong direction. Swap starting point and
        end point for closeSubpath.

        Test: svg/dom/path-pointAtLength.html

        * platform/graphics/PathTraversalState.cpp:
        (WebCore::PathTraversalState::closeSubpath):

2010-08-27  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        SVGLocatable.getScreenCTM ignores scrolling
        https://bugs.webkit.org/show_bug.cgi?id=44083

        getScreenCTM needs to include the FrameViews scrollOffset in the e/f parameters of the AffineTransform.
        Adding three new tests, which cover scrolling & getScreenCTM in large svgs with scrollbars, and with (nested) divs in overflow="scroll" mode.

        Tests: svg/custom/getscreenctm-in-scrollable-div-area-nested.xhtml
               svg/custom/getscreenctm-in-scrollable-div-area.xhtml
               svg/custom/getscreenctm-in-scrollable-svg-area.xhtml

        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::localCoordinateSpaceTransform):

2010-08-25  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        implicitlyStyledElementShouldBeRemovedWhenApplyingStyle, removeHTMLFontStyle, and removeHTMLBidiEmbeddingStyle should be merged
        https://bugs.webkit.org/show_bug.cgi?id=44622

        Merged shouldRemoveTextDecorationTag, implicitlyStyledElementShouldBeRemovedWhenApplyingStyle, removeHTMLFontStyle,
        and removeHTMLBidiEmbeddingStyle into removeImplicitlyStyledElement.  New function uses CSSPropertyElementMapping to
        support all different cases dealt separately in each function.

        No new tests are added since this is a cleanup.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::removeInlineStyleFromElement): Calls removeImplicitlyStyledElement.
        (WebCore::):
        (WebCore::ApplyStyleCommand::removeImplicitlyStyledElement): Added.
        * editing/ApplyStyleCommand.h:

2010-08-26  Andy Estes  <aestes@apple.com>

        Reviewed by Darin Adler.
        
        Based on a patch by Mihnea Ovidenie <mihnea@adobe.com>.

        Percentage top value on position:relative descendant not resolved
        correctly if containing block height is not specified explicitly.
        https://bugs.webkit.org/show_bug.cgi?id=26396

        If the containing block height is auto and the element is positioned
        relatively, and if the element's top/bottom is percent, then resolve the
        top/bottom as auto.

        Test: fast/css/percent-top-relative-container-height-unspecified.html

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::relativePositionOffsetY):

2010-08-26  James Robinson  <jamesr@chromium.org>

        Another chromium mac build fix. What a dumb version of GCC.

        * platform/graphics/chromium/GLES2Texture.cpp:
        (WebCore::GLES2Texture::create):

2010-08-26  Kent Tamura  <tkent@chromium.org>

        Unreviewed, build fix for Chromium-mac.

        * platform/graphics/chromium/Shader.cpp:
        (WebCore::loadShader):

2010-08-26  James Robinson  <jamesr@chromium.org>

        Fix chromium mac build. Unreviewed.

        * platform/graphics/chromium/GLES2Canvas.cpp:
        (WebCore::GLES2Canvas::GLES2Canvas):
        * platform/graphics/chromium/GLES2Texture.cpp:
        (WebCore::GLES2Texture::load):

2010-08-26  Mark Rowe  <mrowe@apple.com>

        Darin pointed out that the braces are unnecessary in an Objective-C interface
        declaration when there are no data members.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm: Begone, evil braces!

2010-08-26  Gavin Barraclough  <barraclough@apple.com>

        Rubber Stamped by Oliver Hunt.

        Partially revert r65959. The toString changes regressed the v8 tests,
        but keep the toFixed/toExponential/toPrecision changes.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::serializeForNumberType):

2010-08-26  Mark Rowe  <mrowe@apple.com>

        Reviewed by Adam Roben.

        Fix two build issues that are revealed when building with clang.

        * platform/mac/PopupMenuMac.h: Forward-declare as an Objective-C class when compiling for Objective-C.
        * platform/network/BlobResourceHandle.h: Forward-declare as a struct to match the real declaration.

2010-08-26  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/8339008> WebCore's MediaPlayerPrivateQTKit.mm fails to build with clang.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::mainThreadSetNeedsDisplay): Remove some ambiguity in the return type of -delegate.
        Since the message was being sent to a receiver of type id the compiler cannot accurately
        determine the return type. Typically this would be resolved by using a more specific type
        for the receiver. However, due to lazy loading shenanigans that we play with QTKit we're
        unable to directly cast to the relevant type (QTMovieView*). Instead we fake up an interface
        with the correct type of the method we care about (-delegate) and cast to that type instead.

2010-08-26  Andy Estes  <aestes@apple.com>

        Reviewed by Darin Adler.

        If an <embed> is part of an <object> element's fallback content, WebKit
        should only render the <embed> if the <object> fails to load.
        https://bugs.webkit.org/show_bug.cgi?id=44567
        <rdar://problem/7699852>
        
        Tests: fast/replaced/invalid-object-with-fallback.html
               fast/replaced/object-with-embed-url-param.html

        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::rendererIsNeeded): An <embed> now needs a
        renderer if its parent is an <object> but the <object> is using fallback
        content.
        * html/HTMLObjectElement.h:
        (WebCore::HTMLObjectElement::useFallbackContent): Add a public getter
        for m_useFallbackContent for use in HTMLEmbedElement::rendererIsNeeded.
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::updateWidget): Change the logic that
        determines the plug-in parameters to pass to the loader. Do not override
        parameters from <object> with those from a child <embed>.

2010-08-26  James Robinson  <jamesr@chromium.org>

        Reviewed by Darin Fisher.

        [chromium] Remove the USE(GLES2_RENDERING) define and associated code
        https://bugs.webkit.org/show_bug.cgi?id=43761

        USE(GLES2_RENDERING) will not be useful since we'll be coding to GraphicsContext3D
        instead of OpenGL and can use ENABLE(ACCELERATED_2D_CANVAS) for canvas 2d specific
        changes.  This deletes the macro and deletes the ChromeClient API to query
        GLES2Contexts since we'll never need one of these outside of the compositor, which
        is created in platform-specific code.

        * loader/EmptyClients.h:
        * page/ChromeClient.h:
        * platform/graphics/chromium/GLES2Canvas.cpp:
        * platform/graphics/chromium/GLES2Canvas.h:
        * platform/graphics/chromium/GLES2Texture.cpp:
        * platform/graphics/chromium/GLES2Texture.h:
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::savePlatformState):
        (WebCore::GraphicsContext::restorePlatformState):
        (WebCore::GraphicsContext::clearRect):
        (WebCore::GraphicsContext::concatCTM):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::scale):
        (WebCore::GraphicsContext::setAlpha):
        (WebCore::GraphicsContext::setCompositeOperation):
        (WebCore::GraphicsContext::setPlatformFillColor):
        (WebCore::GraphicsContext::rotate):
        (WebCore::GraphicsContext::translate):
        (WebCore::GraphicsContext::setGraphicsContext3D):
        (WebCore::GraphicsContext::syncSoftwareCanvas):
        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::drawBitmapGLES2):
        (WebCore::BitmapImage::draw):
        (WebCore::BitmapImageSingleFrameSkia::draw):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::PlatformContextSkia):
        (WebCore::PlatformContextSkia::~PlatformContextSkia):
        * platform/graphics/skia/PlatformContextSkia.h:

2010-08-26  Martin Robinson  <mrobinson@igalia.com>

        Build fix for GTK+, after a bad merge.

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

2010-08-23  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] ScrollbarThemeGtk is incomplete
        https://bugs.webkit.org/show_bug.cgi?id=44471

        Add theme drawing code for GTK+ scrollbars. Turn RenderThemeGtk::paintMozillaWidget
        into a public method so that ScrollbarThemeGtk can access Mozilla theme API properly.

        Tests for this issue will be activated in the form of pixel tests, but
        only after fully-fake scrollbars are activated.

        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::paintMozillaGtkWidget): Added this public method which takes
        the proper widget state, widget type, graphics context and rectangle and renders a
        widget using the Mozilla theming API.
        (WebCore::RenderThemeGtk::paintRenderObject): Added this method which first calculates
        the widget state before passing the information on to paintMozillaGtkWidget.
        (WebCore::RenderThemeGtk::paintCheckbox): Switch to use paintRenderObject.
        (WebCore::RenderThemeGtk::paintRadio): Switch to use paintRenderObject.
        (WebCore::RenderThemeGtk::paintButton): Switch to use paintRenderObject.
        (WebCore::RenderThemeGtk::paintMenuList): Switch to use paintRenderObject.
        (WebCore::RenderThemeGtk::paintTextField): Switch to use paintRenderObject.
        (WebCore::RenderThemeGtk::paintSliderTrack): Switch to use paintRenderObject.
        (WebCore::RenderThemeGtk::paintSliderThumb): Switch to use paintRenderObject.
        (WebCore::RenderThemeGtk::paintProgressBar): Switch to use paintRenderObject.
        * platform/gtk/RenderThemeGtk.h: Added new method declarations.
        * platform/gtk/ScrollbarThemeGtk.cpp: Added code which can render GTK+ scrollbars.
        (WebCore::ScrollbarThemeGtk::hasThumb): Added.
        (WebCore::ScrollbarThemeGtk::backButtonRect): Added.
        (WebCore::ScrollbarThemeGtk::forwardButtonRect): Added.
        (WebCore::ScrollbarThemeGtk::trackRect): Added.
        (WebCore::ScrollbarThemeGtk::paintTrackBackground): Added.
        (WebCore::ScrollbarThemeGtk::paintScrollbarBackground): Added.
        (WebCore::ScrollbarThemeGtk::paintThumb): Added.
        (WebCore::ScrollbarThemeGtk::thumbRect): Added.
        (WebCore::ScrollbarThemeGtk::paint): Added.
        (WebCore::ScrollbarThemeGtk::paintButton): Added.
        (WebCore::ScrollbarThemeGtk::paintScrollCorner): Added.
        (WebCore::ScrollbarThemeGtk::shouldCenterOnThumb): Added.
        (WebCore::ScrollbarThemeGtk::scrollbarThickness): Always get the metrics from the
        theme drawing API so that it stays up to date with theme changes.
        (WebCore::ScrollbarThemeGtk::buttonSize): Added.
        (WebCore::ScrollbarThemeGtk::minimumThumbLength): Added.
        * platform/gtk/ScrollbarThemeGtk.h:
        (WebCore::ScrollbarThemeGtk::hasButtons): Added.
        (WebCore::ScrollbarThemeGtk::initialAutoscrollTimerDelay): Added.
        (WebCore::ScrollbarThemeGtk::autoscrollTimerDelay): Added.

2010-08-26  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=44726
        <rdar://problem/7935518> WebFrameProxies aren't destroyed until a page is destroyed

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::closeAndRemoveChild):
        (WebCore::FrameLoader::detachFromParent):
        Added a few FIXME comments. The logic we have to track frames is extremely convoluted.

2010-08-26  Ryosuke Niwa  <rniwa@webkit.org>

        Unreviewed; build fix.

        Speculative chromium mac fix by including "Color.h".

        * platform/graphics/chromium/Shader.cpp:

2010-08-26  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dave Hyatt.

        CSS downloads all background images related to element, instead of just final rule
        https://bugs.webkit.org/show_bug.cgi?id=24223
        
        We used to kick off image loads at the point where the style selector
        applies a CSS rule to an element, even if that rule was overridden
        by a rule in a later block of rules. This caused loads of images that
        weren't actually used.
        
        Fix this by delaying image loads until the style has been fully
        resolved. This is achieved by inserting a StylePendingImage into
        the RenderStyle for duration of the style resolution, and keeping
        an entry in a hash for the relevant CSS property.
        
        At the end of style resolution, we iterate through the hash, and
        replace the StylePendingImage with StyleCachedImages, which
        causes the loads to happen only for images that are in the final style.        

        Tests: http/tests/css/border-image-loading.html
               http/tests/css/mask-image-loading.html
               http/tests/css/reflection-mask-image-loading.html

        * GNUmakefile.am: Add StylePendingImage.h
        * WebCore.gypi: Ditto
        * WebCore.vcproj/WebCore.vcproj: Ditto

        * css/CSSImageValue.h: Change m_image to a RefPtr<StyleImage>,
        since it may be a StylePendingImage or StyleCachedImage.
        * css/CSSImageValue.cpp:
        (WebCore::CSSImageValue::~CSSImageValue): Only call removeClient if it's a cachedImage.
        (WebCore::CSSImageValue::cachedOrPendingImage): If we have an image (pending or cached),
        return it. Otherwise make a pending image and return it.
        (WebCore::CSSImageValue::cachedImage): Only return the image if it's a cached image.
        (WebCore::CSSImageValue::cachedImageURL):
        (WebCore::CSSImageValue::clearCachedImage):

        * css/CSSStyleSelector.h:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::initForStyleResolve): Clear m_pendingImageProperties.
        (WebCore::CSSStyleSelector::styleForElement): Load pending images.
        (WebCore::CSSStyleSelector::styleForKeyframe): Ditto.
        (WebCore::CSSStyleSelector::pseudoStyleForElement): Ditto.
        (WebCore::CSSStyleSelector::styleForPage): Ditto.
        (WebCore::CSSStyleSelector::applyProperty): Pull property into a local variable
        so we can use it in macros.
        (WebCore::CSSStyleSelector::mapFillAttachment): Pass the property down (needed to avoid
        additional macro complexity).
        (WebCore::CSSStyleSelector::mapFillClip): Ditto
        (WebCore::CSSStyleSelector::mapFillComposite): Ditto
        (WebCore::CSSStyleSelector::mapFillOrigin): Ditto
        (WebCore::CSSStyleSelector::styleImage): Call cachedOrPendingFromValue()
        (WebCore::CSSStyleSelector::cachedOrPendingFromValue): Get the cachedOrPendingImage()
        from the CSSValue, and if it's a pending image, record the property.
        (WebCore::CSSStyleSelector::mapFillImage): Pass the property down (needed to avoid
        additional macro complexity).
        (WebCore::CSSStyleSelector::mapFillRepeatX): Ditto
        (WebCore::CSSStyleSelector::mapFillRepeatY): Ditto
        (WebCore::CSSStyleSelector::mapFillSize): Ditto
        (WebCore::CSSStyleSelector::mapFillXPosition): Ditto
        (WebCore::CSSStyleSelector::mapFillYPosition): Ditto
        (WebCore::CSSStyleSelector::mapNinePieceImage): Ditto
        (WebCore::CSSStyleSelector::loadPendingImages): Iterate through the m_pendingImageProperties
        hash, and replace the pending images with cached images.

        * rendering/style/StyleCachedImage.h: Make cssValue() const.
        * rendering/style/StyleCachedImage.cpp:
        (WebCore::StyleCachedImage::cssValue):

        * rendering/style/StyleGeneratedImage.h:  Make cssValue() const.
        * rendering/style/StyleGeneratedImage.cpp:
        (WebCore::StyleGeneratedImage::cssValue):

        * rendering/style/StyleImage.h:
        (WebCore::StyleImage::operator==): Make const.
        (WebCore::StyleImage::isPendingImage):
        * rendering/style/StylePendingImage.h: Added.

2010-08-26  Sam Weinig  <sam@webkit.org>

        Reviewed by Darin Adler.

        Add PassOwnArrayPtr
        https://bugs.webkit.org/show_bug.cgi?id=44627

        Add new forwarding headers.

        * ForwardingHeaders/wtf/OwnArrayPtrCommon.h: Added.
        * ForwardingHeaders/wtf/PassOwnArrayPtr.h: Added.

2010-08-26   Stanislav Brabec  <sbrabec@suse.cz>

        Reviewed by Martin Robinson.

        [GTK] [PATCH] plugin loading invalid symlink evaluation deadlock
        https://bugs.webkit.org/show_bug.cgi?id=44683

        Fix symlink resolution in PluginPackageGtk.

        * plugins/gtk/PluginPackageGtk.cpp:
        (WebCore::PluginPackage::load): g_file_resolve_relative_path must be called with a
        a directory, not a file.

2010-08-26  Andy Estes  <aestes@apple.com>

        Reviewed by Eric Carlson.

        A URL in a <param> should be parsed the same as if it were specified as
        the data attribute of an <object>.
        https://bugs.webkit.org/show_bug.cgi?id=44671

        Test: fast/replaced/object-param-url-control-char.html

        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::updateWidget): Call deprecatedParseURL()
        on <param> values of names that we treat as URLs ("src", "movie", "code"
        and "url").

2010-08-26  Stephen White  <senorblanco@chromium.org>

        Unreviewed; build fix.

        Fix for Chromium/Mac.

        * platform/graphics/chromium/Shader.cpp:

2010-08-26  Tony Chang  <tony@chromium.org>

        Reviewed by David Hyatt.

        crash when rendering scrollbar gradient
        https://bugs.webkit.org/show_bug.cgi?id=44549

        Test: scrollbars/scrollbar-gradient-crash.html

        * css/CSSImageGeneratorValue.cpp:
        (WebCore::CSSImageGeneratorValue::getImage): Keep this alive.

2010-08-26  Stephen White  <senorblanco@chromium.org>

        Reviewed by Kenneth Russell.

        [CHROMIUM] Give <canvas> 2D shaders their own class hierarchy.
        https://bugs.webkit.org/show_bug.cgi?id=44682

        Covered by fast/canvas layout tests.

        * WebCore.gypi:
        Add Shader.cpp, Shader.h to chromium build.
        * platform/graphics/chromium/GLES2Canvas.cpp:
        (WebCore::GLES2Canvas::GLES2Canvas):
        (WebCore::GLES2Canvas::~GLES2Canvas):
        (WebCore::GLES2Canvas::fillRect):
        (WebCore::GLES2Canvas::drawTexturedRect):
        (WebCore::GLES2Canvas::drawTexturedRectTile):
        Rip out all shader initialization and compilation code.
        Instantiate specialized shaders instead.
        * platform/graphics/chromium/GLES2Canvas.h:
        * platform/graphics/chromium/Shader.cpp: Added.
        (WebCore::affineTo3x3):
        (WebCore::Shader::Shader):
        (WebCore::Shader::~Shader):
        Implement Shader base class.
        (WebCore::loadShader):
        (WebCore::loadProgram):
        Utility functions refactored from GLES2Canvas.
        (WebCore::SolidFillShader::SolidFillShader):
        (WebCore::TexShader::TexShader):
        (WebCore::SolidFillShader::create):
        (WebCore::SolidFillShader::use):
        (WebCore::TexShader::create):
        (WebCore::TexShader::use):
        * platform/graphics/chromium/Shader.h: Added.

2010-08-26  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Adam Roben.

        User scripts injected at start are not run for plugin and media documents
        <https://bugs.webkit.org/show_bug.cgi?id=44711>
        <rdar://problem/8359288>
        
        http://trac.webkit.org/changeset/61271 made scripts injected at start run on ImageDocuments,
        but didn't implement this behavior for MediaDocuments and PluginDocuments.

        * loader/MediaDocument.cpp:
        (WebCore::MediaDocumentParser::createDocumentStructure): Make sure we fire dispatchDocumentElementAvailable.
        * loader/PluginDocument.cpp:
        (WebCore::PluginDocumentParser::createDocumentStructure): Ditto.

2010-08-26  Peter Kasting  <pkasting@google.com>

        Reviewed by Dimitri Glazkov.

        Misc. cleanup split off from bug 32356.
        https://bugs.webkit.org/show_bug.cgi?id=44696

        * WebCore.gyp/WebCore.gyp:
        * dom/Element.cpp:
        (WebCore::localZoomForRenderer):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::wheelEvent):
        * platform/ScrollView.h:
        * platform/Scrollbar.cpp:
        (WebCore::Scrollbar::scroll):
        * platform/Scrollbar.h:
        (WebCore::Scrollbar::isScrollbar):
        * platform/ScrollbarClient.h:
        (WebCore::ScrollbarClient::~ScrollbarClient):
        * platform/qt/ScrollbarQt.cpp:
        (WebCore::Scrollbar::contextMenu):
        * rendering/RenderBox.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scroll):
        * rendering/RenderLayer.h:
        * rendering/RenderListBox.h:
        * rendering/RenderTextControlSingleLine.h:

2010-08-26  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=39647, font face loads do a synchronous recalcStyle(Force)
        on the whole document.  Change these calls to do async recalcStyles instead.

        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::fontLoaded):
        (WebCore::CSSFontSelector::fontCacheInvalidated):
        * dom/Document.cpp:
        (WebCore::Document::scheduleForcedStyleRecalc):
        (WebCore::Document::styleSelectorChanged):
        * dom/Document.h:

2010-08-26  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Martin Robinson.

        Fix double free (we were passing const memory to a GOwnPtr) by
        getting rid of unneeded temp variable.

        * platform/gtk/FileSystemGtk.cpp:
        (WebCore::directoryName):

2010-08-26  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Store heap snapshots in InspectorProfilerAgent.

        Change the way heap snapshots are transported to Inspector
        to be aligned with CPU profiles. As a result, the Heap snapshots
        view of Profiles panel was upstreamed into WebCore.

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

        * English.lproj/localizedStrings.js:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/ScriptHeapSnapshot.h: Added.
        (WebCore::ScriptHeapSnapshot::~ScriptHeapSnapshot):
        (WebCore::ScriptHeapSnapshot::title):
        (WebCore::ScriptHeapSnapshot::uid):
        (WebCore::ScriptHeapSnapshot::buildInspectorObjectForHead):
        (WebCore::ScriptHeapSnapshot::ScriptHeapSnapshot):
        * bindings/js/ScriptProfiler.h:
        (WebCore::ScriptProfiler::takeHeapSnapshot):
        * bindings/v8/ScriptHeapSnapshot.cpp: Added.
        (WebCore::ScriptHeapSnapshot::title):
        (WebCore::ScriptHeapSnapshot::uid):
        (WebCore::buildInspectorObjectFor):
        (WebCore::ScriptHeapSnapshot::buildInspectorObjectForHead):
        * bindings/v8/ScriptHeapSnapshot.h: Added.
        (WebCore::ScriptHeapSnapshot::create):
        (WebCore::ScriptHeapSnapshot::~ScriptHeapSnapshot):
        (WebCore::ScriptHeapSnapshot::ScriptHeapSnapshot):
        * bindings/v8/ScriptProfile.cpp:
        (WebCore::buildInspectorObjectFor):
        * bindings/v8/ScriptProfiler.cpp:
        (WebCore::ScriptProfiler::takeHeapSnapshot):
        * bindings/v8/ScriptProfiler.h:
        * inspector/Inspector.idl:
        * inspector/InspectorBackend.cpp:
        * inspector/InspectorBackend.h:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::InspectorProfilerAgent):
        (WebCore::InspectorProfilerAgent::createSnapshotHeader):
        (WebCore::InspectorProfilerAgent::getProfileHeaders):
        (WebCore::InspectorProfilerAgent::getProfile):
        (WebCore::InspectorProfilerAgent::removeProfile):
        (WebCore::InspectorProfilerAgent::resetState):
        (WebCore::InspectorProfilerAgent::takeHeapSnapshot):
        * inspector/InspectorProfilerAgent.h:
        * inspector/front-end/HeapSnapshotView.js: Added.
        (WebInspector.HeapSnapshotView.profileCallback):
        (WebInspector.HeapSnapshotView.resetCompleted):
        (WebInspector.HeapSnapshotView):
        (WebInspector.HeapSnapshotView.prototype.get statusBarItems):
        (WebInspector.HeapSnapshotView.prototype.get profile):
        (WebInspector.HeapSnapshotView.prototype.set profile):
        (WebInspector.HeapSnapshotView.prototype.show):
        (WebInspector.HeapSnapshotView.prototype.hide):
        (WebInspector.HeapSnapshotView.prototype.resize):
        (WebInspector.HeapSnapshotView.prototype.refresh):
        (WebInspector.HeapSnapshotView.prototype.refreshShowAsPercents):
        (WebInspector.HeapSnapshotView.prototype._deleteSearchMatchedFlags):
        (WebInspector.HeapSnapshotView.prototype.searchCanceled):
        (WebInspector.HeapSnapshotView.prototype.performSearch):
        (WebInspector.HeapSnapshotView.prototype.jumpToFirstSearchResult.WebInspector.CPUProfileView.prototype.jumpToFirstSearchResult.jumpToLastSearchResult.WebInspector.CPUProfileView.prototype.jumpToLastSearchResult.jumpToNextSearchResult.WebInspector.CPUProfileView.prototype.jumpToNextSearchResult.jumpToPreviousSearchResult.WebInspector.CPUProfileView.prototype.jumpToPreviousSearchResult.showingFirstSearchResult.WebInspector.CPUProfileView.prototype.showingFirstSearchResult.showingLastSearchResult.WebInspector.CPUProfileView.prototype.showingLastSearchResult._jumpToSearchResult.WebInspector.CPUProfileView.prototype._jumpToSearchResult.refreshVisibleData):
        (WebInspector.HeapSnapshotView.prototype._changeBase.resetCompleted):
        (WebInspector.HeapSnapshotView.prototype._changeBase):
        (WebInspector.HeapSnapshotView.prototype._createSnapshotDataGridList):
        (WebInspector.HeapSnapshotView.prototype._getProfiles):
        (WebInspector.HeapSnapshotView.prototype._loadProfile.loadedCallback):
        (WebInspector.HeapSnapshotView.prototype._loadProfile):
        (WebInspector.HeapSnapshotView.prototype._mouseDownInDataGrid):
        (WebInspector.HeapSnapshotView.prototype.get _isShowingAsPercent):
        (WebInspector.HeapSnapshotView.prototype._percentClicked):
        (WebInspector.HeapSnapshotView.prototype._prepareProfile.mergeRetainers):
        (WebInspector.HeapSnapshotView.prototype._prepareProfile):
        (WebInspector.HeapSnapshotView.prototype._resetDataGridList.profileLoaded):
        (WebInspector.HeapSnapshotView.prototype._resetDataGridList):
        (WebInspector.HeapSnapshotView.prototype._sortData):
        (WebInspector.HeapSnapshotView.prototype._updateBaseOptions):
        (WebInspector.HeapSnapshotView.prototype._updatePercentButton):
        (WebInspector.HeapSnapshotView.prototype._updateSummaryGraph):
        (WebInspector.HeapSnapshotView.SearchHelper.operations.LESS):
        (WebInspector.HeapSnapshotView.SearchHelper.operations.LESS_OR_EQUAL):
        (WebInspector.HeapSnapshotView.SearchHelper.operations.EQUAL):
        (WebInspector.HeapSnapshotView.SearchHelper.operations.GREATER_OR_EQUAL):
        (WebInspector.HeapSnapshotView.SearchHelper.operations.GREATER):
        (WebInspector.HeapSnapshotView.SearchHelper.parseOperationAndNumber):
        (WebInspector.HeapSummaryCalculator):
        (WebInspector.HeapSummaryCalculator.prototype.computeSummaryValues):
        (WebInspector.HeapSummaryCalculator.prototype.formatValue):
        (WebInspector.HeapSummaryCalculator.prototype.get showAsPercent):
        (WebInspector.HeapSummaryCalculator.prototype.set showAsPercent):
        (WebInspector.HeapSummaryCountCalculator):
        (WebInspector.HeapSummaryCountCalculator.prototype._highFromLow):
        (WebInspector.HeapSummaryCountCalculator.prototype._valueToString):
        (WebInspector.HeapSummarySizeCalculator):
        (WebInspector.HeapSummarySizeCalculator.prototype._highFromLow):
        (WebInspector.HeapSnapshotDataGridNodeWithRetainers):
        (WebInspector.HeapSnapshotDataGridNodeWithRetainers.prototype.get _hasRetainers):
        (WebInspector.HeapSnapshotDataGridNodeWithRetainers.prototype.get _parent):
        (WebInspector.HeapSnapshotDataGridNodeWithRetainers.prototype._populate):
        (WebInspector.HeapSnapshotDataGridNodeWithRetainers.prototype.produceDiff):
        (WebInspector.HeapSnapshotDataGridNodeWithRetainers.prototype.sort):
        (WebInspector.HeapSnapshotDataGridNodeWithRetainers.prototype.signForDelta):
        (WebInspector.HeapSnapshotDataGridNodeWithRetainers.prototype.showDeltaAsPercent):
        (WebInspector.HeapSnapshotDataGridNodeWithRetainers.prototype.getTotalCount):
        (WebInspector.HeapSnapshotDataGridNodeWithRetainers.prototype.getTotalSize):
        (WebInspector.HeapSnapshotDataGridNodeWithRetainers.prototype.get countPercent):
        (WebInspector.HeapSnapshotDataGridNodeWithRetainers.prototype.get sizePercent):
        (WebInspector.HeapSnapshotDataGridNodeWithRetainers.prototype.get countDeltaPercent):
        (WebInspector.HeapSnapshotDataGridNodeWithRetainers.prototype.get sizeDeltaPercent):
        (WebInspector.HeapSnapshotDataGridNodeWithRetainers.prototype.get data):
        (WebInspector.HeapSnapshotDataGridNodeWithRetainers.prototype.createCell):
        (WebInspector.HeapSnapshotDataGridNode):
        (WebInspector.HeapSnapshotDataGridList):
        (WebInspector.HeapSnapshotDataGridList.prototype.appendChild):
        (WebInspector.HeapSnapshotDataGridList.prototype.insertChild):
        (WebInspector.HeapSnapshotDataGridList.prototype.removeChildren):
        (WebInspector.HeapSnapshotDataGridList.prototype.populateChildren):
        (WebInspector.HeapSnapshotDataGridList.propertyComparator.comparator):
        (WebInspector.HeapSnapshotDataGridList.propertyComparator):
        (WebInspector.HeapSnapshotDataGridRetainerNode):
        (WebInspector.HeapSnapshotDataGridRetainerNode.prototype.get sizePercent):
        (WebInspector.HeapSnapshotDataGridRetainerNode.prototype.get sizeDeltaPercent):
        (WebInspector.HeapSnapshotDataGridRetainerNode.prototype._calculateRetainers):
        (WebInspector.HeapSnapshotProfileType):
        (WebInspector.HeapSnapshotProfileType.prototype.get buttonTooltip):
        (WebInspector.HeapSnapshotProfileType.prototype.get buttonStyle):
        (WebInspector.HeapSnapshotProfileType.prototype.buttonClicked):
        (WebInspector.HeapSnapshotProfileType.prototype.get welcomeMessage):
        (WebInspector.HeapSnapshotProfileType.prototype.createSidebarTreeElementForProfile):
        (WebInspector.HeapSnapshotProfileType.prototype.createView):
        * inspector/front-end/ProfileView.js:
        (WebInspector.CPUProfileView):
        (WebInspector.CPUProfileType.prototype.createSidebarTreeElementForProfile):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype.addProfileHeader):
        (WebInspector.ProfilesPanel.prototype.removeProfileHeader):
        (WebInspector.ProfilesPanel.prototype.getProfiles):
        (WebInspector.ProfilesPanel.prototype.updateProfile):
        (WebInspector.ProfileSidebarTreeElement):
        (WebInspector.ProfileSidebarTreeElement.prototype.get mainTitle):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.css:
        (.heap-snapshot-sidebar-tree-item .icon):
        (.heap-snapshot-sidebar-tree-item.small .icon):
        (.heap-snapshot-view):
        (.heap-snapshot-view.visible):
        (.heap-snapshot-view .data-grid):
        (.heap-snapshot-view .data-grid th.count-column):
        (.heap-snapshot-view .data-grid td.count-column):
        (.heap-snapshot-view .data-grid th.size-column):
        (.heap-snapshot-view .data-grid td.size-column):
        (.heap-snapshot-view .data-grid th.countDelta-column):
        (.heap-snapshot-view .data-grid td.countDelta-column):
        (.heap-snapshot-view .data-grid th.sizeDelta-column):
        (.heap-snapshot-view .data-grid td.sizeDelta-column):
        (#heap-snapshot-summary-container):
        (.heap-snapshot-summary):
        (.heap-snapshot-summary canvas.summary-graph):
        (.heap-snapshot-summary-label):
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        (WebInspector._createPanels):

2010-08-25  David Hyatt  <hyatt@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/8302217> recalcStyles called immediately on each change when updating document-level stylesheets
        https://bugs.webkit.org/show_bug.cgi?id=36303

        Parameterize updateStyleSelector to optionally defer the forced style recalc following the rebuilding of the
        sheets used by the CSSStyleSelector.  Rename the method to styleSelectorChanged().  Add the capability to do 
        a forced style recalc to the style recalc timer.

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::setNeedsStyleRecalc):
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::styleSheetChanged):
        * css/CSSVariablesDeclaration.cpp:
        (WebCore::CSSVariablesDeclaration::setNeedsStyleRecalc):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::scheduleStyleRecalc):
        (WebCore::Document::updateStyleIfNeeded):
        (WebCore::Document::updateLayoutIgnorePendingStylesheets):
        (WebCore::Document::clearPageUserSheet):
        (WebCore::Document::clearPageGroupUserSheets):
        (WebCore::Document::processHttpEquiv):
        (WebCore::Document::setSelectedStylesheetSet):
        (WebCore::Document::removePendingSheet):
        (WebCore::Document::styleSelectorChanged):
        (WebCore::Document::setInPageCache):
        * dom/Document.h:
        (WebCore::):
        * dom/ProcessingInstruction.cpp:
        (WebCore::ProcessingInstruction::removedFromDocument):
        * dom/StyleElement.cpp:
        (WebCore::StyleElement::removedFromDocument):
        * dom/XMLDocumentParser.cpp:
        (WebCore::XMLDocumentParser::end):
        * dom/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::doEnd):
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::determineParseMode):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::setDisabledState):
        (WebCore::HTMLLinkElement::process):
        (WebCore::HTMLLinkElement::removedFromDocument):
        * page/Frame.cpp:
        (WebCore::Frame::setPrinting):
        (WebCore::Frame::reapplyStyles):
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        * page/Page.cpp:
        (WebCore::Page::setViewMode):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::setDesiredColumnCountAndWidth):
        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::rebuildFontFace):
        (WebCore::SVGFontFaceElement::removeFromMappedElementSheet):

2010-08-24  Vangelis Kokkevis  <vangelis@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Implementing clipping for composited layers. Two
        types of clipping are added: Scissoring for layers that don't
        contain any rotations and stencil-buffer based clipping for
        all other layers.
        https://bugs.webkit.org/show_bug.cgi?id=44573

        Tests: Compositor layout tests that test clipping such as
        compositing/geometry/{clip.html, clipping-foreground.html} now
        work properly.

        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::SharedValues::SharedValues):
        (WebCore::LayerChromium::getDrawRect):
        (WebCore::LayerChromium::drawAsMask):
        * platform/graphics/chromium/LayerChromium.h:
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::drawLayers):
        (WebCore::LayerRendererChromium::drawLayerIntoStencilBuffer):
        (WebCore::LayerRendererChromium::drawLayersRecursive):
        (WebCore::LayerRendererChromium::scissorToRect):
        (WebCore::LayerRendererChromium::initializeSharedObjects):
        * platform/graphics/chromium/LayerRendererChromium.h:

2010-08-25  Kenneth Russell  <kbr@google.com>

        Reviewed by Dimitri Glazkov.

        Expose Vector3 and associated operations
        https://bugs.webkit.org/show_bug.cgi?id=44666

        No new tests; ran several 3D CSS demos and did full layout test
        run. New code paths have also been tested by new calling code
        which will be checked in soon.

        * platform/graphics/transforms/TransformationMatrix.cpp:
        (WebCore::decompose):
        * platform/graphics/transforms/TransformationMatrix.h:
        (WebCore::Vector3::Vector3):
        (WebCore::Vector3::x):
        (WebCore::Vector3::y):
        (WebCore::Vector3::z):
        (WebCore::Vector3::setX):
        (WebCore::Vector3::setY):
        (WebCore::Vector3::setZ):
        (WebCore::Vector3::set):
        (WebCore::Vector3::operator =):
        (WebCore::Vector3::operator +):
        (WebCore::Vector3::operator -):
        (WebCore::Vector3::operator[]):
        (WebCore::Vector3::length):
        (WebCore::Vector3::lengthSquared):
        (WebCore::Vector3::scaleTo):
        (WebCore::Vector3::normalize):
        (WebCore::Vector3::dot):
        (WebCore::Vector3::combine):
        (WebCore::Vector3::cross):

2010-08-26  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: fix CPU profile header entries doubling on Inspector re-opening.

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

        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype.show):

2010-08-26  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Darin Adler and Maciej Stachowiak.

        https://bugs.webkit.org/show_bug.cgi?id=44013
        HTMLMediaElement should delay document load event

        Test: media/video-delay-load-event.html

        * dom/Document.cpp:
        (WebCore::Document::Document): Initialize incrementLoadEventDelayCount.
        (WebCore::Document::decrementLoadEventDelayCount): New, decrement incrementLoadEventDelayCount 
        and call loader->checkCompleted() when it reaches zero.
        * dom/Document.h:
        (WebCore::Document::incrementLoadEventDelayCount): New.
        (WebCore::Document::isDelayingLoadEvent): New.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::~HTMLMediaElement): Stop delaying the load event if necessary.
        (WebCore::HTMLMediaElement::willMoveToNewOwnerDocument): Ditto.
        (WebCore::HTMLMediaElement::didMoveToNewOwnerDocument): Delay the load event if we don't the
        meta data for the movie yet.
        (WebCore::HTMLMediaElement::prepareForLoad): Delay the load event.
        (WebCore::HTMLMediaElement::selectMediaResource): Don't delay the load event when there are 
        no more sources to consider. Don't change m_delayingTheLoadEvent directly, call 
        setShouldDelayLoadEvent() instead.
        (WebCore::HTMLMediaElement::waitForSourceChange): Stop delaying the load event.
        (WebCore::HTMLMediaElement::noneSupported): Ditto.
        (WebCore::HTMLMediaElement::mediaEngineError): Ditto.
        (WebCore::HTMLMediaElement::setReadyState): Ditto.
        (WebCore::HTMLMediaElement::userCancelledLoad): Ditto.
        (WebCore::HTMLMediaElement::setShouldDelayLoadEvent): New, increment/decrement the document's
        load event delay count.
        * html/HTMLMediaElement.h:

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::checkCompleted): See if the document wants to delay completion for 
        elements that don't go through a FrameLoader.
        (WebCore::FrameLoader::checkCallImplicitClose): Ditto
        * page/Frame.cpp:

2010-08-26  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        Fix the same issue as https://bugs.webkit.org/show_bug.cgi?id=41585
        but this time for the -webkit-font-smoothing property.

        Updated fast/css/text-rendering-priority.html to cover all properties that
        affect the font.

        * css/CSSPropertyNames.in: Moved text-rendering to the â€œhigh priorityâ€ section at the top.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::styleForElement): Assert that the font is not dirtied by
        applying any of the â€œlow priorityâ€ properties, but still handle the case that the assertion
        is false.
        (WebCore::CSSStyleSelector::applyDeclarations): Updated compile-time assertion.

2010-08-26  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] The GNUmakefile.am files contain a myriad of confusing preprocessor and compiler flag definitions
        https://bugs.webkit.org/show_bug.cgi?id=44624

        Clean up GNUmakefile.am.

        * GNUmakefile.am: Remove some WebKit includes from webcore_cppflags. These
        includes are added to the build line by the top-level GNUmakefile.am, since
        WebCore isn't build as an intermediate library.

2010-08-26  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Revert r66103 since Qt tests are failing.

        * inspector/Inspector.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::inspectedPageDestroyed):
        (WebCore::InspectorController::close):
        * inspector/InspectorFrontendClient.h:
        * inspector/InspectorFrontendHost.cpp:
        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorFrontendHost.idl:
        * inspector/front-end/InspectorFrontendHostStub.js:
        * inspector/front-end/inspector.js:
        (WebInspector.inspectedPageDestroyed):

2010-08-26  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        REGRESSION: Crash occurs at objc_msgSend when closing a window that is displaying the web inspector
        https://bugs.webkit.org/show_bug.cgi?id=44230

        * inspector/Inspector.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::inspectedPageDestroyed):
        (WebCore::InspectorController::close):
        * inspector/InspectorFrontendClient.h:
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::disconnectFromBackend): don't try to notify InspectorController
        that frontend closes if InspectorController triggered the action.
        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorFrontendHost.idl:
        * inspector/front-end/InspectorFrontendHostStub.js:
        (.WebInspector.InspectorFrontendHostStub.prototype.disconnectFromBackend):
        * inspector/front-end/inspector.js:
        (WebInspector.disconnectFromBackend):

2010-08-26  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        WebInspector: It would be better to have an explicit type check for the all
        arguments of InspectorBackend functions on front-end side.
        https://bugs.webkit.org/show_bug.cgi?id=44684

        * inspector/CodeGeneratorInspector.pm:

2010-08-26  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        WebInspector: It would be better to rename setBool, pushBool and asBool accessors
        to setBoolean, pushBoolean and asBoolean for better matching with the results of
        JS typeof operator.
        https://bugs.webkit.org/show_bug.cgi?id=44680

        * bindings/js/ScriptProfile.cpp:
        (WebCore::buildInspectorObjectFor):
        * bindings/v8/ScriptProfile.cpp:
        (WebCore::buildInspectorObjectFor):
        * inspector/CodeGeneratorInspector.pm:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::buildObjectForCookie):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForEventListener):
        (WebCore::InspectorDOMAgent::populateObjectWithStyleProperties):
        (WebCore::InspectorDOMAgent::buildObjectForStyleSheet):
        (WebCore::InspectorDOMAgent::buildObjectForRule):
        * inspector/InspectorDOMStorageResource.cpp:
        (WebCore::InspectorDOMStorageResource::bind):
        * inspector/InspectorResource.cpp:
        (WebCore::InspectorResource::updateScriptObject):
        * inspector/InspectorValues.cpp:
        (WebCore::InspectorValue::asBoolean):
        (WebCore::InspectorBasicValue::asBoolean):
        (WebCore::InspectorBasicValue::asNumber):
        (WebCore::InspectorBasicValue::writeJSON):
        (WebCore::InspectorObject::getBoolean):
        * inspector/InspectorValues.h:
        (WebCore::InspectorValue::):
        (WebCore::InspectorBasicValue::InspectorBasicValue):
        (WebCore::InspectorObject::setBoolean):
        (WebCore::InspectorArray::pushBoolean):
        * inspector/ScriptBreakpoint.cpp:
        (WebCore::ScriptBreakpoint::sourceBreakpointsFromInspectorObject):
        (WebCore::ScriptBreakpoint::inspectorObjectFromSourceBreakpoints):
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createTimerInstallData):
        (WebCore::TimelineRecordFactory::createResourceSendRequestData):
        (WebCore::TimelineRecordFactory::createResourceFinishData):

2010-08-26  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Simon Hausmann.

        [Qt] Set the clipRect correctly in windowed and windowless mode.
        In Windowed mode, the values are in page coordinates. In Windowless
        mode the values are in drawable coordinates. Setting these values is
        purely academic since they are not used by Flash. However, there is a
        possibility that plugins might infer a 'null' clipRect to mean 'invisible'.

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

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

2010-08-26  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: enable debugger after resources are pushed to front-end
        https://bugs.webkit.org/show_bug.cgi?id=44673

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::populateScriptObjects):

2010-08-26  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        text-shadow is not respected in RenderSVGText::repaintRectInLocalCoordinates()
        https://bugs.webkit.org/show_bug.cgi?id=44616

        Centralize code to calculate the shadow extents in ShadowData.
        Respect textShadow() when calculating the repaint rect of RenderSVGText.

        Tests: svg/css/composite-shadow-text.svg
               transitions/svg-text-shadow-transition.html

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::adjustRectForOutlineAndShadow):
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::repaintRectInLocalCoordinates):
        (WebCore::RenderSVGRoot::computeRectForRepaint):
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::repaintRectInLocalCoordinates):
        * rendering/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::computeRectForRepaint):
        (WebCore::SVGRenderSupport::prepareToRenderSVGContent):
        (WebCore::SVGRenderSupport::finishRenderSVGContent):
        (WebCore::SVGRenderSupport::intersectRepaintRectWithResources):
        * rendering/style/SVGRenderStyle.cpp:
        * rendering/style/SVGRenderStyle.h:
        * rendering/style/ShadowData.cpp:
        (WebCore::calculateShadowExtent):
        (WebCore::ShadowData::adjustRectForShadow):
        * rendering/style/ShadowData.h:

2010-08-25  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] Rework event definition in the DOM bindings
        https://bugs.webkit.org/show_bug.cgi?id=44597

        Define DOM events in the base classes that implement EventTarget,
        since theoretically you can dispatch any event to any of those
        classes whether it makes sense semantically or not.

        All the existing events in WebKit are not listed anywhere in the
        IDL files, so we need to have the list in the generator script.

        * bindings/scripts/CodeGeneratorGObject.pm:

2010-08-25  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        WebInspector: as far as we have 'seq' property in the each inspector message
        it would be better to remove explicit callId argument from Inspector.idl functions
        declarations.
        https://bugs.webkit.org/show_bug.cgi?id=44617

        * WebCore.xcodeproj/project.pbxproj:
        * inspector/CodeGeneratorInspector.pm:
        * inspector/Inspector.idl:
        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.UnusedCssRule.prototype.doRun):
        (WebInspector.AuditRules.ImageDimensionsRule.prototype.doRun.receivedImages):
        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager.prototype._setBreakpointOnBackend):
        * inspector/front-end/CSSStyleModel.js:
        (WebInspector.CSSStyleModel.prototype.getStylesAsync):
        (WebInspector.CSSStyleModel.prototype.getComputedStyleAsync):
        (WebInspector.CSSStyleModel.prototype.setRuleSelector):
        (WebInspector.CSSStyleModel.prototype.addRule):
        (WebInspector.CSSStyleModel.prototype.toggleStyleEnabled):
        (WebInspector.CSSStyleModel.prototype.setCSSText):
        (WebInspector.CSSStyleModel.prototype.applyStyleText):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMAgent.prototype.getChildNodesAsync):
        (WebInspector.DOMAgent.prototype.setAttributeAsync):
        (WebInspector.DOMAgent.prototype.removeAttributeAsync):
        (WebInspector.DOMAgent.prototype.setTextNodeValueAsync):
        (WebInspector.ApplicationCache.getApplicationCachesAsync):
        (WebInspector.Cookies.getCookiesAsync):
        (WebInspector.EventListeners.getEventListenersForNodeAsync):
        * inspector/front-end/DOMStorage.js:
        (WebInspector.DOMStorage.prototype.getEntries):
        (WebInspector.DOMStorage.prototype.setItem):
        (WebInspector.DOMStorage.prototype.removeItem):
        * inspector/front-end/Database.js:
        (WebInspector.Database.prototype.getTableNames):
        (WebInspector.Database.prototype.executeSql):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.setDocument):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype._tagNameEditingCommitted):
        ():
        * inspector/front-end/InjectedScriptAccess.js:
        (InjectedScriptAccess._installHandler.InjectedScriptAccess.prototype.methodName):
        (InjectedScriptAccess._installHandler):
        * inspector/front-end/MetricsSidebarPane.js:
        (WebInspector.MetricsSidebarPane.prototype.update):
        (WebInspector.MetricsSidebarPane.prototype.editingCommitted):
        * inspector/front-end/ProfileView.js:
        (WebInspector.CPUProfileView):
        * inspector/front-end/ProfilesPanel.js:
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.getResourceContent):
        * inspector/front-end/ScriptView.js:
        (WebInspector.ScriptView.prototype.setupSourceFrameIfNeeded):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.editScriptSource):
        * inspector/front-end/inspector.js:
        (WebInspector.doLoadedDone):

2010-08-26  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Kent Tamura.

        Add ENABLE(INDEXED_DATABASE) guard
        https://bugs.webkit.org/show_bug.cgi?id=44659

        Build fix for ports with index database disabled.

        * storage/IDBKeyPathBackendImpl.cpp:

2010-08-26  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Ariya Hidayat.

        [Qt] Replace QLibrary("libgdk-x11-2.0.so.0") with QLibrary("libgdk-x11-2.0", 0)
        https://bugs.webkit.org/show_bug.cgi?id=44618

        * plugins/qt/PluginViewQt.cpp:
        (WebCore::getPluginDisplay):

2010-08-26  Adam Barth  <abarth@webkit.org>

        Reviewed by Sam Weinig.

        Deploy adoptPtr to WebCore/loader
        https://bugs.webkit.org/show_bug.cgi?id=44591

        This patch covers the easy cases.  There are a handful of tougher cases
        that I'm leaving to a future patch.  I filed one bug about a possible
        memory leak and I emailed webkit-dev about some infrastructure we'll
        need to tackle some of the harder cases.

        * loader/CrossOriginAccessControl.cpp:
        (WebCore::createAllowedCrossOriginResponseHeadersSet):
        (WebCore::isOnAccessControlResponseHeaderWhitelist):
        * loader/DocLoader.cpp:
        (WebCore::DocLoader::requestPreload):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::DocumentLoader):
        (WebCore::DocumentLoader::addAllArchiveResources):
        (WebCore::DocumentLoader::addArchiveResource):
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::DocumentThreadableLoader):
        (WebCore::DocumentThreadableLoader::didReceiveResponse):
        * loader/PingLoader.cpp:
        (WebCore::PingLoader::loadImage):
        * loader/ProgressTracker.cpp:
        (WebCore::ProgressTracker::incrementProgress):
        * loader/RedirectScheduler.cpp:
        (WebCore::RedirectScheduler::scheduleRedirect):
        (WebCore::RedirectScheduler::scheduleLocationChange):
        (WebCore::RedirectScheduler::scheduleFormSubmission):
        (WebCore::RedirectScheduler::scheduleRefresh):
        (WebCore::RedirectScheduler::scheduleHistoryNavigation):
        * loader/WorkerThreadableLoader.cpp:
        (WebCore::WorkerThreadableLoader::MainThreadBridge::didReceiveData):
        * loader/icon/IconDatabase.cpp:
        (WebCore::readySQLiteStatement):
        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::create):

2010-08-26  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Dan Bernstein.

        shadowSize parameter is used to pass shadow offset in the
        GraphicsContext::setShadow and getShadow functions
        https://bugs.webkit.org/show_bug.cgi?id=44603

        Change the shadowSize parameter ot the functions getShadow and
        setShadow in GraphicsContext to shadowOffset which is the current
        use of that parameter in the code.

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::setShadow):
        (WebCore::GraphicsContext::clearShadow):
        (WebCore::GraphicsContext::getShadow):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/GraphicsContextPrivate.h:
        * platform/graphics/cairo/FontCairo.cpp:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::calculateShadowBufferDimensions):
        (WebCore::drawPathShadow):
        (WebCore::drawBorderlessRectShadow):
        (WebCore::GraphicsContext::setPlatformShadow):
        * platform/graphics/cairo/ImageCairo.cpp:
        (WebCore::BitmapImage::draw):
        * platform/graphics/chromium/FontChromiumWin.cpp:
        (WebCore::TransparencyAwareFontPainter::TransparencyAwareGlyphPainter::drawGlyphs):
        (WebCore::Font::drawComplexText):
        * platform/graphics/gtk/FontGtk.cpp:
        (WebCore::Font::drawComplexText):
        * platform/graphics/mac/FontMac.mm:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/qt/ImageQt.cpp:
        (WebCore::BitmapImage::draw):
        * platform/graphics/qt/StillImageQt.cpp:
        (WebCore::StillImage::draw):
        * platform/graphics/qt/GraphicsContextQt:
        (WebCore::GraphicsContext::setPlatformShadow):
        * platform/graphics/skia/SkiaFontWin.cpp:
        (WebCore::windowsCanHandleDrawTextShadow):
        * platform/graphics/win/FontCGWin.cpp:
        (WebCore::drawGDIGlyphs):
        (WebCore::Font::drawGlyphs):
        * platform/graphics/wince/GraphicsContextWince.cpp:
        (WebCore::GraphicsContext::fillRoundedRect):
        (WebCore::GraphicsContext::drawText):

2010-08-25  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r66074.
        http://trac.webkit.org/changeset/66074
        https://bugs.webkit.org/show_bug.cgi?id=44660

        Chromium canary turned red (Requested by yuzo on #webkit).

        * bindings/generic/RuntimeEnabledFeatures.cpp:
        * bindings/generic/RuntimeEnabledFeatures.h:
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::responseText):
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::V8XMLHttpRequest::responseTextAccessorGetter):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::responseText):
        (WebCore::XMLHttpRequest::responseXML):
        (WebCore::XMLHttpRequest::open):
        (WebCore::XMLHttpRequest::abort):
        (WebCore::XMLHttpRequest::clearResponse):
        (WebCore::XMLHttpRequest::didFinishLoading):
        * xml/XMLHttpRequest.h:
        * xml/XMLHttpRequest.idl:

2010-08-25  Mark Rowe  <mrowe@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/8205479> WebCore's icon database often prevents Safari from being killable via sudden termination

        We need to ensure that each call to disableSuddenTermination is balanced by a corresponding call to enableSuddenTermination.
        It's possbile for several calls to IconDatabase::wakeSyncThread to correspond to only a single iteration of the loop within
        IconDatabase::syncThreadMainLoop. This results in the sudden termination disable count growing without bound rather than
        being balanced when the work completes. We can prevent this by ensuring that we only disable sudden termination once for each
        corresponding iteration of the sync thread's main loop.

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::IconDatabase):
        (WebCore::IconDatabase::wakeSyncThread): Only disable sudden termination if it has not yet been disabled for this iteration of
        the sync thread's main loop.
        (WebCore::IconDatabase::syncThreadMainLoop): Clear the flag indicating that sudden termination has been disabled after reenabling it
        so that future calls to wakeSyncThread disable sudden termination once more.
        * loader/icon/IconDatabase.h:

2010-08-25  Michael Nordman  <michaeln@google.com>

        Reviewed by David Levin.

        https://bugs.webkit.org/show_bug.cgi?id=44133
        IDL bindings for XmlHttpRequest.responseBlob support, doesn't do anything yet.
        Adds two new attributes, asBlob and responseBlob.
        Runtime disabled by default, also behind a new ENABLE_XHR_RESPONSE_BLOB compile time guard.
        
        No new tests, just adding some stubs.

        * bindings/generic/RuntimeEnabledFeatures.cpp:
        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setResponseBlobEnabled):
        (WebCore::RuntimeEnabledFeatures::responseBlobEnabled):
        (WebCore::RuntimeEnabledFeatures::asBlobEnabled):
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::responseText): Changed to allow an exceptional return path.
        * bindings/v8/custom/V8XMLHttpRequestCustom.cpp:
        (WebCore::V8XMLHttpRequest::responseTextAccessorGetter): Changed to allow an exceptional return path.
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::responseText): Changed to raise an exception when accessed with asBlob set to true.
        (WebCore::XMLHttpRequest::responseXML): Changed to raise an exception when accessed with asBlob set to true.
        (WebCore::XMLHttpRequest::responseBlob): Added stub method, returns 0 for now.
        (WebCore::XMLHttpRequest::setAsBlob): Sets the asBlob attribute, raises exception if called at an inappropriate time.
        (WebCore::XMLHttpRequest::open): Resets asBlob to false, the default value.
        (WebCore::XMLHttpRequest::abort): Clears m_responseBlob.
        (WebCore::XMLHttpRequest::clearResponse): Clears m_responseBlob.
        (WebCore::XMLHttpRequest::didFinishLoading): Added a FIXME to populate m_responseBlob.
        * xml/XMLHttpRequest.h:
        (WebCore::XMLHttpRequest::asBlob):
        * xml/XMLHttpRequest.idl:

2010-08-24  Victoria Kirst  <vrk@google.com>

        Reviewed by Darin Fisher.

        Adding a means of communication between WebKit/WebCore and
        chromium in order to share video frames. This adds the necessary
        WebKit-side classes and methods, but does not actually use them
        yet - that will be committed in a separate patch after the
        corresponding Chromium side is committed.

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

        No new tests, as these new classes/APIs are not yet used.

        * platform/graphics/chromium/VideoFrameChromium.h: Added.
        (WebCore::VideoFrameChromium::):
        * platform/graphics/chromium/VideoFrameProvider.h: Added.
        * platform/graphics/chromium/VideoLayerChromium.cpp:
        (WebCore::VideoLayerChromium::create):
        (WebCore::VideoLayerChromium::VideoLayerChromium):
        * platform/graphics/chromium/VideoLayerChromium.h:

2010-08-25  Kenneth Russell  <kbr@google.com>

        Reviewed by Simon Fraser.

        Source data passed to TypedArray creators should be const
        https://bugs.webkit.org/show_bug.cgi?id=44649

        Compiled and ran existing WebGL tests to verify.

        * html/canvas/Float32Array.cpp:
        (WebCore::Float32Array::create):
        * html/canvas/Float32Array.h:
        * html/canvas/TypedArrayBase.h:
        (WebCore::TypedArrayBase::create):

2010-08-25  Eric Seidel  <eric@webkit.org>

        Unreviewed, just removing a dead enum.

        Remove endTagRequirement now that the LegacyHTMLDocumentParser is dead
        https://bugs.webkit.org/show_bug.cgi?id=44626

        Remove HTMLTagStatus since it's not used anymore.

        * html/HTMLElement.h:

2010-08-25  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by David Kilzer.

        AX: CSS first letter text transform causes crash
        https://bugs.webkit.org/show_bug.cgi?id=44352

        Test: accessibility/first-letter-text-transform-causes-crash.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::nextContinuation):

2010-08-25  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Remove endTagRequirement now that the LegacyHTMLDocumentParser is dead
        https://bugs.webkit.org/show_bug.cgi?id=44626

        Serialization is covered by a bunch of tests.  innerHTML behavior is sadly not.
        In either case, this is just moving code and should have no functional change.

        * editing/markup.cpp:
        (WebCore::elementCannotHaveEndTag):
        (WebCore::MarkupAccumulator::shouldSelfClose):
        (WebCore::MarkupAccumulator::appendEndMarkup):
        (WebCore::serializeNodesWithNamespaces):
        * html/HTMLAnchorElement.h:
        * html/HTMLAreaElement.h:
        * html/HTMLBRElement.h:
        * html/HTMLBaseElement.h:
        * html/HTMLBaseFontElement.h:
        * html/HTMLBlockquoteElement.h:
        * html/HTMLBodyElement.h:
        * html/HTMLCanvasElement.cpp:
        * html/HTMLCanvasElement.h:
        * html/HTMLDListElement.h:
        * html/HTMLDataGridCellElement.h:
        * html/HTMLDataGridColElement.h:
        * html/HTMLDirectoryElement.h:
        * html/HTMLDivElement.h:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::nodeName):
        (WebCore::HTMLElement::ieForbidsInsertHTML):
        (WebCore::HTMLElement::deprecatedCreateContextualFragment):
        (WebCore::HTMLElement::setInnerText):
        (WebCore::HTMLElement::setOuterText):
        * html/HTMLElement.h:
        * html/HTMLEmbedElement.h:
        * html/HTMLFontElement.h:
        * html/HTMLFormControlElement.h:
        * html/HTMLFormElement.h:
        * html/HTMLFrameElement.h:
        * html/HTMLFrameSetElement.h:
        * html/HTMLHRElement.h:
        * html/HTMLHeadElement.h:
        * html/HTMLHeadingElement.h:
        * html/HTMLHtmlElement.h:
        * html/HTMLIFrameElement.h:
        * html/HTMLImageElement.h:
        * html/HTMLInputElement.h:
        * html/HTMLIsIndexElement.h:
        * html/HTMLLIElement.h:
        * html/HTMLLinkElement.h:
        * html/HTMLMapElement.h:
        * html/HTMLMarqueeElement.h:
        * html/HTMLMenuElement.h:
        * html/HTMLMetaElement.h:
        * html/HTMLModElement.h:
        * html/HTMLOListElement.h:
        * html/HTMLOptionElement.h:
        * html/HTMLParagraphElement.h:
        * html/HTMLParamElement.h:
        * html/HTMLPlugInElement.h:
        * html/HTMLPreElement.h:
        * html/HTMLQuoteElement.h:
        * html/HTMLScriptElement.h:
        * html/HTMLSourceElement.h:
        * html/HTMLStyleElement.h:
        * html/HTMLTableCaptionElement.h:
        * html/HTMLTableCellElement.h:
        * html/HTMLTableColElement.cpp:
        * html/HTMLTableColElement.h:
        * html/HTMLTableElement.h:
        * html/HTMLTableRowElement.h:
        * html/HTMLTableSectionElement.h:
        * html/HTMLUListElement.h:

2010-08-20  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        WebGL must enforce restrictions even if running on OpenGL ES 2.0
        https://bugs.webkit.org/show_bug.cgi?id=42908

        * html/canvas/WebGLFramebuffer.cpp:
        (WebCore::WebGLFramebuffer::getColorBufferFormat): Get format at given level instead of 0.
        * html/canvas/WebGLRenderingContext.cpp: Add two new flags and use them to replace the original isGLES2Compliant().
        (WebCore::WebGLRenderingContext::WebGLRenderingContext):
        (WebCore::WebGLRenderingContext::bindTexture):
        (WebCore::WebGLRenderingContext::blendEquation):
        (WebCore::WebGLRenderingContext::blendEquationSeparate):
        (WebCore::WebGLRenderingContext::bufferData):
        (WebCore::WebGLRenderingContext::bufferSubData):
        (WebCore::WebGLRenderingContext::checkFramebufferStatus):
        (WebCore::WebGLRenderingContext::clear):
        (WebCore::WebGLRenderingContext::copyTexImage2D):
        (WebCore::WebGLRenderingContext::copyTexSubImage2D):
        (WebCore::WebGLRenderingContext::disable):
        (WebCore::WebGLRenderingContext::drawArrays):
        (WebCore::WebGLRenderingContext::drawElements):
        (WebCore::WebGLRenderingContext::enable):
        (WebCore::WebGLRenderingContext::generateMipmap):
        (WebCore::WebGLRenderingContext::hint):
        (WebCore::WebGLRenderingContext::isEnabled):
        (WebCore::WebGLRenderingContext::texImage2DBase):
        (WebCore::WebGLRenderingContext::texParameter):
        (WebCore::WebGLRenderingContext::isGLES2NPOTStrict):
        (WebCore::WebGLRenderingContext::isErrorGeneratedOnOutOfBoundsAccesses):
        * html/canvas/WebGLRenderingContext.h: Declare two new flags.
        * html/canvas/WebGLTexture.cpp: Get format at given level instead of 0.
        (WebCore::WebGLTexture::getInternalFormat):
        * html/canvas/WebGLTexture.h: Ditto.
        * platform/graphics/GraphicsContext3D.h: Add three new flags.
        * platform/graphics/mac/GraphicsContext3DMac.mm: Ditto.
        (WebCore::GraphicsContext3D::isGLES2NPOTStrict):
        (WebCore::GraphicsContext3D::isErrorGeneratedOnOutOfBoundsAccesses):
        * platform/graphics/qt/GraphicsContext3DQt.cpp: Ditto.
        (WebCore::GraphicsContext3D::isGLES2NPOTStrict):
        (WebCore::GraphicsContext3D::isErrorGeneratedOnOutOfBoundsAccesses):

2010-08-25  Brent Fulgham  <bfulgham@webkit.org>

        Build correction, no review.

        * WebCore.vcproj/WebCore.vcproj: Add missing implementation
          for PlatformRefPtrCairo.

2010-08-25  Cris Neckar  <cdn@chromium.org>

        Reviewed by Darin Adler.

        Added abort condition for RenderCounters when traversing a detached render tree.
        https://bugs.webkit.org/show_bug.cgi?id=43812

        Test: fast/css/counters/counter-traverse-object-crash.html

        * rendering/RenderCounter.cpp:
        (WebCore::findPlaceForCounter):

2010-08-25  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=44629
        Add layer consistency checking and fix found crashing bug
        
        The crash was being caused by some of the calls which mutated
        the sublayer list leaving the list in an inconsistent state.
        This eventually lead to a crash. It would also lead to visual
        artifacts if the crash didn't occur. Added consistency checking
        to catch this and any other inconsistencies in the sublayer list.
        
        The particular bug in this case was caused by clamping an index
        for insertion to the current size of the sublayer list. CACF uses
        an index equal to the current length to indicate an append operation.
        With tiled layers the apparent size of the list is one less than its
        actual size (to accomodate the layer which holds the list of tiles)
        so this clamping was causing the new layer to get inserted before the
        tile parent. The tile parent was then mistaken for a WKCACFLayer and
        it eventually tried to deref that layer, causing the crash.
        
        I also added some protection when destroying a WKCACFLayer. The user data
        for the corresponding CACFLayer is now changed to 0xDeadBeef rather than 
        null. This allows dangling layers to be more easily identified. This
        value is checked and ASSERTed if seen. I also remove the sublayers
        on destruction to make the consistency checks work properly while
        a layer is being destroyed.

        Test: compositing/tiling/crash-reparent-tiled-layer.html

        * platform/graphics/win/WKCACFLayer.cpp:
        * platform/graphics/win/WKCACFLayer.h:
        * platform/graphics/win/WebTiledLayer.cpp:
        * platform/graphics/win/WebTiledLayer.h:

2010-08-25  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        WebCore::InsertListCommand::modifyRange infinite loop (100% CPU usage)
        https://bugs.webkit.org/show_bug.cgi?id=33668

        The bug was caused by enclosingListChild returning a list child whose enclosing list is
        a sibling of the current list child. Fixed enclosingListChild to traverse upwards
        in the DOM to find the list child which is a sibling of the current list child.
        Also fixed adjacentEnclosingList to only returns the list that belongs to the same outer list.

        In doApplyForSingleParagraph, if the start or the end of currentSelection existed inside a list content
        moved by moveParagraphWithClones, either end could point to a wrong position after the move.
        Fixed this problem by checking this condition upfront and restoring later.

        In doApply, if moveParagraph or moveParagraphWithClones, endOfSelection or startOfLastParagraph
        could be null or orphaned, fixed this problem by indexForVisiblePosition.

        Test: editing/execCommand/insert-list-orphaned-item-with-nested-lists.html

        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::doApply):
        (WebCore::enclosingListChild):
        (WebCore::InsertListCommand::doApplyForSingleParagraph):
        (WebCore::adjacentEnclosingList):
        (WebCore::InsertListCommand::listifyParagraph):

2010-08-25  Brent Fulgham  <bfulgham@webkit.org>

        Build corrections, no review.

        * platform/graphics/cairo/GraphicsContextPlatformPrivateCairo.h:
          Add include for new (missing) "CairoPath.h" class.
        * platform/graphics/cairo/PlatformRefPtrCairo.h: Correct
          include and compilation guards to match coding conventions.
        * platform/graphics/win/FontCustomPlatformDataCairo.cpp:
          Change implementation to match CG version, using the
          FontCustomPlatformData name, rather than the original
          FontCustomPlatformDataCairo.
        * platform/graphics/win/FontCustomPlatformDataCairo.h:
          Same as for the .cpp file.

2010-08-25  Krzysztof Czech  <k.czech@samsung.com>

        Reviewed by Kenneth Rohde Christiansen.

        [EFL] Crash while calling PopupMenuEfl destructor
        https://bugs.webkit.org/show_bug.cgi?id=44497

        Condition checks if m_view is defined
        before popup is hide

        * platform/efl/PopupMenuEfl.cpp:
        (WebCore::PopupMenuEfl::~PopupMenuEfl):

2010-08-24  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Tony Chang.

        Creating a link when selecting multiple nodes creates multiple links
        https://bugs.webkit.org/show_bug.cgi?id=30836

        The bug was caused by applyInlineStyleToRange calling addInlineStyleIfNeeded
        on each inline element. Modified applyInlineStyleToRange to call addInlineStyleIfNeeded
        once for all inline elements with the same style difference.

        Because this implies that anchor element may wrap other inline elements when added,
        modified pushDownInlineStyleAroundNode to push down styled elements.

        Removed pushPartiallySelectedAnchorElementsDown from CompositeEditCommand since
        ApplyStyleCommand now correctly pushes down anchors at the start and the end of the selection.

        Test: editing/execCommand/toggle-link.html

        * editing/ApplyStyleCommand.cpp:
        (WebCore::StyleChange::operator==): Added.
        (WebCore::StyleChange::operator!=): Added.
        (WebCore::ApplyStyleCommand::applyInlineStyleToRange): Wraps inline elements with
        the same style difference by one element instead of wrapping each element separately.
        (WebCore::ApplyStyleCommand::extractInlineStyleToPushDown): Extracts styled element.
        (WebCore::ApplyStyleCommand::applyInlineStyleToPushDown): Avoids adding styled element.
        (WebCore::ApplyStyleCommand::pushDownInlineStyleAroundNode): Pushes down styled element.
        (WebCore::ApplyStyleCommand::surroundNodeRangeWithElement): No longer checks inline-ness.
        (WebCore::ApplyStyleCommand::addInlineStyleIfNeeded): Adds style even when m_removeOnly.
        Callers should set addStyledElement = DoNotAddStyledElement to avoid adding styled element.
        * editing/ApplyStyleCommand.h:
        * editing/CompositeEditCommand.cpp: Removed pushPartiallySelectedAnchorElementsDown.
        * editing/CompositeEditCommand.h: Removed pushPartiallySelectedAnchorElementsDown.
        * editing/CreateLinkCommand.cpp:
        (WebCore::CreateLinkCommand::doApply): used to call pushPartiallySelectedAnchorElementsDown.
        * editing/UnlinkCommand.cpp:
        (WebCore::UnlinkCommand::doApply): Used to call pushPartiallySelectedAnchorElementsDown.

2010-08-24  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        Passing premultiplyAlpha=false to tex{Sub}Image2D loses information (skia)
        https://bugs.webkit.org/show_bug.cgi?id=38282

        Test: fast/canvas/webgl/gl-teximage.html

        * platform/graphics/GraphicsContext3D.cpp: Fix a bug where alpha channel is ignored.
        * platform/graphics/ImageSource.cpp: Add premultiplyAlpha flag.
        (WebCore::ImageSource::ImageSource):
        (WebCore::ImageSource::setData):
        * platform/graphics/ImageSource.h: Ditto.
        * platform/graphics/cg/ImageSourceCG.cpp: Ditto.
        (WebCore::ImageSource::ImageSource):
        * platform/graphics/qt/ImageDecoderQt.cpp: Ditto.
        (WebCore::ImageDecoder::create):
        (WebCore::ImageDecoderQt::ImageDecoderQt):
        (WebCore::ImageDecoderQt::frameCount):
        (WebCore::ImageDecoderQt::forceLoadEverything):
        * platform/graphics/qt/ImageDecoderQt.h: Ditto.
        * platform/graphics/skia/GraphicsContext3DSkia.cpp: Fix the premultiplyAlpha data loss issue in skia.
        (WebCore::GraphicsContext3D::getImageData):
        * platform/image-decoders/ImageDecoder.cpp: Add premultiplyAlpha flag.
        (WebCore::ImageDecoder::create):
        (WebCore::RGBA32Buffer::RGBA32Buffer):
        (WebCore::RGBA32Buffer::operator=):
        * platform/image-decoders/ImageDecoder.h: Ditto.
        (WebCore::RGBA32Buffer::premultiplyAlpha):
        (WebCore::RGBA32Buffer::setPremultiplyAlpha):
        (WebCore::RGBA32Buffer::setRGBA):
        (WebCore::ImageDecoder::ImageDecoder):
        * platform/image-decoders/bmp/BMPImageDecoder.cpp: Ditto.
        (WebCore::BMPImageDecoder::BMPImageDecoder):
        (WebCore::BMPImageDecoder::frameBufferAtIndex):
        * platform/image-decoders/bmp/BMPImageDecoder.h: Ditto.
        * platform/image-decoders/gif/GIFImageDecoder.cpp: Ditto.
        (WebCore::GIFImageDecoder::GIFImageDecoder):
        (WebCore::GIFImageDecoder::frameCount):
        * platform/image-decoders/gif/GIFImageDecoder.h: Ditto.
        * platform/image-decoders/ico/ICOImageDecoder.cpp: Ditto.
        (WebCore::ICOImageDecoder::ICOImageDecoder):
        (WebCore::ICOImageDecoder::frameCount):
        (WebCore::ICOImageDecoder::decodeAtIndex):
        * platform/image-decoders/ico/ICOImageDecoder.h: Ditto.
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp: Ditto.
        (WebCore::JPEGImageDecoder::JPEGImageDecoder):
        (WebCore::JPEGImageDecoder::frameBufferAtIndex):
        * platform/image-decoders/jpeg/JPEGImageDecoder.h: Ditto.
        * platform/image-decoders/png/PNGImageDecoder.cpp: Ditto.
        (WebCore::PNGImageDecoder::PNGImageDecoder):
        (WebCore::PNGImageDecoder::frameBufferAtIndex):
        * platform/image-decoders/png/PNGImageDecoder.h: Ditto.
        * platform/image-decoders/skia/ImageDecoderSkia.cpp: Ditto.
        (WebCore::RGBA32Buffer::RGBA32Buffer):
        (WebCore::RGBA32Buffer::operator=):

2010-08-25  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Remove XBL
        https://bugs.webkit.org/show_bug.cgi?id=44621

        This patch removes support for XBL.  XBL seems cool, but this code is
        old and pretty bitrotten.  If we decide to support XBL in the future,
        we can recover this code from this revision.  As it stands, it doesn't
        seem worth half-maintaining this code.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSPropertyNames.in:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::~Document):
        * dom/Document.h:
        * loader/Cache.cpp:
        (WebCore::createResource):
        (WebCore::Cache::getStatistics):
        * loader/Cache.h:
        * loader/CachedResource.h:
        (WebCore::CachedResource::):
        * loader/CachedResourceClient.h:
        (WebCore::CachedResourceClient::setXSLStyleSheet):
        (WebCore::CachedResourceClient::fontLoaded):
        * loader/CachedXBLDocument.cpp: Removed.
        * loader/CachedXBLDocument.h: Removed.
        * loader/DocLoader.cpp:
        (WebCore::DocLoader::canRequest):
        * loader/DocLoader.h:
        * loader/loader.cpp:
        (WebCore::cachedResourceTypeToTargetType):
        (WebCore::Loader::determinePriority):
        * rendering/style/BindingURI.cpp: Removed.
        * rendering/style/BindingURI.h: Removed.
        * rendering/style/RenderStyle.cpp:
        * rendering/style/RenderStyle.h:
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        * rendering/style/StyleRareNonInheritedData.h:

2010-08-25  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Ariya Hidayat.

        [Qt] GraphicsContext: Construct with the correct default LineJoin (MiterJoin)

        We weren't setting it explicitly which caused us to use Qt::MiterJoin when
        we actually want Qt::SvgMiterJoin.

        Fixes display glitches on the "Monster" chrome experiment among other things.

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

2010-08-25  Rafael Antognolli  <antognolli@profusion.mobi>

        Unreviewed build fix.

        [EFL] Build fix for revision 66024
        https://bugs.webkit.org/show_bug.cgi?id=44631

        No new features added, so no new tests.

        * CMakeListsEfl.txt: change GRefPtrCairo.cpp by PlatformRefPtrCairo.cpp.

2010-08-25  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        Various designmode=&quot;on&quot;/&quot;off&quot; &amp; execCommand(&quot;Undo&quot;) NULL pointer crashes
        https://bugs.webkit.org/show_bug.cgi?id=32823

        The bug was caused by changeSelectionAfterCommand which updates the selection
        without checking the whether new selection is valid or not.

        Fixed changeSelectionAfterCommand so that it won't update the selection
        when either end of the new selection is orphaned. Also fixed various editing commands
        to exit early if either end of the selection is orphaned.

        Tests: editing/undo/orphaned-selection-crash-bug32823-1.html
               editing/undo/orphaned-selection-crash-bug32823-2.html
               editing/undo/orphaned-selection-crash-bug32823-3.html
               editing/undo/orphaned-selection-crash-bug32823-4.html

        * editing/Editor.cpp:
        (WebCore::Editor::changeSelectionAfterCommand): No longer sets orphaned selection.
        * editing/VisibleSelection.h:
        (WebCore::VisibleSelection::isNonOrphanedRange): Added.
        (WebCore::VisibleSelection::isNonOrphanedCaretOrRange): Added.
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::doApply): Added an early exist. See above.
        * editing/FormatBlockCommand.cpp:
        (WebCore::FormatBlockCommand::doApply): Ditto.
        * editing/IndentOutdentCommand.cpp:
        (WebCore::IndentOutdentCommand::doApply): Ditto.
        * editing/InsertLineBreakCommand.cpp:
        (WebCore::InsertLineBreakCommand::doApply): Ditto.
        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::doApply): Ditto.
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply): Ditto.
        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::input): Ditto.
        * editing/MoveSelectionCommand.cpp:
        (WebCore::MoveSelectionCommand::doApply): Ditto.
        * editing/RemoveFormatCommand.cpp:
        (WebCore::RemoveFormatCommand::doApply): Ditto.
        * editing/ReplaceSelectionCommand.cpp:
        (WebCore::ReplaceSelectionCommand::doApply): Ditto.
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::doApply): Ditto.
        * editing/UnlinkCommand.cpp:
        (WebCore::UnlinkCommand::doApply): Ditto.

2010-08-25  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Flash content draws in front of site's drop down menu at http://www.monster.com/
        https://bugs.webkit.org/show_bug.cgi?id=41330
        
        If an iframe with composited content became overlapped, we failed to
        consider that iframe for compositing if it had no RenderLayer, so the layering
        would be incorrect.
        
        Overlap is detected at painting time, but it's bad for FrameView::setIsOverlapped()
        to call setNeedsStyleRecalc(), because this would cause subsequent calls to
        FrameView::paintContents() in the same painting batch to bail with needsLayout().
        
        Instead, we do the setNeedsStyleRecalc() from RenderLayerCompositor::notifyIFramesOfCompositingChange(),
        so that the parent document has a chance to update style, and give the iframe a RenderLayer.
        Then setIsOverlapped() simply needs to schedule a layer update, which we do on a timer.
        
        When dumping layers via Frame::layerTreeAsText(), if a layer update is pending, then
        update the layers.
        
        Test: compositing/iframes/become-overlapped-iframe.html

        * page/Frame.cpp:
        (WebCore::Frame::layerTreeAsText):
        * page/FrameView.cpp:
        (WebCore::FrameView::setIsOverlapped):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::RenderLayerCompositor):
        (WebCore::RenderLayerCompositor::scheduleCompositingLayerUpdate):
        (WebCore::RenderLayerCompositor::compositingLayerUpdatePending):
        (WebCore::RenderLayerCompositor::updateCompositingLayersTimerFired):
        (WebCore::RenderLayerCompositor::updateCompositingLayers):
        (WebCore::RenderLayerCompositor::notifyIFramesOfCompositingChange):
        * rendering/RenderLayerCompositor.h:

2010-08-25  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        Cairo and EFL port shouldn't depend on glib.
        https://bugs.webkit.org/show_bug.cgi?id=44354

        No new tests as functionality has not changed.

        Replace occurrences of GRefPtr and adoptGRef with PlatformRefPtr and
        adoptPlatformRef. Rename GRefPtrCairo to PlatformRefPtrCairo.

        * GNUmakefile.am:
        * platform/Cursor.h:
        * platform/graphics/cairo/GRefPtrCairo.cpp: Removed.
        * platform/graphics/cairo/GRefPtrCairo.h: Removed.
        * platform/graphics/cairo/ImageCairo.cpp:
        (WebCore::Image::drawPattern):
        * platform/graphics/cairo/PlatformRefPtrCairo.cpp: Added.
        (WTF::refPlatformPtr):
        (WTF::derefPlatformPtr):
        * platform/graphics/cairo/PlatformRefPtrCairo.h: Added.
        * platform/graphics/gtk/ImageBufferGtk.cpp:
        (WebCore::ImageBuffer::toDataURL):
        * platform/gtk/ClipboardGtk.cpp:
        (WebCore::ClipboardGtk::declareAndWriteDragImage):
        * platform/gtk/CursorGtk.cpp:
        (WebCore::createNamedCursor):
        (WebCore::createCustomCursor):
        (WebCore::Cursor::ensurePlatformCursor):
        * platform/gtk/DataObjectGtk.h:
        * platform/gtk/GRefPtrGtk.cpp:
        (WTF::refPlatformPtr):
        (WTF::derefPlatformPtr):
        * platform/gtk/GRefPtrGtk.h:
        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::writeImage):
        * platform/gtk/PasteboardHelper.cpp:
        (WebCore::PasteboardHelper::dropAtomsForContext):
        * platform/gtk/PopupMenuGtk.h:
        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::RenderThemeGtk):
        (WebCore::paintMozillaGtkWidget):
        * platform/gtk/RenderThemeGtk.h:

2010-08-25  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Alexey Proskuryakov.

        HTMLMediaElement.canPlayType must be case insensitive for MIME type.
        https://bugs.webkit.org/show_bug.cgi?id=44577

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::load):
        (WebCore::MediaPlayer::supportsType):

2010-08-25  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Martin Robinson.

        [GTK] CodeGeneratorGObject not picking up FEATURE_DEFINES
        https://bugs.webkit.org/show_bug.cgi?id=44608

        Move FEATURE_DEFINES declaration to the toplevel GNUmakefile.am,
        since it's used there now too.

        * GNUmakefile.am:

2010-08-25  Dawit Alemayehu  <adawit@kde.org>

        Reviewed by Ariya Hidayat.

        Proper workaround for missing Gtk initialization in Adobe's flash plugins.
        https://bugs.webkit.org/show_bug.cgi?id=44405

        * plugins/qt/PluginPackageQt.cpp:
        (WebCore::initializeGtk):
        (WebCore::PluginPackage::load):

2010-08-25  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        WebInspector: InspectorBackendStub.js is not updated when Inspector.idl changes.
        https://bugs.webkit.org/show_bug.cgi?id=44604

        * WebCore.xcodeproj/project.pbxproj:

2010-08-25  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: don't stop on DOM breakpoints when all breakpoints are deactivated
        https://bugs.webkit.org/show_bug.cgi?id=44509

        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::ScriptDebugServer):
        (WebCore::ScriptDebugServer::setBreakpointsActivated):
        (WebCore::ScriptDebugServer::breakProgram):
        * bindings/v8/ScriptDebugServer.h:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::create):

2010-08-25  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: lazily request frontend settings instead of pushing them on connect
        https://bugs.webkit.org/show_bug.cgi?id=44607

        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::createParser):
        * inspector/Inspector.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::getSettings):
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::populateScriptObjects): this method is now called explicitely from the frontend,
        it should be gone eventually once all panels request initial data lazily.
        * inspector/InspectorController.h:
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel.prototype.show):
        (WebInspector.ProfilesPanel.prototype.profilerWasEnabled):
        (WebInspector.ProfilesPanel.prototype._reset):
        * inspector/front-end/Settings.js:
        (WebInspector.Settings):
        (WebInspector.Settings.initialize.populateApplicationSettings):
        (WebInspector.Settings.initialize.populateSessionSettings):
        (WebInspector.Settings.initialize):
        * inspector/front-end/inspector.js:
        (WebInspector.doLoadedDone):

2010-08-25  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: support checked and disabled context menu items.
        https://bugs.webkit.org/show_bug.cgi?id=44612

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

2010-08-25  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: support disabled and checked context menu items.
        https://bugs.webkit.org/show_bug.cgi?id=44601

        * bindings/js/JSInspectorFrontendHostCustom.cpp:
        (WebCore::JSInspectorFrontendHost::showContextMenu):
        * bindings/v8/custom/V8InspectorFrontendHostCustom.cpp:
        (WebCore::V8InspectorFrontendHost::showContextMenuCallback):
        * inspector/front-end/ContextMenu.js:
        (WebInspector.ContextMenu.prototype.appendItem):

2010-08-25  Zaheer Ahmad <zaheer.mot@gmail.com>

        Reviewed by Xan Lopez.

        [GTK] GTK port doesnt compile with video turned off
        https://bugs.webkit.org/show_bug.cgi?id=44236

        Generate the audio GObject DOM bindings only if video enabled
        * WebCore/GNUMakefile.am
        * WebCore/bindings/gobject/WebKitHTMLElementWrapperFactory.cpp:
        Make the audio code invocation conditional


2010-08-24  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: add "Attribute Modified" and "Node Removed" DOM breakpoints
        https://bugs.webkit.org/show_bug.cgi?id=44532

        Test: inspector/dom-breakpoint.html

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::setDOMBreakpoint):
        (WebCore::InspectorDOMAgent::removeDOMBreakpoint):
        (WebCore::InspectorDOMAgent::didInsertDOMNode):
        (WebCore::InspectorDOMAgent::didRemoveDOMNode):
        (WebCore::InspectorDOMAgent::didModifyDOMAttr):
        * inspector/front-end/DOMAgent.js:
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype._populateTagContextMenu):

2010-08-25  Satish Sampath  <satish@chromium.org>

        Reviewed by Jeremy Orlow.

        Pass the element's bounds to embedder during speech recognition.
        https://bugs.webkit.org/show_bug.cgi?id=44427

        The embedder would typically want to show a native UI with information, settings etc.
        By passing the display bounds of the html element, the embedder can position the
        native speech recognition UI appropriately.

        * page/SpeechInput.cpp:
        (WebCore::SpeechInput::startRecognition):
        * page/SpeechInput.h:
        * page/SpeechInputClient.h:
        * platform/mock/SpeechInputClientMock.cpp:
        (WebCore::SpeechInputClientMock::startRecognition):
        * platform/mock/SpeechInputClientMock.h:
        * rendering/TextControlInnerElements.cpp:
        (WebCore::InputFieldSpeechButtonElement::defaultEventHandler):
        (WebCore::InputFieldSpeechButtonElement::detach):

2010-08-25  Yongjun Zhang  <yongjun_zhang@apple.com>

        Reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=44461
        Assertion failure at WebCore/platform/network/CredentialStorage.cpp:85.

        Remove the assertion at CredentialStorage.cpp:85 since it is legal to have
        multiple forward slashes after the path component.

        No test needed.

        * platform/network/CredentialStorage.cpp:
        (WebCore::protectionSpaceMapKeyFromURL):

2010-08-25  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: search in Scripts panel brings ui back to original search view.
        https://bugs.webkit.org/show_bug.cgi?id=44516

        * inspector/front-end/Panel.js:
        (WebInspector.Panel.prototype.searchCanceled):
        (WebInspector.Panel.prototype.jumpToNextSearchResult):
        (WebInspector.Panel.prototype.jumpToPreviousSearchResult):
        * inspector/front-end/ResourcesPanel.js:
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype.searchCanceled):
        (WebInspector.ScriptsPanel.prototype.performSearch.finishedCallback):
        (WebInspector.ScriptsPanel.prototype.performSearch):
        (WebInspector.ScriptsPanel.prototype.jumpToNextSearchResult):
        (WebInspector.ScriptsPanel.prototype.jumpToPreviousSearchResult):

2010-08-25  Kent Tamura  <tkent@chromium.org>

        Reviewed by Shinichiro Hamaji

        <input type=number>: Support auto-repeat by mouse press
        https://bugs.webkit.org/show_bug.cgi?id=44476

        Like arrow button of scrollbars, spinbuttons of <input
        type=number> should continue to increase/decrease their values
        while the mouse button is pressed.

        No new tests because the new behavior strongly depends on a timer.

        * rendering/TextControlInnerElements.cpp:
        (WebCore::SpinButtonElement::SpinButtonElement):
         Initializes the timer.
        (WebCore::SpinButtonElement::defaultEventHandler):
         Starts the timer by a mousedown event.
        (WebCore::SpinButtonElement::startRepeatingTimer):
        (WebCore::SpinButtonElement::stopRepeatingTimer):
        (WebCore::SpinButtonElement::repeatingTimerFired):
        * rendering/TextControlInnerElements.h:

2010-08-25  Gabor Loki  <loki@webkit.org>

        Reviewed by Gavin Barraclough.

        Avoid increasing required alignment of target type warning
        https://bugs.webkit.org/show_bug.cgi?id=43963

        Fix alignment warnings on Qt.

        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::convertQVariantToValue):
        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::getImageData):
        (WebCore::putImageData):
        * platform/image-decoders/ImageDecoder.h:
        (WebCore::RGBA32Buffer::getAddr):
        * platform/text/qt/TextCodecQt.cpp:
        (WebCore::TextCodecQt::decode):

2010-08-25  Kent Tamura  <tkent@chromium.org>

        Reviewed by Shinichiro Hamaji

        Fix a bug that a spin-button doesn't release mouse capturing
        https://bugs.webkit.org/show_bug.cgi?id=44411

        - LeftButton should be checked only for clickEvent.
          Note that this change doesn't change the behavior because
          button() value is initialized with LeftButton even for
          mousemoveEvent.
        - Should pass a SpinButtonElement node to setCapturingMouseEventsNode().

        Test: fast/forms/input-spinbutton-capturing.html

        * rendering/TextControlInnerElements.cpp:
        (WebCore::SpinButtonElement::defaultEventHandler):

2010-08-25  Gabor Loki  <loki@webkit.org>

        Reviewed by Gavin Barraclough.

        Avoid increasing required alignment of target type warning
        https://bugs.webkit.org/show_bug.cgi?id=43963

        Fix platform independent alignment warnings.

        * loader/CachedMetadata.h:
        (WebCore::CachedMetadata::readUnsigned):
        * platform/text/TextCodecLatin1.cpp:
        (WebCore::TextCodecLatin1::decode):

2010-08-25  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Adam Roben.

        Add missing methods at ResourceHandleWin
        https://bugs.webkit.org/show_bug.cgi?id=44453

        * platform/network/win/ResourceHandleWin.cpp:
        (WebCore::ResourceHandle::willLoadFromCache):
        (WebCore::prefetchDNS):
        (WebCore::ResourceHandle::bufferedData):
        (WebCore::ResourceHandle::supportsBufferedData):
        (WebCore::ResourceHandle::loadsBlocked):
        (WebCore::ResourceHandle::platformSetDefersLoading):

2010-08-25  Adam Barth  <abarth@webkit.org>

        Second attempt to fix Qt build

        * dom/XMLDocumentParserQt.cpp:
        (WebCore::XMLDocumentParser::parseDtd):

2010-08-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Remove more DTD junk now that the LegacyHTMLDocumentParser is gone
        https://bugs.webkit.org/show_bug.cgi?id=44588

        Just removing dead code, thus no tests.

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::nodeName):
        * html/HTMLElement.h:

2010-08-24  Adam Barth  <abarth@webkit.org>

        Qt build fix.

        * dom/XMLDocumentParserQt.cpp:
        (WebCore::XMLDocumentParser::parseStartElement):
        (WebCore::XMLDocumentParser::parseProcessingInstruction):
        (WebCore::XMLDocumentParser::parseCdata):
        (WebCore::XMLDocumentParser::parseComment):
        (WebCore::XMLDocumentParser::parseDtd):

2010-08-24  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Delete HTMLElement::checkDTD
        https://bugs.webkit.org/show_bug.cgi?id=44563

        This function existed to service the LegacyHTMLTreeBuilder.  The new
        HTMLTreeBuilder has this logic internalized.  Pulling on this thread
        caused me to remove a legacyParserAddChild and to discover some code
        that shouldn't be calling these parser-specific APIs.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::parserAddChild):
        (WebCore::ContainerNode::deprecatedParserAddChild):
        * dom/ContainerNode.h:
        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument):
        * dom/Node.cpp:
        (WebCore::Node::deprecatedParserAddChild):
        * dom/Node.h:
        * dom/XMLDocumentParser.cpp:
        (WebCore::XMLDocumentParser::enterText):
        * dom/XMLDocumentParser.h:
        * dom/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::startElementNs):
        (WebCore::XMLDocumentParser::characters):
        (WebCore::XMLDocumentParser::processingInstruction):
        (WebCore::XMLDocumentParser::cdataBlock):
        (WebCore::XMLDocumentParser::comment):
        (WebCore::XMLDocumentParser::internalSubset):
        * dom/XMLDocumentParserQt.cpp:
        (WebCore::XMLDocumentParser::parse):
        (WebCore::XMLDocumentParser::parseStartElement):
        (WebCore::XMLDocumentParser::parseCharacters):
        (WebCore::XMLDocumentParser::parseProcessingInstruction):
        (WebCore::XMLDocumentParser::parseCdata):
        (WebCore::XMLDocumentParser::parseComment):
        (WebCore::XMLDocumentParser::parseDtd):
        * html/HTMLDataGridElement.cpp:
        * html/HTMLDataGridElement.h:
        * html/HTMLDataGridRowElement.cpp:
        * html/HTMLDataGridRowElement.h:
        * html/HTMLDataListElement.cpp:
        * html/HTMLDataListElement.h:
        * html/HTMLDocument.cpp:
        * html/HTMLDocument.h:
        * html/HTMLElement.cpp:
        * html/HTMLElement.h:
        * html/HTMLFieldSetElement.cpp:
        * html/HTMLFieldSetElement.h:
        * html/HTMLFrameSetElement.cpp:
        * html/HTMLFrameSetElement.h:
        * html/HTMLHeadElement.cpp:
        * html/HTMLHeadElement.h:
        * html/HTMLHeadingElement.cpp:
        * html/HTMLHeadingElement.h:
        * html/HTMLHtmlElement.cpp:
        * html/HTMLHtmlElement.h:
        * html/HTMLKeygenElement.cpp:
        (WebCore::HTMLKeygenElement::HTMLKeygenElement):
        * html/HTMLMapElement.cpp:
        * html/HTMLMapElement.h:
        * html/HTMLMediaElement.cpp:
        * html/HTMLMediaElement.h:
        * html/HTMLNoScriptElement.cpp:
        * html/HTMLNoScriptElement.h:
        * html/HTMLOptGroupElement.cpp:
        * html/HTMLOptGroupElement.h:
        * html/HTMLOptionElement.cpp:
        * html/HTMLOptionElement.h:
        * html/HTMLParagraphElement.cpp:
        * html/HTMLParagraphElement.h:
        * html/HTMLPlugInElement.cpp:
        * html/HTMLPlugInElement.h:
        * html/HTMLScriptElement.h:
        * html/HTMLSelectElement.cpp:
        * html/HTMLSelectElement.h:
        * html/HTMLStyleElement.h:
        * html/HTMLTableColElement.cpp:
        * html/HTMLTableColElement.h:
        * html/HTMLTableElement.cpp:
        * html/HTMLTableElement.h:
        * html/HTMLTableRowElement.cpp:
        * html/HTMLTableRowElement.h:
        * html/HTMLTableSectionElement.cpp:
        * html/HTMLTableSectionElement.h:
        * html/HTMLTextAreaElement.h:
        * html/HTMLTitleElement.h:
        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlElement::attachToParent):
        (WebCore::MediaControlInputElement::attachToParent):
        * rendering/TextControlInnerElements.cpp:
        (WebCore::TextControlInnerElement::attachInnerElement):

2010-08-24  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Remove tagPriority
        https://bugs.webkit.org/show_bug.cgi?id=44557

        This code used to be used by the old parser.  Now it's unused.

        * html/HTMLAnchorElement.h:
        * html/HTMLAppletElement.h:
        * html/HTMLAreaElement.h:
        * html/HTMLAudioElement.h:
        * html/HTMLBRElement.h:
        * html/HTMLBaseElement.h:
        * html/HTMLBaseFontElement.h:
        * html/HTMLBlockquoteElement.h:
        * html/HTMLBodyElement.h:
        * html/HTMLCanvasElement.cpp:
        * html/HTMLCanvasElement.h:
        * html/HTMLDListElement.h:
        * html/HTMLDataGridCellElement.h:
        * html/HTMLDataGridColElement.h:
        * html/HTMLDataGridElement.h:
        * html/HTMLDataGridRowElement.h:
        * html/HTMLDirectoryElement.h:
        * html/HTMLDivElement.h:
        * html/HTMLElement.cpp:
        * html/HTMLElement.h:
        * html/HTMLEmbedElement.h:
        * html/HTMLFieldSetElement.h:
        * html/HTMLFontElement.h:
        * html/HTMLFormControlElement.h:
        * html/HTMLFormElement.h:
        * html/HTMLFrameElement.h:
        * html/HTMLFrameSetElement.h:
        * html/HTMLHRElement.h:
        * html/HTMLHeadElement.h:
        * html/HTMLHeadingElement.h:
        * html/HTMLHtmlElement.h:
        * html/HTMLIFrameElement.h:
        * html/HTMLImageElement.h:
        * html/HTMLInputElement.h:
        * html/HTMLIsIndexElement.h:
        * html/HTMLKeygenElement.h:
        * html/HTMLLIElement.h:
        * html/HTMLLabelElement.h:
        * html/HTMLLinkElement.h:
        * html/HTMLMapElement.h:
        * html/HTMLMarqueeElement.h:
        * html/HTMLMenuElement.h:
        * html/HTMLMetaElement.h:
        * html/HTMLModElement.h:
        * html/HTMLOListElement.h:
        * html/HTMLObjectElement.h:
        * html/HTMLOptionElement.h:
        * html/HTMLParagraphElement.h:
        * html/HTMLParamElement.h:
        * html/HTMLPreElement.h:
        * html/HTMLQuoteElement.h:
        * html/HTMLScriptElement.h:
        * html/HTMLSelectElement.h:
        * html/HTMLSourceElement.h:
        * html/HTMLStyleElement.h:
        * html/HTMLTableCaptionElement.h:
        * html/HTMLTableCellElement.h:
        * html/HTMLTableColElement.cpp:
        * html/HTMLTableColElement.h:
        * html/HTMLTableElement.h:
        * html/HTMLTableRowElement.h:
        * html/HTMLTableSectionElement.h:
        * html/HTMLUListElement.h:
        * html/HTMLVideoElement.h:

2010-08-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Fix one more html5lib test case for button scoping
        https://bugs.webkit.org/show_bug.cgi?id=44583

        I <3 test driven development.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTagForInBody):

2010-08-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Remove HTML5 parser testing infrastructure now that we don't need it
        https://bugs.webkit.org/show_bug.cgi?id=44581

        Just removing dead code, no tests.

        * dom/DocumentFragment.cpp:
        * dom/DocumentFragment.h:
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h:

2010-08-24  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Remove unneeded include in HTMLPreloadScanner
        https://bugs.webkit.org/show_bug.cgi?id=44552

        Slowly but steadily sweeping up the dust in the HTML parser.

        * html/HTMLPreloadScanner.cpp:
        * html/HTMLPreloadScanner.h:

2010-08-24  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Dumitru Daniliuc.

        Implement virtual path utilities for FileSystem API
        https://bugs.webkit.org/show_bug.cgi?id=44132

        No new tests; tests will be added later. (Each DOMFilePath's method is briefly tested locally.)

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * storage/DOMFilePath.cpp: Added.
        * storage/DOMFilePath.h: Added.

2010-08-24  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        HTMLParserScheduler::create
        https://bugs.webkit.org/show_bug.cgi?id=44551

        * html/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::HTMLDocumentParser):
        * html/HTMLParserScheduler.h:
        (WebCore::HTMLParserScheduler::create):

2010-08-24  Daniel Bates  <dbates@rim.com>

        Fix code comment as per Darin Adler's suggestion in <https://bugs.webkit.org/show_bug.cgi?id=44486#c2>.
        I inadvertently did not update this comment when I landed changeset 65967 <http://trac.webkit.org/changeset/65967>.

        * rendering/RenderListMarker.cpp:
        (WebCore::listMarkerSuffix):

2010-08-24  Daniel Bates  <dbates@rim.com>

        Reviewed by Darin Adler.

        Suffix for CSS alphabetic list style types should fallback to
        decimal for ordinals outside of their representable range
        https://bugs.webkit.org/show_bug.cgi?id=44486

        Test: fast/lists/w3-css3-list-styles-fallback-style.html

        Fixes an issue where the decimal suffix is not used for
        ordinals that cannot be represented by the alphabetic list
        style type.

        Currently, for ordinals that cannot be represented in the
        alphabetic list style we use the suffix associated with the
        list style. Instead, we should use the suffix for the decimal
        list style ('.'). For instance, when the list style type is
        Afar and the starting ordinal is 0, then we fallback to the
        decimal list style suffix '.' because 0 cannot be represented
        in Afar.

        * rendering/RenderListMarker.cpp:
        (WebCore::toRoman): Moved bounds check into WebCore::effectiveListMarkerType().
        (WebCore::toAlphabetic): Ditto.
        (WebCore::toHebrew): Ditto.
        (WebCore::toArmenian): Ditto.
        (WebCore::toGeorgian): Ditto.
        (WebCore::toCJKIdeographic): Ditto.
        (WebCore::effectiveListMarkerType): Added.
        (WebCore::listMarkerSuffix): Added value parameter to prototype.
        Modified to call WebCore::effectiveListMarkerType.
        (WebCore::listMarkerText): Modified to call WebCore::effectiveListMarkerType().
        (WebCore::RenderListMarker::paint): Modified to pass list item ordinal (i.e. m_listItem->value()) to WebCore::listMarkerSuffix().
        (WebCore::RenderListMarker::calcPrefWidths): Ditto.
        (WebCore::RenderListMarker::getRelativeMarkerRect): Ditto.

2010-08-24  Gavin Barraclough  <barraclough@apple.com>

        Windows build fix.

        * ForwardingHeaders/wtf/DecimalNumber.h: Added.

2010-08-23  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

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

        * html/LegacyHTMLTreeBuilder.cpp:
        (WebCore::serializeForNumberType):
            Update function call to numberToString.

2010-08-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        XMLDocumentParser needs to implement DocumentParser::detach()
        https://bugs.webkit.org/show_bug.cgi?id=44533

        Test: fast/frames/set-parent-src-synchronously.xhtml

        In the example from the page we were accessing document()
        after DocumentParser::detach() was called.  To prevent this
        I added an ASSERT(m_document) to document(), causing many
        test cases to cover the bug shown in bug 44533.

        To fix the bug, I implemented XMLDocumentParser::detach()
        and had it call clearCurrentNodeStack(), thus making
        it impossible for XMLDocumentParser to still have the Document
        on the node stack after detach (which was what was causing this bug).

        While fixing this, I noticed that XMLDocumentParser may have the
        same trouble crashing that the HTMLDocumentParser did when
        synchronously deleted from JS (for example by an iframe navigation).
        I added a test case to cover this and protected the parser after
        the two places it executes scripts.

        * dom/DocumentParser.h:
        (WebCore::DocumentParser::document):
        (WebCore::DocumentParser::isDetached):
        * dom/RawDataDocumentParser.h:
        (WebCore::RawDataDocumentParser::finish):
        * dom/XMLDocumentParser.cpp:
        (WebCore::XMLDocumentParser::append):
        (WebCore::XMLDocumentParser::detach):
        (WebCore::XMLDocumentParser::notifyFinished):
        * dom/XMLDocumentParser.h:
        * dom/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::doWrite):
        (WebCore::XMLDocumentParser::endElementNs):
        (WebCore::XMLDocumentParser::resumeParsing):
        * html/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::pumpTokenizer):
        (WebCore::HTMLDocumentParser::willPumpLexer):
        (WebCore::HTMLDocumentParser::didPumpLexer):
        (WebCore::HTMLDocumentParser::end):
        (WebCore::HTMLDocumentParser::endIfDelayed):
        (WebCore::HTMLDocumentParser::script):
        * html/HTMLViewSourceParser.cpp:
        (WebCore::HTMLViewSourceParser::updateTokenizerState):
        * html/HTMLViewSourceParser.h:
        (WebCore::HTMLViewSourceParser::document):
        * loader/ImageDocument.cpp:
        (WebCore::ImageDocumentParser::document):

2010-08-24  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Adam Roben.

        Add SynchronousLoader for ResourceHandleWin
        https://bugs.webkit.org/show_bug.cgi?id=44452

        * platform/network/win/ResourceHandleWin.cpp:
        (WebCore::WebCoreSynchronousLoader::WebCoreSynchronousLoader):
        (WebCore::WebCoreSynchronousLoader::didReceiveResponse):
        (WebCore::WebCoreSynchronousLoader::didReceiveData):
        (WebCore::WebCoreSynchronousLoader::didFinishLoading):
        (WebCore::WebCoreSynchronousLoader::didFail):
        (WebCore::ResourceHandle::loadResourceSynchronously):

2010-08-24  Ryosuke Niwa  <rniwa@webkit.org>

        Unreviewed.

        Replaced soft tab indentation by hard tab indentation for LegacyWebArchive.h.

        * WebCore.xcodeproj/project.pbxproj:

2010-08-24  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Mark Rowe.

        Web Inspector: RemoteInspectorFrontend can be renamed to InspectorFrontend
        https://bugs.webkit.org/show_bug.cgi?id=44499

        Follow-up. No longer generate the RemoteInspectorFrontend files, just
        generate the required InspectorFrontend files.

        * DerivedSources.make:

2010-08-20  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Backend Should Provide Full Supported CSS Properties List
        https://bugs.webkit.org/show_bug.cgi?id=40886

        This allows the backend to send the front-end its complete list of
        supported CSS Properties. This is used in CSS Autocompletion and
        CSS Syntax Highlighting to show which styles are supported.

        * css/makeprop.pl: moved CSS properties to the header file.
        * inspector/Inspector.idl: expose getSupportedCSSProperties.
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::getSupportedCSSProperties):
        * inspector/InspectorDOMAgent.h:
        * inspector/front-end/CSSCompletions.js:
        (WebInspector.CSSCompletions._firstIndexOfPrefix): handle a possible error case before properties have loaded.
        (WebInspector.CSSCompletions._load): fill up the special array with the received properties.
        * inspector/front-end/SourceCSSTokenizer.js:
        (WebInspector.SourceCSSTokenizer): use the list of support properties from the backend.
        * inspector/front-end/SourceCSSTokenizer.re2js:
        * inspector/front-end/inspector.js: request the list of supported CSS properties on load.
        (WebInspector.doLoadedDone):

2010-08-24  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Delete LegacyHTMLTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=44554

        There were some free functions in LegacyHTMLTreeBuilder that needed a
        new home.  I've put them in HTMLTreeBuilder, but they'll probably need
        a better home eventually.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::shouldCreateImplicitHead):
        * dom/DocumentParser.h:
        * dom/ScriptableDocumentParser.h:
        * html/HTMLConstructionSite.cpp:
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::removedFromTree):
        * html/HTMLInputElement.cpp:
        * html/HTMLMeterElement.cpp:
        * html/HTMLProgressElement.cpp:
        * html/HTMLTreeBuilder.cpp:
        (WebCore::serializeForNumberType):
        (WebCore::parseToDoubleForNumberType):
        * html/HTMLTreeBuilder.h:
        * html/HTMLViewSourceParser.h:
        * html/LegacyHTMLTreeBuilder.cpp: Removed.
        * html/LegacyHTMLTreeBuilder.h: Removed.
        * html/StepRange.cpp:
        * html/ValidityState.cpp:
        * rendering/RenderSlider.cpp:

2010-08-24  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: show DOM breakpoints in sidebar pane
        https://bugs.webkit.org/show_bug.cgi?id=44424

        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager.prototype._setBreakpoint):
        (WebInspector.BreakpointManager.prototype._breakpointRemoved):
        (WebInspector.BreakpointManager.prototype._setBreakpointOnBackend):
        (WebInspector.Breakpoint.prototype.set enabled):
        (WebInspector.Breakpoint.prototype.set condition):
        (WebInspector.Breakpoint.prototype.remove):
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.BreakpointsSidebarPane):
        (WebInspector.BreakpointsSidebarPane.prototype.addBreakpoint):
        (WebInspector.BreakpointsSidebarPane.prototype._breakpointRemoved):
        (WebInspector.BreakpointsSidebarPane.prototype._contextMenuEventFired):
        (WebInspector.BreakpointItem):
        (WebInspector.BreakpointItem.prototype.element):
        (WebInspector.BreakpointItem.prototype.remove):
        (WebInspector.BreakpointItem.prototype._checkboxClicked):
        (WebInspector.BreakpointItem.prototype._enableChanged):
        (WebInspector.BreakpointItem.prototype._removed):
        (WebInspector.JSBreakpointItem):
        (WebInspector.JSBreakpointItem.prototype._textChanged):
        (WebInspector.DOMBreakpointItem):
        (WebInspector.DOMBreakpointItem.prototype.compareTo):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMBreakpointManager):
        (WebInspector.DOMBreakpointManager.prototype.setBreakpoint):
        (WebInspector.DOMBreakpointManager.prototype.removeBreakpointsForNode):
        (WebInspector.DOMBreakpointManager.prototype._breakpointRemoved):
        (WebInspector.DOMBreakpoint):
        (WebInspector.DOMBreakpoint.prototype.get enabled):
        (WebInspector.DOMBreakpoint.prototype.set enabled):
        (WebInspector.DOMBreakpoint.prototype.remove):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel):
        (WebInspector.ElementsPanel.prototype.reset):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype._populateTagContextMenu):
        * inspector/front-end/ScriptView.js:
        (WebInspector.ScriptView):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype._breakpointAdded):
        (WebInspector.ScriptsPanel.prototype.reset):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame):
        (WebInspector.SourceFrame.prototype.set visible):
        (WebInspector.SourceFrame.prototype.addBreakpoint):
        (WebInspector.SourceFrame.prototype._breakpointRemoved):
        (WebInspector.SourceFrame.prototype._addBreakpointToSource):
        (WebInspector.SourceFrame.prototype._removeBreakpointFromSource):
        (WebInspector.SourceFrame.prototype._contextMenu.addConditionalBreakpoint):
        (WebInspector.SourceFrame.prototype._contextMenu):
        (WebInspector.SourceFrame.prototype._mouseDown):
        * inspector/front-end/SourceView.js:
        (WebInspector.SourceView):
        (WebInspector.SourceView.prototype.updateLocalContent):
        * inspector/front-end/inspector.js:
        (WebInspector.createJSBreakpointsSidebarPane.breakpointAdded):
        (WebInspector.createJSBreakpointsSidebarPane):
        (WebInspector.createDOMBreakpointsSidebarPane.breakpointAdded):
        (WebInspector.createDOMBreakpointsSidebarPane):
        (WebInspector.doLoadedDone):

2010-08-24  Stephen White  <senorblanco@chromium.org>

        Reviewed by Dumitru Daniliuc.

        Speculative fix for layout test failures on Chrome/Linux.
        https://bugs.webkit.org/show_bug.cgi?id=44550

        Tests fast/canvas/arc-crash.html, fast/canvas/canvas-state-intact-after-putImageData.html, and fast/canvas/toDataURL-supportedTypes.html are failing on Chrome/Linux.  Can't repro the failure locally, but this fix can't hurt.

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

2010-08-24  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Dimitri Glazkov.

        Fix the NodeFilter wrapper and the binding for acceptNode.
        https://bugs.webkit.org/show_bug.cgi?id=44542

        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::wrapNativeNodeFilter): This function
        should always create a filter. V8NodeFilterCondition::acceptNode()
        will check if the given object can be used as a filter, and throw
        an exception if it can't.
        * bindings/v8/V8NodeFilterCondition.cpp:
        (WebCore::V8NodeFilterCondition::acceptNode): Update this binding
        to do the same thing that the JS binding does.

2010-08-24  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Tony Chang.

        After r65681, caret no longer displays promptly while editing form fields
        https://bugs.webkit.org/show_bug.cgi?id=44294
        
        The caret no longer eagerly updates its rect on every paint, so we have
        to manually update it after scrolling the selection into view when
        the selection changes.
        
        Tested by the pixel results of fast/forms/input-text-scroll-left-on-blur.html

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

2010-08-24  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Remove redundant call to OwnPtr::clear
        https://bugs.webkit.org/show_bug.cgi?id=44548

        As pointed out by Darin, this call to clear is not needed.

        * editing/TextIterator.cpp:
        (WebCore::plainTextToMallocAllocatedBuffer):

2010-08-24  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        HTMLTokenizer::create
        https://bugs.webkit.org/show_bug.cgi?id=44477

        * html/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::HTMLDocumentParser):
        * html/HTMLPreloadScanner.cpp:
        (WebCore::HTMLPreloadScanner::HTMLPreloadScanner):
        (WebCore::HTMLPreloadScanner::scan):
        (WebCore::HTMLPreloadScanner::processToken):
        * html/HTMLPreloadScanner.h:
        * html/HTMLTokenizer.h:
        (WebCore::HTMLTokenizer::create):
        * html/HTMLViewSourceParser.cpp:
        (WebCore::HTMLViewSourceParser::HTMLViewSourceParser):
        (WebCore::HTMLViewSourceParser::pumpTokenizer):
        (WebCore::HTMLViewSourceParser::updateTokenizerState):
        * html/HTMLViewSourceParser.h:

2010-08-24  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Remove references to LegacyHTMLTreebuilder from HTMLTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=44544

        * html/HTMLDocumentParser.cpp:
        * html/HTMLDocumentParser.h:
        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::HTMLTreeBuilder):
        (WebCore::HTMLTreeBuilder::FragmentParsingContext::FragmentParsingContext):
        (WebCore::HTMLTreeBuilder::FragmentParsingContext::document):
        (WebCore::HTMLTreeBuilder::constructTreeFromToken):
        (WebCore::HTMLTreeBuilder::finished):
        * html/HTMLTreeBuilder.h:
        (WebCore::HTMLTreeBuilder::FragmentParsingContext::contextElement):

2010-08-24  Xan Lopez  <xlopez@igalia.com>

        Try to fix GTK+ build.

        Move GTK_API_VERSION_2 define out.

        * GNUmakefile.am:

2010-08-24  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Sam Weinig.

        TreeWalker traversal order is wrong when skipping and rejecting
        https://bugs.webkit.org/show_bug.cgi?id=44377
        
        TreeWalker's nextSibling() and previousSibling() behaved incorrectly
        when traversing down a subtree where all nodes are skipped; it backed all
        the way up to the root of the subtree, then jump to the subtree's parentNode.
        This would skip later siblings.
        
        Fix by resetting 'node' when traversing to children so that node = node->parentNode()
        gets the correct node later.

        Test: fast/dom/TreeWalker/traversal-skip-most.html

        * dom/TreeWalker.cpp:
        (WebCore::TreeWalker::previousSibling):
        (WebCore::TreeWalker::nextSibling):

2010-08-24  Hans Wennborg  <hans@chromium.org>

        Reviewed by Steve Block.

        Remove null-checks from DeviceOrientationController
        https://bugs.webkit.org/show_bug.cgi?id=44504

        Remove checks for m_client being NULL from DeviceOrientationController.
        It will never be NULL, and this is checked by an ASSERT on construction.

        Will be covered by layout tests for device orientation.

        * dom/DeviceOrientationController.cpp:
        (WebCore::DeviceOrientationController::timerFired):
        (WebCore::DeviceOrientationController::addListener):
        (WebCore::DeviceOrientationController::removeListener):
        (WebCore::DeviceOrientationController::removeAllListeners):

2010-08-24  Stephen White  <senorblanco@chromium.org>

        Reviewed by Kenneth Russell.

        Fix accelerated 2d canvas with accelerated compositing off.
        https://bugs.webkit.org/show_bug.cgi?id=44525

        Tested by running with --enable-accelerated-2d-canvas with
        --enable-accelerated-compositing off.
        ImageBuffer::copyImage changes covered by
        LayoutTests/fast/canvas/canvas-pattern-*.html.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::paint):
        Extend the accelerated compositing check and the readback for
        non-accelerated compositing to accelerated 2D canvas also.
        * html/canvas/CanvasRenderingContext.cpp:
        * html/canvas/CanvasRenderingContext.h:
        (WebCore::CanvasRenderingContext::paintsIntoCanvasBuffer):
        Move this logic from WebGL to common canvas context code.
        * html/canvas/WebGLRenderingContext.h:
        Remove implementation of paintsIntoCanvasBuffer.
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageBuffer::copyImage):
        When copying the image for patterns, sync the software canvas.
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::prepareForSoftwareDraw):
        Use SkDevice::eraseColor() to clear the canvas for mixed mode rendering.

2010-08-24  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Deploy adoptPtr in WebCore/editing
        https://bugs.webkit.org/show_bug.cgi?id=44501

        * editing/Editor.cpp:
        (WebCore::Editor::Editor):
        * editing/TextIterator.cpp:
        (WebCore::plainTextToMallocAllocatedBuffer):

2010-08-24  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Deploy adoptPtr in WebCore/history
        https://bugs.webkit.org/show_bug.cgi?id=44502

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::HistoryItem):
        (WebCore::HistoryItem::addRedirectURL):

2010-08-24  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Partial deployment of adoptPtr to WebCore/html
        https://bugs.webkit.org/show_bug.cgi?id=44507

        Deploy adoptPtr to some more places in WebCore/html.  The big chunk
        that I haven't done yet is createRenderer, but that's going to be a big
        patch unto itself.

        * html/HTMLFormCollection.cpp:
        (WebCore::HTMLFormCollection::formCollectionInfo):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::addElementAlias):
        * html/HTMLInputElement.cpp:
        (WebCore::createTypeMap):
        (WebCore::HTMLInputElement::setInputType):
        (WebCore::HTMLInputElement::parseMappedAttribute):
        (WebCore::HTMLInputElement::attach):
        (WebCore::HTMLInputElement::preDispatchEventHandler):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::parseMappedAttribute):
        (WebCore::HTMLObjectElement::attach):
        * html/HTMLToken.h:
        (WebCore::HTMLToken::beginDOCTYPE):
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::attach):
        (WebCore::HTMLVideoElement::parseMappedAttribute):
        * html/ValidityState.h:
        (WebCore::ValidityState::create):

2010-08-24  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Partial deployment of adoptPtr to WebCore/html
        https://bugs.webkit.org/show_bug.cgi?id=44507

        There's a lot of places that need adoptPtr in WebCore/html.  This patch
        does some of them.  More will follow.

        * html/FileThreadTask.h:
        (WebCore::FileThreadTask0::create):
        (WebCore::FileThreadTask1::create):
        (WebCore::FileThreadTask2::create):
        (WebCore::FileThreadTask3::create):
        * html/HTMLAreaElement.cpp:
        (WebCore::HTMLAreaElement::mapMouseEvent):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext):
        * html/HTMLElementStack.cpp:
        (WebCore::HTMLElementStack::insertAbove):
        (WebCore::HTMLElementStack::pushCommon):
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::parseMappedAttribute):
        (WebCore::HTMLEmbedElement::attach):

2010-08-24  Sam Weinig  <sam@webkit.org>

        Reviewed by Simon Fraser.

        Improve comment for Simon.

        * editing/Editor.h:

2010-08-24  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver Hunt.

        Paste event fires twice for mac WebKit
        <rdar://problem/8094611>
        https://bugs.webkit.org/show_bug.cgi?id=44535

        The mac implementation of paste in WebKit was accidentally calling 
        Editor::tryDHTMLPaste twice, once in -[WebHTMLView paste:] and once
        in Editor::pasteAsPlainText (which is called by -[WebHTMLView paste:]).
        Use the new pasteAsPlainTextBypassingDHTML function to bypass the
        second call.

        Test: editing/pasteboard/paste-event-only-once.html

        * WebCore.exp.in:
        * editing/Editor.cpp:
        (WebCore::Editor::pasteAsPlainTextBypassingDHTML): 
        * editing/Editor.h:
        Expose a function which just pastes using from the general pasteboard,
        bypassing all the checking and DHTML pasting.

2010-08-24  Nate Chapin  <japhet@chromium.org>

        Unreviewed.

        Chromium build fix (add a #include missing in PingLoader.cpp)

        * loader/PingLoader.cpp:

2010-08-24  Nate Chapin  <japhet@chromium.org>

        Reviewed by David Levin.

        Allow image loads triggered from unload handlers to run entirely
        independently of any other loads or navigations.

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

        Test: http/tests/navigation/image-load-in-unload-handler.html

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/DocLoader.cpp:
        (WebCore::DocLoader::requestImage): Use PingLoader for image
            loads in unload handlers.
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::pageDismissalEventBeingDispatched):
        * loader/PingLoader.cpp: Added.
        (WebCore::PingLoader::loadImage): Set the appropriate
            headers for an image load in unload handler (since we're
            not using SubresourceLoader, we need to do this manually here).
        (WebCore::PingLoader::PingLoader):
        * loader/PingLoader.h: Added.
        (WebCore::PingLoader::~PingLoader):
        (WebCore::PingLoader::didReceiveResponse):
        (WebCore::PingLoader::didReceiveData):
        (WebCore::PingLoader::didFinishLoading):
        (WebCore::PingLoader::didFail):

2010-08-24  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Trace to the style that contributes to
        the computed styles panel.
        https://bugs.webkit.org/show_bug.cgi?id=44448

        Test: inspector/styles-computed-trace.html

        * English.lproj/localizedStrings.js:
        * inspector/front-end/Section.js:
        (WebInspector.Section.prototype.set subtitle):
        (WebInspector.Section.prototype.get subtitleAsTextForTest):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype._refreshUpdate):
        (WebInspector.StylesSidebarPane.prototype._rebuildUpdate):
        (WebInspector.StylesSidebarPane.prototype._rebuildStyleRules):
        (WebInspector.StylesSidebarPane.prototype._refreshSectionsForStyleRules):
        (WebInspector.StylesSidebarPane.prototype._rebuildSectionsForStyleRules):
        (WebInspector.StylePropertiesSection.linkifyUncopyable):
        (WebInspector.StylePropertiesSection):
        (WebInspector.StylePropertiesSection.prototype.isPropertyInherited):
        (WebInspector.StylePropertiesSection.prototype.isPropertyOverloaded):
        (WebInspector.StylePropertiesSection.prototype.isPropertyDisabled):
        (WebInspector.StylePropertiesSection.prototype.update):
        (WebInspector.StylePropertiesSection.prototype.onpopulate):
        (WebInspector.ComputedStylePropertiesSection):
        (WebInspector.ComputedStylePropertiesSection.prototype.collapse):
        (WebInspector.ComputedStylePropertiesSection.prototype._isPropertyInherited):
        (WebInspector.ComputedStylePropertiesSection.prototype.update):
        (WebInspector.ComputedStylePropertiesSection.prototype.onpopulate):
        (WebInspector.ComputedStylePropertiesSection.prototype.rebuildComputedTrace):
        (WebInspector.BlankStylePropertiesSection):
        * inspector/front-end/inspector.css:
        (.styles-section a::before):
        * inspector/front-end/inspector.js:
        (WebInspector.documentClick.followLink):
        (WebInspector.documentClick):
        (WebInspector.linkifyResourceAsNode):

2010-08-24  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by Eric Seidel.

        [chromium] Generate drag images for HTML elements and selections.
        https://bugs.webkit.org/show_bug.cgi?id=43449

        We weren't properly generating drag images if an HTML element was set
        as the drag feedback image. I also implemented dragImageForSelection
        while I was working on this part of the code.

        No new tests.

        * WebCore.exp.in:
        * bindings/objc/DOM.mm:
        (-[DOMNode renderedImage]):
        * page/Frame.h:
        * page/brew/FrameBrew.cpp:
        (WebCore::Frame::nodeImage):
        * page/chromium/FrameChromium.cpp:
        (WebCore::):
        (WebCore::Frame::nodeImage):
        (WebCore::Frame::dragImageForSelection):
        * page/efl/FrameEfl.cpp:
        (WebCore::Frame::nodeImage):
        * page/gtk/FrameGtk.cpp:
        (WebCore::Frame::nodeImage):
        * page/haiku/FrameHaiku.cpp:
        (WebCore::Frame::nodeImage):
        * page/mac/FrameMac.mm:
        (WebCore::Frame::nodeImage):
        (WebCore::Frame::dragImageForSelection):
        * page/qt/FrameQt.cpp:
        (WebCore::Frame::nodeImage):
        (WebCore::Frame::dragImageForSelection):
        * page/win/FrameCGWin.cpp:
        (WebCore::Frame::nodeImage):
        * page/win/FrameCairoWin.cpp:
        (WebCore::Frame::nodeImage):
        * page/wince/FrameWince.cpp:
        (WebCore::Frame::nodeImage):
        * page/wx/FrameWx.cpp:
        (WebCore::Frame::nodeImage):
        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::ClipboardChromium::createDragImage):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::selectionForegroundColor):

2010-08-24  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Steve Block.

        IndexedDB needs to manually delete all objectStore data and indexes
        https://bugs.webkit.org/show_bug.cgi?id=44522

        Apparently it's only newer versions of SQLite that handle cascade
        delete.  The rest silently fail.  So do it manually.

        Test: storage/indexeddb/objectstore-removeobjectstore.html

        * storage/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::createObjectStore):
        (WebCore::doDelete):
        (WebCore::IDBDatabaseBackendImpl::removeObjectStore):
        * storage/IDBDatabaseBackendImpl.h:
        * storage/IDBFactoryBackendImpl.cpp:
        (WebCore::createTables):
        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::removeIndex):
        * storage/IDBObjectStoreBackendImpl.h:
        (WebCore::IDBObjectStoreBackendImpl::create):
        (WebCore::IDBObjectStoreBackendImpl::id):

2010-08-23  Sam Weinig  <sam@webkit.org>

        Reviewed by Adam Barth.

        Fix for <rdar://problem/8153271> and <rdar://problem/8153288> 
        Change behavior of javascript: urls in <embed> and <object> back to 
        how they behaved before r50698.

        Tests: fast/loader/javascript-url-in-embed.html
               fast/loader/javascript-url-in-object.html

        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::requestFrame):
        (WebCore::SubframeLoader::requestObject):
        (WebCore::SubframeLoader::loadOrRedirectSubframe):
        * loader/SubframeLoader.h:

2010-08-24  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Update code to compile with latest GTK+ 3.x.

        * platform/gtk/gtk2drawing.c:
        (TSOffsetStyleGCs):
        (moz_gtk_entry_paint):
        * plugins/gtk/gtk2xtbin.c:
        (gtk_xtbin_new):

2010-08-24  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        -webkit-svg-shadow doesn't repaint on changes
        https://bugs.webkit.org/show_bug.cgi?id=44521

        Trivial fix, to make -webkit-svg-shadow react on changes.

        Test: svg/css/shadow-changes.svg

        * rendering/style/SVGRenderStyle.cpp:
        (WebCore::SVGRenderStyle::diff): If 'svgShadow' is not equal, cause a repaint.

2010-08-24  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Cg logs "<Error>: CGPathCloseSubpath: no current point. " in lots of tests
        https://bugs.webkit.org/show_bug.cgi?id=43026

        Check if the path is empty before closing it.

        * svg/SVGPathBuilder.cpp:
        (WebCore::SVGPathBuilder::moveTo):

2010-08-24  Marcus Bulach  <bulach@chromium.org>

        Reviewed by Jeremy Orlow.

        Hooks IDBKeyPath with IDBObjectStorage::put.
        https://bugs.webkit.org/show_bug.cgi?id=44275

        Adds a mechanism to extract an IDBKey from SerializedScriptValue using IDBKeyPath
        during IDBObjectStorage::put.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * platform/chromium/ChromiumBridge.h:
        * storage/IDBKeyPathBackendImpl.cpp: Added.
        (IDBKeyPathBackendImpl::createIDBKeysFromSerializedValuesAndKeyPath):
        * storage/IDBKeyPathBackendImpl.h: Added.
        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::put):
        * storage/chromium/IDBKeyPathBackendImpl.cpp: Added.
        (WebCore::IDBKeyPathBackendImpl::createIDBKeysFromSerializedValuesAndKeyPath):

2010-08-24  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        WebInspector: RemoteInspectorFrontend can be renamed to InspectorFrontend.
        The old version of InspectorFrontend was removed some time ago and now
        it is possible to rename the new version of inspector frontend class to its
        original name.
        https://bugs.webkit.org/show_bug.cgi?id=44499

        * GNUmakefile.am:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.pri:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/CodeGeneratorInspector.pm:
        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::addToFrontend):
        (WebCore::ConsoleMessage::updateRepeatCountInConsole):
        * inspector/ConsoleMessage.h:
        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::pushNodePathToFrontend):
        (WebCore::InjectedScriptHost::frontend):
        * inspector/InjectedScriptHost.h:
        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::InspectorApplicationCacheAgent):
        * inspector/InspectorApplicationCacheAgent.h:
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::dispatchOnInjectedScript):
        (WebCore::InspectorBackend::frontend):
        * inspector/InspectorBackend.h:
        * inspector/InspectorCSSStore.cpp:
        * inspector/InspectorCSSStore.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::inspectedPageDestroyed):
        (WebCore::InspectorController::inspect):
        (WebCore::InspectorController::focusNode):
        (WebCore::InspectorController::windowVisible):
        (WebCore::InspectorController::addConsoleMessage):
        (WebCore::InspectorController::clearConsoleMessages):
        (WebCore::InspectorController::inspectedWindowScriptObjectCleared):
        (WebCore::InspectorController::setSearchingForNode):
        (WebCore::InspectorController::setMonitoringXHR):
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::show):
        (WebCore::InspectorController::showPanel):
        (WebCore::InspectorController::close):
        (WebCore::InspectorController::disconnectFrontend):
        (WebCore::InspectorController::populateScriptObjects):
        (WebCore::InspectorController::pruneResources):
        (WebCore::InspectorController::didCommitLoad):
        (WebCore::InspectorController::didLoadResourceFromMemoryCache):
        (WebCore::InspectorController::identifierForInitialRequest):
        (WebCore::InspectorController::mainResourceFiredDOMContentEvent):
        (WebCore::InspectorController::mainResourceFiredLoadEvent):
        (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::startTimelineProfiler):
        (WebCore::InspectorController::stopTimelineProfiler):
        (WebCore::InspectorController::postWorkerNotificationToFrontend):
        (WebCore::InspectorController::didCreateWorker):
        (WebCore::InspectorController::didDestroyWorker):
        (WebCore::InspectorController::selectDatabase):
        (WebCore::InspectorController::didOpenDatabase):
        (WebCore::InspectorController::didUseDOMStorage):
        (WebCore::InspectorController::selectDOMStorage):
        (WebCore::InspectorController::enableDebuggerFromFrontend):
        (WebCore::InspectorController::enableDebugger):
        (WebCore::InspectorController::disableDebugger):
        (WebCore::InspectorController::evaluateForTestInFrontend):
        * inspector/InspectorController.h:
        (WebCore::InspectorController::hasFrontend):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        * inspector/InspectorDOMAgent.h:
        (WebCore::InspectorDOMAgent::create):
        * inspector/InspectorDOMStorageResource.cpp:
        (WebCore::InspectorDOMStorageResource::bind):
        * inspector/InspectorDOMStorageResource.h:
        * inspector/InspectorDatabaseResource.cpp:
        (WebCore::InspectorDatabaseResource::bind):
        * inspector/InspectorDatabaseResource.h:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::create):
        (WebCore::InspectorDebuggerAgent::InspectorDebuggerAgent):
        (WebCore::InspectorDebuggerAgent::setPauseOnExceptionsState):
        (WebCore::InspectorDebuggerAgent::didParseSource):
        (WebCore::InspectorDebuggerAgent::failedToParseSource):
        (WebCore::InspectorDebuggerAgent::didPause):
        (WebCore::InspectorDebuggerAgent::didContinue):
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorProfilerAgent.cpp:
        (WebCore::InspectorProfilerAgent::InspectorProfilerAgent):
        (WebCore::InspectorProfilerAgent::addProfile):
        (WebCore::InspectorProfilerAgent::disable):
        (WebCore::InspectorProfilerAgent::enable):
        (WebCore::InspectorProfilerAgent::resetState):
        (WebCore::InspectorProfilerAgent::toggleRecordButton):
        * inspector/InspectorProfilerAgent.h:
        (WebCore::InspectorProfilerAgent::setFrontend):
        * inspector/InspectorResource.cpp:
        (WebCore::InspectorResource::updateScriptObject):
        (WebCore::InspectorResource::releaseScriptObject):
        * inspector/InspectorResource.h:
        * inspector/InspectorStorageAgent.cpp:
        (WebCore::InspectorStorageAgent::InspectorStorageAgent):
        * inspector/InspectorStorageAgent.h:
        (WebCore::InspectorStorageAgent::create):
        (WebCore::InspectorStorageAgent::frontend):
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::InspectorTimelineAgent):
        (WebCore::InspectorTimelineAgent::resetFrontendProxyObject):
        * inspector/InspectorTimelineAgent.h:

2010-08-24  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Markers don't render, when applied to a target using vector-effect="non-scaling-stroke"
        https://bugs.webkit.org/show_bug.cgi?id=44511

        Make fillAndStrokePath a member function of RenderPath, to avoid having to pass the const Path& and this paramters.
        Don't leave the GraphicsContext mutated after applying non-scaling-stroke transformation, otherwhise markers will be renderer
        in the wrong coordinate space, and thus don't show up anymore.

        Test: svg/custom/non-scaling-stroke-markers.svg

        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::fillAndStrokePath):
        (WebCore::RenderPath::paint):
        * rendering/RenderPath.h:

2010-08-24  Adam Barth  <abarth@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        Remove wrong code from Qt that's dumping extra markup into the clipboard
        https://bugs.webkit.org/show_bug.cgi?id=44506

        I have no way of testing this patch, but hopefully it should fix a
        bunch of newly failing tests.  This code seems very confused.

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

2010-08-24  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: fix gcc warnings introduced in 65731
        https://bugs.webkit.org/show_bug.cgi?id=44468

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::didInsertDOMNode):
        (WebCore::InspectorDOMAgent::pauseOnBreakpoint):

2010-08-24  Ariya Hidayat  <ariya@sencha.com>

        Reviewed by Simon Hausmann.

        [Qt] Blur shadow for rectangle fill
        https://bugs.webkit.org/show_bug.cgi?id=44488

        Refactor fillRect() function to support blur radius in the shadow.

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

2010-08-24  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze

        clip-path does not work inside mask element
        https://bugs.webkit.org/show_bug.cgi?id=41428

        Add new tests covering nesting of clippers and maskers, with different unitTypes for the content coordinate system.
        Scale all ImageBuffer content to take into account that ImageBuffers use integer based sizes, where the content
        is floating-point sized. This compensates rounded errors, when scaling the document.

        Tests: svg/clip-path/clip-in-mask-objectBoundingBox.svg
               svg/clip-path/clip-in-mask-userSpaceOnUse.svg
               svg/clip-path/clip-in-mask.svg
               svg/clip-path/deep-nested-clip-in-mask-different-unitTypes.svg
               svg/clip-path/deep-nested-clip-in-mask-panning.svg
               svg/clip-path/deep-nested-clip-in-mask.svg
               svg/clip-path/nested-clip-in-mask-image-based-clipping.svg
               svg/clip-path/nested-clip-in-mask-path-and-image-based-clipping.svg
               svg/clip-path/nested-clip-in-mask-path-based-clipping.svg

        * rendering/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::applyResource): Return the value of applyClippingToContext, instead of always true.
        (WebCore::RenderSVGResourceClipper::applyClippingToContext): Moved some code from createClipData, to avoid having to pass 5 arguments to createClipData.
        (WebCore::RenderSVGResourceClipper::drawContentIntoMaskImage): Renamed from createClipData.
        * rendering/RenderSVGResourceClipper.h:
        * rendering/RenderSVGResourceGradient.cpp:
        (WebCore::createMaskAndSwapContextForTextGradient): Pass absoluteTargetRect to createImageBuffer.
        (WebCore::clipToTextMask): Ditto.
        * rendering/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::applyResource): Ditto.
        (WebCore::RenderSVGResourceMasker::drawContentIntoMaskImage): Pass content transformation to renderSubtreeToImageBuffer, to support nesting objectBoundingBox resources.
        * rendering/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::applyResource): Adapt to calculateTransformationToOutermostSVGCoordinateSystem changes. AffineTransform is now passed as reference.
        (WebCore::RenderSVGResourcePattern::createTileImage): ImageBuffer content scaling is now handled by createImageBuffer.
        * rendering/SVGImageBufferTools.cpp:
        (WebCore::SVGImageBufferTools::calculateTransformationToOutermostSVGCoordinateSystem): Renamed. Don't return an AffineTransform copy, but instead pass it as reference.
        (WebCore::SVGImageBufferTools::createImageBuffer): Always scale the ImageBuffer content, to compensate rounding effects (code was only present in patterns so far).
                                                           Now also needs the 'absoluteTargetRect' parameter, not only 'clampedAbsoluteTargetRect'.
        (WebCore::SVGImageBufferTools::renderSubtreeToImageBuffer): Moved from SVGRenderSupport.
        (WebCore::SVGImageBufferTools::clipToImageBuffer): Pass ImageBuffer as OwnPtr reference, to allow to clear it under certain circumstances (see comment).
        (WebCore::SVGImageBufferTools::clampedAbsoluteTargetRectForRenderer): Remove AffineTransform parameter, absoluteTargetRect is calculated before passing into this function.
        * rendering/SVGImageBufferTools.h:
        * rendering/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::prepareToRenderSVGContent): Important change, respect the RenderSVGResourceClipper::applyResource() return value!
        * rendering/SVGRenderSupport.h:
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::build): renderSubtreeToImage now lives in SVGImageBufferTools, adapt code.

2010-08-24  Andrei Popescu  <andreip@dhcp-172-16-14-12.lon.corp.google.com>

        Reviewed by Jeremy Orlow.

        [IndexedDB] IDBTransaction is missing the implementation for objectStore method
        https://bugs.webkit.org/show_bug.cgi?id=44446

        * storage/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::transaction):
        * storage/IDBTransactionBackendImpl.cpp:
        (WebCore::IDBTransactionBackendImpl::create):
        (WebCore::IDBTransactionBackendImpl::IDBTransactionBackendImpl):
        (WebCore::IDBTransactionBackendImpl::objectStore):
        * storage/IDBTransactionBackendImpl.h:
        * storage/IDBTransactionCoordinator.cpp:
        (WebCore::IDBTransactionCoordinator::createTransaction):
        * storage/IDBTransactionCoordinator.h:

2010-08-24  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Tor Arne Vestbø.

        Disallow setting Document.xmlVersion to unsupported versions
        https://bugs.webkit.org/show_bug.cgi?id=44494

        Added XMLDocumentParser::supportsXMLVersion() - only returns true for "1.0"
        in both implementations.

        * dom/Document.cpp:
        (WebCore::Document::setXMLVersion): Throw NOT_SUPPORTED_ERR
        if XMLDocumentParser::supportsXMLVersion() returns false for the version.
        * dom/XMLDocumentParser.h:
        * dom/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::supportsXMLVersion):
        * dom/XMLDocumentParserQt.cpp:
        (WebCore::XMLDocumentParser::supportsXMLVersion):

2010-08-24  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt][Symbian] Make sure WebKit headers are included before platform headers on Symbian
        https://bugs.webkit.org/show_bug.cgi?id=31273

        On Symbian PREPEND_INCLUDEPATH is the best way to make sure that
        WebKit headers are included before platform headers. On all other
        platforms continue to use INCLUDEPATH (as before).

        This patch also removed the workarounds that are put in place 
        now that we have a better solution.

        No new tests as there is no new functionality.

        * WebCore.pro:

2010-08-24  Ariya Hidayat  <ariya@sencha.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Support text-shadow blur
        https://bugs.webkit.org/show_bug.cgi?id=19728

        Implement blur for text shadow using the shadow layer in r65782.

        * platform/graphics/qt/ContextShadow.cpp:
        (WebCore::ContextShadow::beginShadowLayer):
        * platform/graphics/qt/FontQt.cpp:
        (WebCore::drawTextCommon):

2010-08-23  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Tor Arne Vestbø.

        setAttributeNS() should throw NAMESPACE_ERR for prefixed qualifiedName with null namespace
        https://bugs.webkit.org/show_bug.cgi?id=44432

        Test: fast/dom/setAttributeNS-prefix-and-null-namespace.html

        * dom/Element.cpp:
        (WebCore::Element::setAttributeNS): Throw NAMESPACE_ERR if namespace is null
        and the qualifiedName has a prefix.

2010-08-24  Adam Barth  <abarth@webkit.org>

        Build fix.  leakPtr doesn't exist, contrary to my dreams.

        * storage/IDBKeyTree.h:
        (WebCore::::put):
        * storage/IDBPendingTransactionMonitor.cpp:
        (WebCore::IDBPendingTransactionMonitor::addPendingTransaction):

2010-08-24  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Deploy adoptPtr in WebCore/storage
        https://bugs.webkit.org/show_bug.cgi?id=44491

        There are still some naked news for a future patch.  The next step is
        to make create methods.

        * storage/Database.cpp:
        (WebCore::DatabaseCreationCallbackTask::create):
        (WebCore::DerefContextTask::create):
        (WebCore::DeliverPendingCallbackTask::create):
        * storage/DatabaseSync.cpp:
        (WebCore::CloseSyncDatabaseOnContextThreadTask::create):
        * storage/DatabaseTask.h:
        (WebCore::Database::DatabaseOpenTask::create):
        (WebCore::Database::DatabaseCloseTask::create):
        (WebCore::Database::DatabaseTransactionTask::create):
        (WebCore::Database::DatabaseTableNamesTask::create):
        * storage/DatabaseThread.cpp:
        (WebCore::DatabaseThread::DatabaseThread):
        * storage/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::populateOrigins):
        (WebCore::DatabaseTracker::addOpenDatabase):
        * storage/IDBKeyTree.h:
        (WebCore::::put):
        * storage/IDBPendingTransactionMonitor.cpp:
        (WebCore::IDBPendingTransactionMonitor::addPendingTransaction):
        * storage/LocalStorageTask.h:
        (WebCore::LocalStorageTask::createImport):
        (WebCore::LocalStorageTask::createSync):
        (WebCore::LocalStorageTask::createDeleteEmptyDatabase):
        (WebCore::LocalStorageTask::createTerminate):
        * storage/LocalStorageThread.cpp:
        (WebCore::LocalStorageThread::create):
        * storage/SQLTransaction.cpp:
        (WebCore::SQLTransaction::openTransactionAndPreflight):
        * storage/SQLTransactionSync.cpp:
        (WebCore::SQLTransactionSync::SQLTransactionSync):
        (WebCore::SQLTransactionSync::begin):
        * storage/StorageNamespaceImpl.cpp:
        (WebCore::StorageNamespaceImpl::copy):

2010-08-24  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        WebInspector: setAttachedWindow was modified at r65809 but it should be implemented another way.
        https://bugs.webkit.org/show_bug.cgi?id=44493

        * inspector/Inspector.idl:
        * inspector/InspectorController.cpp:
        * inspector/InspectorController.h:
        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::setAttachedWindow):

2010-08-23  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Use new HTML5 TreeBuilder for fragment parsing
        https://bugs.webkit.org/show_bug.cgi?id=44475

        The HTML5 TreeBuilder is ready to be used for all parsing
        including fragments!  This is the last change to move trunk
        off of the LegacyHTMLTreeBuilder.  We'll go through and
        delete the thousands of lines of code supporting the old
        parser in a separate patch.

        This is covered by many layout tests.

        * html/HTMLTreeBuilder.cpp:

2010-08-23  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        HTMLScriptRunner::create
        https://bugs.webkit.org/show_bug.cgi?id=44474

        * html/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::HTMLDocumentParser):
        * html/HTMLScriptRunner.h:
        (WebCore::HTMLScriptRunner::create):

2010-08-23  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        HTMLTreeBuilder should use adoptPtr
        https://bugs.webkit.org/show_bug.cgi?id=44473

        We should really use this pattern everywhere.

        * html/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::HTMLDocumentParser):
        * html/HTMLTreeBuilder.h:
        (WebCore::HTMLTreeBuilder::create):

2010-08-23  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Adam Roben.

        Set the ResourceResponse HTTP headers in RessourceHandleWin
        https://bugs.webkit.org/show_bug.cgi?id=44444

        * platform/network/win/ResourceHandleWin.cpp:
        (WebCore::queryHTTPHeader):
        (WebCore::ResourceHandle::onRequestComplete):

2010-08-23  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Adam Roben.

        Support all available biBitCount values in BitmapInfo
        https://bugs.webkit.org/show_bug.cgi?id=43724

        Add an enum with all possible values for biBitCount.
        Also remove explicit initialization of bmiHeader members,
        because that is already done in the constructor.

        * platform/win/BitmapInfo.cpp: Added property svn:eol-style.
        (WebCore::bitmapInfoForSize):
        (WebCore::BitmapInfo::create):
        (WebCore::BitmapInfo::createBottomUp):
        * platform/win/BitmapInfo.h: Added property svn:eol-style.
        (WebCore::BitmapInfo::):
        (WebCore::BitmapInfo::bytesPerLine):
        (WebCore::BitmapInfo::paddedBytesPerLine):
        (WebCore::BitmapInfo::paddedWidth):
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenuWin::paint):

2010-08-23  Kent Tamura  <tkent@chromium.org>

        Unreviewed, build fix for r65852.

        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::createSubtreeIfNeeded):
        * rendering/TextControlInnerElements.cpp:
        (WebCore::InputFieldSpeechButtonElement::InputFieldSpeechButtonElement):
        (WebCore::InputFieldSpeechButtonElement::create):
        * rendering/TextControlInnerElements.h:

2010-08-23  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        MarkupAccumulator::appendStartMarkup should be broken down into pieces
        https://bugs.webkit.org/show_bug.cgi?id=44288

        Extracted appendText, appendComment, appendProcessingInstruction, appendElement and appendCDATASection.
        Also simplified the conditionals in appendText.

        No new tests are added since this is a cleanup.

        * editing/markup.cpp:
        (WebCore::MarkupAccumulator::appendText):
        (WebCore::MarkupAccumulator::appendComment):
        (WebCore::MarkupAccumulator::appendProcessingInstruction):
        (WebCore::MarkupAccumulator::appendElement):
        (WebCore::MarkupAccumulator::appendCDATASection):
        (WebCore::MarkupAccumulator::appendStartMarkup):

2010-08-23  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Alexey Proskuryakov.

        TreeWalker is not calling acceptNode function in filter object
        https://bugs.webkit.org/show_bug.cgi?id=35296
        
        Fix incorrect shadowing of the 'function' variable, which could result
        in badness when asking for arguments.callee.

        * bindings/js/JSNodeFilterCondition.cpp:
        (WebCore::JSNodeFilterCondition::acceptNode):

2010-08-23  Darin Adler  <darin@apple.com>

        Reviewed by Geoff Garen.

        Changed type of Node::parentNode to ContainerNode so we don't have to cast,
        since parent are all containers.

        * css/CSSStyleSelector.h: Changed m_parentNode to ContainerNode*.

        * dom/Document.h: Fixed the type of TreeShared in the Node constructor.
        Yes, it's here.

        * dom/Node.cpp:
        (WebCore::Node::eventParentNode): Removed now-unneeded typecast dance.
        (WebCore::eventTargetAsSVGElementInstance):Changed type to ContainerNode*.

        * dom/Node.h: Made Node inherit from TreeShared<ContainerNode> instead of
        from TreeShared<Node>. Removed bogus comment. Changed return type of parentNode
        and shadowParentNode functions to ContainerNode*. Fixed using to use
        TreeShared<ContainerNode>.

        * dom/Position.h: Include ContainerNode.h instead of Node.h.

        * html/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::findFosterSite): Removed now-unneeded typecast.

        * rendering/MediaControlElements.h:
        * rendering/SVGShadowTreeElements.h:
        * rendering/TextControlInnerElements.h:
        Changed return type of shadowParentNode functions to ContainerNode.

        * rendering/RenderMeter.cpp:
        (WebCore::RenderMeter::updatePartsState): Cast the node to HTMLElement* before
        passing it to the function that creates the shadow element. We know the node is
        a HTMLMeterElement, but the node function doesn't know that.
        * rendering/RenderProgress.cpp:
        (WebCore::RenderProgress::updatePartsState): Ditto.
        * rendering/RenderSlider.cpp:
        (WebCore::SliderThumbElement::SliderThumbElement): More of the same.
        (WebCore::SliderThumbElement::create): Ditto.
        (WebCore::RenderSlider::updateFromElement): Ditto.
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::createSubtreeIfNeeded): Ditto.
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::createSubtreeIfNeeded): Ditto.
        * rendering/SVGShadowTreeElements.cpp:
        (WebCore::SVGShadowTreeRootElement::SVGShadowTreeRootElement): Ditto.
        (WebCore::SVGShadowTreeRootElement::shadowParentNode): Ditto.
        * rendering/ShadowElement.cpp:
        (WebCore::ShadowBlockElement::create): Ditto.
        (WebCore::ShadowBlockElement::ShadowBlockElement): Ditto.
        (WebCore::ShadowBlockElement::createForPart): Ditto.
        (WebCore::ShadowInputElement::create): Ditto.
        (WebCore::ShadowInputElement::ShadowInputElement): Ditto.
        * rendering/ShadowElement.h:
        (WebCore::ShadowElement::ShadowElement): Ditto.
        (WebCore::ShadowElement::shadowParent): Ditto.
        (WebCore::ShadowElement::shadowParentNode): Ditto.
        * rendering/TextControlInnerElements.cpp:
        (WebCore::TextControlInnerElement::TextControlInnerElement): Ditto.
        (WebCore::TextControlInnerElement::create): Ditto.
        (WebCore::TextControlInnerTextElement::TextControlInnerTextElement): Ditto.
        (WebCore::TextControlInnerTextElement::create): Ditto.
        (WebCore::SpinButtonElement::SpinButtonElement): Ditto.
        (WebCore::SpinButtonElement::create): Ditto.

        * svg/SVGElement.cpp:
        (WebCore::SVGElement::eventParentNode): Removed now-unneeded typecast.

        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::title): Changed type to ContainerNode*.

2010-08-23  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] The Mozilla theme drawing code incorrectly renders scrollbar backgrounds
        https://bugs.webkit.org/show_bug.cgi?id=44388

        No new tests as this functionality is currently unused. When the
        the new scrollbar theme code lands for GTK+, this will be tested
        by scrollbar pixel tests.

        * platform/gtk/gtk2drawing.c: Expose a method to paint scrolled window
        backgrounds and disable incorrect rendering of scrollbar trough backgrounds.
        (moz_gtk_scrolled_window_paint): Added.
        (moz_gtk_scrollbar_trough_paint): Disable incorrect background render.
        * platform/gtk/gtkdrawing.h: Add scrolled window widget type in the enum.

2010-08-23  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] The Mozilla theme drawing API should expose extra information about scrollbar geometry
        https://bugs.webkit.org/show_bug.cgi?id=44385

        Expose the trough_under_steppers property in MozGtkScrollbarMetrics.

        No new tests as this does not change functionality.

        * platform/gtk/gtk2drawing.c: Set the trough_under_steppers member when accessing theme data.
        * platform/gtk/gtkdrawing.h: Add the trough_under_steppers member.

2010-08-23  Darin Adler  <darin@apple.com>

        Reviewed by Geoff Garen.

        Parser DOM tree manipulation functions do not need to be virtual.

        * dom/ContainerNode.h: Made parserAddChild, parserRemoveChild, and
        parserInsertBefore non-virtual.

        * dom/Node.cpp: Removed the parserAddChild, parserRemoveChild, and
        parserInsertBefore functions, which should never have been in the Node class.
        * dom/Node.h: Ditto.

        * html/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::attach): Changed argument type to ContainerNode*
        because we never need to attach a child to a non-container node.
        (WebCore::HTMLConstructionSite::findFosterSite): Cast the result of the parent
        function to ContainerNode*. A parent is always guaranteed to be a container, but
        the parent function returns a Node* so that callers can use it without including
        ContainerNode's header. That seems like something we can easily fix later.

        * html/HTMLConstructionSite.h: Changed AttachmentSite::parent and the
        attach function to ContainerNode* instead of Node*.

2010-08-23  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        editing/pasteboard/bad-placeholder.html fails with --html5-treebuilder
        https://bugs.webkit.org/show_bug.cgi?id=44463

        The problem here is that using the documentElement as the context puts
        the tree builder into the BeforeHead insertion mode, which strips
        leading spaces.  This code is confused about what it wants, but it
        certainly doesn't want to be in that insertion mode.  Looking through
        the callers, they'd much rather be in the InBody insertion mode.  We
        can get them there by creating a fake body element as the context
        element.

        In the long term, all this code needs to be changed to move away from
        deprecatedCreateContextualFragment, which does a bunch of nasty stuff
        like removing certain kinds of elements.  However, that's a battle for
        another day.

        * editing/markup.cpp:
        (WebCore::createFragmentFromMarkup):

2010-08-23  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        fast/xsl/default-html.html fails with HTML5 fragment parsing
        https://bugs.webkit.org/show_bug.cgi?id=44450

        This patch is a step down a trail of tears.  As far as I can tell,
        there's no spec for XSLTProcessor.transformToFragment.  This patch
        attempts to infer the proper behavior from test cases and the Mozilla
        wiki.

        * xml/XSLTProcessor.cpp:
        (WebCore::createFragmentFromSource):

2010-08-23  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        editing/pasteboard/paste-visible-script.html is broken with --html5-treebuilder
        https://bugs.webkit.org/show_bug.cgi?id=44457

        Turns out there are two more checks we need for fragment scripting
        permission.  Not the most beautiful design, but it seems work.

        * html/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::insertScriptElement):
        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processEndTag):

2010-08-23  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        fast/dom/script-innerHTML-x.xhtml fails when run with the HTML5 TreeBuilder in fragment mode
        https://bugs.webkit.org/show_bug.cgi?id=44447

        This special handling for script/style used to exist in
        setInnerHTML.  HTML5 moves this logic into the HTML and XML
        parsers instead of in setInnerHTML.

        In order to share this logic between WebKit's two XML parsers
        I had to clean up a bit of the libxml2 parser and add a
        new appendFragmentSource method.

        Covered by fast/dom/script-innerHTML-x.xhtml.

        * dom/XMLDocumentParser.cpp:
        (WebCore::XMLDocumentParser::end):
         - Now that libxml2 is calling finish() for fragments (Qt already was)
           I went through and removed this unneeded style update after fragment parsing.
        (WebCore::XMLDocumentParser::parseDocumentFragment):
         - Yay for shared code!
         - This is where I added the style/script hack moved from setInnerHTML.
        * dom/XMLDocumentParser.h:
         - Fix indent.
        * dom/XMLDocumentParserLibxml2.cpp:
         - Removed parseDocumentFragment and moved necessary libxml-specific
           logic into appendFragmentSource.
        (WebCore::XMLDocumentParser::appendFragmentSource):
        * dom/XMLDocumentParserQt.cpp:
        (WebCore::XMLDocumentParser::appendFragmentSource):

2010-08-23  Kenneth Russell  <kbr@google.com>

        Reviewed by Dimitri Glazkov.

        Remove references to ArrayBuffer and ArrayBufferView from GraphicsContext3D
        https://bugs.webkit.org/show_bug.cgi?id=44455

        Updated Safari, Qt and Chromium WebGL ports to avoid referencing
        ArrayBuffer and ArrayBufferView types from GraphicsContext3D.

        Ran all WebGL layout tests; no new regressions. Built and tested
        WebKit on Mac OS X; built Chromium on Mac OS X and Linux.

        * html/canvas/WebGLBuffer.cpp:
        * html/canvas/WebGLBuffer.h:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::bufferData):
        (WebCore::WebGLRenderingContext::bufferSubData):
        (WebCore::WebGLRenderingContext::texImage2D):
        (WebCore::WebGLRenderingContext::texSubImage2D):
        (WebCore::WebGLRenderingContext::simulateVertexAttrib0):
        * platform/graphics/GraphicsContext3D.cpp:
        (WebCore::GraphicsContext3D::extractTextureData):
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/chromium/GLES2Canvas.cpp:
        (WebCore::GLES2Canvas::getQuadVertices):
        * platform/graphics/mac/GraphicsContext3DMac.mm:
        (WebCore::GraphicsContext3D::bufferData):
        (WebCore::GraphicsContext3D::bufferSubData):
        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3D::bufferData):
        (WebCore::GraphicsContext3D::bufferSubData):

2010-08-20  Stephen White  <senorblanco@chromium.org>

        Reviewed by Kenneth Russell.

        [CHROMIUM] Fix some failing layout tests w/ACCELERATED_2D_CANVAS
        https://bugs.webkit.org/show_bug.cgi?id=44346

        LayoutTests/fast/canvas/canvas-incremental-repaint.html (top middle
        pane).
        Failing because we were not applying the CTM in clearRect().  Now using
        the fast path when the CTM is identity, and a fillRect() for the rest.
        LayoutTests/fast/canvas/canvas-strokeRect.html
        LayoutTests/fast/canvas/shadow-offset-[1-7].html
        Failing because we weren't switching to the software path when a 
        shadow is present.
        Also refactor the two versions of fillRect(), and use TRIANGLE_STRIP
        strip instead of TRIANGLES, which lets us get rid of the element array
        and use drawArrays() instead of drawElements().

        Covered by the above layout tests.

        * platform/graphics/chromium/GLES2Canvas.cpp:
        (WebCore::GLES2Canvas::GLES2Canvas):
        (WebCore::GLES2Canvas::~GLES2Canvas):
        Remove m_quadIndices (now unused).
        (WebCore::GLES2Canvas::clearRect):
        Use a glClear() fast path for the identity-CTM clear, and fillRect()
        for the rest.
        (WebCore::GLES2Canvas::fillRect):
        Refactor the two versions of fillRect().
        (WebCore::GLES2Canvas::drawTexturedRect):
        (WebCore::GLES2Canvas::drawTexturedRectTile):
        Get rid of the ELEMENT_ARRAY_BUFFER bind.  Use drawArrays() instead of
        drawElements().
        (WebCore::GLES2Canvas::getQuadVertices):
        Re-order the vertices so they form a triangle strip.
        * platform/graphics/chromium/GLES2Canvas.h:
        Remove m_quadIndices (now unused).
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::fillRect):
        Check for a draw looper (shadow), and drop to the software path.

2010-08-23  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Adam Roben.

        Move filehandling into fileLoadTimer callback
        https://bugs.webkit.org/show_bug.cgi?id=43714

        Also add mimetype detection for local files.

        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal):
        * platform/network/win/ResourceHandleWin.cpp:
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::fileLoadTimer):

2010-08-23  Iain Merrick  <husky@google.com>

        Reviewed by Steve Block.

        Update JNI bridge for V8 after renaming of JavaString::utf8().
        https://bugs.webkit.org/show_bug.cgi?id=44419

        This fixes the build on Android. No new functionality, so no new tests.

        * bridge/jni/v8/JNIBridgeV8.cpp:
        (JavaField::JavaField):
        * bridge/jni/v8/JNIBridgeV8.h:
        (JSC::Bindings::JavaField::type):
        * bridge/jni/v8/JavaClassV8.cpp:
        (JavaClass::JavaClass):
        * bridge/jni/v8/JavaNPObjectV8.cpp:
        (JSC::Bindings::JavaNPObjectGetProperty):
        * bridge/jni/v8/JavaStringV8.h:
        (JSC::Bindings::JavaStringImpl::utf8):

2010-08-23  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by David Hyatt.

        Assertion failure in FrameView::layout when modifying the DOM during
        pagehide with PageCache enabled
        https://bugs.webkit.org/show_bug.cgi?id=43152

        Always unschedule any pending relayouts when changing the view, not just
        when we're not using the page cache. Otherwise touching the DOM during
        the pagehide handler can lead to layouts that will be done by the time
        the view has changed, which triggers an assert.

        Test: fast/loader/unschedule-relayout-after-unload.html

        * page/Frame.cpp:
        (WebCore::Frame::setView): move unscheduleRelayout outside page cache
        check.
        * page/FrameView.cpp:
        (WebCore::FrameView::layout): remove early return now that assert
        should be correct (and the referenced rdar:// got fixed).

2010-08-23  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Dimitri Glazkov.

        Fix security origin calculation in createPattern. Need to use
        cachedImage->response().url() instead of cachedImage->url().
        https://bugs.webkit.org/show_bug.cgi?id=44399.

        Test: http/tests/security/canvas-remote-read-remote-image-redirect.html

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

2010-08-23  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Alexey Proskuryakov.

        TreeWalker is not calling acceptNode function in filter object
        https://bugs.webkit.org/show_bug.cgi?id=35296
        
        We only accepted raw functions as the NodeFilter on TreeWalker. Fix this to
        look for an 'acceptNode' function on the filter object, and use that if present.
        Also throw an exception if the filter object does not have an acceptNode function.

        Test: fast/dom/TreeWalker/acceptNode-filter.html

        * bindings/js/JSNodeFilterCondition.cpp:
        (WebCore::JSNodeFilterCondition::acceptNode):

2010-08-23  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r65814.
        http://trac.webkit.org/changeset/65814
        https://bugs.webkit.org/show_bug.cgi?id=44443

        broke svg/custom/missing-xlink.svg (Requested by kling on
        #webkit).

        * dom/Element.cpp:
        (WebCore::Element::setAttributeNS):

2010-08-23  Jian Li  <jianli@chromium.org>

        Reviewed by Darin Fisher.

        Handle blob resource.
        https://bugs.webkit.org/show_bug.cgi?id=43941

        To provide lower level blob reosurce handling for all possible ports,
        BlobResourceHandle derived from ResourceHandle is implemented. It provides
        both synchronous and asynchronous resource loading for blob URL.

        BlobResourceHandle needs to create a FileStreamProxy instance in order to
        asynchronous file stream operation. To achive this, a hook createAsyncFileStream
        is added to ResourceHandleClient interface. When ResourceLoader implements
        ths hook, it creates and returns FileStreamProxy.

        BlobResourceHandle.* is not added to chromium port since it will implement
        its own blob resource handling.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::createAsyncFileStream): Create and return FileStreamProxy.
        * loader/ResourceLoader.h:
        * page/SecurityOrigin.cpp: Add the support to get and validate the origin of blob URL.
        (WebCore::SecurityOrigin::create):
        (WebCore::SecurityOrigin::canLoad):
        * platform/network/BlobRegistryImpl.cpp:
        (WebCore::BlobRegistryImpl::appendStorageItems): Fix a bug that the length is not subtracted.
        * platform/network/BlobResourceHandle.cpp: Added.
        * platform/network/BlobResourceHandle.h: Added.
        * platform/network/HTTPParsers.cpp:
        (WebCore::parseRange):
        * platform/network/HTTPParsers.h:
        * platform/network/ResourceHandle.cpp: Hook up with asynchronous blob resource handling.
        (WebCore::ResourceHandle::create):
        * platform/network/ResourceHandle.h:
        * platform/network/ResourceHandleClient.h:
        (WebCore::ResourceHandleClient::createAsyncFileStream): Add a hook.
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::loadResourceSynchronously): Hook up with synchronous blob resource handling.

2010-08-23  Jian Li  <jianli@chromium.org>

        Reviewed by David Levin.

        Remove unneeded BlobRegistryImpl.* and WebBlobRegistryImpl.* from
        chromium project files.
        https://bugs.webkit.org/show_bug.cgi?id=44442

        * WebCore.gypi:

2010-08-23  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Many LayoutTests crash when run with --html5-treebuilder
        https://bugs.webkit.org/show_bug.cgi?id=44440

        Our list of special tags is out of sync with the HTML5 spec.  This
        patch adds HTML to the list, which fixs a ton of crashers when parsing
        fragments.  We neet to sync up the list at some point, but we want to
        make sure we have test coverage for all those changes, so I've left
        that for a future patch.

        * html/HTMLTreeBuilder.cpp:

2010-08-23  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        WebInspector: Context menu in Scripts panel was broken.
        https://bugs.webkit.org/show_bug.cgi?id=44431

        * inspector/InspectorFrontendHost.cpp:
        (WebCore::FrontendMenuProvider::contextMenuItemSelected):
        (WebCore::FrontendMenuProvider::contextMenuCleared):

2010-08-23  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Tor Arne Vestbø.

        setAttributeNS() should throw NAMESPACE_ERR for prefixed qualifiedName with null namespace
        https://bugs.webkit.org/show_bug.cgi?id=44432

        Test: fast/dom/setAttributeNS-prefix-and-null-namespace.html

        * dom/Element.cpp:
        (WebCore::Element::setAttributeNS): Throw NAMESPACE_ERR if namespace is null
        and the qualifiedName has a prefix.

2010-08-23  Ryuan Choi  <ryuan.choi@samsung.com>

        Reviewed by Antonio Gomes.

        [EFL] rendering was broken when missing plugin.
        https://bugs.webkit.org/show_bug.cgi?id=43395

        Implement RenderThemeEfl::systemFont to render "Missing plugin" when we
        don't have proper plugin.
        In this case, RenderEmbeddedObject::paintReplaced call systemFont and
        pass returned font to GraphicsContext.

        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::setDefaultFontSize):
        (WebCore::RenderThemeEfl::systemFont):
        * platform/efl/RenderThemeEfl.h:

2010-08-23  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: remove javascript breakpoint specific code from BreakpointSidebarPane
        https://bugs.webkit.org/show_bug.cgi?id=44327

        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager.prototype.setBreakpoint):
        (WebInspector.BreakpointManager.prototype.restoredBreakpoint):
        (WebInspector.BreakpointManager.prototype._setBreakpoint):
        (WebInspector.BreakpointManager.prototype._removeBreakpoint):
        (WebInspector.BreakpointManager.prototype._setBreakpointOnBackend):
        (WebInspector.Breakpoint):
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.BreakpointsSidebarPane):
        (WebInspector.BreakpointsSidebarPane.prototype.addBreakpoint):
        (WebInspector.BreakpointsSidebarPane.prototype._breakpointRemoved):
        (WebInspector.JSBreakpointItem):
        (WebInspector.JSBreakpointItem.prototype.compareTo):
        (WebInspector.JSBreakpointItem.prototype.element):
        (WebInspector.JSBreakpointItem.prototype._breakpointClicked):
        (WebInspector.JSBreakpointItem.prototype._checkboxClicked):
        (WebInspector.JSBreakpointItem.prototype._enableChanged):
        (WebInspector.JSBreakpointItem.prototype._textChanged):
        (WebInspector.JSBreakpointItem.prototype._removed):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype._breakpointAdded):
        (WebInspector.ScriptsPanel.prototype._breakpointRemoved):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.addBreakpoint):
        (WebInspector.SourceFrame.prototype._addBreakpointToSource):

2010-08-23  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        WebInspector: inspector protocol should be switched from array based
        message format to object based message format.
        Almost all the protocol related things is generated by CodeGeneratorInspector.pm
        It was changed a bit. As result InspectorBackendStub.js wraps the
        calls into Request objects. InspectorBackendDispatcher.cpp unwraps
        these objects and calls corresponding agents. These two files and
        RemoteInspectorFrontend are generated by CodeGeneratorInspector.pm
        Dispatching part of WebInspector also was adjusted for handling Event
        objects produced by RemoteInspectorFrontend.cpp and Response objects
        produced by InspectorBackendDispatcher.cpp
        https://bugs.webkit.org/show_bug.cgi?id=44338

        * inspector/CodeGeneratorInspector.pm:
        * inspector/Inspector.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::setAttachedWindow):
        * inspector/InspectorController.h:
        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::setAttachedWindow):
        * inspector/InspectorValues.h:
        (WebCore::InspectorObject::find):
        * inspector/front-end/Callback.js:
        (WebInspector.Callback.prototype.processResponse):
        * inspector/front-end/inspector.js:
        (WebInspector.dispatch):
        (WebInspector_syncDispatch):
        (WebInspector.dispatchMessageFromBackend):
        (WebInspector.reportProtocolError):

2010-08-19  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Steve Block.

        Remove IDBDatabase.description per spec changes
        https://bugs.webkit.org/show_bug.cgi?id=44264

        There's now no longer any way to access the description from JS.
        The main premise of the manual test is now obsolete. Over time we'll
        be able to add to it again. While I'm at it, I cleaned up the format
        of the manual test to be easier to follow (code and usage wise).

        * manual-tests/indexed-database.html:
        * storage/IDBDatabase.cpp:
        (WebCore::IDBDatabase::IDBDatabase):
        * storage/IDBDatabase.h:
        * storage/IDBDatabase.idl:

2010-08-23  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: element's css: pseudo-class locations
        https://bugs.webkit.org/show_bug.cgi?id=44344

        Also contains a drive-by fix for 44301 (gray out read-only).

        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype.update.computedStyleCallback):
        (WebInspector.StylesSidebarPane.prototype.update):
        (WebInspector.StylesSidebarPane.prototype._rebuildUpdate):
        (WebInspector.StylesSidebarPane.prototype._rebuildSectionsForStyleRules):
        (WebInspector.StylePropertiesSection):

2010-08-23  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r65803.
        http://trac.webkit.org/changeset/65803
        https://bugs.webkit.org/show_bug.cgi?id=44416

        windows build failed (Requested by loislo on #webkit).

        * inspector/CodeGeneratorInspector.pm:
        * inspector/Inspector.idl:
        * inspector/InspectorController.cpp:
        * inspector/InspectorController.h:
        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::setAttachedWindow):
        * inspector/InspectorValues.h:
        * inspector/front-end/Callback.js:
        (WebInspector.Callback.prototype.processResponse):
        * inspector/front-end/inspector.js:
        (WebInspector.dispatch.delayDispatch):
        (WebInspector.dispatch):
        (WebInspector_syncDispatch):
        (WebInspector.dispatchMessageFromBackend):
        (WebInspector.reportProtocolError):

2010-08-23  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        WebInspector: inspector protocol should be switched from array based
        message format to object based message format.
        Almost all the protocol related things is generated by CodeGeneratorInspector.pm
        It was changed a bit. As result InspectorBackendStub.js wraps the
        calls into Request objects. InspectorBackendDispatcher.cpp unwraps
        these objects and calls corresponding agents. These two files and
        RemoteInspectorFrontend are generated by CodeGeneratorInspector.pm
        Dispatching part of WebInspector also was adjusted for handling Event
        objects produced by RemoteInspectorFrontend.cpp and Response objects
        produced by InspectorBackendDispatcher.cpp
        https://bugs.webkit.org/show_bug.cgi?id=44338

        * inspector/CodeGeneratorInspector.pm:
        * inspector/Inspector.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::setAttachedWindow):
        * inspector/InspectorController.h:
        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::setAttachedWindow):
        * inspector/InspectorValues.h:
        (WebCore::InspectorObject::find):
        * inspector/front-end/Callback.js:
        (WebInspector.Callback.prototype.processResponse):
        * inspector/front-end/inspector.js:
        (WebInspector.dispatch):
        (WebInspector_syncDispatch):
        (WebInspector.dispatchMessageFromBackend):
        (WebInspector.reportProtocolError):

2010-08-23  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Xan Lopez.

        Make the copy of the inspector files silent.

        * GNUmakefile.am:

2010-08-23  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] -webkit-text-stroke is broken due to Qt::TextBypassShaping
        https://bugs.webkit.org/show_bug.cgi?id=44403

        Don't bypass the Harfbuzz shaping if we're drawing text with a stroke.
        For canvas, always use complex text shaping since stroke and fill are decoupled.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::measureText):
        (WebCore::CanvasRenderingContext2D::drawTextInternal):
        * platform/graphics/qt/FontQt.cpp:
        (WebCore::drawTextCommon):

2010-08-23  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Extract profiler-related code and data from InspectorController into
        InspectorProfilerAgent.

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

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/ScriptProfiler.cpp:
        (WebCore::ScriptProfiler::isProfilerAlwaysEnabled):
        * bindings/js/ScriptProfiler.h:
        * bindings/v8/ScriptProfiler.cpp:
        (WebCore::ScriptProfiler::isProfilerAlwaysEnabled):
        * bindings/v8/ScriptProfiler.h:
        * inspector/CodeGeneratorInspector.pm:
        * inspector/Inspector.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::disconnectFrontend):
        (WebCore::InspectorController::populateScriptObjects):
        (WebCore::InspectorController::didCommitLoad):
        (WebCore::InspectorController::addProfile):
        (WebCore::InspectorController::addProfileFinishedMessageToConsole):
        (WebCore::InspectorController::addStartProfilingMessageToConsole):
        (WebCore::InspectorController::isRecordingUserInitiatedProfile):
        (WebCore::InspectorController::getCurrentUserInitiatedProfileName):
        (WebCore::InspectorController::startUserInitiatedProfiling):
        (WebCore::InspectorController::stopUserInitiatedProfiling):
        (WebCore::InspectorController::profilerEnabled):
        (WebCore::InspectorController::enableProfiler):
        (WebCore::InspectorController::disableProfiler):
        * inspector/InspectorController.h:
        (WebCore::InspectorController::profilerAgent):
        * inspector/InspectorProfilerAgent.cpp: Added.
        (WebCore::InspectorProfilerAgent::create):
        (WebCore::InspectorProfilerAgent::InspectorProfilerAgent):
        (WebCore::InspectorProfilerAgent::~InspectorProfilerAgent):
        (WebCore::InspectorProfilerAgent::addProfile):
        (WebCore::InspectorProfilerAgent::addProfileFinishedMessageToConsole):
        (WebCore::InspectorProfilerAgent::addStartProfilingMessageToConsole):
        (WebCore::InspectorProfilerAgent::createProfileHeader):
        (WebCore::InspectorProfilerAgent::disable):
        (WebCore::InspectorProfilerAgent::enable):
        (WebCore::InspectorProfilerAgent::getCurrentUserInitiatedProfileName):
        (WebCore::InspectorProfilerAgent::getProfileHeaders):
        (WebCore::InspectorProfilerAgent::getProfile):
        (WebCore::InspectorProfilerAgent::removeProfile):
        (WebCore::InspectorProfilerAgent::resetState):
        (WebCore::InspectorProfilerAgent::startUserInitiatedProfiling):
        (WebCore::InspectorProfilerAgent::stopUserInitiatedProfiling):
        (WebCore::InspectorProfilerAgent::toggleRecordButton):
        * inspector/InspectorProfilerAgent.h: Added.
        (WebCore::InspectorProfilerAgent::clearProfiles):
        (WebCore::InspectorProfilerAgent::enabled):
        (WebCore::InspectorProfilerAgent::isRecordingUserInitiatedProfile):
        (WebCore::InspectorProfilerAgent::setRemoteFrontend):
        (WebCore::InspectorProfilerAgent::startProfiling):
        (WebCore::InspectorProfilerAgent::stopProfiling):

2010-08-23  Ariya Hidayat  <ariya@sencha.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Crash when purging the scratch buffer for the shadow
        https://bugs.webkit.org/show_bug.cgi?id=44384

        WebCore::Timer can't be used in a static object bcause it relies on
        thread global data, which is invalid once the application instance is
        destroyed. To overcome the problem, use QObject's timer support for
        the ShadowBuffer class.

        * platform/graphics/qt/ContextShadow.cpp:
        (WebCore::):
        (WebCore::ShadowBuffer::ShadowBuffer):
        (WebCore::ShadowBuffer::schedulePurge):
        (WebCore::ShadowBuffer::timerEvent):

2010-08-23  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Xan Lopez.

        [GStreamer] don't expose the private player in GStreamerGWorld
        https://bugs.webkit.org/show_bug.cgi?id=44332

        Only a pointer to our playbin2 element instance is required
        instead of the whole MediaPlayerPrivateGStreamer instance.

        * platform/graphics/gstreamer/GStreamerGWorld.cpp:
        (WebCore::GStreamerGWorld::createGWorld):
        (WebCore::GStreamerGWorld::GStreamerGWorld):
        (WebCore::GStreamerGWorld::~GStreamerGWorld):
        (WebCore::GStreamerGWorld::enterFullscreen):
        (WebCore::GStreamerGWorld::exitFullscreen):
        * platform/graphics/gstreamer/GStreamerGWorld.h:
        (WebCore::GStreamerGWorld::pipeline):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin):

2010-08-22  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] GraphicsContext: Simplify getting the clip bounding rect
        https://bugs.webkit.org/show_bug.cgi?id=44396

        Move the Qt 4.8 version check for QPainter::clipBoundingRect()
        into a GraphicsContextPlatformPrivate method.

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContextPlatformPrivate::clipBoundingRect):
        (WebCore::GraphicsContext::beginTransparencyLayer):
        (WebCore::GraphicsContext::clipOut):
        (WebCore::GraphicsContext::clipOutEllipseInRect):

2010-08-22  Juha Savolainen  <juha.savolainen@weego.fi>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Add QTouchEvents support for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=44330

        This patch adds support for QTouchEvents in WebKit2. A new WebEvent-class
        is created for touchevents, WebTouchEvent. Also touchpoints needed a new
        class, WebPlatformTouchPoint. This is similar solution like in other
        events(like MouseEvent) on WebKit2. These classes are introduced in WebEvent.h 
        Also there was a need to create an empty constructor to PlatformTouchPoint-class.

        * platform/PlatformTouchPoint.h:
        (WebCore::PlatformTouchPoint::PlatformTouchPoint):

2010-08-22  Daniel Bates  <dbates@rim.com>

        Reviewed by Eric Seidel.

        Encapsulate document marker management into DocumentMarkerController
        https://bugs.webkit.org/show_bug.cgi?id=44383

        Moves the document marker management code in Document.cpp into its own
        class called DocumentMarkerController.

        No functionality was changed, so no new tests.

        * Android.mk: Added DocumentMarkerController.cpp 
        * CMakeLists.txt: Ditto.
        * GNUmakefile.am: Added DocumentMarkerController.cpp and DocumentMarkerController.h.
        * WebCore.exp.in: Substituted symbols __ZN7WebCore24DocumentMarkerController13removeMarkersENS_14DocumentMarker10MarkerTypeE
        and __ZN7WebCore24DocumentMarkerController23renderedRectsForMarkersENS_14DocumentMarker10MarkerTypeE for
        __ZN7WebCore8Document13removeMarkersENS_14DocumentMarker10MarkerTypeE and 
        __ZN7WebCore8Document23renderedRectsForMarkersENS_14DocumentMarker10MarkerTypeE, respectively.
        * WebCore.gypi: Added DocumentMarkerController.cpp and DocumentMarkerController.h.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * dom/Document.cpp:
        (WebCore::Document::removedLastRef): Modified to call DocumentMarkerController::detach().
        (WebCore::Document::~Document): Removed "deleteAllValues(m_markers)" as DocumentMarkerController
        is stored in OwnPtr; so it will be destroyed automatically on Document destruction.
        (WebCore::Document::textInserted): Modified to use marker controller.
        (WebCore::Document::textRemoved): Ditto.
        * dom/Document.h:
        (WebCore::Document::markers): Added.
        * dom/DocumentMarkerController.cpp: Added.
        (WebCore::placeholderRectForMarker):
        (WebCore::DocumentMarkerController::detach):
        (WebCore::DocumentMarkerController::addMarker):
        (WebCore::DocumentMarkerController::removeMarkers):
        (WebCore::DocumentMarkerController::copyMarkers):
        (WebCore::DocumentMarkerController::markerContainingPoint):
        (WebCore::DocumentMarkerController::markersForNode):
        (WebCore::DocumentMarkerController::renderedRectsForMarkers):
        (WebCore::DocumentMarkerController::repaintMarkers):
        (WebCore::DocumentMarkerController::setRenderedRectForMarker):
        (WebCore::DocumentMarkerController::invalidateRenderedRectsForMarkersInRect):
        (WebCore::DocumentMarkerController::shiftMarkers):
        (WebCore::DocumentMarkerController::setMarkersActive):
        * dom/DocumentMarkerController.h: Added.
        (WebCore::DocumentMarkerController::~DocumentMarkerController):
        * editing/Editor.cpp:
        (WebCore::Editor::ignoreSpelling): Modified to use marker controller.
        (WebCore::findFirstMisspellingInRange): Ditto.
        (WebCore::findFirstGrammarDetailInRange): Ditto.
        (WebCore::Editor::advanceToNextMisspelling): Ditto.
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges): Ditto.
        (WebCore::Editor::changeBackToReplacedString): Ditto.
        * editing/SplitTextNodeCommand.cpp:
        (WebCore::SplitTextNodeCommand::doApply): Ditto.
        (WebCore::SplitTextNodeCommand::doUnapply): Ditto.
        * page/Frame.cpp:
        (WebCore::Frame::markAllMatchesForText): Ditto.
        (WebCore::Frame::setMarkedTextMatchesAreHighlighted): Ditto.
        (WebCore::Frame::respondToChangedSelection): Ditto.
        * page/FrameView.cpp:
        (WebCore::FrameView::getTickmarks): Ditto.
        (WebCore::FrameView::paintContents): Ditto.
        * page/Page.cpp:
        (WebCore::Page::unmarkAllTextMatches): Ditto.
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::spellingToolTip): Ditto.
        (WebCore::HitTestResult::replacedString): Ditto.
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paintSpellingOrGrammarMarker): Ditto.
        (WebCore::InlineTextBox::paintTextMatchMarker): Ditto.
        (WebCore::InlineTextBox::computeRectForReplacementMarker): Ditto.
        (WebCore::InlineTextBox::paintDocumentMarkers): Ditto.
        * rendering/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::computeTextMatchMarkerRect): Ditto.

2010-08-22  Jian Li  <jianli@chromium.org>

        Reviewed by Darin Fisher.

        Add the blob URL member to FormData.
        https://bugs.webkit.org/show_bug.cgi?id=44387

        This is in preparation to switch blob implementation to using BlobData
        model. When a blob is added to a FormData, it is represented as a blob
        URL in the list.

        * platform/network/FormData.cpp:
        (WebCore::FormData::appendBlob):
        * platform/network/FormData.h:
        (WebCore::FormDataElement::FormDataElement):
        (WebCore::FormDataElement::):
        (WebCore::operator==):

2010-08-22  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        HTML5 TreeBuilder builds wrong DOM for <a><svg><tr><input></a>
        https://bugs.webkit.org/show_bug.cgi?id=44390

        The HTML5 spec has changed since Adam and I original wrote
        the HTMLTreeBuilder.  Most important for this change was resolution of:
        http://www.w3.org/Bugs/Public/show_bug.cgi?id=9580

        I also removed our "phrasing" tag support since that was also removed
        from the spec as part of other bug fixes.

        This is tested by tonyg's <a><svg><tr><input></a> test in adoption01.dat.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processCloseWhenNestedTag):
        (WebCore::HTMLTreeBuilder::processAnyOtherEndTagForInBody):
        (WebCore::HTMLTreeBuilder::furthestBlockForFormattingElement):
        (WebCore::HTMLTreeBuilder::processEndTag):

2010-08-22  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Ariya Hidayat.

        [Qt] TransparencyLayer: Always use anti-aliasing and smooth pixmap transform
        https://bugs.webkit.org/show_bug.cgi?id=44394

        * platform/graphics/qt/TransparencyLayer.h:
        (WebCore::TransparencyLayer::TransparencyLayer): Set the Antialiasing
        and SmoothPixmapTransforms render hints for all TransparencyLayers.

2010-08-22  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Ariya Hidayat.

        [Qt] Gradient: Support inner radius larger than outer radius
        https://bugs.webkit.org/show_bug.cgi?id=44392

        * platform/graphics/qt/GradientQt.cpp:
        (WebCore::Gradient::platformGradient): Reverse the (radial) gradient if r0 > r1.

2010-08-22  Ariya Hidayat  <ariya@sencha.com>

        Reviewed by Dirk Schulze.

        [Qt] Layer approach to support generic shadow handling
        https://bugs.webkit.org/show_bug.cgi?id=44380

        The pair beginShadowLayer and endShadowLayer creates a temporary image
        where the caller can draw onto, using the returned QPainter. When
        endShadowLayer is called, the temporary image will be filtered, using
        the specified shadow color and blur radius, and drawn to the graphics
        context.

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/qt/ContextShadow.cpp:
        (WebCore::ContextShadow::beginShadowLayer):
        (WebCore::ContextShadow::endShadowLayer):
        * platform/graphics/qt/ContextShadow.h:
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::contextShadow):

2010-08-21  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Dan Bernstein.

        Media engine should not be asked to open all urls
        https://bugs.webkit.org/show_bug.cgi?id=44370

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::load): Do nothing with urls with a type attribute that would be
        rejected by canPlayType().

2010-08-21  Ariya Hidayat  <ariya@sencha.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Faster bounding rect for the shadow clip region
        https://bugs.webkit.org/show_bug.cgi?id=44369

        Like in r65650, we should use the faster QPainter::clipBoundingRect
        when it is available.

        * platform/graphics/qt/ContextShadow.cpp:
        (WebCore::ContextShadow::drawShadowRect):

2010-08-20  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Ariya Hidayat.

        [Qt] When using the raster graphics system on Maemo5, allow
        Flash to render directly into the raster window surface.
        wmode=transparent is now supported as a result of this change.
        
        https://bugs.webkit.org/show_bug.cgi?id=44043
        
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::paintUsingImageSurfaceExtension):

2010-08-20  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Brady Eidson.

        https://bugs.webkit.org/show_bug.cgi?id=38428
        HTTP code 500 (and other non-4xx codes) wrongfully treated as success for subresources

        Test: http/tests/misc/script-500.html

        * loader/loader.cpp: (WebCore::Loader::Host::didReceiveData): Treat all HTTP codes >= 400 as
        error ones, since they are.

2010-08-20  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Adam Barth.

        Crash in WebCore::Node::createRendererIfNeeded()
        https://bugs.webkit.org/show_bug.cgi?id=44129

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::insertBefore): Factor out core bit to insertBetween.
        (WebCore::ContainerNode::insertBetween): Factored out of insertBefore.
        (WebCore::ContainerNode::parserInsertBefore): Similar to insertBefore, but doesn't handle reparenting or dispatch DOM mutation events.
        (WebCore::ContainerNode::removeChild): Factor out core bit to removeBetween.
        (WebCore::ContainerNode::removeBetween): Facotred out of removeChild.
        (WebCore::ContainerNode::parserRemoveChild): Similar to removeChild, but doesn't handle reparenting or dispatch DOM mutation events.
        (WebCore::ContainerNode::addChildCommon):
        (WebCore::ContainerNode::parserAddChild):
        (WebCore::ContainerNode::legacyParserAddChild):
        * dom/ContainerNode.h:
        * dom/Node.cpp:
        (WebCore::Node::parserRemoveChild):
        (WebCore::Node::parserInsertBefore):
        * dom/Node.h:
        * html/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::attach):
        (WebCore::HTMLConstructionSite::attachAtSite): Use new parserInsertBefore.
        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::passTokenToLegacyParser):
        (WebCore::HTMLTreeBuilder::reparentChildren):
        (WebCore::HTMLTreeBuilder::callTheAdoptionAgency): Was missing a key bit from the spec about removing the old parent if it exists.

2010-08-20  Kinuko Yasuda  <kinuko@chromium.org>

        Unreviewed; build fix.  Had included wrong version of build file.

2010-08-20  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Joseph Pecoraro.

        [GTK] Inspector extensions tests fail on GTK+ bots because onSelectionChanged is missing
        https://bugs.webkit.org/show_bug.cgi?id=44342

        * GNUmakefile.am: Fix dependency tracking for copied web inspector files.

2010-08-20  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Darin Fisher.

        Add Callback implementation for FileSystem API
        https://bugs.webkit.org/show_bug.cgi?id=44349

        No new tests; tests will be added later.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * storage/FileSystemCallbacks.cpp: Added.
        * storage/FileSystemCallbacks.h: Added.

        * storage/EntryCallback.h: Nits fix
        * storage/FileSystemCallback.h: Nits fix

2010-08-20  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Ariya Hidayat.

        [Qt] WebKit does not compile with --3d-canvas
        https://bugs.webkit.org/show_bug.cgi?id=44335

        - PlatformGLObject => Platform3DObject
        - Implemented getAttachedShaders()
        - Implemented bufferData() and bufferSubData() for ArrayBuffer*
        - Removed reference to nonexistent variable in getImageData()

        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3DInternal::GraphicsContext3DInternal):
        (WebCore::GraphicsContext3D::attachShader):
        (WebCore::GraphicsContext3D::getAttachedShaders):
        (WebCore::GraphicsContext3D::bindAttribLocation):
        (WebCore::GraphicsContext3D::bindBuffer):
        (WebCore::GraphicsContext3D::bindFramebuffer):
        (WebCore::GraphicsContext3D::bindRenderbuffer):
        (WebCore::GraphicsContext3D::bindTexture):
        (WebCore::GraphicsContext3D::bufferData):
        (WebCore::GraphicsContext3D::bufferSubData):
        (WebCore::GraphicsContext3D::compileShader):
        (WebCore::GraphicsContext3D::detachShader):
        (WebCore::GraphicsContext3D::framebufferRenderbuffer):
        (WebCore::GraphicsContext3D::framebufferTexture2D):
        (WebCore::GraphicsContext3D::getActiveAttrib):
        (WebCore::GraphicsContext3D::getActiveUniform):
        (WebCore::GraphicsContext3D::getAttribLocation):
        (WebCore::GraphicsContext3D::isBuffer):
        (WebCore::GraphicsContext3D::isFramebuffer):
        (WebCore::GraphicsContext3D::isProgram):
        (WebCore::GraphicsContext3D::isRenderbuffer):
        (WebCore::GraphicsContext3D::isShader):
        (WebCore::GraphicsContext3D::isTexture):
        (WebCore::GraphicsContext3D::linkProgram):
        (WebCore::GraphicsContext3D::shaderSource):
        (WebCore::GraphicsContext3D::useProgram):
        (WebCore::GraphicsContext3D::validateProgram):
        (WebCore::GraphicsContext3D::getProgramiv):
        (WebCore::GraphicsContext3D::getProgramInfoLog):
        (WebCore::GraphicsContext3D::getShaderiv):
        (WebCore::GraphicsContext3D::getShaderInfoLog):
        (WebCore::GraphicsContext3D::getShaderSource):
        (WebCore::GraphicsContext3D::getUniformfv):
        (WebCore::GraphicsContext3D::getUniformiv):
        (WebCore::GraphicsContext3D::getUniformLocation):
        (WebCore::GraphicsContext3D::getImageData):
        * platform/graphics/qt/GraphicsLayerQt.h:

2010-08-20  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Kilzer.

        #ifdef-out some Leopard-and-earlier code.

        * platform/graphics/mac/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::~FontCustomPlatformData):

2010-08-20  Kenneth Russell  <kbr@google.com>

        Unreviewed, speculative Chromium build fix. Forward declare
        IntSize in WebGLRenderingContext.h and include IntSize.h in .cpp.

        * html/canvas/WebGLRenderingContext.cpp:
        * html/canvas/WebGLRenderingContext.h:

2010-08-20  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Dan Bernstein.

        Media element canPlayType("application/octet-stream") not handled correctly
        https://bugs.webkit.org/show_bug.cgi?id=44343

        Test: media/media-can-play-octet-stream.html

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::applicationOctetStream): New, accessor for static string used more than once.
        (WebCore::textPlain): Ditto.
        (WebCore::codecs): Ditto.
        (WebCore::chooseBestEngineForTypeAndCodecs): Special case "application/octet-stream".
        (WebCore::MediaPlayer::load): Use static static string methods.
        (WebCore::MediaPlayer::supportsType): Special case "application/octet-stream".

2010-08-20  Adrienne Walker  <enne@google.com>

        Reviewed by Kenneth Russell.

        Implement HTMLVideoElement support for texImage2D and texSubImage2D
        https://bugs.webkit.org/show_bug.cgi?id=33852

        Test: fast/canvas/webgl/tex-image-and-sub-image-2d-with-video.html

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::WebGLRenderingContext):
        (WebCore::WebGLRenderingContext::videoFrameToImage):
        (WebCore::WebGLRenderingContext::texImage2D):
        (WebCore::WebGLRenderingContext::texSubImage2D):
        (WebCore::WebGLRenderingContext::LRUImageBufferCache::LRUImageBufferCache):
        (WebCore::WebGLRenderingContext::LRUImageBufferCache::imageBuffer):
        (WebCore::WebGLRenderingContext::LRUImageBufferCache::bubbleToFront):
        * html/canvas/WebGLRenderingContext.h:

2010-08-20  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Adam Barth.

        Removing an incorrect ASSERT.
        https://bugs.webkit.org/show_bug.cgi?id=44151

        A failure in the preflight step of a transaction wrapper does not
        guarantee that the transaction is rolled back (and it shouldn't).

        Test: storage/change-version-no-crash-on-preflight-failure.html

        * storage/SQLTransaction.cpp:
        (WebCore::SQLTransaction::openTransactionAndPreflight):

2010-08-20  David Leong  <david.leong@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Update Symbian capabilities to remove AllFiles and DRM
        
        Add CONFIG(production) variation for set of DLL capabilities.
        DRM and AllFiles capabilities need to be audited for the sis
        package to be signed.
        
        No new tests.

        * WebCore.pro: Updated Symbian Capabilities. 

2010-08-20  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by David Kilzer.

        Do Not Copy Subversion Related Files in Inspector Build Phase
        https://bugs.webkit.org/show_bug.cgi?id=44353

        * WebCore.xcodeproj/project.pbxproj: remove .svn directories in the "Copy Inspector Resources" build phase.

2010-08-19  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Adam Barth.

        style correction in markup.cpp
        https://bugs.webkit.org/show_bug.cgi?id=44318

        Make markup.cpp pass check-webkit-style.

        No new tests are added since this is a cleanup.

        * editing/markup.cpp:
        (WebCore::MarkupAccumulator::appendAttributeValue):
        (WebCore::appendEscapedContent):
        (WebCore::MarkupAccumulator::appendStartMarkup):
        (WebCore::completeURLs):
        (WebCore::isElementPresentational):
        (WebCore::isSpecialAncestorBlock):
        (WebCore::shouldIncludeWrapperForFullySelectedRoot):
        (WebCore::createMarkup):
        (WebCore::fillContainerFromString):
        (WebCore::createFragmentFromText):
        (WebCore::createFragmentFromNodes):

2010-08-20  Tony Chang  <tony@chromium.org>

        Reviewed by Adam Barth.

        crash when trying to access a stale Node pointer in FocusController::setFocusedNode
        https://bugs.webkit.org/show_bug.cgi?id=44226

        Test: fast/events/focus-change-crash2.html

        * page/FocusController.cpp:
        (WebCore::FocusController::setFocusedNode): add a ref to prevent the focused node from being deleted

2010-08-20  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/8245719> backface-visibility and reflections don't play nicely together.
        
        On elements with a reflection and backface-visibility: hidden, set the doubleSided property on the 
        reflection flattening layer so that backface-visibility works in all configurations.

        Test: compositing/reflections/backface-hidden-reflection.html

        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::GraphicsLayerCA::updateBackfaceVisibility): Call setDoubleSided: on the structural
        layer for reflections.
        (WebCore::GraphicsLayerCA::ensureStructuralLayer): Fix a comment typo, and call updateBackfaceVisibility()
        when we gain a structural layer.

2010-08-20  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Slider labels do not update as you move the sliders on this page
        https://bugs.webkit.org/show_bug.cgi?id=41020
        
        When repainting after layout in a multicol element, we need to adjust the
        repaint rect for the columns.

        Test: fast/repaint/multicol-repaint.html

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

2010-08-20  Jian Li  <jianli@chromium.org>

        Reviewed by David Levin.

        Move FileStreamClient to platform and add AsyncFileStream interface.
        https://bugs.webkit.org/show_bug.cgi?id=44224

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/FileStreamProxy.cpp: Account for the change.
        (WebCore::FileStreamProxy::FileStreamProxy):
        (WebCore::FileStreamProxy::stop):
        * html/FileStreamProxy.h: Make it derive from AsyncFileStream.h.
        * platform/AsyncFileStream.h: Added.
        * platform/FileStreamClient.h: Renamed from WebCore/html/FileStreamClient.h.

2010-08-20  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Darin Fisher.

        Prevent use of stale notification presenter pointer in notifications by instead using
        a notification center pointer and deriving the presenter from it. Notification presenter
        gets properly destroyed using disconnectFrame function inside notification center. Add
        null checks for notification presenter.
        https://bugs.webkit.org/show_bug.cgi?id=43645

        Test: fast/notifications/notifications-window-close-crash.html

        * notifications/Notification.cpp:
        (WebCore::Notification::Notification):
        (WebCore::Notification::create):
        (WebCore::Notification::show):
        (WebCore::Notification::cancel):
        (WebCore::Notification::contextDestroyed):
        (WebCore::Notification::finishLoading):
        * notifications/Notification.h:
        (WebCore::Notification::detachPresenter):
        * notifications/NotificationCenter.h:
        (WebCore::NotificationCenter::createHTMLNotification):
        (WebCore::NotificationCenter::createNotification):

2010-08-20  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        r64526 broke the GTK+-3 build
        https://bugs.webkit.org/show_bug.cgi?id=44254

        No new tests, as this is covered by manual-tests/cursor.html.

        * platform/gtk/CursorGtk.cpp:
        (WebCore::createPixmapFromBits): Added this method which turns the inline data
        structures into GdkPixmaps using Cairo and GDK-Cairo.
        (WebCore::createNamedCursor): Modified this method to use the new helper.
        * platform/gtk/CursorGtk.h: Changed all inline data structures to be unsigned
        char arrays (which Cairo requires). The progress cursor is known in X11 icon themes
        as "left_ptr_watch." This change to the name preserves the old behavior of taking this
        icon from the theme when available. It seems that this worked in the past due to a fluke
        or failure of the previous code.

2010-08-20  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Dirk Schulze.

        [Cairo] Eliminate full-surface copy from canvas.drawImage(...)
        https://bugs.webkit.org/show_bug.cgi?id=44190

        Covered by canvas layout tests.

        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::drawsUsingCopy): Return false now.
        (WebCore::ImageBuffer::clip): Add a link to the bug which tracks this feature.
        (WebCore::ImageBuffer::draw): Construct the bitmap image without the full-surface copy.
        (WebCore::ImageBuffer::drawPattern): Ditto.

2010-08-20  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Xan Lopez.

        [REGRESSION] r65608 broke gtk distcheck
        https://bugs.webkit.org/show_bug.cgi?id=44333

        Define the inspector.html as a noinst_DATA intead of using the dir
        suffix, which is used for installation.

        * GNUmakefile.am:

2010-08-19  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: implement breaking on DOM node subtree mutations.
        https://bugs.webkit.org/show_bug.cgi?id=42886

        Add two entries to Web Inspector DOM element context menu:
        1. "Stop on subtree modifications": will break on adding/removing of any element which is a child of the DOM element
        2. "Remove breakpoints": will remove all breakpoints associated with the DOM element

        * English.lproj/localizedStrings.js:
        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::breakProgram):
        * bindings/js/ScriptDebugServer.h:
        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::breakProgram):
        (WebCore::ScriptDebugServer::breakProgramCallback):
        (WebCore::ScriptDebugServer::handleV8DebugEvent):
        * bindings/v8/ScriptDebugServer.h:
        * inspector/Inspector.idl:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::~InspectorDOMAgent):
        (WebCore::InspectorDOMAgent::discardBindings):
        (WebCore::InspectorDOMAgent::setDOMBreakpoint):
        (WebCore::InspectorDOMAgent::removeDOMBreakpoint):
        (WebCore::InspectorDOMAgent::didInsertDOMNode):
        (WebCore::InspectorDOMAgent::didRemoveDOMNode):
        (WebCore::InspectorDOMAgent::hasBreakpoint):
        (WebCore::InspectorDOMAgent::pauseOnBreakpoint):
        (WebCore::InspectorDOMAgent::updateSubtreeBreakpoints):
        * inspector/InspectorDOMAgent.h:
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype._populateTagContextMenu):
        * inspector/front-end/Settings.js:

2010-08-20  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: discard InjectedScript reference on ScriptState when clearing injected scripts
        https://bugs.webkit.org/show_bug.cgi?id=44328

        Otherwise if the reference is not cleared we may remove InjectedScript from the
        map on InjectedScriptHost but keep it on ScriptState and try to reuse it later.

        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::discardInjectedScript):
        * bindings/v8/V8HiddenPropertyName.h:
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::discardInjectedScript):
        (WebCore::InjectedScriptHost::injectedScriptFor):
        * inspector/InjectedScript.h:
        (WebCore::InjectedScript::scriptState):
        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::discardInjectedScripts):
        * inspector/InjectedScriptHost.h:

2010-08-20  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Clippers are rasterized, when applied to scaled target object
        https://bugs.webkit.org/show_bug.cgi?id=44325

        Use SVGImageBufferTools logic for RenderSVGResourceClipper, just like RenderSVGResourceMasker/Gradient,
        to avoid pixelation, when the clipper is applied to a scaled target object, or when the document is scaled.

        Test: svg/clip-path/clip-path-pixelation.svg

        * rendering/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::applyClippingToContext):
        (WebCore::RenderSVGResourceClipper::createClipData):
        * rendering/RenderSVGResourceClipper.h:

2010-08-20  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Initialize GDK before loading plugins
        https://bugs.webkit.org/show_bug.cgi?id=44324

        Attempt to call gdk_init_check() before loading any plugins.
        This prevents various crashes and freezes in Adobe's Flash plugin.

        * plugins/qt/PluginPackageQt.cpp:
        (WebCore::initializeGdkIfPossible):
        (WebCore::PluginPackage::load):

2010-08-20  Dan Bernstein  <mitz@apple.com>

        Reviewed by Mark Rowe.

        Follow-up to r41020.

        No change in behavior, thus no new tests.

        * platform/graphics/mac/FontPlatformDataMac.mm:
        (WebCore::FontPlatformData::FontPlatformData): Asserted that the NSFont parameter is not nil,
        and removed nil check.
        (WebCore::FontPlatformData::setFont): Asserted that the NSFont parameter is not nil and that
        this is not the deleted value, and removed code to handle those cases.

2010-08-19  Vincent Scheib  <scheib@chromium.org>

        Reviewed by David Levin.

        [chromium] TilingData::tilePositionY has typo of X where Y should be used
        https://bugs.webkit.org/show_bug.cgi?id=44195

        Corrected error, and rewrote functions to use for loop instead of recursion.

        Unit Tests added to WebKit/chromium/tests/TilingDataTest.cpp

        * platform/graphics/chromium/TilingData.cpp:
        (WebCore::TilingData::tilePositionX):
        (WebCore::TilingData::tilePositionY):

2010-08-19  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Brady Eidson.

        Assertion failure when going back inside frame during onload
        https://bugs.webkit.org/show_bug.cgi?id=44217

        Fix assertion failure when doing a history.back() within the main frame
        during onload of a child frame. This would happen when
        HISTORY_ALWAYS_ASYNC was set to 0, because we would only compare the
        current frame document sequence numbers when determining if we're in the
        same document, instead of also recursing over child frames.

        Test: fast/history/history-back-within-subframe-hash.html

        * history/HistoryItem.cpp:
        (WebCore::HistoryItem::hasSameDocuments):
        * history/HistoryItem.h:
        * loader/RedirectScheduler.cpp:
        (WebCore::RedirectScheduler::scheduleHistoryNavigation):

2010-08-19  Balazs Kelemen  <kb@inf.u-szeged.hu>

        Reviewed by Antonio Gomes.

        [Qt] Fix cursor change propagation
        https://bugs.webkit.org/show_bug.cgi?id=44250

        No functional change so new tests.

        Propagate the setCursor callback to the PageClient via the HostWindow instead of preassuming
        the concrete type of the ChromeClient (what was generally wrong and actually incompatible with WebKit2).
        * platform/qt/WidgetQt.cpp:
        (WebCore::Widget::setCursor):

2010-08-19  Vangelis Kokkevis  <vangelis@chromium.org>

        Reviewed by Kenneth Russell.

        [chromium] Rearranging the accelerated compositing code such that the
        layer rendering logic now lives in the layer classes rather than the
        compositor. This lifts the restriction of having one texture per layer
        and significantly cleans up the compositor code. This change mostly
        resulted in a lot of code moving around files. Noteworthy changes
        include:
        * Made LayerChromium a proper based class for layers that mostly handles
          the updates to the layer properties and superlayer / sublayer updates.
        * Introduced a new layer type, ContentLayerChromium, which handles
          layers that require a GraphicsContext to render their content.
        * ImageLayerChromium and VideoLayerChromium now derive from
          ContentLayerChromium as they share the same shader and draw function.
        * Removed TransformLayerChromium as its functionality is now replaced by
          the base LayerChromium class.
        * Re-arranged the order in which the members of LayerChromium are defined
          in the header file to form a more reasonable logical grouping.
        * Changed LayerRendererChromium to use the shader creation and drawing
          methods defined in the layer classes. As a result, a lot of GL code was
          removed from the implementation file.
        * Eliminated randomly dispersed calls to check for GL errors by a macro (GLC)
          which allows turning error testing on/off with a single define (DEBUG_GL_CALLS
          defined in LayerRendererChromium.h)
        * Replaced the previous layer render loop with two traversals of the layer
          hierarchy, the first to update transforms and opacity values and the
          second to render the layers. Eliminated global Z sorting of all layers as
          it was wrong.
        https://bugs.webkit.org/show_bug.cgi?id=44148

        Test: Verified that pages using the compositor and compositor
              layout tests have not regressed.

        * WebCore.gypi:
        * platform/graphics/chromium/CanvasLayerChromium.cpp:
        (WebCore::CanvasLayerChromium::SharedValues::SharedValues):
        (WebCore::CanvasLayerChromium::SharedValues::~SharedValues):
        (WebCore::CanvasLayerChromium::updateContents):
        (WebCore::CanvasLayerChromium::draw):
        * platform/graphics/chromium/CanvasLayerChromium.h:
        (WebCore::CanvasLayerChromium::SharedValues::canvasShaderProgram):
        (WebCore::CanvasLayerChromium::SharedValues::shaderSamplerLocation):
        (WebCore::CanvasLayerChromium::SharedValues::shaderMatrixLocation):
        (WebCore::CanvasLayerChromium::SharedValues::shaderAlphaLocation):
        (WebCore::CanvasLayerChromium::SharedValues::initialized):
        * platform/graphics/chromium/ContentLayerChromium.cpp: Added.
        (WebCore::ContentLayerChromium::SharedValues::SharedValues):
        (WebCore::ContentLayerChromium::SharedValues::~SharedValues):
        (WebCore::ContentLayerChromium::create):
        (WebCore::ContentLayerChromium::ContentLayerChromium):
        (WebCore::ContentLayerChromium::~ContentLayerChromium):
        (WebCore::ContentLayerChromium::updateContents):
        (WebCore::ContentLayerChromium::updateTextureRect):
        (WebCore::ContentLayerChromium::draw):
        * platform/graphics/chromium/ContentLayerChromium.h: Added.
        (WebCore::ContentLayerChromium::drawsContent):
        (WebCore::ContentLayerChromium::SharedValues::contentShaderProgram):
        (WebCore::ContentLayerChromium::SharedValues::shaderSamplerLocation):
        (WebCore::ContentLayerChromium::SharedValues::shaderMatrixLocation):
        (WebCore::ContentLayerChromium::SharedValues::shaderAlphaLocation):
        (WebCore::ContentLayerChromium::SharedValues::initialized):
        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::GraphicsLayerChromium):
        (WebCore::GraphicsLayerChromium::updateLayerPreserves3D):
        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerChromium::ImageLayerChromium):
        (WebCore::ImageLayerChromium::updateContents):
        * platform/graphics/chromium/ImageLayerChromium.h:
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::loadShader):
        (WebCore::LayerChromium::SharedValues::SharedValues):
        (WebCore::LayerChromium::SharedValues::~SharedValues):
        (WebCore::LayerChromium::LayerChromium):
        (WebCore::LayerChromium::~LayerChromium):
        (WebCore::LayerChromium::createShaderProgram):
        (WebCore::LayerChromium::toGLMatrix):
        (WebCore::LayerChromium::drawTexturedQuad):
        (WebCore::LayerChromium::drawDebugBorder):
        (WebCore::LayerChromium::prepareForDraw):
        * platform/graphics/chromium/LayerChromium.h:
        (WebCore::LayerChromium::getSublayers):
        (WebCore::LayerChromium::setPosition):
        (WebCore::LayerChromium::contentsDirty):
        (WebCore::LayerChromium::drawsContent):
        (WebCore::LayerChromium::updateContents):
        (WebCore::LayerChromium::draw):
        (WebCore::LayerChromium::SharedValues::quadVerticesVbo):
        (WebCore::LayerChromium::SharedValues::quadElementsVbo):
        (WebCore::LayerChromium::SharedValues::maxTextureSize):
        (WebCore::LayerChromium::SharedValues::borderShaderProgram):
        (WebCore::LayerChromium::SharedValues::borderShaderMatrixLocation):
        (WebCore::LayerChromium::SharedValues::borderShaderColorLocation):
        (WebCore::LayerChromium::SharedValues::initialized):
        (WebCore::LayerChromium::layerRenderer):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::LayerRendererChromium):
        (WebCore::LayerRendererChromium::~LayerRendererChromium):
        (WebCore::LayerRendererChromium::debugGLCall):
        (WebCore::LayerRendererChromium::useShader):
        (WebCore::LayerRendererChromium::drawLayers):
        (WebCore::LayerRendererChromium::createLayerTexture):
        (WebCore::LayerRendererChromium::updateLayersRecursive):
        (WebCore::LayerRendererChromium::drawLayersRecursive):
        (WebCore::LayerRendererChromium::drawLayer):
        (WebCore::LayerRendererChromium::checkTextureSize):
        (WebCore::LayerRendererChromium::initializeSharedObjects):
        (WebCore::LayerRendererChromium::cleanupSharedObjects):
        * platform/graphics/chromium/LayerRendererChromium.h:
        (WebCore::LayerRendererChromium::projectionMatrix):
        (WebCore::LayerRendererChromium::layerSharedValues):
        (WebCore::LayerRendererChromium::contentLayerSharedValues):
        (WebCore::LayerRendererChromium::canvasLayerSharedValues):
        * platform/graphics/chromium/TransformLayerChromium.cpp: Removed.
        * platform/graphics/chromium/TransformLayerChromium.h: Removed.
        * platform/graphics/chromium/VideoLayerChromium.cpp:
        (WebCore::VideoLayerChromium::VideoLayerChromium):
        (WebCore::VideoLayerChromium::updateContents):
        (WebCore::VideoLayerChromium::createTextureRect):
        * platform/graphics/chromium/VideoLayerChromium.h:

2010-08-19  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX: Fix Mac build after Windows WebKit2 changes for Netscape Plug-ins

        * WebCore.exp.in:
        (WebCore::ScrollView::contentsToWindow): Added export.

2010-08-19  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX #3: <http://webkit.org/b/44285> Fix compilation with NETSCAPE_PLUGIN_API disabled

        Still trying to make Qt Linux Release minimal buildbot happy.

        * plugins/PluginViewNone.cpp: Compile missing methods for Qt.

2010-08-19  David Kilzer  <ddkilzer@apple.com>

        BUILD FIX: <http://webkit.org/b/44285> Fix compilation with NETSCAPE_PLUGIN_API disabled

        Reviewed by Joseph Pecoraro.

        * plugins/PluginView.cpp: Added #if ENABLE(NETSCAPE_PLUGIN_API)
        and #endif macros around the source to fix the Qt Linux Release
        Minimal build.

2010-08-19  Stephen White  <senorblanco@chromium.org>

        Reviewed by Kenneth Russell.

        [CHROMIUM] Assert w/canvas image draw
        https://bugs.webkit.org/show_bug.cgi?id=44279

        Don't use bitmap->pixelRef()->getPixels() directly; prefer
        bitmap->pixels() and an SkAutoLockPixels.  Also, make sure to set
        the backing store state to Software when it was None.  This handles
        missing draws when the first call is software.  Finally, remove some
        spurious prepareForSoftwareDraw() calls in addPath() and beginPath().
        It's really the fillPath() or strokePath() that matters.

        Covered by LayoutTests/fast/canvas/arc360.html and others.

        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::addPath):
        (WebCore::GraphicsContext::beginPath):
        Remove spurious prepareForSoftwareDraw() calls.
        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::drawBitmapGLES2):
        Lock SkBitmap's pixels, and use ->getPixels().
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::prepareForSoftwareDraw):
        Switch backing store state to Software when it was None.

2010-08-19  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/44285> Fix compilation with NETSCAPE_PLUGIN_API disabled

        Reviewed by Joseph Pecoraro.

        * WebCore.exp.in:
        (WebCore::HTMLPlugInElement::getNPObject): Moved from general
        section into ENABLE(NETSCAPE_PLUGIN_API) section.
        (WebCore::FrameView::windowClipRectForLayer): Moved from
        ENABLE(NETSCAPE_PLUGIN_API) section to general section since
        it's used by WebKit2.
        * plugins/PluginView.h: Added #if ENABLE(NETSCAPE_PLUGIN_API)
        and #endif macros as needed to make iOS WebKit build with
        NETSCAPE_PLUGIN_API disabled.
        * plugins/PluginViewNone.cpp: Ditto.
        (WebCore::PluginView::platformGetValueStatic):

2010-08-17  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Make DocumentParser safer to use
        https://bugs.webkit.org/show_bug.cgi?id=43055

        Make DocumentParser and its subclasses RefCounted, and protect
        HTMLDocumentParser during parsing. It's possible for a parser to
        get deleted if certain actions (e.g., a document.write()) occur
        synchronously.

        The original version of this patch was written by Nate Chapin.

        DocumentParser doesn't actually have to be fully RefCounted, since
        the only two things which should ever hold a reference to it are
        Document and DocumentParser itself.  However using RefCounted and
        RefPtr was easier/cleaner than inventing a custom ref() scheme.

        This deploys a new "detach()" method throughout the parsing
        framework.  detach() causes the parser to disconnect from the
        document so that no further modifications will be made to the
        document while any possible DocumentParser stacks are unwound.

        The irony of this patch is that the new detach() system is never
        used, since Document always outlives the DocumentParser in all of
        our layout tests.  There is an ASSERT in ~Document() to verify
        that the DocumentParser will not outlive the Document.

        However I expect that we will soon either find new test cases, or change
        the architecture in such a way that DocumentParser will outlive
        Document.  At which point, the detach() plumbing will be crucial.
        Right now detach() serves as a safe-guard against use-after-free bugs
        for any case where DocumentParser does outlive the Document.

        This also fixes test cases attached to:
        https://bugs.webkit.org/show_bug.cgi?id=42099

        Tests: fast/frames/document-write-in-iframe-onload.html
               fast/frames/set-parent-src-synchronously.html
               fast/parser/document-close-iframe-load.html
               fast/parser/document-close-nested-iframe-load.html
               fast/parser/iframe-sets-parent-to-javascript-url.html

        * dom/Document.cpp:
         - Added a new detachParser() call to be used anywhere we
           used to call m_parser.clear().
           There is an ASSERT in ~DocumentParser which ensures that
           we get this right.
        (WebCore::Document::removedLastRef):
        (WebCore::Document::~Document):
        (WebCore::Document::createParser):
        (WebCore::Document::detachParser):
        (WebCore::Document::cancelParsing):
        (WebCore::Document::implicitOpen):
         - removed redundant m_parser.clear()
        (WebCore::Document::implicitClose):
        * dom/Document.h:
        * dom/DocumentParser.cpp:
        (WebCore::DocumentParser::~DocumentParser):
         - ASSERT that callers always call detach() before destruction.
         - This ASSERT might prove too cumbersome, but for now it's useful.
        (WebCore::DocumentParser::detach):
        * dom/DocumentParser.h:
        * dom/RawDataDocumentParser.h:
        * dom/XMLDocumentParser.cpp:
        (WebCore::XMLDocumentParser::finish):
         - Add a FIXME explaining part of the reason why
           stopParsing() and detach() are separate concepts.
        * dom/XMLDocumentParser.h:
        (WebCore::XMLDocumentParser::create):
        * dom/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::parseDocumentFragment):
        * dom/XMLDocumentParserQt.cpp:
        (WebCore::XMLDocumentParser::parseDocumentFragment):
        * html/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::detach):
        (WebCore::HTMLConstructionSite::dispatchDocumentElementAvailableIfNeeded):
        * html/HTMLConstructionSite.h:
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::createParser):
        * html/HTMLDocument.h:
        * html/HTMLDocumentParser.cpp:
         - We need to protect(this) before calling into any code
           which might cause the parser to be destroyed.
        (WebCore::HTMLDocumentParser::~HTMLDocumentParser):
        (WebCore::HTMLDocumentParser::detach):
        (WebCore::HTMLDocumentParser::resumeParsingAfterYield):
        (WebCore::HTMLDocumentParser::pumpTokenizer):
        (WebCore::HTMLDocumentParser::insert):
        (WebCore::HTMLDocumentParser::append):
        (WebCore::HTMLDocumentParser::end):
        (WebCore::HTMLDocumentParser::finish):
        (WebCore::HTMLDocumentParser::notifyFinished):
        (WebCore::HTMLDocumentParser::executeScriptsWaitingForStylesheets):
        (WebCore::HTMLDocumentParser::parseDocumentFragment):
        * html/HTMLDocumentParser.h:
        (WebCore::HTMLDocumentParser::create):
        * html/HTMLScriptRunner.cpp:
        (WebCore::HTMLScriptRunner::detach):
        (WebCore::HTMLScriptRunner::executeParsingBlockingScript):
        (WebCore::HTMLScriptRunner::executeScript):
        (WebCore::HTMLScriptRunner::executeScriptsWaitingForStylesheets):
        (WebCore::HTMLScriptRunner::runScript):
        * html/HTMLScriptRunner.h:
        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::detach):
        (WebCore::HTMLTreeBuilder::passTokenToLegacyParser):
        (WebCore::HTMLTreeBuilder::finished):
        * html/HTMLTreeBuilder.h:
        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::createParser):
        * html/HTMLViewSourceDocument.h:
        * html/HTMLViewSourceParser.cpp:
        (WebCore::HTMLViewSourceParser::HTMLViewSourceParser):
        * html/HTMLViewSourceParser.h:
        (WebCore::HTMLViewSourceParser::create):
        * loader/FTPDirectoryDocument.cpp:
        (WebCore::FTPDirectoryDocumentParser::create):
        (WebCore::FTPDirectoryDocument::createParser):
        * loader/FTPDirectoryDocument.h:
        * loader/ImageDocument.cpp:
        (WebCore::ImageDocumentParser::create):
        (WebCore::ImageDocumentParser::ImageDocumentParser):
        (WebCore::ImageDocument::createParser):
        * loader/ImageDocument.h:
        * loader/MediaDocument.cpp:
        (WebCore::MediaDocumentParser::create):
        (WebCore::MediaDocument::createParser):
        * loader/MediaDocument.h:
        * loader/PluginDocument.cpp:
        (WebCore::PluginDocumentParser::create):
        (WebCore::PluginDocument::createParser):
        * loader/PluginDocument.h:
        * loader/SinkDocument.cpp:
        (WebCore::SinkDocumentParser::create):
        (WebCore::SinkDocument::createParser):
        * loader/SinkDocument.h:
        * loader/TextDocument.cpp:
        (WebCore::TextDocumentParser::create):
        (WebCore::TextDocument::createParser):
        (WebCore::createTextDocumentParser):
        * loader/TextDocument.h:

2010-08-19  David Kilzer  <ddkilzer@apple.com>

        Fix compilation of SelectElement.cpp with ARROW_KEYS_POP_MENU == 0

        Reviewed by Simon Fraser.

        * dom/SelectElement.cpp:
        (WebCore::SelectElement::menuListDefaultEventHandler): Added
        UNUSED_PARAM() macro for htmlForm argument when
        ARROW_KEYS_POP_MENU defined as zero.

2010-08-19  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Disable XSLT for production configuration
        https://bugs.webkit.org/show_bug.cgi?id=37445

        Introduce a new CONFIG option to maintain stable configuration for
        the QtWebKit port and disable XSLT for the stable configuration
        because of bug 37445.

        No new tests as there is no new functionality.

        * features.pri:

2010-08-18  Zhenyao Mo  <zmo@google.com>

        Reviewed by Kenneth Russell.

        Implement strict type checking in js bindings for WebGL functions
        https://bugs.webkit.org/show_bug.cgi?id=44202

        Test: fast/canvas/webgl/bad-arguments-test.html

        * bindings/js/JSWebGLRenderingContextCustom.cpp: Add type check for wrapper types and DOMString and throw error in case of mismatch.
        (WebCore::JSWebGLRenderingContext::getAttachedShaders):
        (WebCore::JSWebGLRenderingContext::getProgramParameter):
        (WebCore::JSWebGLRenderingContext::getShaderParameter):
        (WebCore::JSWebGLRenderingContext::getUniform):
        (WebCore::dataFunctionf):
        (WebCore::dataFunctioni):
        (WebCore::dataFunctionMatrix):
        * bindings/scripts/CodeGeneratorJS.pm: Ditto.
        * bindings/scripts/CodeGeneratorV8.pm: Ditto.
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp: Ditto.
        (WebCore::V8WebGLRenderingContext::getAttachedShadersCallback):
        (WebCore::V8WebGLRenderingContext::getProgramParameterCallback):
        (WebCore::V8WebGLRenderingContext::getShaderParameterCallback):
        (WebCore::V8WebGLRenderingContext::getUniformCallback):
        (WebCore::vertexAttribAndUniformHelperf):
        (WebCore::uniformHelperi):
        (WebCore::uniformMatrixHelper):
        * html/canvas/WebGLRenderingContext.idl: Add attribute StrictTypeChecking for WebGL functions.

2010-08-19  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Sam Weinig.

        Clean up some selection code
        https://bugs.webkit.org/show_bug.cgi?id=44314
        
        Change the concept of "layout" in SelectionController to "updateCaretRect", renaming
        methods accordingly.
        
        Move selection and printing methods in RenderView.h into groups.

        No behavioral changes.

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::SelectionController):
        (WebCore::SelectionController::setSelection):
        (WebCore::SelectionController::modify):
        (WebCore::SelectionController::setCaretRectNeedsUpdate):
        (WebCore::SelectionController::updateCaretRect):
        (WebCore::SelectionController::localCaretRect):
        (WebCore::SelectionController::recomputeCaretRect): Test m_caretRectNeedsUpdate first.
        (WebCore::SelectionController::invalidateCaretRect):
        * editing/SelectionController.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::layout):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::scrollToOffset):
        * rendering/RenderView.h:
        (WebCore::RenderView::selectionStart):
        (WebCore::RenderView::selectionEnd):
        (WebCore::RenderView::printRect):
        (WebCore::RenderView::setPrintRect):

2010-08-19  Simon Fraser  <simon.fraser@apple.com>

        Fix Chromium build.
        
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::attributeChanged):

2010-08-19  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Nikolas Zimmermann.

        HTMLElement::isContentEditable() can cause an updateStyleIfNeeded() to happen in the middle of layout
        https://bugs.webkit.org/show_bug.cgi?id=21834
        <rdar://problem/8093653&8261394>
        
        If we're in the middle of layout, or painting, and something causes updateStyleIfNeeded() to
        get called, then we can end up entering recalcStyle() during layout or painting. This is bad
        because it can create/destry the renderers and RenderLayers which are in use by layout/painting.
        This is the cause of a number of random crashers, some of which show up more frequently
        in content which uses accelerated compositing.
        
        The changes here:
        1. Add an assertion in Document::updateStyleIfNeeded() that we are not laying out or painting.
        2. Remove calls to updateStyleIfNeeded() in editing and caret painting code
        3. Pass along information to CTM and BBox-related SVG methods to indicate whether it's safe
           to update style.

        Tested by new assertions and existing tests.

        * dom/Document.cpp:
        (WebCore::Document::updateStyleIfNeeded): New assertion that we are not mid-layout or painting.
        (WebCore::command): Call updateStyleIfNeeded() to ensure that subsequent calls to isContentEditable()
        return the correct result.

        * dom/Element.cpp:
        (WebCore::Element::focus): Move the supportsFocus() call to after style has been updated.

        * editing/SelectionController.cpp:
        (WebCore::SelectionController::localCaretRect):
        (WebCore::SelectionController::caretRepaintRect):
        (WebCore::SelectionController::paintCaret):
        * editing/SelectionController.h:
        (WebCore::SelectionController::localCaretRectForPainting): When painting, use localCaretRectForPainting()
        which does not update style. Make localCaretRect() non-const so allowing it to update style without ugly casts.

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::isContentEditable): Don't call updateStyleIfNeeded() here.
        (WebCore::HTMLElement::isContentRichlyEditable): Ditto.
        (WebCore::HTMLElement::contentEditable): Ditto.

        * page/FrameView.h:
        (WebCore::FrameView::isMidLayout): New accessor, used for asserting.

        * rendering/RenderPath.cpp:
        (WebCore::fillAndStrokePath): Pass DisallowStyleUpdate to getScreenCTM since we are painting.
        * rendering/RenderSVGResourceContainer.cpp:
        (WebCore::RenderSVGResourceContainer::transformOnNonScalingStroke): This is only called when
        painting, so use DisallowStyleUpdate.

        * svg/SVGElement.cpp:
        (WebCore::SVGElement::attributeChanged): Changes to the style attribute should not have
        side effects, since a call to Element::getAttribute() is allowed to result in a call to
        setAttribute() for the style attribute. To avoid updateStyleIfNeeded() during painting,
        this must not cause SVG to do extra work.

        * svg/SVGLocatable.cpp: Pass StyleUpdateStrategy down to these methods to indicate
        whether it's OK to update style.
        (WebCore::SVGLocatable::getBBox):
        (WebCore::SVGLocatable::computeCTM):
        (WebCore::SVGLocatable::getTransformToElement):
        * svg/SVGLocatable.h:
        (WebCore::SVGLocatable::):
        * svg/SVGStyledLocatableElement.cpp:
        (WebCore::SVGStyledLocatableElement::getBBox):
        (WebCore::SVGStyledLocatableElement::getCTM):
        (WebCore::SVGStyledLocatableElement::getScreenCTM):
        * svg/SVGStyledLocatableElement.h:
        * svg/SVGStyledTransformableElement.cpp:
        (WebCore::SVGStyledTransformableElement::getCTM):
        (WebCore::SVGStyledTransformableElement::getScreenCTM):
        (WebCore::SVGStyledTransformableElement::getBBox):
        * svg/SVGStyledTransformableElement.h:
        * svg/SVGTextElement.cpp:
        (WebCore::SVGTextElement::getBBox):
        (WebCore::SVGTextElement::getCTM):
        (WebCore::SVGTextElement::getScreenCTM):
        * svg/SVGTextElement.h:

2010-08-19  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        Range, EAnnotateForInterchange, and EAbsoluteURLs should be member variables of MarkupAccumulator
        https://bugs.webkit.org/show_bug.cgi?id=44229

        No new tests are added since this is a clean up.

        * editing/markup.cpp:
        (WebCore::MarkupAccumulator::MarkupAccumulator): Added shouldResolveURLs, shouldAnnotate, and range.
        (WebCore::MarkupAccumulator::shouldResolveURLs): Private inline accessor for m_shouldResolveURLs.
        (WebCore::MarkupAccumulator::shouldAnnotate): Private inline accessor for m_shouldAnnotate.
        (WebCore::MarkupAccumulator::appendEndTag): Renamed local variable result to markup.
        (WebCore::MarkupAccumulator::appendStartTag): Removed range, annotate, shouldResolveURLs from the function arguments.
        (WebCore::MarkupAccumulator::wrapWithNode): Ditto.
        (WebCore::MarkupAccumulator::appendStartMarkup): Ditto.
        (WebCore::serializeNodes): Ditto and uses MarkupAccumulator.
        (WebCore::createMarkup): Uses MarkupAccumulator.
        (WebCore::serializeNodesWithNamespaces): Ditto.

2010-08-19  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: do not dump inspector errors into the inspected window console.
        https://bugs.webkit.org/show_bug.cgi?id=44272

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

2010-08-19  Jeremy Orlow  <jorlow@chromium.org>

        Chromium build fix.

        Use ASSERT_UNUSED on variables that aren't used besides by the ASSERT.

        * storage/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::createObjectStore):
        (WebCore::IDBDatabaseBackendImpl::removeObjectStore):
        (WebCore::IDBDatabaseBackendImpl::loadObjectStores):
        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::get):
        (WebCore::IDBObjectStoreBackendImpl::put):
        (WebCore::IDBObjectStoreBackendImpl::remove):
        (WebCore::IDBObjectStoreBackendImpl::createIndex):
        (WebCore::IDBObjectStoreBackendImpl::removeIndex):
        (WebCore::IDBObjectStoreBackendImpl::openCursor):
        (WebCore::IDBObjectStoreBackendImpl::loadIndexes):

2010-08-19  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: expose Panel.onSelectionChanged in extension API
        https://bugs.webkit.org/show_bug.cgi?id=44171

        * inspector/front-end/ExtensionAPI.js:
        (injectedExtensionAPI.PanelImpl):
        (injectedExtensionAPI):

2010-08-19  Andrei Popescu  <andreip@google.com>

        Reviewed by Jeremy Orlow.

        [IndexedDB] Abort idle IDBTransactions when the JS context they were created in finishes execution.
        https://bugs.webkit.org/show_bug.cgi?id=44101

        This change also introduces the TransactionCoordinator, which will be used
        to schedule transactions for execution.

        Test: storage/indexeddb/transaction-basics.html

        * WebCore.gypi:
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::convertEventTargetToV8Object):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::runScript):
        (WebCore::V8Proxy::callFunction):
        (WebCore::V8Proxy::didLeaveScriptContext):
        * bindings/v8/V8Proxy.h:
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::toIDBTransaction):
        * dom/EventTarget.h:
        * page/PageGroup.h:
        (WebCore::PageGroup::hasIDBFactory):
        * storage/IDBAbortEvent.cpp: Added.
        (WebCore::IDBAbortEvent::create):
        (WebCore::IDBAbortEvent::IDBAbortEvent):
        (WebCore::IDBAbortEvent::~IDBAbortEvent):
        * storage/IDBAbortEvent.h: Added.
        (WebCore::IDBAbortEvent::isIDBAbortEvent):
        * storage/IDBDatabase.cpp:
        (WebCore::IDBDatabase::transaction):
        * storage/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::IDBDatabaseBackendImpl):
        (WebCore::IDBDatabaseBackendImpl::transaction):
        * storage/IDBDatabaseBackendImpl.h:
        (WebCore::IDBDatabaseBackendImpl::create):
        * storage/IDBDatabaseBackendInterface.h:
        * storage/IDBFactoryBackendImpl.cpp:
        (WebCore::IDBFactoryBackendImpl::IDBFactoryBackendImpl):
        (WebCore::IDBFactoryBackendImpl::open):
        (WebCore::IDBFactoryBackendImpl::abortPendingTransactions):
        * storage/IDBFactoryBackendImpl.h:
        * storage/IDBFactoryBackendInterface.h:
        * storage/IDBPendingTransactionMonitor.cpp: Added.
        (WebCore::IDBPendingTransactionMonitor::addPendingTransaction):
        (WebCore::IDBPendingTransactionMonitor::removePendingTransaction):
        (WebCore::IDBPendingTransactionMonitor::clearPendingTransactions):
        (WebCore::IDBPendingTransactionMonitor::pendingTransactions):
        * storage/IDBPendingTransactionMonitor.h: Added.
        * storage/IDBTransaction.cpp:
        (WebCore::IDBTransaction::IDBTransaction):
        (WebCore::IDBTransaction::onAbort):
        (WebCore::IDBTransaction::id):
        (WebCore::IDBTransaction::stop):
        (WebCore::IDBTransaction::timerFired):
        * storage/IDBTransaction.h:
        * storage/IDBTransactionBackendInterface.h:
        * storage/IDBTransactionCallbacks.h: Added.
        (WebCore::IDBTransactionCallbacks::~IDBTransactionCallbacks):
        * storage/IDBTransactionCoordinator.cpp: Added.
        (WebCore::IDBTransactionBackendImpl::~IDBTransactionBackendImpl):
        (WebCore::IDBTransactionBackendImpl::create):
        (WebCore::IDBTransactionBackendImpl::IDBTransactionBackendImpl):
        (WebCore::IDBTransactionBackendImpl::objectStore):
        (WebCore::IDBTransactionBackendImpl::mode):
        (WebCore::IDBTransactionBackendImpl::scheduleTask):
        (WebCore::IDBTransactionBackendImpl::abort):
        (WebCore::IDBTransactionBackendImpl::sqliteDatabase):
        (WebCore::IDBTransactionBackendImpl::id):
        (WebCore::IDBTransactionBackendImpl::setCallbacks):
        (WebCore::IDBTransactionCoordinator::IDBTransactionCoordinator):
        (WebCore::IDBTransactionCoordinator::~IDBTransactionCoordinator):
        (WebCore::IDBTransactionCoordinator::createTransaction):
        (WebCore::IDBTransactionCoordinator::abort):
        * storage/IDBTransactionCoordinator.h: Added.
        (WebCore::IDBTransactionCoordinator::create):

2010-08-19  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Chromium DevTools: There is no need in resource-based InjectedScript.js source.
        Now that we populate front-end after its onload handler, we don't need
        to install injected script early. Exposing injected script source on the WebCore
        level here.
        https://bugs.webkit.org/show_bug.cgi?id=44029

        * inspector/InjectedScriptHost.h:
        (WebCore::InjectedScriptHost::injectedScriptSource):

2010-08-18  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Steve Block.

        Implement persistance for IndexedDB ObjectStores
        https://bugs.webkit.org/show_bug.cgi?id=44164

        Get rid of the in-memory storage of ObjectStores and instead
        use SQL backed memory.

        Existing tests give most of the coverage.  Will update the manual
        test in the next patch (which will also re-work database.description).

        * manual-tests/indexed-database.html: Get rid of race where you can click before the page loads.
        * platform/sql/SQLiteStatement.cpp: Add two helper functions
        (WebCore::SQLiteStatement::bindInt):
        (WebCore::SQLiteStatement::isColumnNull):
        * platform/sql/SQLiteStatement.h:
        * storage/IDBCursorBackendImpl.cpp: 
        * storage/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::IDBDatabaseBackendImpl):
        (WebCore::IDBDatabaseBackendImpl::createObjectStore):
        (WebCore::IDBDatabaseBackendImpl::removeObjectStore):
        (WebCore::IDBDatabaseBackendImpl::importObjectStores):
        * storage/IDBDatabaseBackendImpl.h:
        (WebCore::IDBDatabaseBackendImpl::sqliteDatabase):
        * storage/IDBFactoryBackendImpl.cpp:
        (WebCore::createTables):
        * storage/IDBIndexBackendImpl.cpp:
        (WebCore::IDBIndexBackendImpl::IDBIndexBackendImpl):
        (WebCore::IDBIndexBackendImpl::sqliteDatabase):
        * storage/IDBIndexBackendImpl.h:
        (WebCore::IDBIndexBackendImpl::create):
        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::IDBObjectStoreBackendImpl):
        (WebCore::whereClause):
        (WebCore::bindKey):
        (WebCore::IDBObjectStoreBackendImpl::get):
        (WebCore::IDBObjectStoreBackendImpl::put):
        (WebCore::IDBObjectStoreBackendImpl::remove):
        (WebCore::IDBObjectStoreBackendImpl::createIndex):
        (WebCore::IDBObjectStoreBackendImpl::removeIndex):
        (WebCore::IDBObjectStoreBackendImpl::openCursor):
        (WebCore::IDBObjectStoreBackendImpl::importIndexes):
        (WebCore::IDBObjectStoreBackendImpl::sqliteDatabase):
        * storage/IDBObjectStoreBackendImpl.h:
        (WebCore::IDBObjectStoreBackendImpl::create):
        (WebCore::IDBObjectStoreBackendImpl::database):

2010-08-19  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Pattern is rasterized
        https://bugs.webkit.org/show_bug.cgi?id=41396

        SVG pattern size changed when resizing browser
        https://bugs.webkit.org/show_bug.cgi?id=38704

        Incorrect pattern tilling
        https://bugs.webkit.org/show_bug.cgi?id=41603

        Apply same fixes to <pattern> that <mask> recently received. Build the tile image in absolute coordinates,
        to avoid pixelation, when the target element is scaled. Also fixes problems when zooming into patterns.

        Clamp ImageBuffer sizes to RenderSVGRoots viewport, now that gradient/pattern and mask buffers are created
        in absolute coordinates -> no more huge image buffer allocations, that could fail.

        Drop overflow="visible" support for <pattern>, which complicates the code a lot. Neither Opera nor Firefox
        support this, and SVG 1.1 2nd Edition says that the rendering behaviour is "undefined".

        Tests: svg/batik/paints/patternRegions-positioned-objects.svg
               svg/custom/pattern-incorrect-tiling.svg
               svg/custom/pattern-no-pixelation.svg
               svg/transforms/text-with-mask-with-svg-transform.svg

        * rendering/PaintInfo.h:
        (WebCore::PaintInfo::applyTransform): Don't alter the repaint rect if it's infinite (only affects SVG).
        (WebCore::PaintInfo::infiniteRect): Moved from RenderLayer into PaintInfo, as applyTransform() needs it.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::calculateClipRects): s/ClipRects::infiniteRect/PaintInfo::infiniteRect/
        * rendering/RenderLayer.h: Moved infiniteRect() to PaintInfo.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::clipBox): s/ClipRects::infiniteRect/PaintInfo::infiniteRect/
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::clippedByAncestor): Ditto.
        * rendering/RenderSVGResourceGradient.cpp:
        (WebCore::createMaskAndSwapContextForTextGradient): Clamp image buffer size, use new SVGImageBufferTools helper methods for that.
        (WebCore::clipToTextMask): Adapt to renames/code changes in SVGImageBufferTools. 
        (WebCore::RenderSVGResourceGradient::applyResource): Ditto.
        * rendering/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::applyResource): lamp image buffer size, use new SVGImageBufferTools helper methods for that.
        (WebCore::RenderSVGResourceMasker::drawContentIntoMaskImage): Adapt to renames/code changes in SVGImageBufferTools.
        * rendering/RenderSVGResourceMasker.h:
        * rendering/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::applyResource): Rewrite to create tile image buffers in absolute coordinates, avoids pixelation artefacts.
        (WebCore::calculatePatternBoundaries):
        (WebCore::RenderSVGResourcePattern::buildTileImageTransform):
        (WebCore::RenderSVGResourcePattern::createTileImage):
        * rendering/RenderSVGResourcePattern.h:
        * rendering/SVGImageBufferTools.cpp:
        (WebCore::SVGImageBufferTools::transformationToOutermostSVGCoordinateSystem): Helper method, concating all localToParentTransforms() up until RenderSVGRoot is reached.
        (WebCore::SVGImageBufferTools::createImageBuffer): Simplified.
        (WebCore::SVGImageBufferTools::clipToImageBuffer): Rename absoluteTargetRect to clampedAbsoluteTargetRect.
        (WebCore::SVGImageBufferTools::roundedImageBufferSize): New helper method to centralize FloatSize -> IntSize rounding, when creating image buffers.
        (WebCore::SVGImageBufferTools::clampedAbsoluteTargetRectForRenderer): New helper methods to clamp an image buffer rect against the viewport.
        * rendering/SVGImageBufferTools.h:
        * rendering/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::renderSubtreeToImage): Use PaintInfo::infiniteRect() as repaint rect, to avoid any culling. 
        (WebCore::SVGRenderSupport::findTreeRootObject): Renamed from svgRootTreeObject, and expose it.
        (WebCore::SVGRenderSupport::layoutChildren): s/svgRootTreeObject/findTreeRootObject/.
        * rendering/SVGRenderSupport.h:
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::setCurrentTranslate): Be sure to relayout on invalidation, otherwhise resources are not updated, and we have to update them, as they depend on the absolute transform.

2010-08-19  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Dirk Schulze.

        [GTK] The size of the shadow image uses the standard deviation
        size instead of the blur radius
        https://bugs.webkit.org/show_bug.cgi?id=40793

        The kernelSize variable was renamed to radius and recalculated
        considering the CSS3 specification
        http://www.w3.org/TR/css3-background/#the-box-shadow, and the
        visual result of other browsers. The HTML5 canvas shadow standard
        deviation calculation that was used, was not appropiate for the
        blur distance specified in the CSS3.

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cairo/FontCairo.cpp:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::calculateShadowBufferDimensions):
        Changed the calculation, now we use the parameter in the style
        directly as recomended in the CSS3 standard.
        (WebCore::drawPathShadow):
        (WebCore::drawBorderlessRectShadow):
        (WebCore::GraphicsContext::createPlatformShadow): We get the
        standard deviation from the radius using the new function and we
        create the filter with that deviation.
        * platform/graphics/cairo/ImageCairo.cpp:
        (WebCore::BitmapImage::draw):
        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::FEGaussianBlur::calculateStdDeviation):  Added this
        function that gets the standard deviation from the blur
        radius. Required in the CSS3 case where we have this radio and we
        need the deviation to initialize the algorithm.
        * platform/graphics/filters/FEGaussianBlur.h:

2010-08-19  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Avoid unnecessary string copy in TextCodecQt::decode()
        https://bugs.webkit.org/show_bug.cgi?id=44232

        * platform/text/qt/TextCodecQt.cpp:
        (WebCore::TextCodecQt::decode): Use String::append(const UChar*, int)
        to avoid creating a temporary string.

2010-08-19  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GStreamer] GTK XOverlay support in GStreamerGWorld
        https://bugs.webkit.org/show_bug.cgi?id=39474

        GStreamerGWorld now catches synchronous messages coming from the
        sinks and creates a GTK window where the video can be overlayed if
        fullscreen display is requested using enterFullscreen.

        * GNUmakefile.am:
        * platform/graphics/gstreamer/GStreamerGWorld.cpp:
        (WebCore::gstGWorldSyncMessageCallback):
        (WebCore::GStreamerGWorld::GStreamerGWorld):
        (WebCore::GStreamerGWorld::~GStreamerGWorld):
        (WebCore::GStreamerGWorld::enterFullscreen):
        (WebCore::GStreamerGWorld::exitFullscreen):
        (WebCore::GStreamerGWorld::setWindowOverlay):
        * platform/graphics/gstreamer/GStreamerGWorld.h:
        (WebCore::GStreamerGWorld::pipeline):
        (WebCore::GStreamerGWorld::platformVideoWindow):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        * platform/graphics/gstreamer/PlatformVideoWindow.h: Added.
        (WebCore::PlatformVideoWindow::createWindow):
        (WebCore::PlatformVideoWindow::window):
        (WebCore::PlatformVideoWindow::videoWindowId):
        * platform/graphics/gstreamer/PlatformVideoWindowGtk.cpp: Added.
        (PlatformVideoWindow::PlatformVideoWindow):

2010-08-19  Eric Uhrhane  <ericu@chromium.org>

        Reviewed by David Levin.

        Add idl and mock classes for FileWriter.
        https://bugs.webkit.org/show_bug.cgi?id=44075

        No new tests, since there's no new functionality.

        New do-nothing classes, but the real IDL:
        * FileWriter.idl:
        * FileWriter.h:
        * FileWriter.cpp:

        The build file changes to include the above:
        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:

        Added FileWriter event names and required EventTarget changes.
        * dom/EventNames.h:
        * dom/EventTarget.cpp:
        (WebCore::EventTarget::toFileWriter):
        * dom/EventTarget.h:

2010-08-18  Andreas Kling  <andreas.kling@nokia.com>

        Rubber-stamped by Ariya Hidayat.

        [Qt] Remove unused variable in GraphicsContext::fillRect()

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

2010-08-18  Ariya Hidayat  <ariya@sencha.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Short lived shadow buffer for blur operation
        https://bugs.webkit.org/show_bug.cgi?id=44094

        ContextShadow needs a scratch image as the buffer for the blur filter.
        Instead of creating and destroying the buffer for every operation,
        we create a buffer which will be automatically purged via a timer.

        * platform/graphics/qt/ContextShadow.cpp:
        (WebCore::):
        (WebCore::ShadowBuffer::ShadowBuffer):
        (WebCore::ShadowBuffer::scratchImage):
        (WebCore::ShadowBuffer::schedulePurge):
        (WebCore::ShadowBuffer::purgeBuffer):
        (WebCore::ContextShadow::drawShadowRect):

2010-08-18  Alexey Marinichev  <amarinichev@chromium.org>

        Reviewed by Darin Fisher.

        [chromium] scrolling issues when accelerated compositor is enabled
        https://bugs.webkit.org/show_bug.cgi?id=43992

        Corrected scroll position not being updated, and an off-by-half error.
        Int cast and floorf are taken out because they produce incorrect
        transformation matrix.  The information lost there is not immediately
        obvious because of rounding that happens when texture is mapped with
        GL_NEAREST filtering mode.  These errors accumulate, and after some
        scrolling it becomes more apparent.

        To test the former, follow instructions in the bug.  To test the
        latter, change GL_NEAREST to GL_LINEAR in LayerRendererChromium.cpp.
        Scrolling should work properly for all window sizes, without blurring
        images and shifting them to the left.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::drawLayers):

2010-08-18  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Ariya Hidayat.

        [Qt] Implement GraphicsContext::clipOut more efficiently
        https://bugs.webkit.org/show_bug.cgi?id=43416

        The current implementation of clipOut uses QPainter::clipRegion().boundingRect(),
        which is a very slow function because it converts the entire clip region - which
        may potentially contain a complex path - into a set of QRegion rectangles, just
        to throw away all that information and use the bounding rect.

        QTBUG-12618 implements a faster function in QPainter: QPainter::clipBoundingRect().

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::clipOut): Use QPainter::clipBoundingRect() with Qt >= 4.8.
        (WebCore::GraphicsContext::clipOutEllipseInRect): Ditto.

2010-08-18  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] Since the GSEAL changes moz_gtk_scrollbar_button_paint fiddles the widget allocation but doesn't preserve it
        https://bugs.webkit.org/show_bug.cgi?id=44211

        No new tests as we do not currently use the scrollbar button painting
        code. Tests for this issue will be enabled when we have pixel tests
        for WebCore-drawn interior frame scrollbars.

        * platform/gtk/GtkVersioning.h: Add backward-compatible functions for getting
        and setting the widget allocation.
        * platform/gtk/gtk2drawing.c:
        (moz_gtk_scrollbar_button_paint): Use new backward-compatible functions for getting
        and setting the widget allocation.

2010-08-18  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        Group functions in markup.cpp into MarkupAccumulatorWrapper
        https://bugs.webkit.org/show_bug.cgi?id=43936

        Renamed MarkupAccumulatorWrapper to MarkupAccumulator and moved the MarkupAccumulatorWrapper
        to the top of markup.cpp. Made various functions private member functions of MarkupAccumulator.

        No new tests are added since this is a cleanup.

        * editing/markup.cpp:
        (WebCore::MarkupAccumulator::):
        (WebCore::MarkupAccumulator::MarkupAccumulator):
        (WebCore::MarkupAccumulator::appendString):
        (WebCore::MarkupAccumulator::appendStartTag):
        (WebCore::MarkupAccumulator::appendEndTag):
        (WebCore::MarkupAccumulator::wrapWithNode):
        (WebCore::MarkupAccumulator::wrapWithStyleNode):
        (WebCore::MarkupAccumulator::takeResults):
        (WebCore::MarkupAccumulator::appendAttributeValue):
        (WebCore::MarkupAccumulator::escapeContentText):
        (WebCore::MarkupAccumulator::appendQuotedURLAttributeValue):
        (WebCore::MarkupAccumulator::stringValueForRange):
        (WebCore::MarkupAccumulator::ucharRange):
        (WebCore::MarkupAccumulator::appendUCharRange):
        (WebCore::MarkupAccumulator::renderedText):
        (WebCore::MarkupAccumulator::shouldAddNamespaceElement):
        (WebCore::MarkupAccumulator::shouldAddNamespaceAttribute):
        (WebCore::MarkupAccumulator::appendNamespace):
        (WebCore::MarkupAccumulator::appendDocumentType):
        (WebCore::MarkupAccumulator::removeExteriorStyles):
        (WebCore::MarkupAccumulator::appendStartMarkup):
        (WebCore::MarkupAccumulator::shouldSelfClose):
        (WebCore::MarkupAccumulator::appendEndMarkup):
        (WebCore::serializeNodes):
        (WebCore::createMarkup):
        (WebCore::serializeNodesWithNamespaces):

2010-08-18  Beth Dakin  <bdakin@apple.com>

        Reviewed by Sam Weinig.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=44207 Empty mfrac 
        and empty munderover cause crashes
       -and corresponding-
        <rdar://problem/8325160>

        This is just a  matter of adding null checks in the right places.
        * mathml/RenderMathMLFraction.cpp:
        (WebCore::RenderMathMLFraction::baselinePosition):
        * mathml/RenderMathMLUnderOver.cpp:
        (WebCore::RenderMathMLUnderOver::baselinePosition):

2010-08-18  Jian Li  <jianli@chromium.org>

        Reviewed by David Levin.

        Move FileStream to platform.
        https://bugs.webkit.org/show_bug.cgi?id=44213

        In addition to moving files over, FileStream has been changed to remove
        ExceptionCode dependency. Also update FileStreamProxy and FileRead to
        account for this change.

        * Android.mk:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/FileReader.cpp:
        (WebCore::FileReader::didOpen):
        * html/FileReader.h:
        * html/FileStream.cpp: Removed.
        * html/FileStream.h: Removed.
        * html/FileStreamClient.h:
        (WebCore::FileStreamClient::didTruncate):
        (WebCore::FileStreamClient::didOpen):
        * html/FileStreamProxy.cpp:
        (WebCore::didOpen):
        (WebCore::FileStreamProxy::openForReadOnFileThread):
        (WebCore::FileStreamProxy::openForWriteOnFileThread):
        (WebCore::FileStreamProxy::write):
        (WebCore::FileStreamProxy::writeOnFileThread):
        (WebCore::didTruncate):
        (WebCore::FileStreamProxy::truncateOnFileThread):
        * html/FileStreamProxy.h:
        * platform/FileStream.cpp: Renamed from WebCore/FileStream.cpp and updated.
        * platform/FileStream.h: Renamed from WebCore/FileStream.h and updated.

2010-08-18  Jian Li  <jianli@chromium.org>

        Reviewed by Darin Fisher.

        Chromium side implementation of blob data and blob registry.
        https://bugs.webkit.org/show_bug.cgi?id=43871

        Wrap !PLATFORM(CHROMIUM) around blobRegistry() so that chromium uses the
        implementation in WebKit Chromium.

        * platform/network/BlobRegistryImpl.cpp:

2010-08-18  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] Bots are showing lots of GTK_IS_CONTAINER critical warnings
        https://bugs.webkit.org/show_bug.cgi?id=40990

        Instead of relying on the ScrollView's adjustment members to determine if a
        Scrollbar should be native or just a shell of the parent's scrollbar (main frame
        scrollbar), just check if this ScrollView has a parent. This will ensure the
        correct behavior when main frame scrollbar's are created after the ScrollView's
        containing adjustments go away.

        Lack of warnings during tests are the test for this fix.

        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::createScrollbar): Decide what type of scrollbar to make based
        on the result of the parent() method.
        * platform/gtk/ScrollbarGtk.cpp:
        (ScrollbarGtk::ScrollbarGtk): Allow for an m_adjustment which is null.
        (ScrollbarGtk::attachAdjustment): Ditto.
        (ScrollbarGtk::updateThumbPosition): Ditto.
        (ScrollbarGtk::updateThumbProportion): Ditto.

2010-08-18  Adam Barth  <abarth@webkit.org>

        Reviewed by David Levin.

        NOT_REACHED is reachable in SVGLength
        https://bugs.webkit.org/show_bug.cgi?id=44150

        The author of this code was confused.  This code is reachable.  We just
        haven't implemented it yet.

        * svg/SVGLength.cpp:
        (WebCore::SVGLength::setValue):

2010-08-18  Balazs Kelemen  <kb@inf.u-szeged.hu>

        Reviewed by Antonio Gomes.

        [Qt] Use LAZY_NATIVE_CURSOR
        https://bugs.webkit.org/show_bug.cgi?id=44062

        No functional change so new tests.

        Change Cursor behaviour to match the LAZY_NATIVE_CURSOR policy.

        * platform/Cursor.h: Typedef PlatformCursor to be a QCursor* to be able create it dynamically.
        (WebCore::Cursor::Cursor): Remove the ifdef for Qt.
        * platform/qt/CursorQt.cpp: Remove the Cursors class since we have the static cursor instances
        for the common cursor types in Cursor.cpp. Move the logic that maps the cursor types to
        QCursor instances into ensurePlatformCursor.
        (WebCore::Cursor::Cursor):
        (WebCore::Cursor::~Cursor):
        (WebCore::Cursor::operator=):
        (WebCore::createCustomCursor):
        (WebCore::Cursor::ensurePlatformCursor):
        * platform/qt/WidgetQt.cpp:
        (WebCore::Widget::setCursor): Adjust to the PlatformCursor change.

2010-08-18  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Darin Adler.

        CSS: Make rgb() and rgba() fast paths case-insensitive
        https://bugs.webkit.org/show_bug.cgi?id=44107

        Also inlined the string comparisons against "rgb(" and "rgba("
        which is faster and avoids creating a temporary String object.

        * css/CSSParser.cpp:
        (WebCore::mightBeRGBA):
        (WebCore::mightBeRGB):
        (WebCore::CSSParser::parseColor):

2010-08-18  Jian Li  <jianli@chromium.org>

        Reviewed by Darin Fisher.

        Change BlobStorageData to reuse BlobData.
        https://bugs.webkit.org/show_bug.cgi?id=44188

        Also addressed Darin's feedbacks for bug 44116.

        * html/ThreadableBlobRegistry.cpp:
        (WebCore::registerBlobURLTask):
        (WebCore::registerBlobURLFromTask):
        (WebCore::unregisterBlobURLTask):
        * platform/network/BlobData.cpp:
        (WebCore::BlobData::appendData):
        * platform/network/BlobData.h:
        (WebCore::BlobDataItem::BlobDataItem):
        * platform/network/BlobRegistry.h:
        * platform/network/BlobRegistryImpl.cpp:
        (WebCore::blobRegistry):
        (WebCore::BlobRegistryImpl::appendStorageItems):
        (WebCore::BlobRegistryImpl::registerBlobURL):
        * platform/network/BlobRegistryImpl.h:
        * platform/network/BlobStorageData.h:
        (WebCore::BlobStorageData::create):
        (WebCore::BlobStorageData::contentType):
        (WebCore::BlobStorageData::contentDisposition):
        (WebCore::BlobStorageData::items):
        (WebCore::BlobStorageData::BlobStorageData):

2010-08-18  David Hyatt  <hyatt@apple.com>

        Reviewed by Martin Robinson.

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

        Fix a typo in my previous canvas checkin.  m_in->resultImage() was originally m_in2->resultImage(),
        and I accidentally changed it when swapping the order of the arguments.

        * platform/graphics/filters/FEComposite.cpp:
        (WebCore::FEComposite::apply):

2010-08-18  Stephen White  <senorblanco@chromium.org>

        Reviewed by Darin Fisher.

        [CHROMIUM] Eliminate a memcpy() from the canvas.drawImage(canvas, ...) path.
        https://bugs.webkit.org/show_bug.cgi?id=44115

        This is the Skia followup to Dave Hyatt's patch in r65449.
        Covered by canvas layout tests.

        * platform/graphics/skia/BitmapImageSingleFrameSkia.h:
        Add a "copyPixels" argument to the create() static to indicate if
        the caller wants the pixels to be copied or ref'ed.
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageBuffer::drawsUsingCopy):
        We don't use the always-copy path anymore, so return false.
        (WebCore::ImageBuffer::copyImage):
        Force a copy here.
        (WebCore::ImageBuffer::draw):
        (WebCore::ImageBuffer::drawPattern):
        Create a temporary BitampImageSingleFrameSkia wrapped around the
        canvas's bitmap, and draw with it immediately.  If drawing to our own
        canvas, copy the pixels, otherwise just shallow copy.
        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::BitmapImageSingleFrameSkia::BitmapImageSingleFrameSkia):
        Make the constructor take an SkBitmap to be wrapped.
        (WebCore::BitmapImageSingleFrameSkia::create):
        Implement the "copyPixels" flag:  if true, do a deep copy, otherwise
        do a shallow copy.
        * platform/graphics/skia/NativeImageSkia.cpp:
        (WebCore::NativeImageSkia::NativeImageSkia):
        * platform/graphics/skia/NativeImageSkia.h:
        Implement a new constructor that shallow-copies the given SkBitmap.

2010-08-18  Mahesh Kulkarni  <mahesh.kulkarni@nokia.com>

        Reviewed by Steve Block.

        [Qt] Request for permission before starting Geolocation service
        https://bugs.webkit.org/show_bug.cgi?id=42027

        Handles starting location acquisition when request is granted for ports using 
        "!CLIENT_BASED_GEOLOCATION and PREEMPT_GEOLOCATION_PERMISSION" policy
        Only Qt port as of today uses the above combination. Enable 
        PREEMPT_GEOLOCATION_PERMISSION for qt port. 

        Below tests cover these changes on platform using PREEMPT_GEOLOCATION_PERMISSION
        - fast/dom/Geolocation/delayed-permission-allowed.html
        - fast/dom/Geolocation/delayed-permission-denied.html
        - fast/dom/Geolocation/delayed-permission-allowed-for-multiple-requests.html
        - fast/dom/Geolocation/delayed-permission-denied-for-multiple-requests.html

        * WebCore.pro:
        * page/Geolocation.cpp:
        (WebCore::Geolocation::handlePendingPermissionNotifiers):

2010-08-18  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Darin Adler.

        CanvasStyle method naming cleanup
        https://bugs.webkit.org/show_bug.cgi?id=44184

        Renamed the various create() overloads to reflect what they're
        constructing the CanvasStyle from.

        The unused CanvasStyle::create(grayLevel) and accompanying constructor
        were removed.

        Also renamed the isEquivalentColor overloads to isEquivalent{RGBA,CMYKA}

        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        (WebCore::toHTMLCanvasStyle):
        * bindings/v8/custom/V8CanvasRenderingContext2DCustom.cpp:
        (WebCore::toCanvasStyle):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::State::State):
        (WebCore::CanvasRenderingContext2D::setStrokeColor):
        (WebCore::CanvasRenderingContext2D::setFillColor):
        * html/canvas/CanvasStyle.cpp:
        (WebCore::CanvasStyle::createFromString):
        (WebCore::CanvasStyle::createFromStringWithOverrideAlpha):
        (WebCore::CanvasStyle::createFromGradient):
        (WebCore::CanvasStyle::createFromPattern):
        (WebCore::CanvasStyle::isEquivalentRGBA):
        (WebCore::CanvasStyle::isEquivalentCMYKA):
        * html/canvas/CanvasStyle.h:
        (WebCore::CanvasStyle::createFromRGBA):
        (WebCore::CanvasStyle::createFromGrayLevelWithAlpha):
        (WebCore::CanvasStyle::createFromRGBAChannels):
        (WebCore::CanvasStyle::createFromCMYKAChannels):

2010-08-18  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Implement Maemo5 local rendering NPAPI extension. See 
        https://wiki.mozilla.org/Plugins:NokiaMaemoImageSurface for details.

        With the local rendering extension, Flash will paint into a 16-bit surface.
        For wmode=transparent, Flash expects the surface to contain the contents
        beneath it. As it is tricky to implement the content propagation across all
        graphics systems, transparent Flash is not supported. We just fill the surface 
        with white and wmode=transparent behaves the same as wmode=opaque with a white 
        background.

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

        * WebCore.pro:
        * plugins/PluginView.cpp:
        (WebCore::PluginView::setValue):
        (WebCore::PluginView::PluginView):
        * plugins/PluginView.h:
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::updatePluginWidget):
        (WebCore::PluginView::paintUsingImageSurfaceExtension):
        (WebCore::PluginView::paint):
        (WebCore::PluginView::platformGetValueStatic):

2010-08-18  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r65603.
        http://trac.webkit.org/changeset/65603
        https://bugs.webkit.org/show_bug.cgi?id=44179

        4 tests crash on Qt bot (Requested by Ossy on #webkit).

        * WebCore.pro:
        * page/Geolocation.cpp:
        (WebCore::Geolocation::handlePendingPermissionNotifiers):

2010-08-18  Ryuan Choi  <ryuan.choi@samsung.com>

        Unreviewed.  Attempted build fix for EFL

        [EFL]REGRESSION(65530) need to fix build break
        https://bugs.webkit.org/show_bug.cgi?id=44154

        * CMakeListsEfl.txt:

2010-08-18  Ilya Tikhonovsky  <loislo@chromium.org>

        Unreviewed qt build fix.

        * WebCore.pri:

2010-08-17  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: replace hand written InspectorBackendStub.js with generated one.
        New command-line flag was added to combine-javascript-resources.
        It specifies the location of generated scripts.
        https://bugs.webkit.org/show_bug.cgi?id=43791

        * GNUmakefile.am:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * combine-javascript-resources:
        * inspector/CodeGeneratorInspector.pm:
        * inspector/front-end/InspectorBackendStub.js: Removed.
        * inspector/front-end/WebKit.qrc:

2010-08-18  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: extension panels do not occupy entire panel client area.
        https://bugs.webkit.org/show_bug.cgi?id=44167

        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._onCreatePanel):
        (WebInspector.ExtensionServer.prototype._createClientIframe):

2010-08-18  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Use SVGPathParser logic to traverse states of a Path
        https://bugs.webkit.org/show_bug.cgi?id=44009

        Move the getPathSegAtLength logic from SVGPathSegList into a new SVGPathConsumer
        class: SVGPathTraversalStateBuilder.
        This allows us to get a SVGPathSeg at a given length for SVGPathByteStreams and SVGPathSegLists.
        It is also possible to use unaltered SVG path data, instead of just normalized path data.
        This is the final preparation to provide normalized and unaltered SVGPathSegLists
        on SVGPathElement.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * svg/SVGAllInOne.cpp:
        * svg/SVGPathBuilder.h:
        (WebCore::SVGPathBuilder::nextPathSegment):
        (WebCore::SVGPathBuilder::quitEarlier):
        * svg/SVGPathByteStreamBuilder.h:
        (WebCore::SVGPathByteStreamBuilder::nextPathSegment):
        (WebCore::SVGPathByteStreamBuilder::quitEarlier):
        * svg/SVGPathConsumer.h:
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::getPathSegAtLength):
        * svg/SVGPathElement.h:
        * svg/SVGPathElement.idl:
        * svg/SVGPathParser.cpp:
        (WebCore::SVGPathParser::parsePathDataFromSource):
        * svg/SVGPathParserFactory.cpp:
        (WebCore::globalSVGPathTraversalStateBuilder):
        (WebCore::SVGPathParserFactory::getSVGPathSegAtLengthFromSVGPathSegList):
        * svg/SVGPathParserFactory.h:
        * svg/SVGPathSegList.cpp:
        * svg/SVGPathSegList.h:
        * svg/SVGPathSegListBuilder.h:
        (WebCore::SVGPathSegListBuilder::nextPathSegment):
        (WebCore::SVGPathSegListBuilder::quitEarlier):
        * svg/SVGPathStringBuilder.h:
        (WebCore::SVGPathStringBuilder::nextPathSegment):
        (WebCore::SVGPathStringBuilder::quitEarlier):
        * svg/SVGPathTraversalStateBuilder.cpp: Added. New Consumer for SVGPathParser.
        (WebCore::SVGPathTraversalStateBuilder::SVGPathTraversalStateBuilder):
        (WebCore::SVGPathTraversalStateBuilder::moveTo):
        (WebCore::SVGPathTraversalStateBuilder::lineTo):
        (WebCore::SVGPathTraversalStateBuilder::curveToCubic):
        (WebCore::SVGPathTraversalStateBuilder::closePath):
        (WebCore::SVGPathTraversalStateBuilder::setDesiredLength):
        (WebCore::SVGPathTraversalStateBuilder::quitEarlier):
        (WebCore::SVGPathTraversalStateBuilder::nextPathSegment):
        (WebCore::SVGPathTraversalStateBuilder::pathSegmentIndex):
        * svg/SVGPathTraversalStateBuilder.h: Added.
        (WebCore::SVGPathTraversalStateBuilder::setCurrentTraversalState):
        (WebCore::SVGPathTraversalStateBuilder::cleanup):
        (WebCore::SVGPathTraversalStateBuilder::lineToHorizontal):
        (WebCore::SVGPathTraversalStateBuilder::lineToVertical):
        (WebCore::SVGPathTraversalStateBuilder::curveToCubicSmooth):
        (WebCore::SVGPathTraversalStateBuilder::curveToQuadratic):
        (WebCore::SVGPathTraversalStateBuilder::curveToQuadraticSmooth):
        (WebCore::SVGPathTraversalStateBuilder::arcTo):

2010-08-18  Mahesh Kulkarni  <mahesh.kulkarni@nokia.com>

        Reviewed by Steve Block.

        [Qt] Request for permission before starting Geolocation service
        https://bugs.webkit.org/show_bug.cgi?id=42027

        Handles starting location acquisition when request is granted for ports using 
        "!CLIENT_BASED_GEOLOCATION and PREEMPT_GEOLOCATION_PERMISSION" policy
        Only Qt port as of today uses the above combination. Enable 
        PREEMPT_GEOLOCATION_PERMISSION for qt port. 

        Below tests cover these changes on platform using PREEMPT_GEOLOCATION_PERMISSION
        - fast/dom/Geolocation/delayed-permission-allowed.html
        - fast/dom/Geolocation/delayed-permission-denied.html
        - fast/dom/Geolocation/delayed-permission-allowed-for-multiple-requests.html
        - fast/dom/Geolocation/delayed-permission-denied-for-multiple-requests.html

        * WebCore.pro:
        * page/Geolocation.cpp:
        (WebCore::Geolocation::handlePendingPermissionNotifiers):

2010-08-18  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r65595.
        http://trac.webkit.org/changeset/65595
        https://bugs.webkit.org/show_bug.cgi?id=44161

        qt build failed (Requested by loislo on #webkit).

        * GNUmakefile.am:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.pro:
        * WebCore.vcproj/copyInspectorFiles.cmd:
        * WebCore.xcodeproj/project.pbxproj:
        * combine-javascript-resources:
        * inspector/CodeGeneratorInspector.pm:
        * inspector/front-end/InspectorBackendStub.js: Added.
        (WebInspector.InspectorBackendStub):
        (WebInspector.InspectorBackendStub.prototype._registerDelegate):
        (WebInspector.InspectorBackendStub.prototype.sendMessageToBackend):
        * inspector/front-end/InspectorBackendStub.qrc: Removed.
        * inspector/front-end/WebKit.qrc:

2010-08-18  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: make objectId of string type instead of object.
        https://bugs.webkit.org/show_bug.cgi?id=44160

        * WebCore.xcodeproj/project.pbxproj:
        * inspector/front-end/InjectedScript.js:
        (injectedScriptConstructor.):
        * inspector/front-end/InjectedScriptAccess.js:
        (get InjectedScriptAccess.getForObjectId):
        * inspector/front-end/RemoteObject.js:
        (WebInspector.RemoteObject.prototype.getProperties):
        (WebInspector.RemoteObject.prototype.setPropertyValue):
        (WebInspector.RemoteObject.prototype.pushNodeToFrontend):

2010-08-17  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: replace hand written InspectorBackendStub.js by generated one.
        New command-line flag was added to combine-javascript-resources.
        It specifies the location of generated scripts.
        https://bugs.webkit.org/show_bug.cgi?id=43791

        * GNUmakefile.am:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * combine-javascript-resources:
        * inspector/CodeGeneratorInspector.pm:
        * inspector/front-end/InspectorBackendStub.js: Removed.
        * inspector/front-end/WebKit.qrc:

2010-08-18  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Dimitri Glazkov.

        Printer font is different from screen font
        https://bugs.webkit.org/show_bug.cgi?id=43340

        Not testable because PNG output in layoutTestController.setPrinting
        for chromium isn't implemented yet.

        * platform/graphics/FontDescription.h: Use screen font even for printing on Mac Chromium
        (WebCore::FontDescription::setUsePrinterFont):

2010-08-18  Renata Hodovan  <reni@inf.u-szeged.hu>

        Reviewed by Dirk Schulze.

        Fix displaying problem of feTurbulence.
        https://bugs.webkit.org/show_bug.cgi?id=44111

        Change the order of calculating turbulenceFunctionResult
        and clamping it. Furthermore remove the unnecessary rounding of m_seed.
        Add a new test for checking the change of seed's value.

        Test: svg/W3C-SVG-1.1/filters-turb-02-f.svg

        * svg/graphics/filters/SVGFETurbulence.cpp:
        (WebCore::FETurbulence::initPaint):
        (WebCore::FETurbulence::calculateTurbulenceValueForPoint):
        (WebCore::FETurbulence::apply):

2010-08-17  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        Bug 44146 - Remove toDouble/toUInt32 methods from UString.

        These methods all implement JavaScript language specific behaviour, and as such
        are not suited to being on a generic string object.  They are also inefficient
        and incorrectly used, refactor & cleanup.  Uses of these methods really divide
        out into two cases.

        ToNumber:
        Uses of toDouble from JSString and from parseFloat are implementing ecma's
        ToNumber conversion from strings (see ecma-262 9.3.1), so UString::toDouble
        should largely just be moved out to a global jsToNumber function.  ToNumber is
        capable of recognizing either decimal or hexadecimal numbers, but parseFloat
        should only recognize decimal values.  This is currently handled by testing for
        hexadecimal before calling toDouble, which should unnecessary - instead we can
        just split out the two parts to the grammar into separate functions. Also,
        strtod recognizes a set of literals (nan, inf, and infinity - all with any
        capitalization) - which are not defined by any of the specs we are implementing.
        To handle this we need to perform additional work in toDouble to convert the
        unsupported cases of infinities back to NaNs.  Instead we should simply remove
        support for this literals from strtod.  This should provide a more desirable
        behaviour for all clients of strtod.

        Indexed properties:
        Uses of the toStrictUInt32 methods are were all converting property names to
        indices, and all uses of toUInt32 were incorrect; in all cases we should have
        been calling toUInt32.  This error results in some incorrect behaviour in the
        DOM (accessing property "0 " of a NodeList should fail; it currently does not).
        Move this method onto Identifier (our canonical property name), and make it
        always perform a strict conversion. Add a layout test to check NodeList does
        convert indexed property names correctly.

        Test: fast/dom/NodeList/nodelist-item-with-index.html

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::getOwnPropertySlot):
        (WebCore::JSDOMWindow::getOwnPropertyDescriptor):
        * bindings/js/JSHTMLAllCollectionCustom.cpp:
        (WebCore::callHTMLAllCollection):
        (WebCore::JSHTMLAllCollection::item):
        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::callHTMLCollection):
        (WebCore::JSHTMLCollection::item):
        * bindings/js/JSNodeListCustom.cpp:
        (WebCore::callNodeList):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/runtime_array.cpp:
        (JSC::RuntimeArray::getOwnPropertySlot):
        (JSC::RuntimeArray::getOwnPropertyDescriptor):
        (JSC::RuntimeArray::put):

2010-08-18  Adam Barth  <abarth@webkit.org>

        Reviewed by Adele Peterson.

        Null dereference in DOMSelection::deleteFromDocument
        https://bugs.webkit.org/show_bug.cgi?id=44153

        deleteFromDocument checks selection->isNone() before calling
        selection->selection().toNormalizedRange(), but toNormalizedRange()
        notes that it needs to updateLayout(), which can make the selection
        isNone() again.  In that case, we crash on a NULL pointer in
        deleteFromDocument.  I don't know how to trigger that situation in a
        test, but cross_fuzz was able to hit it, so we should fix it.

        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::deleteFromDocument):

2010-08-17  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Antonio Gomes.

        [Qt] On Maemo5, there is no libgdk-x11-2.0.so symlink. Look for 
        libgdk-x11-2.0.so.0 instead on X11 and Maemo5.

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

        * plugins/qt/PluginViewQt.cpp:
        (WebCore::getPluginDisplay):

2010-08-17  Ariya Hidayat  <ariya@sencha.com>

        Reviewed by Antonio Gomes.

        [Qt] Remove unused ContextShadowParameter class in GraphicsContextQt
        https://bugs.webkit.org/show_bug.cgi?id=44142

        The class is not needed anymore after r65425.
        We know have dedicated ContextShadow in its own file.

        * platform/graphics/qt/GraphicsContextQt.cpp:

2010-08-17  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        Reviewed by Darin Adler.

        Add NetworkingContext to avoid layer violations
        https://bugs.webkit.org/show_bug.cgi?id=42292

        Preparation: Just add the files to the build system.

        * GNUmakefile.am: Added new files.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.

        * loader/FrameNetworkingContext.h: Added.
        * platform/network/NetworkingContext.h: Added.
        Placeholders with tentative code that might be changed when landing
        the rest of it.

2010-08-17  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Darin Fisher.

        Back button after Google search result click broken
        https://bugs.webkit.org/show_bug.cgi?id=44086

        Test: fast/history/redirect-via-iframe.html
        
        isLoadingInAPISense doesn't quite map to onload (it also returns true
        if frames are loading, even after the parent frame has fired its onload
        handler). Instead, add a flag for the onload event being fired, and
        use that.

        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::DocumentLoader):
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::handledOnloadEvents):
        (WebCore::DocumentLoader::wasOnloadHandled):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::handledOnloadEvents):
        * loader/RedirectScheduler.cpp:
        (WebCore::RedirectScheduler::mustLockBackForwardList):

2010-08-17  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        Geolocation clearWatch() needs to protect against invalid IDs
        https://bugs.webkit.org/show_bug.cgi?id=44096

        If the ID passed to clearWatch() is invalid, we early-out.

        Test: fast/dom/Geolocation/clear-watch-invalid-id-crash.html

        * page/Geolocation.cpp:
        (WebCore::Geolocation::Watchers::set):
        (WebCore::Geolocation::Watchers::remove):
        (WebCore::Geolocation::watchPosition):
        (WebCore::Geolocation::clearWatch):

2010-08-17  Stephen White  <senorblanco@chromium.org>

        Reviewed by David Levin.

        Allow non-Skia ports to compile with ENABLE(ACCELERATED_2D_CANVAS).
        https://bugs.webkit.org/show_bug.cgi?id=44130

        No tests; if it compiles, it's good.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::CanvasRenderingContext2D):
        Fix a warning (treated as error).
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::setGraphicsContext3D):
        (WebCore::GraphicsContext::syncSoftwareCanvas):
        * platform/graphics/GraphicsContext.h:
        Make setGraphicsContext3D() and syncSoftwareCanvas() stubbed out,
        but still present in non-Skia ports.  This allows Chrome Mac to
        compile with ENABLE(ACCELERATED_2D_CANVAS) (although it isn't hooked
        up yet, it should at least compile).

2010-08-17  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        Navigating back/forward during a modal dialog causes a crash when the modal dialog is dismissed.
        <rdar://problem/8313579> and https://bugs.webkit.org/show_bug.cgi?id=44131

        No new tests. (Especially since DRT doesn't spin inner run loops at all, it would be a significant
        effort to give it the ability to perform the back/forward navigation in the background to reproduce
        this bug)

        Manual tests in place of layout tests:
        * manual-tests/back-forward-during-alert-1.html: Added.
        * manual-tests/back-forward-during-alert-2.html: Added.

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

2010-08-17  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Tony Chang.

        selectionStart clobbered if textarea isn't focused
        https://bugs.webkit.org/show_bug.cgi?id=43814

        If a text control is blurred, setting selectionStart/end should use
        the cached selection value, which is currently stored on the form
        control element.

        Test: fast/forms/text-control-select-blurred.html

        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::setSelectionStart):
        (WebCore::RenderTextControl::setSelectionEnd):

2010-08-17  Dmitry Titov  <dimich@chromium.org>

        Reviewed by David Levin.

        MessagePort.close() crashes if the owning context was destroyed.
        https://bugs.webkit.org/show_bug.cgi?id=43140

        Test: fast/events/message-port-context-destroyed.html

        * dom/MessagePort.cpp:
        (WebCore::MessagePort::postMessage):
        (WebCore::MessagePort::start):
        (WebCore::MessagePort::close):
        (WebCore::MessagePort::contextDestroyed):
        Use isEntangled() method to gate various operations on MessagePort. This method also takes into account m_closed bit.

        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::stopActiveDOMObjects):
        (WebCore::ScriptExecutionContext::closeMessagePorts):
        * dom/ScriptExecutionContext.h:
        Add closeMessagePorts() method that closes message ports at the same moments when other ActiveDOMObjects are stopped.

2010-08-17  Fady Samuel  <fsamuel@chromium.org>

        Reviewed by David Hyatt.

        Updated table cell hit testing and painting to use binary search instead of linear scan.

        Improved Table Hit Testing and Painting Performance
        https://bugs.webkit.org/show_bug.cgi?id=43933

        Tests: fast/table/simple_paint.html
               tables/hittesting/filltable-emptycells.html
               tables/hittesting/filltable-levels.html
               tables/hittesting/filltable-outline.html
               tables/hittesting/filltable-rtl.html
               tables/hittesting/filltable-stress.html

        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::paintObject): Dirty rect determined using binary search.
        (WebCore::RenderTableSection::nodeAtPoint): Cell hit determined using binary search

2010-08-17  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Dave Hyatt.

        Only destroy empty anonymous block when it is columns or column span block
        in RenderBlock::removeChild.
        https://bugs.webkit.org/show_bug.cgi?id=44035

        Test: fast/block/basic/empty-anonymous-block-remove-crash.html

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

2010-08-17  Darin Fisher  <darin@chromium.org>

        Reviewed by Darin Adler.

        [Chromium] REGRESSION: Incorrect repaint on scrolling with position:fixed elements
        https://bugs.webkit.org/show_bug.cgi?id=42949

        This is a partial revert of http://trac.webkit.org/changeset/63907

        * page/FrameView.cpp:
        (WebCore::FrameView::scrollPositionChangedViaPlatformWidget):
        (WebCore::FrameView::scrollPositionChanged):
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::valueChanged):

2010-08-17  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r65528.
        http://trac.webkit.org/changeset/65528
        https://bugs.webkit.org/show_bug.cgi?id=44123

        "Broke a bunch of canvas tests on Chrome win/linux."
        (Requested by senorblanco on #webkit).

        * platform/graphics/skia/BitmapImageSingleFrameSkia.h:
        (WebCore::BitmapImageSingleFrameSkia::BitmapImageSingleFrameSkia):
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageBuffer::drawsUsingCopy):
        (WebCore::ImageBuffer::copyImage):
        (WebCore::ImageBuffer::draw):
        (WebCore::ImageBuffer::drawPattern):
        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::BitmapImageSingleFrameSkia::create):
        * platform/graphics/skia/NativeImageSkia.cpp:
        * platform/graphics/skia/NativeImageSkia.h:

2010-08-17  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by David Hyatt.

        [Cairo] Remove unnecessary full-surface copies from ImageCairo and GraphicsContextCairo
        https://bugs.webkit.org/show_bug.cgi?id=44076

        No new tests as functionality has not changed.

        * GNUmakefile.am: Added GRefPtrCairo to the sources list.
        * platform/graphics/cairo/GRefPtrCairo.cpp: Added.
        (WTF::refGPtr): Added specializations for cairo_t and cairo_surface_t.
        (WTF::derefGPtr):
        * platform/graphics/cairo/GRefPtrCairo.h: Added.
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::createPlatformShadow): Access the image surface directly
        from the ImageBuffer instead of wrapping it in an Image.
        * platform/graphics/cairo/ImageCairo.cpp:
        (WebCore::Image::drawPattern): Create the temporary surface using cairo primitives
        instead of through the platform-independent WebCore code.

2010-08-17  Martin Robinson  <mrobinson@igalia.com>

        [GTK] Clean up WebCore/platform/graphics/gtk/ImageGtk.cpp
        https://bugs.webkit.org/show_bug.cgi?id=44069

        No new tests as functionality has not changed.

        * GNUmakefile.am: Add WEBKITGTK_API_VERSION_STRING definition, which
        allows WebCore to use this as well.
        * platform/graphics/gtk/ImageGtk.cpp:
        (getWebKitDataDirectory): Added this helper.
        (WebCore::Image::loadPlatformResource): Use GOwnPtr for gchar pointers and
        use the new getWebKitDataDirectory helper.
        * platform/gtk/GOwnPtrGtk.cpp: Move the GtkIconInfo template specialization to this file.
        (WTF::GtkIconInfo): Added this forward declaration.
        * platform/gtk/GOwnPtrGtk.h: Declaration for new template specialization.

2010-08-17  Stephen White  <senorblanco@chromium.org>

        Reviewed by Darin Fisher.

        [CHROMIUM] Eliminate a memcpy() from the canvas.drawImage(canvas, ...) path.
        This is the Skia followup to Dave Hyatt's patch in r65449.
        https://bugs.webkit.org/show_bug.cgi?id=44115

        Covered by canvas layout tests.

        * platform/graphics/skia/BitmapImageSingleFrameSkia.h:
        Add a "copyPixels" argument to the create() static to indicate if
        the caller wants the pixels to be copied or ref'ed.
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageBuffer::drawsUsingCopy):
        We don't use the always-copy path anymore, so return false.
        (WebCore::ImageBuffer::copyImage):
        Shouldn't get here anymore, so ASSERT_NOT_REACHED.
        (WebCore::ImageBuffer::draw):
        (WebCore::ImageBuffer::drawPattern):
        Create a temporary BitampImageSingleFrameSkia wrapped around the
        canvas's bitmap, and draw with it immediately.  If drawing to our own
        canvas, copy the pixels, otherwise just shallow copy.
        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::BitmapImageSingleFrameSkia::BitmapImageSingleFrameSkia):
        Make the constructor take an SkBitmap to be wrapped.
        (WebCore::BitmapImageSingleFrameSkia::create):
        Implement the "copyPixels" flag:  if true, do a deep copy, otherwise
        do a shallow copy.
        * platform/graphics/skia/NativeImageSkia.cpp:
        (WebCore::NativeImageSkia::NativeImageSkia):
        * platform/graphics/skia/NativeImageSkia.h:
        Implement a new constructor that shallow-copies the given SkBitmap.

2010-08-17  Jian Li  <jianli@chromium.org>

        Reviewed by Darin Fisher.

        Move BlobRegistry interface and implementation to platform/network
        https://bugs.webkit.org/show_bug.cgi?id=44116

        Also move BlobData and BlobStorageData since they're part of BlobRegistry
        implementation.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/network/BlobData.cpp: Renamed from WebCore/platform/BlobData.cpp.
        * platform/network/BlobData.h: Renamed from WebCore/platform/BlobData.h.
        * platform/network/BlobRegistry.h: Renamed from WebCore/platform/BlobRegistry.h.
        * platform/network/BlobRegistryImpl.cpp: Renamed from WebCore/html/BlobRegistryImpl.cpp.
        * platform/network/BlobRegistryImpl.h: Renamed from WebCore/html/BlobRegistryImpl.h.
        * platform/network/BlobStorageData.h: Renamed from WebCore/html/BlobStorageData.h.

2010-08-17  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Ariya Hidayat.

        [Qt] Path: Fast approximation of stroke bounding rects
        https://bugs.webkit.org/show_bug.cgi?id=44014

        In canvas's stroke(), use QPainterPath::controlPointRect() to calculate
        a slightly larger bounding rect in a fraction of the time.

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

2010-08-17  Girish Ramakrishnan  <girish@forwardbias.in>

        Reviewed by Kenneth Rohde Christiansen.
        Set PluginQuirkRequiresDefaultScreenDepth for all Flash versions and not
        just Flash 10.

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

        * plugins/PluginPackage.cpp:
        (WebCore::PluginPackage::determineQuirks):

2010-08-17  Jian Li  <jianli@chromium.org>

        Reviewed by David Levin.

        Change FileStream implementation to prepare for blob resource handling.
        https://bugs.webkit.org/show_bug.cgi?id=43985

        Change FileStream to support synchronous usage only. All the asychronous
        logics are moved to FileStreamProxy. Update the existing FileReader code
        to adapt to this change.

        * html/FileReader.cpp: Account for FileStreamProxy changes.
        (WebCore::FileReader::didStart):
        (WebCore::FileReader::didGetSize):
        (WebCore::FileReader::didOpen):
        (WebCore::FileReader::didRead):
        * html/FileReader.h:
        * html/FileStream.cpp: Remove m_client and make all calls synchronous only.
        (WebCore::FileStream::FileStream):
        (WebCore::FileStream::start):
        (WebCore::FileStream::stop):
        (WebCore::FileStream::getSize):
        (WebCore::FileStream::openForRead):
        (WebCore::FileStream::openForWrite):
        (WebCore::FileStream::close):
        (WebCore::FileStream::read):
        (WebCore::FileStream::write):
        (WebCore::FileStream::truncate):
        * html/FileStream.h: Add getSize() and make all calls synchronous by adding return values.
        (WebCore::FileStream::create):
        * html/FileStreamClient.h: Account for FileStreamProxy changes.
        (WebCore::FileStreamClient::didRead):
        (WebCore::FileStreamClient::didTruncate):
        (WebCore::FileStreamClient::didOpen):
        * html/FileStreamProxy.cpp: All the logics to handle asynchronous calls are wrapped here.
        (WebCore::FileStreamProxy::FileStreamProxy):
        (WebCore::FileStreamProxy::create):
        (WebCore::FileStreamProxy::fileThread):
        (WebCore::didStart):
        (WebCore::FileStreamProxy::startOnFileThread):
        (WebCore::FileStreamProxy::stop):
        (WebCore::derefProxyOnContext):
        (WebCore::FileStreamProxy::stopOnFileThread):
        (WebCore::didGetSize):
        (WebCore::FileStreamProxy::getSize):
        (WebCore::FileStreamProxy::getSizeOnFileThread):
        (WebCore::didOpen):
        (WebCore::FileStreamProxy::openForRead):
        (WebCore::FileStreamProxy::openForReadOnFileThread):
        (WebCore::FileStreamProxy::openForWrite):
        (WebCore::FileStreamProxy::openForWriteOnFileThread):
        (WebCore::FileStreamProxy::close):
        (WebCore::FileStreamProxy::closeOnFileThread):
        (WebCore::didRead):
        (WebCore::FileStreamProxy::read):
        (WebCore::FileStreamProxy::readOnFileThread):
        (WebCore::didWrite):
        (WebCore::FileStreamProxy::write):
        (WebCore::FileStreamProxy::writeOnFileThread):
        (WebCore::didTruncate):
        (WebCore::FileStreamProxy::truncate):
        (WebCore::FileStreamProxy::truncateOnFileThread):
        * html/FileStreamProxy.h:
        * html/FileThreadTask.h: Change all methods to return void since return value is not needed now.

2010-08-17  Dimitri Glazkov  <dglazkov@chromium.org>

        Returned WebCore.xcodeproj to default settings after http://trac.webkit.org/changeset/65468/trunk/WebCore/WebCore.xcodeproj/project.pbxproj.

        * WebCore.xcodeproj/project.pbxproj: Removed developmentRegion = English line.

2010-08-17  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        Eliminate extra traversal of the tree when determining ability to lazy-attach a Node.
        https://bugs.webkit.org/show_bug.cgi?id=43749

        Land the actual change that I intended to land in http://trac.webkit.org/changeset/65508.

        Neither SVG nor inputs/counters shadow DOM are traveling down this path (they home-bake their attachment),
        so the check for shadow tree existence isn't needed.
        Gives a small, but consistent win in Dromaeo's DOM Modification test.

        * dom/Node.h:
        (WebCore::Node::canLazyAttach): Changed to always return true.

2010-08-17  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Eric Carlson.

        Restore intrinsic size of video elements after loading poster

        The element might already have the instrinsic size of the video, in
        which case we don't want to override it witht that of the image.

        * rendering/RenderVideo.cpp: call updateIntrinsicSize() to restore size

2010-08-17  Mahesh Kulkarni  <mahesh.kulkarni@nokia.com>

        Reviewed by Steve Block.

        Geolocation preemptive permissions policy is buggy
        https://bugs.webkit.org/show_bug.cgi?id=42811

        While waiting for permission, m_startRequestPermissionNotifier was 
        used to consider only one pending request. This patch implements a set
        m_pendingForPermissionNotifiers to maintain set of pending requests. 
        When user grants/denies permission all listeners will be notified. 
        Also fixed issue with hasZeroTimeout() where startTimerIfNeeded() has
        to start irrespective of permission state

        Tests: fast/dom/Geolocation/delayed-permission-allowed-for-multiple-requests.html
               fast/dom/Geolocation/delayed-permission-denied-for-multiple-requests.html

        * WebCore.pro:
        * page/Geolocation.cpp:
        (WebCore::Geolocation::startRequest):
        (WebCore::Geolocation::setIsAllowed):
        (WebCore::Geolocation::startUpdating):
        (WebCore::Geolocation::handlePendingPermissionNotifiers):
        * page/Geolocation.h:

2010-08-11  Jeremy Orlow  <jorlow@chromium.org>

        Beginnings of IndexedDB persistance + IDBDatabase.description fleshed out
        https://bugs.webkit.org/show_bug.cgi?id=43744

        The beginnings of a SQLite backend for IndexedDB.  Right now, only persists
        meta-data for the database.  The rest is coming in future patches.  Adds
        a manual test to verify persistance.

        Test: storage/indexeddb/database-description.html
              + a manual test

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * manual-tests/indexed-database.html: Added.
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::databaseIdentifier):
        * platform/FileSystem.cpp: Added.
        (WebCore::):
        (WebCore::shouldEscapeUChar):
        (WebCore::encodeForFileName):
        * platform/FileSystem.h:
        * storage/IDBDatabase.cpp:
        (WebCore::IDBDatabase::IDBDatabase):
        * storage/IDBDatabase.h:
        (WebCore::IDBDatabase::description):
        * storage/IDBDatabaseBackendImpl.cpp:
        (WebCore::extractMetaData):
        (WebCore::setMetaData):
        (WebCore::IDBDatabaseBackendImpl::IDBDatabaseBackendImpl):
        (WebCore::IDBDatabaseBackendImpl::setDescription):
        * storage/IDBDatabaseBackendImpl.h:
        (WebCore::IDBDatabaseBackendImpl::create):
        * storage/IDBFactory.h:
        * storage/IDBFactory.idl:
        * storage/IDBFactoryBackendImpl.cpp:
        (WebCore::IDBFactoryBackendImpl::IDBFactoryBackendImpl):
        (WebCore::IDBFactoryBackendImpl::~IDBFactoryBackendImpl):
        (WebCore::openSQLiteDatabase):
        (WebCore::createTables):
        (WebCore::IDBFactoryBackendImpl::open):
        * storage/IDBFactoryBackendImpl.h:
        (WebCore::IDBFactoryBackendImpl::create):

2010-08-17  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Eric Seidel.

        Eliminate extra traversal of the tree when determining ability to lazy-attach a Node.
        https://bugs.webkit.org/show_bug.cgi?id=43749

        Neither SVG nor inputs/counters shadow DOM are traveling down this path (they home-bake their attachment),
        so the check for shadow tree existence isn't needed.

        Gives a small, but consisten win in Dromaeo's DOM Modification test.

        * dom/Node.cpp: Removed canLazyAttach declaration.
        * dom/Node.h:
        (WebCore::Node::canLazyAttach): Changed to always return true.

2010-08-17  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: [CRASH] Console formatting crashes after cross-domain navigation.
        https://bugs.webkit.org/show_bug.cgi?id=44103

        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::injectedScriptFor):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::injectedScriptFor):
        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::addToFrontend):

2010-08-17  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: upstream Chromium debugger step tests
        https://bugs.webkit.org/show_bug.cgi?id=44106

        Tests: inspector/debugger-step-in.html
               inspector/debugger-step-out.html
               inspector/debugger-step-over.html

        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::returnEvent): check that debugger is still attached after continue to ensure
        that current call frame is not 0.

2010-08-17  Ademar de Souza Reis Jr  <ademar.reis@openbossa.org>

        Reviewed by David Levin.

        Trivial fix removing the self-inclusion of a couple of header files.

        Self inclusion in Document.h and RenderTheme.h
        https://bugs.webkit.org/show_bug.cgi?id=44065

        * dom/Document.h:
        * rendering/RenderTheme.h:

2010-08-17  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Ariya Hidayat.

        [Qt] Move the accelerated compositing build flag to the right place
        https://bugs.webkit.org/show_bug.cgi?id=43882

        No new tests: build fix.

        * WebCore.pro:

2010-08-17  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r65500.
        http://trac.webkit.org/changeset/65500
        https://bugs.webkit.org/show_bug.cgi?id=44108

        Qt bots failed to compile. (Requested by loislo on #webkit).

        * GNUmakefile.am:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.pro:
        * WebCore.vcproj/copyInspectorFiles.cmd:
        * WebCore.xcodeproj/project.pbxproj:
        * combine-javascript-resources:
        * inspector/CodeGeneratorInspector.pm:
        * inspector/front-end/InspectorBackendStub.js: Added.
        (WebInspector.InspectorBackendStub):
        (WebInspector.InspectorBackendStub.prototype._registerDelegate):
        (WebInspector.InspectorBackendStub.prototype.sendMessageToBackend):
        * inspector/front-end/InspectorBackendStub.qrc: Removed.
        * inspector/front-end/WebKit.qrc:

2010-08-17  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: replace hand written InspectorBackendStub.js by generated one.
        New command-line flag was added to combine-javascript-resources.
        It specifies the location of generated scripts.
        https://bugs.webkit.org/show_bug.cgi?id=43791

        * GNUmakefile.am:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * combine-javascript-resources:
        * inspector/CodeGeneratorInspector.pm:
        * inspector/front-end/InspectorBackendStub.js: Removed.
        * inspector/front-end/WebKit.qrc:

2010-08-17  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: get rid of node and scoped object-specific ids.
        https://bugs.webkit.org/show_bug.cgi?id=44097

        * inspector/front-end/ConsoleView.js:
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype._createTooltipForNode):
        * inspector/front-end/EventListenersSidebarPane.js:
        * inspector/front-end/InjectedScript.js:
        (injectedScriptConstructor.):
        (injectedScriptConstructor):
        * inspector/front-end/InjectedScriptAccess.js:
        (InjectedScriptAccess):
        (InjectedScriptAccess.getForNode):
        (InjectedScriptAccess._installHandler.InjectedScriptAccess.prototype.methodName):
        (InjectedScriptAccess._installHandler):
        * inspector/front-end/PropertiesSidebarPane.js:
        (WebInspector.PropertiesSidebarPane.prototype.update):
        * inspector/front-end/RemoteObject.js:
        (WebInspector.RemoteObjectId):
        (WebInspector.RemoteObject.resolveNode):
        * inspector/front-end/ScriptsPanel.js:

2010-08-17  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        [GTK] Fix wrapping of core Events in the bindings
        https://bugs.webkit.org/show_bug.cgi?id=44095

        Return the proper GObject type instead of hardcoding
        WebKitDOMEvent for all Event types.

        * bindings/gobject/GObjectEventListener.cpp:
        (WebCore::GObjectEventListener::handleEvent):
        * bindings/gobject/WebKitDOMBinding.cpp:
        (WebKit::kit):

2010-08-17  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Revert supposed build-fix which was in fact reverting a previous
        build fix which was correct (oh dear).

        * GNUmakefile.am:

2010-08-17  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Antonio Gomes.

        [Qt] Add media element support for preload=none

        * platform/graphics/qt/MediaPlayerPrivateQt.cpp:
        * platform/graphics/qt/MediaPlayerPrivateQt.h:

2010-08-17  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Antonio Gomes.

        [Qt] Pre-roll media when loading media elements

        This ensures we get correct size-hints from QtMultimedia, as well as
        the media states Buffering and Buffered instead of Loading and Loaded,
        which we use to transition into MediaPlayer::HaveEnoughData.

        * platform/graphics/qt/MediaPlayerPrivateQt.cpp:
        * platform/graphics/qt/MediaPlayerPrivateQt.h:

2010-08-16  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Fix missing default controls for stand-alone media elements

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

        * css/mediaControlsQt.css:

2010-08-17  Ariya Hidayat  <ariya@sencha.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Reduce the size of the shadow buffer to the clip region
        https://bugs.webkit.org/show_bug.cgi?id=44091

        Instead of allocating the buffer image (for the blur support) as big
        as the rectangle which casts the shadow, we limit the size to the
        current clip region.

        * platform/graphics/qt/ContextShadow.cpp:
        (WebCore::ContextShadow::drawShadowRect):

2010-08-17  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Martin Robinson.

        [GStreamer] media/invalid-media-url-crash.html fails
        https://bugs.webkit.org/show_bug.cgi?id=42960

        Implemented two ResourceHandleClient callbacks that need to notify
        downstream GStreamer elements of errors while accessing the
        resource.

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (StreamingClient::wasBlocked):
        (StreamingClient::cannotShowURL):

2010-08-16  Gavin Barraclough  <barraclough@apple.com>

        Rubber stamped by Sam Weinig

        Remove unnecessary includes from UString.h, add new includes as necessary.

        * dom/ScriptExecutionContext.h:
        * loader/appcache/ApplicationCache.cpp:

2010-08-16  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Darin Adler.

        CSS: Add fast-path for rgba() color parsing
        https://bugs.webkit.org/show_bug.cgi?id=42965

        Test: fast/canvas/rgba-parsing.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseColor): Extended with support for rgba().
        (WebCore::parseAlphaValue): Added, parses an alpha value using
        WTF::strtod() (if necessary) and clamps between 0 and 1.
        (WebCore::isTenthAlpha):

2010-08-16  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Dumitru Daniliuc.

        Add idl and mock classes for FileSystem API's {File,Directory}Entry and related interfaces
        https://bugs.webkit.org/show_bug.cgi?id=43993

        Adding DirectoryEntry, DirectoryReader, EntriesCallback and FileEntry as defined in HTML5 FileSystem API.
        http://dev.w3.org/2009/dap/file-system/file-dir-sys.html

        Also adding Makefile entries for idl and mock classes added in changeset 64414 (except for Android platforms).

        Tests will be added when we add underlying implementation.

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * storage/DOMFileSystem.cpp:
        (WebCore::DOMFileSystem::root):
        * storage/DOMFileSystem.h:
        * storage/DOMFileSystem.idl:
        * storage/DirectoryEntry.cpp: Added.
        * storage/DirectoryEntry.h: Added.
        * storage/DirectoryEntry.idl: Added.
        * storage/DirectoryReader.cpp: Added.
        * storage/DirectoryReader.h: Added.
        * storage/DirectoryReader.idl: Added.
        * storage/EntriesCallback.h: Added.
        * storage/EntriesCallback.idl: Added.
        * storage/EntryArray.cpp: Added.
        * storage/EntryArray.h: Added.
        * storage/EntryArray.idl: Added.
        * storage/Entry.cpp:
        (WebCore::Entry::Entry):
        (WebCore::Entry::getMetadata):
        (WebCore::Entry::moveTo):
        (WebCore::Entry::copyTo):
        (WebCore::Entry::remove):
        (WebCore::Entry::getParent):
        * storage/Entry.h:
        (WebCore::Entry::isFile):
        (WebCore::Entry::isDirectory):
        * storage/Entry.idl:
        * storage/FileEntry.cpp: Added.
        * storage/FileEntry.h: Added.
        * storage/FileEntry.idl: Added.

2010-08-16  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Ariya Hidayat.

        [Qt] Path::closeSubpath() should only close the last subpath if it has >1 point
        https://bugs.webkit.org/show_bug.cgi?id=44061

        Spec link:
        http://www.whatwg.org/specs/web-apps/current-work/#dom-context-2d-closepath

        Test: fast/canvas/canvas-closePath-single-point.html

        * platform/graphics/Path.h: Add a Qt-only member to track the last subpath.
        * platform/graphics/qt/PathQt.cpp:
        (WebCore::Path::closeSubpath): Only close the last subpath if it
        has more than 1 point. Otherwise behave as moveTo(first point in last subpath)
        (WebCore::Path::Path):
        (WebCore::Path::operator=):
        (WebCore::Path::moveTo):
        (WebCore::Path::transform):

2010-08-16  Nate Chapin  <japhet@chromium.org>

        Unreviewed, Chromium mac build fix (with help from jamesr).

        * platform/chromium/ScrollbarThemeChromiumMac.mm:
        (WebCore::ScrollbarThemeChromiumMac::paint):

2010-08-16  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig

        Bug 44080 - String find/reverseFind methods need tidying up
        These methods have a couple of problems with their interface, and implementation.

        These methods take and int index, and return an int - however this is problematic
        since on 64-bit string indices may have a full 32-bit range.  This spills out into
        surrounding code, which unsafely casts string indices from unsigned to int. Code
        checking the result of these methods check for a mix of "== -1", "< 0", and
        "== notFound".  Clean this up by changing these methods to take an unsigned
        starting index, and return a size_t. with a failed match indicated by notFound.
        reverseFind also has a special meaning for the starting index argument, in that a
        negative index is interpreted as an offset back from the end of the string. Remove
        this functionality, in the (1!) case where it is used we should just calculate the
        offset by subtracting from the string's length.

        The implementation has a few problems too.  The code is not in webkit style, in
        using assorted abbreviations in variable names, and implementations of similar
        find methods with differing argument types were unnecessarily inconsistent. When
        find is passed const char* data the string would be handled as latin1 (zero
        extended to UTF-16) for all characters but the first; this is sign extended.
        Case-insensitive find is broken for unicode strings; the hashing optimization is
        not unicode safe, and could result in false negatives.

        Unify UString find methods to match String.

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::RareData::parseNth):
        * css/CSSStyleDeclaration.cpp:
        (WebCore::CSSStyleDeclaration::setProperty):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector):
        * dom/Document.cpp:
        (WebCore::Document::getImageMap):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::inputText):
        * editing/InsertTextCommand.cpp:
        (WebCore::InsertTextCommand::input):
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::handleTextBox):
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::insertText):
        * editing/markup.cpp:
        (WebCore::fillContainerFromString):
        (WebCore::createFragmentFromText):
        * html/File.cpp:
        (WebCore::File::Init):
        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::setHost):
        * html/HTMLEmbedElement.cpp:
        (WebCore::HTMLEmbedElement::parseMappedAttribute):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLTextFormControlElement::isPlaceholderEmpty):
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::parseMappedAttribute):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::performSearch):
        * loader/CrossOriginPreflightResultCache.cpp:
        (WebCore::parseAccessControlAllowList):
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::substituteMIMETypeFromPluginDatabase):
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::parseHeader):
        (WebCore::parseHeaders):
        * loader/icon/IconFetcher.cpp:
        (WebCore::parseIconLink):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::parseModalDialogFeatures):
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::createFromDatabaseIdentifier):
        * page/UserContentURLPattern.cpp:
        (WebCore::UserContentURLPattern::parse):
        * page/XSSAuditor.cpp:
        (WebCore::XSSAuditor::findInRequest):
        * platform/ContentType.cpp:
        (WebCore::ContentType::parameter):
        (WebCore::ContentType::type):
        * platform/KURL.cpp:
        (WebCore::KURL::lastPathComponent):
        (WebCore::KURL::setProtocol):
        (WebCore::decodeURLEscapeSequences):
        (WebCore::substituteBackslashes):
        (WebCore::mimeTypeFromDataURL):
        * platform/Length.cpp:
        (WebCore::newCoordsArray):
        (WebCore::newLengthArray):
        * platform/LinkHash.cpp:
        (WebCore::findSlashDotDotSlash):
        (WebCore::findSlashSlash):
        (WebCore::findSlashDotSlash):
        (WebCore::cleanPath):
        * platform/MIMETypeRegistry.cpp:
        (WebCore::MIMETypeRegistry::getMIMETypeForPath):
        * platform/SchemeRegistry.cpp:
        (WebCore::SchemeRegistry::shouldTreatURLAsLocal):
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::load):
        * platform/mac/DragImageMac.mm:
        (WebCore::createDragImageIconForCachedImage):
        * platform/network/CredentialStorage.cpp:
        (WebCore::protectionSpaceMapKeyFromURL):
        (WebCore::findDefaultProtectionSpaceForURL):
        * platform/network/HTTPParsers.cpp:
        (WebCore::skipWhiteSpace):
        (WebCore::skipToken):
        (WebCore::parseHTTPRefresh):
        (WebCore::filenameFromHTTPContentDisposition):
        (WebCore::findCharsetInMediaType):
        (WebCore::parseXSSProtectionHeader):
        (WebCore::extractReasonPhraseFromHTTPStatusLine):
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::isAttachment):
        (WebCore::parseCacheHeader):
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::updateWidget):
        * storage/Entry.cpp:
        (WebCore::Entry::Entry):
        * svg/SVGFont.cpp:
        (WebCore::isCompatibleGlyph):
        * svg/SVGURIReference.cpp:
        (WebCore::SVGURIReference::getTarget):
        * svg/animation/SVGSMILElement.cpp:
        (WebCore::SVGSMILElement::parseClockValue):
        (WebCore::SVGSMILElement::parseCondition):
        * xml/XPathFunctions.cpp:
        (WebCore::XPath::FunSubstringBefore::evaluate):
        (WebCore::XPath::FunSubstringAfter::evaluate):
        (WebCore::XPath::FunTranslate::evaluate):
        (WebCore::XPath::FunLang::evaluate):
        * xml/XPathParser.cpp:
        (WebCore::XPath::Parser::expandQName):

2010-08-16  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Tony Chang.

        REGRESSION(r65208): editing/pasteboard/smart-paste-003.html and smart-paste-004.html crash on Windows Chromium
        https://bugs.webkit.org/show_bug.cgi?id=44070

        The crash was caused by start or end node being removed in pushDownInlineStyleAroundNode.
        It made start and end orphaned, and caused s.node() to be detached from the document.
        Fixed the crash by using nodes passed to pushDownInlineStyleAroundNode for start and end if the original
        start and end are orphaned because pushDownInlineStyleAroundNode won't prune targetNode.

        Test: editing/pasteboard/smart-paste-003-trailing-whitespace.html

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::removeInlineStyle):

2010-08-16  James Robinson  <jamesr@chromium.org>

        Compile fix. Remove ANGLEWebKitBridge classes from Chromium build.  They are unused.

        * WebCore.gypi:

2010-08-16  Vincent Scheib  <scheib@chromium.org>

        Reviewed by Dimitri Glazkov.

        Canvas2D does not support images larger than system's GPU max texture size
        https://bugs.webkit.org/show_bug.cgi?id=43864

        A new class "TilingData" has been created that provides logic for 
        splitting a large image into a series of smaller tiles.
        
        GLES2Texture and CLES2Canvas are modified to use the TilingData to
        split images on texture upload and render one logical image as many smaller
        images.

        TilingData is tested via unit tests in WebKit/chromium/tests/TilingDataTest.cpp
        
        * WebCore.gypi:
        * platform/graphics/chromium/GLES2Canvas.cpp:
        (WebCore::GLES2Canvas::drawTexturedRect):
        (WebCore::GLES2Canvas::drawTexturedRectTile):
        * platform/graphics/chromium/GLES2Canvas.h:
        * platform/graphics/chromium/GLES2Texture.cpp:
        (WebCore::GLES2Texture::GLES2Texture):
        (WebCore::GLES2Texture::~GLES2Texture):
        (WebCore::GLES2Texture::create):
        (WebCore::copySubRect):
        (WebCore::GLES2Texture::load):
        (WebCore::GLES2Texture::bindTile):
        * platform/graphics/chromium/GLES2Texture.h:
        (WebCore::GLES2Texture::tiles):
        * platform/graphics/chromium/TilingData.cpp: Added.
        (WebCore::computeNumTiles):
        (WebCore::TilingData::TilingData):
        (WebCore::TilingData::tileXIndexFromSrcCoord):
        (WebCore::TilingData::tileYIndexFromSrcCoord):
        (WebCore::TilingData::tileBounds):
        (WebCore::TilingData::tileBoundsWithBorder):
        (WebCore::TilingData::tileBoundsNormalized):
        (WebCore::TilingData::tilePositionX):
        (WebCore::TilingData::tilePositionY):
        (WebCore::TilingData::tileSizeX):
        (WebCore::TilingData::tileSizeY):
        (WebCore::TilingData::overlappedTileIndices):
        (WebCore::TilingData::intersectDrawQuad):
        * platform/graphics/chromium/TilingData.h: Added.
        (WebCore::TilingData::maxTextureSize):
        (WebCore::TilingData::totalSizeX):
        (WebCore::TilingData::totalSizeY):
        (WebCore::TilingData::numTiles):
        (WebCore::TilingData::numTilesX):
        (WebCore::TilingData::numTilesY):
        (WebCore::TilingData::tileIndex):
        (WebCore::TilingData::tileXIndex):
        (WebCore::TilingData::tileYIndex):
        (WebCore::TilingData::TilingData):
        (WebCore::TilingData::assertTile):
        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::BitmapImage::draw):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::uploadSoftwareToHardware):

2010-08-16  David Hyatt  <hyatt@apple.com>

        Reviewed by Anders Carlsson.

        https://bugs.webkit.org/show_bug.cgi?id=43507, stop ImageBuffer from copying its data when rendering after canvas changes happen.
        
        This patch renames ImageBuffer::image() to ImageBuffer::copyImage(). The new method always returns a new copy that is a current
        snapshot of the ImageBuffer.
        
        To draw an ImageBuffer, you now use new GraphicsContext calls: drawImageBuffer.  Platforms can then optimize these calls to draw
        efficiently without having to copy the bits of the ImageBuffer into an Image.

        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSCanvasValue.cpp:
        (WebCore::CSSCanvasValue::image):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::willDraw):
        (WebCore::HTMLCanvasElement::reset):
        (WebCore::HTMLCanvasElement::paint):
        (WebCore::HTMLCanvasElement::setSurfaceSize):
        (WebCore::HTMLCanvasElement::copiedImage):
        (WebCore::HTMLCanvasElement::clearCopiedImage):
        * html/HTMLCanvasElement.h:
        * html/canvas/CanvasPattern.cpp:
        (WebCore::CanvasPattern::CanvasPattern):
        * html/canvas/CanvasPattern.h:
        (WebCore::CanvasPattern::create):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawImage):
        (WebCore::CanvasRenderingContext2D::createPattern):
        (WebCore::CanvasRenderingContext2D::drawTextInternal):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::paintRenderingResultsToCanvas):
        (WebCore::WebGLRenderingContext::reshape):
        (WebCore::WebGLRenderingContext::texImage2D):
        (WebCore::WebGLRenderingContext::texSubImage2D):
        * html/canvas/WebGLRenderingContext.h:
        (WebCore::WebGLRenderingContext::paintsIntoCanvasBuffer):
        * platform/graphics/GeneratedImage.cpp:
        (WebCore::GeneratedImage::drawPattern):
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawImageBuffer):
        (WebCore::GraphicsContext::clipToImageBuffer):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/GraphicsContext3D.h:
        (WebCore::GraphicsContext3D::paintsIntoCanvasBuffer):
        * platform/graphics/Image.h:
        * platform/graphics/ImageBuffer.h:
        (WebCore::ImageBuffer::width):
        (WebCore::ImageBuffer::height):
        * platform/graphics/Pattern.cpp:
        (WebCore::Pattern::Pattern):
        * platform/graphics/Pattern.h:
        (WebCore::Pattern::create):
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::drawsUsingCopy):
        (WebCore::ImageBuffer::copyImage):
        (WebCore::ImageBuffer::clip):
        (WebCore::ImageBuffer::draw):
        (WebCore::ImageBuffer::drawPattern):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::ImageBuffer):
        (WebCore::ImageBuffer::drawsUsingCopy):
        (WebCore::ImageBuffer::copyImage):
        (WebCore::ImageBuffer::draw):
        (WebCore::ImageBuffer::drawPattern):
        (WebCore::ImageBuffer::clip):
        * platform/graphics/cg/ImageBufferData.h:
        * platform/graphics/filters/FEColorMatrix.cpp:
        (WebCore::FEColorMatrix::apply):
        * platform/graphics/filters/FEComposite.cpp:
        (WebCore::FEComposite::apply):
        * platform/graphics/filters/SourceAlpha.cpp:
        (WebCore::SourceAlpha::apply):
        * platform/graphics/filters/SourceGraphic.cpp:
        (WebCore::SourceGraphic::apply):
        * platform/graphics/mac/GraphicsContext3DMac.mm:
        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        * platform/graphics/qt/GraphicsContextQt.cpp:
        * platform/graphics/qt/ImageBufferData.h:
        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::ImageBufferData::ImageBufferData):
        (WebCore::ImageBuffer::drawsUsingCopy):
        (WebCore::ImageBuffer::copyImage):
        (WebCore::ImageBuffer::draw):
        (WebCore::ImageBuffer::drawPattern):
        (WebCore::ImageBuffer::clip):
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageBuffer::drawsUsingCopy):
        (WebCore::ImageBuffer::copyImage):
        (WebCore::ImageBuffer::clip):
        (WebCore::):
        * platform/graphics/wx/GraphicsContextWx.cpp:
        * platform/graphics/wx/ImageBufferWx.cpp:
        (WebCore::ImageBuffer::drawsUsingCopy):
        (WebCore::ImageBuffer::copyImage):
        (WebCore::ImageBuffer::clip):
        (WebCore::ImageBuffer::draw):
        (WebCore::ImageBuffer::drawPattern):
        * platform/mac/ScrollbarThemeMac.mm:
        (WebCore::ScrollbarThemeMac::paint):
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        * rendering/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::applyClippingToContext):
        * rendering/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::postApplyResource):
        * rendering/RenderSVGResourceGradient.cpp:
        (WebCore::clipToTextMask):
        * rendering/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::applyResource):
        * rendering/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::buildPattern):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintProgressBar):
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::build):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::nativeImageForCurrentFrame):
        * svg/graphics/SVGImage.h:
        * svg/graphics/filters/SVGFEMerge.cpp:
        (WebCore::FEMerge::apply):
        * svg/graphics/filters/SVGFEOffset.cpp:
        (WebCore::FEOffset::apply):
        * svg/graphics/filters/SVGFETile.cpp:
        (WebCore::FETile::apply):

2010-08-16  Paul Sawaya  <psawaya@apple.com>

        Reviewed by Chris Marrin.

        Added shader validation via ANGLE
        https://bugs.webkit.org/show_bug.cgi?id=42405

        Added validation to WebGL via ANGLE

        * Configurations/WebCore.xcconfig:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/ANGLEWebKitBridge.cpp: Added.
        (WebCore::ANGLEWebKitBridge::ANGLEWebKitBridge):
        (WebCore::ANGLEWebKitBridge::~ANGLEWebKitBridge):
        (WebCore::ANGLEWebKitBridge::validateShaderSource):
        * platform/graphics/ANGLEWebKitBridge.h: Added.
        (WebCore::):
        (WebCore::ANGLEWebKitBridge::setResources):
        * platform/graphics/GraphicsContext3D.h:
        (WebCore::GraphicsContext3D::):
        * platform/graphics/mac/GraphicsContext3DMac.mm:
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        (WebCore::GraphicsContext3D::compileShader):
        (WebCore::GraphicsContext3D::shaderSource):
        (WebCore::GraphicsContext3D::getShaderiv):
        (WebCore::GraphicsContext3D::getShaderInfoLog):
        (WebCore::GraphicsContext3D::getShaderSource):

2010-08-16  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix, do not build WebCore as a convenience library as this leads to
        errors in the Win build w/export symbols and causes problems with DOM bindings
        debugging in gdb.

        * wscript: Removed.

2010-08-16  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Adam Roben.

        Current implementation of WebCore post-build step on windows platform is error prone.
        It would be better to extract the script into external file.
        https://bugs.webkit.org/show_bug.cgi?id=44058

        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/copyForwardingHeaders.cmd: Added.
        * WebCore.vcproj/copyInspectorFiles.cmd: Added.

2010-08-16  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Fix typo in previous build fix.

        * platform/graphics/WOFFFileFormat.cpp:

2010-08-16  Alex Milowski  <alex@milowski.com>

        Reviewed by David Levin.

        Added the configuration of the MathML related files.

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:

2010-08-16  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: fix Leopard Release inspector tests.

        * inspector/front-end/inspector.js:

2010-08-16  Marcus Bulach  <bulach@chromium.org>

        Reviewed by Jeremy Orlow.

        Implements IDBKeyPath extractor.
        https://bugs.webkit.org/show_bug.cgi?id=43276

        Unit-test IDBKeyPathExtractorTest.cpp.
        LayoutTests will arrive as IndexedDB infrastructure is fleshed out.

        * bindings/v8/IDBBindingUtilities.cpp:
        (WebCore::getValueFrom):
        (WebCore::createIDBKeyFromSerializedValueAndKeyPath):
        * bindings/v8/IDBBindingUtilities.h:

2010-08-13  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Kenneth Rohde Christiansen and Martin Robinson.

        [GTK] GTK+ drawing idle starved
        https://bugs.webkit.org/show_bug.cgi?id=43994

        Tune down the priority of the shared timers to guarantee GTK+ has
        an opportunity to redraw.

        * platform/gtk/SharedTimerGtk.cpp:
        (WebCore::setSharedTimerFireTime):

2010-08-16  Leandro Pereira  <leandro@profusion.mobi>

        [EFL] Build fix after r65366.

        EFL port does not support automated tests yet.

        * CMakeLists.txt: Use if (VAR) instead of if (${VAR}) to check if
        they're empty.

2010-08-16  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Make InjectedScript proto-based.
        https://bugs.webkit.org/show_bug.cgi?id=44028

        * inspector/front-end/InjectedScript.js:
        (injectedScriptConstructor):
        (injectedScriptConstructor.):

2010-08-16  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Adam Roben.

        Fix warning in WebCore/plugins/win/PluginPackageWin.cpp
        https://bugs.webkit.org/show_bug.cgi?id=43920

        * plugins/win/PluginPackageWin.cpp:
        (WebCore::PluginPackage::fetchInfo):

2010-08-16  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed. Touch inspector file to force frontend deployment.

        * inspector/InspectorController.cpp:

2010-08-16  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix for non-Win ports on Windows.

        * platform/graphics/WOFFFileFormat.cpp:

2010-08-16  Adam Langley  <agl@chromium.org>

        Reviewed by Tony Chang.

        [chromium] Improve spacing support for complex text on Linux

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

        Previously, our complex text support ignored word-spacing,
        justification and letter-spacing. This fixes the first two issues and
        allows us to render Scribd's HTML5 documents much better.

        Test: fast/text/atsui-spacing-features.html

        * platform/graphics/chromium/FontLinux.cpp:
        (WebCore::TextRunWalker::TextRunWalker):
        (WebCore::TextRunWalker::setWordSpacingAdjustment):
        (WebCore::TextRunWalker::setLetterSpacingAdjustment):
        (WebCore::TextRunWalker::setPadding):
        (WebCore::TextRunWalker::setGlyphXPositions):
        (WebCore::TextRunWalker::isCodepointSpace):
        (WebCore::Font::drawComplexText):
        (WebCore::Font::floatWidthForComplexText):
        (WebCore::Font::offsetForPositionForComplexText):
        (WebCore::Font::selectionRectForComplexText):

2010-08-16  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        Fix warnings: unknown conversion type character 'l' in format
        https://bugs.webkit.org/show_bug.cgi?id=43359

        * loader/icon/IconDatabase.cpp:
        (WebCore::IconDatabase::performURLImport): Replace %zu with %lu, because Windows doesn't understand z modifier.
        (WebCore::IconDatabase::pruneUnretainedIcons): Use %I64i intsead of %lli on Windows.
        * platform/graphics/qt/MediaPlayerPrivatePhonon.cpp:
        (WebCore::MediaPlayerPrivate::totalTimeChanged): Use %I64d intsead of %lld on Windows.
        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::setMaximumSize): Use %I64i intsead of %lli on Windows.
        * storage/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::setQuota): Use %I64u intsead of %llu on Windows.

2010-08-16  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        Fix warnings: unknown conversion type character 'l' in format
        https://bugs.webkit.org/show_bug.cgi?id=43359

        * loader/FTPDirectoryParser.cpp: Use %I64u format specifier instead of %llu on Windows.
        (WebCore::parseOneFTPLine):

2010-08-16  Ariya Hidayat  <ariya@sencha.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Shadow blur for rectangle fill
        https://bugs.webkit.org/show_bug.cgi?id=44025

        The blur implementation follows the approximation of Gaussian blur
        with three successive box blurs, working on the alpha channel only.
        (see http://www.w3.org/TR/SVG/filters.html#feGaussianBlur).

        * WebCore.pro: Refer to ContexShadow.* files.
        * platform/graphics/qt/ContextShadow.cpp: Added.
        (WebCore::ContextShadow::ContextShadow):
        (WebCore::ContextShadow::clear):
        (WebCore::blurHorizontal): Box blurs in horizontal direction, working
        on QImage (in-place).
        (WebCore::shadowBlur): Main blur function which just calls the
        above blurHorizontal function twice, once with transposed image
        (equivalent as it would have done vertical box blurs).
        (WebCore::ContextShadow::drawShadowRect):
        * platform/graphics/qt/ContextShadow.h: Added.
        (WebCore::ContextShadow::):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContextPlatformPrivate::hasShadow):
        (WebCore::GraphicsContext::restorePlatformState):
        (WebCore::GraphicsContext::fillRect): Use ContextShadow for the shadow.
        (WebCore::GraphicsContext::setPlatformShadow):

2010-08-16  Andras Becsi  <abecsi@webkit.org>

        Rubber-stamped by Gustavo Noronha Silva.

        [GTK] Build fix for MathML code generation.

        No new tests needed.

        * GNUmakefile.am:

2010-08-16  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r65414.
        http://trac.webkit.org/changeset/65414
        https://bugs.webkit.org/show_bug.cgi?id=44055

        GTL & QT tests failing. (Requested by pfeldman on #webkit).

        * inspector/front-end/InjectedScript.js:
        (injectedScriptConstructor):
        (injectedScriptConstructor.):

2010-08-16  Ariya Hidayat  <ariya@sencha.com>

        Reviewed by Antonio Gomes.

        [Qt] Save and restore shadow state in GraphicsContextQt
        https://bugs.webkit.org/show_bug.cgi?id=44031

        This is needed after r65362.
        Use a new class ContextShadowParameter to track and keep the shadow
        state. We use this rather than using GraphicsContextState to allow
        possible optimizations (right now only to determine the shadow type,
        but in future it might cover things like cached scratch image,
        persistent shader, etc).

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::ContextShadowParameter::):
        (WebCore::ContextShadowParameter::ContextShadowParameter):
        (WebCore::ContextShadowParameter::clear):
        (WebCore::GraphicsContextPlatformPrivate::hasShadow):
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):
        (WebCore::GraphicsContext::savePlatformState):
        (WebCore::GraphicsContext::restorePlatformState):
        (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::setPlatformShadow):
        (WebCore::GraphicsContext::clearPlatformShadow):

2010-07-28  Marcus Bulach  <bulach@chromium.org>

        Reviewed by Adam Barth.

        Implement IDBKeyPath parser.
        https://bugs.webkit.org/show_bug.cgi?id=42976

        IDBKeyPath is an internal class, exposed only for unit tests for now.
        It'll allow indexed database implementation to traverse a given key path and obtain the corresponding properties
        from a SerializedScriptValue.

        * WebCore.gypi:
        * storage/IDBKeyPath.cpp: Added.
        (WebCore::IDBKeyPath::create):
        (WebCore::IDBKeyPath::IDBKeyPath):
        (WebCore::IDBKeyPath::~IDBKeyPath):
        (WebCore::IDBKeyPath::hasNext):
        (WebCore::IDBKeyPath::next):
        (WebCore::IDBKeyPath::identifier):
        (WebCore::IDBKeyPath::hasIndex):
        (WebCore::IDBKeyPath::indexValue):
        (WebCore::IDBKeyPath::parserError):
        (WebCore::IDBKeyPath::parse):
        (WebCore::IDBKeyPath::Lexer::lex):
        (WebCore::isSafeIdentifierStartCharacter):
        (WebCore::isSafeIdentifierCharacter):
        (WebCore::IDBKeyPath::Lexer::lexIdentifier):
        (WebCore::IDBKeyPath::Lexer::lexNumber):
        * storage/IDBKeyPath.h: Added.
        (WebCore::IDBKeyPath::Token::Token):
        (WebCore::IDBKeyPath::):
        (WebCore::IDBKeyPath::Lexer::Lexer):
        (WebCore::IDBKeyPath::Lexer::next):
        (WebCore::IDBKeyPath::Lexer::currentToken):

2010-08-13  Steve Block  <steveblock@google.com>

        Reviewed by Alexey Proskuryakov.

        Geolocation requests in progress when the frame is disconnected should invoke the error callback
        https://bugs.webkit.org/show_bug.cgi?id=43974

        If requests are ongoing when the Frame is disconnected, we abort them with a fatal error.
        To do this, when Geolocation::disconnectFrame() is called we call cancelAllRequests() to
        set a fatal error on all ongoing requests. Once the requests have made their error
        callbacks, they are deleted. Note that we check at callback time that the script
        execution context for the callback is still valid, so it's safe to attempt these
        callbacks even after the Geolocation object's Frame has gone.

        This requires a change to allow multiple calls to GeoNotifier::setFatalError().
        For repeated calls, we do not replace the existing error. This ensures that when
        permission has been denied and the frame is then disconnected, the error callback
        reports the permission error, as required by the spec.

        Tests: fast/dom/Geolocation/disconnected-frame.html
               fast/dom/Geolocation/disconnected-frame-permission-denied.html

        * page/Geolocation.cpp:
        (WebCore::Geolocation::GeoNotifier::setFatalError):
        (WebCore::Geolocation::disconnectFrame):
        (WebCore::Geolocation::startRequest):
        (WebCore::Geolocation::cancelAllRequests):
        * page/Geolocation.h:

2010-08-16  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Joseph Pecoraro.

        Web Inspector: upstream frontend-side WebSocket transport.
        https://bugs.webkit.org/show_bug.cgi?id=43970

        Chromium already has an alternate WebSocket-based communication channel with
        the backend. Upstreaming it in this change. We will agree on the URI
        of the remote service as the protocol matures.

        * inspector/front-end/inspector.js:
        (.WebInspector.socket.onmessage):
        (.WebInspector.socket.onerror):
        (.WebInspector.socket.onopen):
        (WebInspector.loaded):
        (WebInspector.doLoadedDone):
        (WebInspector_syncDispatch):

2010-08-16  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Make InjectedScript proto-based.
        https://bugs.webkit.org/show_bug.cgi?id=44028

        * inspector/front-end/InjectedScript.js:
        (injectedScriptConstructor):
        (injectedScriptConstructor.):
        * inspector/front-end/inspector.js:
        (WebInspector.loaded):

2010-08-16  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Joseph Pecoraro.

        Web Inspector: [REGRESSION] console's clear command does not work.
        https://bugs.webkit.org/show_bug.cgi?id=44027

        Test: inspector/console-command-clear.html

        * inspector/Inspector.idl:
        * inspector/InspectorBackend.cpp:
        * inspector/InspectorBackend.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::clearConsoleMessages):
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.requestClearMessages):
        * inspector/front-end/inspector.js:
        (WebInspector.consoleMessagesCleared):

2010-08-16  Jeremy Orlow  <jorlow@chromium.org>

        Ugh, the #if ENABLE() was supposed to be added to Settings not GroupSettings.

        * page/GroupSettings.cpp:
        (WebCore::GroupSettings::GroupSettings):
        (WebCore::GroupSettings::setLocalStorageQuotaBytes):
        * page/GroupSettings.h:
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h:

2010-08-16  Jeremy Orlow  <jorlow@chromium.org>

        Last build fix?

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

2010-08-16  Jeremy Orlow  <jorlow@chromium.org>

        Ugh...another build fix.

        * page/GroupSettings.cpp:
        (WebCore::GroupSettings::GroupSettings):
        * page/GroupSettings.h:

2010-08-16  Jeremy Orlow  <jorlow@chromium.org>

        Build fix.

        * GNUmakefile.am:

2010-08-16  Jeremy Orlow  <jorlow@chromium.org>

        Build fix.

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

2010-08-13  Jeremy Orlow  <jorlow@chromium.org>

        Some settings are linked to the PageGroup not the Page.  Create a new class for those.
        https://bugs.webkit.org/show_bug.cgi?id=43794

        Since persistient storage is shared between pages, there's no way to modify
        some settings related to it on a per page basis.  As such, it's not technically
        correct for these settings to be on the Page's settings.  Create a new class
        called GroupSettings, move  group-wide local storage setting there (the other we
        can't), and add a new setting for IndexedDB's path (which is prompting this change).

        No behavior has changed, so no tests.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * page/GroupSettings.cpp: Added.
        (WebCore::GroupSettings::GroupSettings):
        (WebCore::GroupSettings::setLocalStorageQuotaBytes):
        (WebCore::GroupSettings::setLocalStorageDatabasePath):
        (WebCore::GroupSettings::setIndexedDBDatabasePath):
        * page/GroupSettings.h: Added.
        (WebCore::GroupSettings::create):
        (WebCore::GroupSettings::localStorageQuotaBytes):
        (WebCore::GroupSettings::localStorageDatabasePath):
        (WebCore::GroupSettings::indexedDBDatabasePath):
        * page/PageGroup.cpp:
        (WebCore::PageGroup::PageGroup):
        (WebCore::PageGroup::localStorage):
        * page/PageGroup.h:
        (WebCore::PageGroup::groupSettings):
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setSessionStorageQuota):
        * page/Settings.h:

2010-08-16  Adam Barth  <abarth@webkit.org>

        Reviewed by Alexey Proskuryakov.

        HTML5 fragment parsing doesn't load iframes
        https://bugs.webkit.org/show_bug.cgi?id=44038

        Previously, this code assumed that every source iframe was actually
        attached to a render tree.  It tried to "keep the iframe alive" as it
        moved documents.  However, if the iframe wasn't attached to begin with,
        it was never "alive," so trying to keep a dead iframe alive lead to a
        ...  zombie iframe.

        Test: fast/frames/adopt-from-created-document.html

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

2010-08-13  MORITA Hajime  <morrita@google.com>

        Reviewed by Tony Chang.

        https://bugs.webkit.org/show_bug.cgi?id=43778
        Dropping should fire textInput event

        This change:
        - added TextEvent::m_isDrop to distinguish drop-initiated events.
        - added to dispatch TextEvent from DragController before making a side effect
          and cancel the side effect if the event prevents default

        Tests: editing/pasteboard/drop-text-events-sideeffect.html
               editing/pasteboard/drop-text-events.html

        * dom/TextEvent.cpp:
        (WebCore::TextEvent::createForDrop): Added.
        (WebCore::TextEvent::TextEvent):
        * dom/TextEvent.h:
        (WebCore::TextEvent::isDrop): Added.
        * editing/Editor.cpp:
        (WebCore::Editor::handleTextEvent):
        (WebCore::Editor::findEventTargetFrom): Extracted from findEventTargetFromSelection().
        (WebCore::Editor::findEventTargetFromSelection): 
        * editing/Editor.h:
        * page/DragController.cpp:
        (WebCore::DragController::dispatchTextInputEventFor): Added.
        (WebCore::DragController::concludeEditDrag): Added an event dispatch path.
        * page/DragController.h:

2010-08-15  Ariya Hidayat  <ariya@sencha.com>

        Unreviewed, rolling out r65393.
        http://trac.webkit.org/changeset/65393
        https://bugs.webkit.org/show_bug.cgi?id=44031

        Breaks some canvas tests.

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContextPlatformPrivate::):
        (WebCore::GraphicsContextPlatformPrivate::hasShadow):
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):
        (WebCore::GraphicsContext::savePlatformState):
        (WebCore::GraphicsContext::restorePlatformState):
        (WebCore::GraphicsContext::strokeArc):
        (WebCore::GraphicsContext::drawConvexPolygon):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::fillRoundedRect):
        (WebCore::GraphicsContext::setPlatformShadow):
        (WebCore::GraphicsContext::clearPlatformShadow):

2010-08-15  Ariya Hidayat  <ariya@sencha.com>

        Reviewed by Antonio Gomes.

        [Qt] Save and restore shadow state in GraphicsContextQt
        https://bugs.webkit.org/show_bug.cgi?id=44031

        This is needed after r65362.
        Use a new class ContextShadowParameter to track and keep the shadow
        state. We use this rather than using GraphicsContextState to allow
        possible optimizations (right now only to determine the shadow type,
        but in future it might cover things like cached scratch image,
        persistent shader, etc).

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::ContextShadowParameter::):
        (WebCore::ContextShadowParameter::ContextShadowParameter):
        (WebCore::ContextShadowParameter::clear):
        (WebCore::GraphicsContextPlatformPrivate::hasShadow):
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):
        (WebCore::GraphicsContext::savePlatformState):
        (WebCore::GraphicsContext::restorePlatformState):
        (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::setPlatformShadow):
        (WebCore::GraphicsContext::clearPlatformShadow):

2010-08-15  Ariya Hidayat  <ariya@sencha.com>

        Reviewed by Antonio Gomes.

        [Qt] Border should not cast shadows
        https://bugs.webkit.org/show_bug.cgi?id=44015

        Shadows should be not casted except for brush fill (which is not what
        drawLine and drawRect are supposed to do).

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::drawRect): Remove shadow painting,
        (WebCore::GraphicsContext::drawLine): ditto.

2010-08-15  Ryuan Choi  <ryuan.choi@samsung.com>

        Reviewed by Antonio Gomes.

        [EFL] Build error on r65378
        https://bugs.webkit.org/show_bug.cgi?id=44019

        Change build script for HTMLEntityNames.json instead of HTMLEntityNames.gperf

        * CMakeLists.txt:

2010-08-15  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix, add missing header.

        * platform/graphics/WOFFFileFormat.cpp:

2010-08-15  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix, don't build PluginDataNone.cpp even on GTK as PluginDataWx.cpp compiles.

        * wscript:

2010-08-15  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        document.write() doesn't flush plain text
        https://bugs.webkit.org/show_bug.cgi?id=8961

        Originally I thought we should buffer the character tokens until we've
        reached the end of the input stream, but that's not how the spec
        handles things (it emits the character tokens one-by-one).

        Tests: fast/tokenizer/flush-characters-in-document-write-evil.html
               fast/tokenizer/flush-characters-in-document-write.html

        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::emitEndOfFile):
        (WebCore::HTMLTokenizer::nextToken):
        (WebCore::HTMLTokenizer::haveBufferedCharacterToken):
            - Renamed this function now that it's simplier.
        * html/HTMLTokenizer.h:

2010-08-15  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Don't try to replace a non-existent document after executing JavaScript URLs
        https://bugs.webkit.org/show_bug.cgi?id=44024

        Synchronous JavaScript execution is evil.  Previously, the frame was
        deleted after executing the JavaScript URL, so we'd get confused when
        we tried to replace its document.

        Test: fast/frames/javascript-url-for-deleted-frame.html

        * bindings/ScriptControllerBase.cpp:
        (WebCore::ScriptController::executeIfJavaScriptURL):

2010-08-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r65374.
        http://trac.webkit.org/changeset/65374
        https://bugs.webkit.org/show_bug.cgi?id=44018

        broke a myriad of svg tests (Requested by kling on #webkit).

        * platform/graphics/qt/PathQt.cpp:
        (WebCore::Path::strokeBoundingRect):

2010-08-14  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        XSLTProcessor.transformToFragment should not pass contextElement to html/xml document parsers
        https://bugs.webkit.org/show_bug.cgi?id=44017

        This fixes two tests which otherwise would fail when the
        HTML5 TreeBuilder is enabled for fragment parsing.

        This revealed a bug in HTMLTreeBuilder() which I fixed as well.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::HTMLTreeBuilder):
        * xml/XSLTProcessor.cpp:
        (WebCore::createFragmentFromSource):

2010-08-14  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Ariya Hidayat.

        [Qt] Path: Fast approximation of stroke bounding rects
        https://bugs.webkit.org/show_bug.cgi?id=44014

        * platform/graphics/qt/PathQt.cpp:
        (WebCore::Path::strokeBoundingRect): Use QPainterPath::controlPointRect()
        to calculate a slightly larger bounding rect in a fraction of the time.

2010-08-14  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Move innerHTML off of Range::createContextualFragment
        https://bugs.webkit.org/show_bug.cgi?id=44011

        This makes all the editing tests stop failing under the
        HTML5 TreeBuilder.

        In a previous patch Adam disabled some of the (wrong) code
        in createContextualFragment when in html5 treebuilder mode.
        The problem is that the editing code depends on
        createContextualFragment (as well as the Range DOM API),
        so we have to leave this code in until we can figure
        out if it's right or wrong behavior for the Range API.

        This patch moves innerHTML/outerHTML off of using
        createContextualFragment and instead calls
        DocumentFragment::parseHTML directly (which is much simpler).

        I expect Adam and I will end up turning on the HTML5 TreeBuilder
        in the next couple days, and most of the if branches I added
        here will go away for good.

        I renamed Element::createContextualFragment to
        deprecatedCreateContextualFragment, to indicate that it's a
        dead API.  The editing code should move off of it and consider
        using DocumentFragment::parseHTML instead.

        * dom/Element.cpp:
        (WebCore::Element::deprecatedCreateContextualFragment):
        * dom/Element.h:
        * dom/Range.cpp:
        (WebCore::Range::createContextualFragment):
        * editing/markup.cpp:
        (WebCore::createFragmentFromMarkup):
        * html/HTMLElement.cpp:
        (WebCore::useLegacyTreeBuilder):
        (WebCore::HTMLElement::deprecatedCreateContextualFragment):
        (WebCore::HTMLElement::setInnerHTML):
        (WebCore::HTMLElement::setOuterHTML):
        * html/HTMLElement.h:

2010-08-14  Tasuku Suzuki  <tasuku.suzuki@nokia.com>

        Reviewed by Antonio Gomes.

        [Qt] Fix compilation with QT_NO_LINEEDIT
        https://bugs.webkit.org/show_bug.cgi?id=38324

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

2010-08-14  Rob Buis  <rwlbuis@gmail.com>

        Reviewed by Dirk Schulze.

        IE SVG empty path test fails
        https://bugs.webkit.org/show_bug.cgi?id=44008

        Change createLine to allow creating zero-length lines. This makes it possible
        to have markers and line-caps applied to zero-length lines.

        Test: svg/custom/marker-empty-path.svg

        * platform/graphics/Path.cpp:
        (WebCore::Path::createLine):

2010-08-14  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Kenneth Rohde Christiansen.

        [CMake] Move SQL files into a IF (ENABLE_DATABASE) section
        https://bugs.webkit.org/show_bug.cgi?id=43979

        * CMakeLists.txt:

2010-08-14  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Kenneth Rohde Christiansen.

        Canvas is not reset when setting canvas.width
        https://bugs.webkit.org/show_bug.cgi?id=43341

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::reset): Moved the call to
        hasCreatedImageBuffer up *before* the call to setSurface since setSurface
        sets hasCreatedImageBuffer to false every time.

2010-08-14  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Kenneth Rohde Christiansen.

        [CMake] Set target properties only if available
        https://bugs.webkit.org/show_bug.cgi?id=43978

        * CMakeLists.txt:

2010-08-14  Dirk Schulze  <krit@webkit.org>

        Unreviewed sort of Xcode project file.

        * WebCore.xcodeproj/project.pbxproj:

2010-08-14  Ariya Hidayat  <ariya@sencha.com>

        Reviewed by Simon Hausmann and Kenneth Rohde Christiansen.

        [Qt] Refactor shadow state handling in GraphicsContextQt
        https://bugs.webkit.org/show_bug.cgi?id=44006

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContextPlatformPrivate::): Added shadow states as
        member variables.
        (WebCore::GraphicsContextPlatformPrivate::hasShadow): Convenient
        function to check whether there is shadow or not.
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):
        (WebCore::GraphicsContext::drawRect): Use shadow states instead of
        calling getShadow.
        (WebCore::GraphicsContext::drawLine): ditto.
        (WebCore::GraphicsContext::strokeArc): ditto.
        (WebCore::GraphicsContext::drawConvexPolygon): ditto.
        (WebCore::GraphicsContext::fillPath): ditto.
        (WebCore::GraphicsContext::strokePath): ditto.
        (WebCore::GraphicsContext::fillRect): Removes the use of helper function
        drawBorderlessRectShadow as the code already becomes a lot simpler.
        (WebCore::GraphicsContext::fillRoundedRect): Removes the use of helper
        function drawFilledShadowPath as the code already becomes a lot simpler.
        (WebCore::GraphicsContext::setPlatformShadow): Store shadow states
        and find out the shadow type (complexity) for future use.
        (WebCore::GraphicsContext::clearPlatformShadow): Reset shadow states.

2010-08-13  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Rename some concepts in HTML entity search to be more self-documenting
        https://bugs.webkit.org/show_bug.cgi?id=44004

        Start and end are now first and last, which lets us use some better
        names for the statics in HTMLEntityTable.

        * html/HTMLEntityParser.cpp:
        (WebCore::consumeHTMLEntity):
        * html/HTMLEntitySearch.cpp:
        (WebCore::HTMLEntitySearch::HTMLEntitySearch):
        (WebCore::HTMLEntitySearch::findFirst):
        (WebCore::HTMLEntitySearch::findLast):
        (WebCore::HTMLEntitySearch::advance):
        * html/HTMLEntitySearch.h:
        (WebCore::HTMLEntitySearch::isEntityPrefix):
        (WebCore::HTMLEntitySearch::mostRecentMatch):
        (WebCore::HTMLEntitySearch::fail):
        * html/HTMLEntityTable.h:

2010-08-13  Adam Barth  <abarth@webkit.org>

        Fix ASSERT in XML entity parsing.  You can't advance the entity search
        if you've already discovered that your string is not an entity.

        * html/HTMLEntityParser.cpp:
        (WebCore::decodeNamedEntity):

2010-08-13  Eric Seidel  <eric@webkit.org>

        Unreviewed.  Attempt at fixing Chromium build.

        Add support for MathML entities
        https://bugs.webkit.org/show_bug.cgi?id=43949

        * WebCore.gyp/WebCore.gyp:
         - I have no clue if this is right or not.

2010-08-13  Eric Seidel  <eric@webkit.org>

        Unreviewed.  Attempted build fix for Windows.

        Add support for MathML entities
        https://bugs.webkit.org/show_bug.cgi?id=43949

        * DerivedSources.cpp:
         - Add HTMLEntityTable.cpp

2010-08-09  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add support for MathML entities
        https://bugs.webkit.org/show_bug.cgi?id=43949

        Implementing the HTML5 entity parsing algorithm require refactoring how
        we search for entity names.  Instead of using a perfect hash, we now
        use a sorted list.  As we advance through the input, we walk down a
        binary search of the table looking for an entity.

        Using this data structure lets us keep track of whether the current
        string is a prefix of an existing entity, which we need for the
        algorithm.  In a future patch, I plan to add some indices to the
        table, which should let us narrow down the range of interesting entries
        more quickly.

        The one nasty piece of the algorithm is if we walk too far down the
        input and we need to back up to a previous match.  In this patch, we
        accomplish this by rewinding the input and consuming a known number of
        characters to resync the source.

        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLEntityParser.cpp:
        (WebCore::consumeHTMLEntity):
        * html/HTMLEntitySearch.cpp: Added.
        (WebCore::):
        (WebCore::HTMLEntitySearch::HTMLEntitySearch):
        (WebCore::HTMLEntitySearch::compare):
        (WebCore::HTMLEntitySearch::findStart):
        (WebCore::HTMLEntitySearch::findEnd):
        (WebCore::HTMLEntitySearch::advance):
        * html/HTMLEntitySearch.h: Added.
        (WebCore::HTMLEntitySearch::isEntityPrefix):
        (WebCore::HTMLEntitySearch::currentValue):
        (WebCore::HTMLEntitySearch::lastMatch):
        (WebCore::HTMLEntitySearch::):
        (WebCore::HTMLEntitySearch::fail):
        * html/HTMLEntityTable.h: Added.
        (WebCore::HTMLEntityTableEntry::lastCharacter):

2010-08-13  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Eric Seidel.

        Refactor HTMLScriptRunner to allow deferred scripts to share code
        https://bugs.webkit.org/show_bug.cgi?id=43736

        No new tests because no functional change

        * html/HTMLScriptRunner.cpp:
        (WebCore::HTMLScriptRunner::sourceFromPendingScript): Make const to enforce the idea that it doesn't change m_parsingBlockingScript.
        (WebCore::HTMLScriptRunner::executeParsingBlockingScript): Rename to make it clear this deals with the parsing blocking script and refactor to use executePendingScriptAndDispatchEvent.
        (WebCore::HTMLScriptRunner::executePendingScriptAndDispatchEvent): Factored out of executePendingScript, this can be used for executing any external script.
        (WebCore::HTMLScriptRunner::executeScript): This can be used for executing any inline or external script. ASSERTs moved to the two calling points.
        (WebCore::HTMLScriptRunner::executeParsingBlockingScripts): Moved method.
        (WebCore::HTMLScriptRunner::requestParsingBlockingScript): Factored out requestPendingScript.
        (WebCore::HTMLScriptRunner::requestPendingScript): Factored out from reqeustParsingBlockingScript.
        (WebCore::HTMLScriptRunner::runScript):
        * html/HTMLScriptRunner.h:

2010-08-13  Gavin Barraclough  <barraclough@apple.com>

        Windows build fix.

        * WebCore.xcodeproj/project.pbxproj:
        * platform/win/SharedBufferWin.cpp:

2010-08-13  Gavin Barraclough  <barraclough@apple.com>

        Rubber stamped by Sam Weinig.
        Switch String::/UString::ascii() to return a CString.

        * WebCore.xcodeproj/project.pbxproj:
        * bridge/c/c_class.cpp:
        (JSC::Bindings::CClass::methodsNamed):
        (JSC::Bindings::CClass::fieldNamed):
        * bridge/jni/jsc/JNIBridgeJSC.cpp:
        (JavaField::valueFromInstance):
        (JavaField::setValueToInstance):
        * bridge/jni/jsc/JavaInstanceJSC.cpp:
        (JavaInstance::invokeMethod):
        * bridge/objc/objc_class.mm:
        (JSC::Bindings::ObjcClass::methodsNamed):
        (JSC::Bindings::ObjcClass::fieldNamed):
        * bridge/objc/objc_instance.mm:
        (ObjcInstance::setValueOfUndefinedField):
        (ObjcInstance::getValueOfUndefinedField):
        * loader/icon/IconRecord.cpp:
        * platform/sql/SQLiteDatabase.cpp:
        * platform/sql/SQLiteStatement.cpp:
        * storage/SQLStatement.cpp:

2010-08-13  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Dimitri Glazkov.

        Session history should skip over JS redirects
        https://bugs.webkit.org/show_bug.cgi?id=42861
        
        Lock the back/forward list for location changes and form submits that
        happen before the onload event fires that are not the result of user
        gestures.
        
        Made form submission (at the ScheduledFormSubmission level) more similar
        to ScheduledURLNavigation by having it call clientRedirected too, fixing
        a long-standing FIXME.

        Test: fast/history/gesture-before-onload-location-href.html,
        fast/history/gesture-before-onload-form-submit.html and updated
        expectations for http/tests/history tests that used to fail.

        * loader/FormSubmission.cpp:
        (WebCore::FormSubmission::requestURL): 
        (WebCore::FormSubmission::populateFrameLoadRequest):
        * loader/FormSubmission.h:
        * loader/RedirectScheduler.cpp:
        (WebCore::ScheduledFormSubmission::ScheduledFormSubmission):
        (WebCore::ScheduledFormSubmission::fire):
        (WebCore::ScheduledFormSubmission::didStartTimer):
        (WebCore::ScheduledFormSubmission::didStopTimer):
        (WebCore::RedirectScheduler::scheduleRedirect):
        (WebCore::RedirectScheduler::mustLockBackForwardList):
        (WebCore::RedirectScheduler::scheduleLocationChange):
        (WebCore::RedirectScheduler::scheduleFormSubmission):
        * loader/RedirectScheduler.h:

2010-08-13  Leandro Pereira  <leandro@profusion.mobi>

        [EFL] Unreviewed build fix.
        These changes were supposed to be landed on r65319, but due to some
        svn-apply/commit-queue bug it wasn't fully applied. A bug was filed
        by Patrick Gansterer (author of the changes in this commit):
        https://bugs.webkit.org/show_bug.cgi?id=43981

        * CMakeLists.txt: Update calls to GENERATE_GPERF and
        GENERATE_GRAMMAR macros.

2010-08-13  Chris Fleizach  <cfleizach@apple.com>

        AX: isNativeCheckbox does not work as advertised
        https://bugs.webkit.org/show_bug.cgi?id=43872

        Re-adding this patch after it was erroneously rolled out.

        Test: platform/mac/accessibility/native-vs-nonnative-checkboxes.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isInputImage):
        (WebCore::AccessibilityRenderObject::isNativeCheckboxOrRadio):
        * dom/InputElement.h:
        * html/HTMLInputElement.h:
        (WebCore::HTMLInputElement::isCheckbox):

2010-08-13  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r65331.
        http://trac.webkit.org/changeset/65331
        https://bugs.webkit.org/show_bug.cgi?id=43980

        This patch breaks some shadow tests on Qt Linux release
        (Requested by ariya on #webkit).

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):
        (WebCore::GraphicsContext::drawRect):
        (WebCore::GraphicsContext::drawLine):
        (WebCore::GraphicsContext::strokeArc):
        (WebCore::GraphicsContext::drawConvexPolygon):
        (WebCore::drawFilledShadowPath):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::drawBorderlessRectShadow):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::fillRoundedRect):
        (WebCore::GraphicsContext::setPlatformShadow):
        (WebCore::GraphicsContext::clearPlatformShadow):

2010-08-13  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by David Levin.

        Update run-bindings-tests expectations
        https://bugs.webkit.org/show_bug.cgi?id=43944

        The results have become out of sync after changeset 64552 and 65269.

        Test: WebKitTools/Scripts/run-bindings-tests

        * bindings/scripts/test/GObject/WebKitDOMTestCallback.cpp:
        (webkit_dom_test_callback_callback_with_class1param):
        (webkit_dom_test_callback_callback_with_class2param):
        (webkit_dom_test_callback_callback_with_non_bool_return_type):
        * bindings/scripts/test/GObject/WebKitDOMTestCallback.h:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        (webkit_dom_test_obj_void_method_with_args):
        (webkit_dom_test_obj_int_method_with_args):
        (webkit_dom_test_obj_obj_method):
        (webkit_dom_test_obj_obj_method_with_args):
        (webkit_dom_test_obj_method_that_requires_all_args):
        (webkit_dom_test_obj_method_that_requires_all_args_and_throws):
        (webkit_dom_test_obj_serialized_value):
        (webkit_dom_test_obj_idb_key):
        (webkit_dom_test_obj_with_dynamic_frame_and_user_gesture):
        (webkit_dom_test_obj_with_dynamic_frame_and_user_gesture_asad):
        (webkit_dom_test_obj_with_script_state_obj):
        (webkit_dom_test_obj_with_script_state_obj_exception):
        (webkit_dom_test_obj_get_read_only_string_attr):
        (webkit_dom_test_obj_get_read_only_test_obj_attr):
        (webkit_dom_test_obj_get_string_attr):
        (webkit_dom_test_obj_set_string_attr):
        (webkit_dom_test_obj_get_test_obj_attr):
        (webkit_dom_test_obj_set_test_obj_attr):
        (webkit_dom_test_obj_get_xml_obj_attr):
        (webkit_dom_test_obj_set_xml_obj_attr):
        (webkit_dom_test_obj_get_reflected_string_attr):
        (webkit_dom_test_obj_set_reflected_string_attr):
        (webkit_dom_test_obj_get_reflected_url_attr):
        (webkit_dom_test_obj_set_reflected_url_attr):
        (webkit_dom_test_obj_get_reflected_non_empty_url_attr):
        (webkit_dom_test_obj_set_reflected_non_empty_url_attr):
        (webkit_dom_test_obj_get_reflected_custom_url_attr):
        (webkit_dom_test_obj_set_reflected_custom_url_attr):
        (webkit_dom_test_obj_get_reflected_custom_non_empty_url_attr):
        (webkit_dom_test_obj_set_reflected_custom_non_empty_url_attr):
        (webkit_dom_test_obj_get_string_attr_with_getter_exception):
        (webkit_dom_test_obj_set_string_attr_with_getter_exception):
        (webkit_dom_test_obj_get_string_attr_with_setter_exception):
        (webkit_dom_test_obj_set_string_attr_with_setter_exception):
        (webkit_dom_test_obj_get_script_string_attr):
        (webkit_dom_test_obj_get_hash):
        (webkit_dom_test_obj_class_init):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod):

2010-08-13  Ariya Hidayat  <ariya@sencha.com>

        Reviewed by Simon Hausmann.

        [Qt] Canvas and CSS: blur option in shadow not working
        https://bugs.webkit.org/show_bug.cgi?id=34479

        Patch 1: Refactor shadow states handling.

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContextPlatformPrivate::): Added shadow states as
        member variables.
        (WebCore::GraphicsContextPlatformPrivate::hasShadow): Convenient
        function to check whether there is shadow or not.
        (WebCore::GraphicsContextPlatformPrivate::GraphicsContextPlatformPrivate):
        (WebCore::GraphicsContext::drawRect): Use shadow states instead of
        calling getShadow.
        (WebCore::GraphicsContext::drawLine): ditto.
        (WebCore::GraphicsContext::strokeArc): ditto.
        (WebCore::GraphicsContext::drawConvexPolygon): ditto.
        (WebCore::GraphicsContext::fillPath): ditto.
        (WebCore::GraphicsContext::strokePath): ditto.
        (WebCore::GraphicsContext::fillRect): Removes the use of helper function
        drawBorderlessRectShadow as the code already becomes a lot simpler.
        (WebCore::GraphicsContext::fillRoundedRect): Removes the use of helper
        function drawFilledShadowPath as the code already becomes a lot simpler.
        (WebCore::GraphicsContext::setPlatformShadow): Store shadow states
        and find out the shadow type (complexity) for future use.
        (WebCore::GraphicsContext::clearPlatformShadow): Reset shadow states.

2010-08-11  Zhenyao Mo  <zmo@google.com>

        Reviewed by Dimitri Glazkov.

        Regression in linking of programs
        https://bugs.webkit.org/show_bug.cgi?id=43820

        Shaders and programs shouldn't be deleted until their attachments are removed, therefore, we need to track the attach/detach/useProgram.

        * html/canvas/WebGLObject.cpp: Track the object attachment count and whether it should really be deleted.
        (WebCore::WebGLObject::WebGLObject):
        (WebCore::WebGLObject::setObject):
        (WebCore::WebGLObject::deleteObject):
        * html/canvas/WebGLObject.h: Track the object attachment count and whether it should really be deleted.
        (WebCore::WebGLObject::onAttached):
        (WebCore::WebGLObject::onDetached):
        (WebCore::WebGLObject::getAttachmentCount):
        * html/canvas/WebGLProgram.cpp: Track the attached shaders.
        (WebCore::WebGLProgram::WebGLProgram):
        (WebCore::WebGLProgram::deleteObjectImpl):
        (WebCore::WebGLProgram::getAttachedShader):
        (WebCore::WebGLProgram::attachShader):
        (WebCore::WebGLProgram::detachShader):
        * html/canvas/WebGLProgram.h: Track the attached shaders.
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::attachShader): Track the attachment of a shader to a program.
        (WebCore::WebGLRenderingContext::deleteProgram): Detach shaders.
        (WebCore::WebGLRenderingContext::detachShader): Track the attachment of a shader to a program.
        (WebCore::WebGLRenderingContext::validateWebGLObject): Also check if object == 0.
        (WebCore::WebGLRenderingContext::linkProgram): Using the cached attached shaders instead of query from driver.
        (WebCore::WebGLRenderingContext::useProgram): Track the attachment of a program to the current rendering pipeline.

2010-08-13  Steve Block  <steveblock@google.com>

        Reviewed by Alexey Proskuryakov.

        Geolocation activity started after frame has been disconnected can cause crash
        https://bugs.webkit.org/show_bug.cgi?id=39879

        New requests started after the Frame has been disconnected are ignored. We do
        not invoke the error callback as this would allow buggy or malicious pages to
        hose the CPU. Such a page could hold a reference to a Geolocation object from
        a since closed Page and register new requests from the error callback to
        create an infinite loop.

        Tests: fast/dom/Geolocation/disconnected-frame-already.html

        * page/Geolocation.cpp:

2010-08-13  Satish Sampath  <satish@chromium.org>

        Reviewed by Jeremy Orlow.

        Support for multiple speech enabled elements in same page.
        https://bugs.webkit.org/show_bug.cgi?id=43922

        * page/SpeechInput.cpp: Generates request ids as necessary when each speech enabled input element gets
        created/destroyed and multiplexes the listener callbacks to the appropriate input element based on the request id.
        (WebCore::SpeechInput::SpeechInput):
        (WebCore::SpeechInput::~SpeechInput):
        (WebCore::SpeechInput::registerListener):
        (WebCore::SpeechInput::unregisterListener):
        (WebCore::SpeechInput::didCompleteRecording):
        (WebCore::SpeechInput::didCompleteRecognition):
        (WebCore::SpeechInput::setRecognitionResult):
        (WebCore::SpeechInput::startRecognition):
        (WebCore::SpeechInput::stopRecording):
        (WebCore::SpeechInput::cancelRecognition):
        * page/SpeechInput.h:
        * page/SpeechInputClient.h: Now requires a one time set for the WebCore::SpeechInputListener and
        takes in a 'requestId' for all calls.
        * page/SpeechInputListener.h: Now returns the above mentioned requestId in all the listener callbacks for
        identifying which input element the event goes to.
        * platform/mock/SpeechInputClientMock.cpp:
        (WebCore::SpeechInputClientMock::SpeechInputClientMock):
        (WebCore::SpeechInputClientMock::setListener):
        (WebCore::SpeechInputClientMock::startRecognition):
        (WebCore::SpeechInputClientMock::stopRecording):
        (WebCore::SpeechInputClientMock::cancelRecognition):
        (WebCore::SpeechInputClientMock::timerFired):
        * platform/mock/SpeechInputClientMock.h:
        * rendering/TextControlInnerElements.cpp:
        (WebCore::InputFieldSpeechButtonElement::InputFieldSpeechButtonElement):
        (WebCore::InputFieldSpeechButtonElement::~InputFieldSpeechButtonElement):
        (WebCore::InputFieldSpeechButtonElement::defaultEventHandler):
        (WebCore::InputFieldSpeechButtonElement::speechInput):
        (WebCore::InputFieldSpeechButtonElement::didCompleteRecording):
        (WebCore::InputFieldSpeechButtonElement::didCompleteRecognition):
        (WebCore::InputFieldSpeechButtonElement::setRecognitionResult):
        * rendering/TextControlInnerElements.h:

2010-08-13  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by David Kilzer.

        HTMLMediaElement::prepareForLoad should cancel current plug-in proxy media player
        https://bugs.webkit.org/show_bug.cgi?id=43923

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::prepareForLoad): Tell mediaPlayer to cancel the current load
        if it already exists.

2010-08-12  Stephen White  <senorblanco@chromium.org>

        Reviewed by David Levin.

        [CHROMIUM] Use the BGRA format for canvas 2D accel upload and readbacks.
        https://bugs.webkit.org/show_bug.cgi?id=43804

        Use the BGRA format from GraphicsContext3D, if supported.  Also keep a
        texture around for uploads, rather than re-creating it each time.

        Covered by many layout tests (once we're running them).

        * platform/graphics/chromium/GLES2Texture.cpp:
        (WebCore::convertFormat):
        Move convertFormat() ahead of texture creation, so we can check for
        BGRA support.
        (WebCore::GLES2Texture::create):
        Use convertFormat() to determine the correct format and types to use;
        use the returned format also for internalFormat, since GLES2 insists
        they match.
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::setGraphicsContext3D):
        Clear the upload texture when a new context is set.
        (WebCore::PlatformContextSkia::uploadSoftwareToHardware):
        Use m_uploadTexture instead of creating a new one each time.
        (WebCore::PlatformContextSkia::readbackHardwareToSoftware):
        When the context supports it, use the BGRA format for readbacks
        instead of swizzling.
        * platform/graphics/skia/PlatformContextSkia.h:
        Add m_uploadTexture for consecutive uploads.

2010-08-13  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Ariya Hidayat.

        [Qt] Clean up mobile feature useage
        https://bugs.webkit.org/show_bug.cgi?id=43968

        * WebCore.pro: Replaced use of Nokia specific platform scopes with concrete
        feature names.

2010-08-13  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: rename InspectorValue::push and set to
        push{Value|Object|Array} and set{...}.
        https://bugs.webkit.org/show_bug.cgi?id=43966

        * bindings/js/ScriptProfile.cpp:
        (WebCore::buildInspectorObjectFor):
        * bindings/js/ScriptValue.cpp:
        (WebCore::jsToInspectorValue):
        * bindings/v8/ScriptCallStack.cpp:
        (WebCore::ScriptCallStack::stackTrace):
        * bindings/v8/ScriptProfile.cpp:
        (WebCore::buildInspectorObjectFor):
        * bindings/v8/ScriptValue.cpp:
        (WebCore::v8ToInspectorValue):
        * inspector/CodeGeneratorInspector.pm:
        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::addToFrontend):
        * inspector/Inspector.idl:
        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::buildObjectForApplicationCache):
        (WebCore::InspectorApplicationCacheAgent::buildArrayForApplicationCacheResources):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::buildArrayForCookies):
        (WebCore::InspectorController::getDOMStorageEntries):
        (WebCore::InspectorController::getProfileHeaders):
        (WebCore::InspectorController::getProfile):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::getEventListenersForNode):
        (WebCore::InspectorDOMAgent::buildObjectForNode):
        (WebCore::InspectorDOMAgent::buildArrayForContainerChildren):
        (WebCore::InspectorDOMAgent::getStyles):
        (WebCore::InspectorDOMAgent::getAllStyles):
        (WebCore::InspectorDOMAgent::getRuleRanges):
        (WebCore::InspectorDOMAgent::buildObjectForAttributeStyles):
        (WebCore::InspectorDOMAgent::buildArrayForCSSRules):
        (WebCore::InspectorDOMAgent::buildArrayForPseudoElements):
        (WebCore::InspectorDOMAgent::buildObjectForStyle):
        (WebCore::InspectorDOMAgent::populateObjectWithStyleProperties):
        (WebCore::InspectorDOMAgent::buildArrayForDisabledStyleProperties):
        (WebCore::InspectorDOMAgent::buildObjectForStyleSheet):
        (WebCore::InspectorDOMAgent::buildObjectForRule):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::saveBreakpoints):
        * inspector/InspectorResource.cpp:
        (WebCore::InspectorResource::updateScriptObject):
        * inspector/InspectorStorageAgent.cpp:
        (WebCore::):
        (WebCore::InspectorStorageAgent::executeSQL):
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::pushGCEventRecords):
        (WebCore::InspectorTimelineAgent::didInstallTimer):
        (WebCore::InspectorTimelineAgent::didRemoveTimer):
        (WebCore::InspectorTimelineAgent::didScheduleResourceRequest):
        (WebCore::InspectorTimelineAgent::willSendResourceRequest):
        (WebCore::InspectorTimelineAgent::didFinishLoadingResource):
        (WebCore::InspectorTimelineAgent::didMarkTimeline):
        (WebCore::InspectorTimelineAgent::addRecordToTimeline):
        (WebCore::InspectorTimelineAgent::didCompleteCurrentRecord):
        * inspector/InspectorValues.cpp:
        (WebCore::):
        (WebCore::InspectorValue::asValue):
        (WebCore::InspectorValue::asObject):
        (WebCore::InspectorValue::asArray):
        (WebCore::InspectorObject::asObject):
        (WebCore::InspectorArray::asArray):
        * inspector/InspectorValues.h:
        (WebCore::InspectorObject::setBool):
        (WebCore::InspectorObject::setNumber):
        (WebCore::InspectorObject::setString):
        (WebCore::InspectorObject::setValue):
        (WebCore::InspectorObject::setObject):
        (WebCore::InspectorObject::setArray):
        (WebCore::InspectorArray::pushValue):
        (WebCore::InspectorArray::pushObject):
        (WebCore::InspectorArray::pushArray):
        * inspector/ScriptBreakpoint.cpp:
        (WebCore::ScriptBreakpoint::inspectorObjectFromSourceBreakpoints):
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createGenericRecord):

2010-08-13  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r65204.
        http://trac.webkit.org/changeset/65204
        https://bugs.webkit.org/show_bug.cgi?id=43965

        Caused a lot of test crashes in Chromium (Requested by yutak
        on #webkit).

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isInputImage):
        (WebCore::AccessibilityRenderObject::isNativeCheckboxOrRadio):
        * dom/InputElement.h:
        * html/HTMLInputElement.h:

2010-08-13  Anton Muhin  <antonm@chromium.org>

        Reviewed by Nate Chapin.

        Reapplying http://trac.webkit.org/changeset/65284 after fixed include.

        [v8] Create callbacks for named access of elements from document object on fly.
        https://bugs.webkit.org/show_bug.cgi?id=43725

        That should speed up access to methods on document as there is no need to
        consult with interceptor before invoking the method.

        This reapplies http://trac.webkit.org/changeset/60670 reverted with
        http://trac.webkit.org/changeset/63845.  The main difference is in treatment
        of removed named elements: we don't remove an accessor any more, but leave it.
        Therefore any accessor should be able to treat the case when there is no
        expando property.

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::namedItemAdded):
        (WebCore::ScriptController::namedItemRemoved):
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::checkDocumentWrapper):
        (WebCore::V8DOMWindowShell::updateDocumentWrapperCache):
        (WebCore::getter):
        (WebCore::V8DOMWindowShell::namedItemAdded):
        (WebCore::V8DOMWindowShell::namedItemRemoved):
        * bindings/v8/V8DOMWindowShell.h:
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::instantiateV8Object):
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        (WebCore::V8HTMLDocument::WrapInShadowObject):
        (WebCore::V8HTMLDocument::GetNamedProperty):
        (WebCore::V8HTMLDocument::allAccessorSetter):
        (WebCore::toV8):
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::removeItemFromMap):

2010-08-13  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: remove openInInspectorWindow and evaluateAndStringify from InjectedScript.
        https://bugs.webkit.org/show_bug.cgi?id=43854

        * inspector/Inspector.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::openInInspectedWindow):
        * inspector/InspectorController.h:
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._onEvaluateOnInspectedPage.callback):
        (WebInspector.ExtensionServer.prototype._onEvaluateOnInspectedPage):
        * inspector/front-end/InjectedScript.js:
        (injectedScriptConstructor):
        * inspector/front-end/InjectedScriptAccess.js:
        * inspector/front-end/InspectorBackendStub.js:
        (WebInspector.InspectorBackendStub):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourceSidebarTreeElement.prototype.ondblclick):

2010-08-13  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Alexey Proskuryakov.

        flaky websocket/tests/frame-length-overflow.html
        https://bugs.webkit.org/show_bug.cgi?id=43902

        Add m_shouldDiscardReceivedData flag to indicate it will no longer
        receive data from network.

        * websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::WebSocketChannel):
        (WebCore::WebSocketChannel::didReceiveData):
        (WebCore::WebSocketChannel::didFail):
        (WebCore::WebSocketChannel::processBuffer):
        - when frame length overflows, we couldn't process data any more.
          clear buffer and mark m_shouldDiscardReceivedData true to make sure
          it doesn't process the same buffer again.
        * websockets/WebSocketChannel.h:

2010-08-13  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Use SVGPathByteStream to animate SVGPath
        https://bugs.webkit.org/show_bug.cgi?id=43929

        Use SVGPathByteStream to perform animations of Paths. SVGPathBlender blends
        the starting point to the end point according to the current progress value.
        Cleanup SVGPathSegList, by removing the unnecessary legacy blending code.

        No new tests because no functional changes.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * svg/SVGAllInOne.cpp:
        * svg/SVGAnimateElement.cpp:
        (WebCore::SVGAnimateElement::SVGAnimateElement):
        (WebCore::SVGAnimateElement::calculateAnimatedValue):
        (WebCore::SVGAnimateElement::calculateFromAndToValues):
        (WebCore::SVGAnimateElement::resetToBaseValue):
        (WebCore::SVGAnimateElement::applyResultsToTarget):
        * svg/SVGAnimateElement.h:
        * svg/SVGPathBlender.cpp: Added.
        (WebCore::SVGPathBlender::SVGPathBlender):
        (WebCore::SVGPathBlender::~SVGPathBlender):
        (WebCore::SVGPathBlender::blendAnimatedFloat):
        (WebCore::SVGPathBlender::blendAnimatedFloatPoint):
        (WebCore::SVGPathBlender::blendMoveToSegment):
        (WebCore::SVGPathBlender::blendLineToSegment):
        (WebCore::SVGPathBlender::blendLineToHorizontalSegment):
        (WebCore::SVGPathBlender::blendLineToVerticalSegment):
        (WebCore::SVGPathBlender::blendCurveToCubicSegment):
        (WebCore::SVGPathBlender::blendCurveToCubicSmoothSegment):
        (WebCore::SVGPathBlender::blendCurveToQuadraticSegment):
        (WebCore::SVGPathBlender::blendCurveToQuadraticSmoothSegment):
        (WebCore::SVGPathBlender::blendArcToSegment):
        (WebCore::SVGPathBlender::blendAnimatedPath):
        (WebCore::SVGPathBlender::cleanup):
        * svg/SVGPathBlender.h: Added.
        * svg/SVGPathParserFactory.cpp:
        (WebCore::globalSVGPathBlender):
        (WebCore::SVGPathParserFactory::buildAnimatedSVGPathByteStream):
        * svg/SVGPathParserFactory.h:
        * svg/SVGPathSegList.cpp:
        (WebCore::SVGPathSegList::getPathSegAtLength):
        * svg/SVGPathSegList.h:
        (WebCore::SVGPathSegList::create):
        * svg/SVGPointList.cpp:
        (WebCore::adjustAnimatedValue):

2010-08-12  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Window size changes + resources on absolute sized content leads to pixelation
        https://bugs.webkit.org/show_bug.cgi?id=43921

        Avoid pixelation when using resources on absolute sized objects. Be sure to invalidate the used resources if window size changes.
        Otherwhise masks etc. will be scaled up and pixelate. As nice side-effect, this fixes run-webkit-tests --singly svg/W3C-SVG-1.1, which
        used to produce wrong results for the gradient tests, as the window size change from 800x600 for 480x360 (svg/W3C-SVG-1.1 specific DRT quirk)
        didn't invalidate the resources.

        Renamed invalidateClient -> removeClientFromCache and invalidateClients -> removeAllClientsFromCache.
        Add a boolean "markForInvalidation" parameter, that controls wheter the clients should be marked for repaint/boundaries invalidation/layout
        or wheter we only want to notify the parents that the resource changed, to avoid doing unncessary work in SVGRenderSupport::layoutChildren.

        Test: svg/custom/absolute-sized-content-with-resources.xhtml

        * rendering/RenderSVGGradientStop.cpp:
        (WebCore::RenderSVGGradientStop::styleDidChange): Don't do anything for StyleDifferenceEqual.
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::imageChanged):
        * rendering/RenderSVGResource.cpp:
        (WebCore::RenderSVGResource::markForLayoutAndParentResourceInvalidation):
        * rendering/RenderSVGResource.h:
        * rendering/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::removeAllClientsFromCache):
        (WebCore::RenderSVGResourceClipper::removeClientFromCache):
        * rendering/RenderSVGResourceClipper.h:
        * rendering/RenderSVGResourceContainer.cpp:
        (WebCore::RenderSVGResourceContainer::layout):
        (WebCore::RenderSVGResourceContainer::idChanged):
        (WebCore::RenderSVGResourceContainer::markAllClientsForInvalidation):
        (WebCore::RenderSVGResourceContainer::markClientForInvalidation):
        * rendering/RenderSVGResourceContainer.h:
        (WebCore::RenderSVGResourceContainer::):
        * rendering/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::removeAllClientsFromCache):
        (WebCore::RenderSVGResourceFilter::removeClientFromCache):
        (WebCore::RenderSVGResourceFilter::postApplyResource):
        * rendering/RenderSVGResourceFilter.h:
        * rendering/RenderSVGResourceGradient.cpp:
        (WebCore::RenderSVGResourceGradient::removeAllClientsFromCache):
        (WebCore::RenderSVGResourceGradient::removeClientFromCache):
        (WebCore::RenderSVGResourceGradient::applyResource):
        * rendering/RenderSVGResourceGradient.h:
        * rendering/RenderSVGResourceMarker.cpp:
        (WebCore::RenderSVGResourceMarker::layout):
        (WebCore::RenderSVGResourceMarker::removeAllClientsFromCache):
        (WebCore::RenderSVGResourceMarker::removeClientFromCache):
        * rendering/RenderSVGResourceMarker.h:
        * rendering/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::removeAllClientsFromCache):
        (WebCore::RenderSVGResourceMasker::removeClientFromCache):
        * rendering/RenderSVGResourceMasker.h:
        * rendering/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::removeAllClientsFromCache):
        (WebCore::RenderSVGResourcePattern::removeClientFromCache):
        (WebCore::RenderSVGResourcePattern::applyResource):
        * rendering/RenderSVGResourcePattern.h:
        * rendering/RenderSVGResourceSolidColor.h:
        (WebCore::RenderSVGResourceSolidColor::removeAllClientsFromCache):
        (WebCore::RenderSVGResourceSolidColor::removeClientFromCache):
        * rendering/SVGRenderSupport.cpp:
        (WebCore::invalidateResourcesOfChildren): Add new helper funtion recursively invalidating resources of a sub render tree.
        (WebCore::SVGRenderSupport::layoutChildren): Keep track of all objects that didn't need layout, as we still have to invalidate their resources, if window size changes.
        * rendering/SVGResources.cpp:
        (WebCore::SVGResources::removeClientFromCache):
        (WebCore::SVGResources::resourceDestroyed):
        * rendering/SVGResources.h:
        * rendering/SVGResourcesCache.cpp:
        (WebCore::SVGResourcesCache::clientLayoutChanged):

2010-08-13  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Chromium DevTools: [CRASH] Autocomplete on arrays causes crashes.
        https://bugs.webkit.org/show_bug.cgi?id=43955

        * bindings/v8/ScriptValue.cpp:
        (WebCore::v8ToInspectorValue):

2010-08-13  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig

        Unify UString::UTF8String() & String::utf8() methods,
        remove UString::cost() & make atArrayIndex a free function.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::getOwnPropertySlot):
        (WebCore::JSDOMWindow::getOwnPropertyDescriptor):
        * bridge/NP_jsobject.cpp:
        (_NPN_Enumerate):
        * bridge/c/c_utility.cpp:
        (JSC::Bindings::convertValueToNPVariant):
        * bridge/jni/JNIBridge.cpp:
        (JavaParameter::JavaParameter):
        (JavaMethod::JavaMethod):
        (JavaMethod::signature):
        (JavaMethod::methodID):
        * bridge/jni/JNIBridge.h:
        (JSC::Bindings::JavaString::utf8):
        (JSC::Bindings::JavaParameter::type):
        (JSC::Bindings::JavaMethod::returnType):
        * bridge/jni/jni_jsobject.mm:
        (JavaJSObject::call):
        (JavaJSObject::eval):
        (JavaJSObject::getMember):
        (JavaJSObject::setMember):
        (JavaJSObject::removeMember):
        (JavaJSObject::convertJObjectToValue):
        * bridge/jni/jsc/JNIBridgeJSC.cpp:
        (JavaField::JavaField):
        (JavaField::valueFromInstance):
        (JavaField::setValueToInstance):
        * bridge/jni/jsc/JNIBridgeJSC.h:
        (JSC::Bindings::JavaField::type):
        * bridge/jni/jsc/JavaInstanceJSC.cpp:
        (JavaInstance::invokeMethod):
        * bridge/jni/jsc/JavaStringJSC.h:
        (JSC::Bindings::JavaStringImpl::utf8):
        * bridge/runtime_array.cpp:
        (JSC::RuntimeArray::getOwnPropertySlot):
        (JSC::RuntimeArray::getOwnPropertyDescriptor):
        (JSC::RuntimeArray::put):

2010-08-12  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: allow interrupting long running JS to execute inspector command
        https://bugs.webkit.org/show_bug.cgi?id=43900

        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::):
        (WebCore::ScriptDebugServer::pause):
        (WebCore::ScriptDebugServer::interruptAndRun):
        (WebCore::ScriptDebugServer::runPendingTasks):
        (WebCore::ScriptDebugServer::handleV8DebugEvent):
        * bindings/v8/ScriptDebugServer.h:
        (WebCore::ScriptDebugServer::Task::~Task):

2010-08-12  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r65295.
        http://trac.webkit.org/changeset/65295
        https://bugs.webkit.org/show_bug.cgi?id=43950

        It broke 4 sputnik tests (Requested by Ossy on #webkit).

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::getOwnPropertySlot):
        (WebCore::JSDOMWindow::getOwnPropertyDescriptor):
        * bridge/NP_jsobject.cpp:
        (_NPN_Enumerate):
        * bridge/c/c_utility.cpp:
        (JSC::Bindings::convertValueToNPVariant):
        * bridge/jni/JNIBridge.cpp:
        (JavaParameter::JavaParameter):
        (JavaMethod::JavaMethod):
        (JavaMethod::signature):
        (JavaMethod::methodID):
        * bridge/jni/JNIBridge.h:
        (JSC::Bindings::JavaString::UTF8String):
        (JSC::Bindings::JavaParameter::type):
        (JSC::Bindings::JavaMethod::returnType):
        * bridge/jni/jni_jsobject.mm:
        (JavaJSObject::call):
        (JavaJSObject::eval):
        (JavaJSObject::getMember):
        (JavaJSObject::setMember):
        (JavaJSObject::removeMember):
        (JavaJSObject::convertJObjectToValue):
        * bridge/jni/jsc/JNIBridgeJSC.cpp:
        (JavaField::JavaField):
        (JavaField::valueFromInstance):
        (JavaField::setValueToInstance):
        * bridge/jni/jsc/JNIBridgeJSC.h:
        (JSC::Bindings::JavaField::type):
        * bridge/jni/jsc/JavaInstanceJSC.cpp:
        (JavaInstance::invokeMethod):
        * bridge/jni/jsc/JavaStringJSC.h:
        (JSC::Bindings::JavaStringImpl::UTF8String):
        * bridge/runtime_array.cpp:
        (JSC::RuntimeArray::getOwnPropertySlot):
        (JSC::RuntimeArray::getOwnPropertyDescriptor):
        (JSC::RuntimeArray::put):

2010-08-12  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed. Fixed typo in inspector js.
        Follow up to r65300.

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

2010-08-12  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Make getPrototypes return objects, not names.
        https://bugs.webkit.org/show_bug.cgi?id=43934

        * inspector/front-end/InjectedScript.js:
        (injectedScriptConstructor):
        (injectedScriptConstructor.):
        * inspector/front-end/PropertiesSidebarPane.js:
        (WebInspector.PropertiesSidebarPane.prototype.update.callback):
        * inspector/front-end/inspector.js:
        (WebInspector.log):

2010-08-12  James Robinson  <jamesr@chromium.org>

        Unreviewed, rolling out r65284 and r65288.  Broke chromium compile.
        https://bugs.webkit.org/show_bug.cgi?id=43725
        http://trac.webkit.org/changeset/65284
        http://trac.webkit.org/changeset/65288

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::namedItemAdded):
        (WebCore::ScriptController::namedItemRemoved):
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::updateDocumentWrapperCache):
        * bindings/v8/V8DOMWindowShell.h:
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::instantiateV8Object):
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        (WebCore::V8HTMLDocument::namedPropertyDeleter):
        (WebCore::V8HTMLDocument::namedPropertyGetter):
        (WebCore::V8HTMLDocument::indexedPropertyGetter):
        (WebCore::V8HTMLDocument::allAccessorSetter):
        (WebCore::toV8):
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::removeItemFromMap):

2010-08-12  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig

        Unify UString::UTF8String() & String::utf8() methods,
        remove UString::cost() & make atArrayIndex a free function.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::getOwnPropertySlot):
        (WebCore::JSDOMWindow::getOwnPropertyDescriptor):
        * bridge/NP_jsobject.cpp:
        (_NPN_Enumerate):
        * bridge/c/c_utility.cpp:
        (JSC::Bindings::convertValueToNPVariant):
        * bridge/jni/JNIBridge.cpp:
        (JavaParameter::JavaParameter):
        (JavaMethod::JavaMethod):
        (JavaMethod::signature):
        (JavaMethod::methodID):
        * bridge/jni/JNIBridge.h:
        (JSC::Bindings::JavaString::utf8):
        (JSC::Bindings::JavaParameter::type):
        (JSC::Bindings::JavaMethod::returnType):
        * bridge/jni/jni_jsobject.mm:
        (JavaJSObject::call):
        (JavaJSObject::eval):
        (JavaJSObject::getMember):
        (JavaJSObject::setMember):
        (JavaJSObject::removeMember):
        (JavaJSObject::convertJObjectToValue):
        * bridge/jni/jsc/JNIBridgeJSC.cpp:
        (JavaField::JavaField):
        (JavaField::valueFromInstance):
        (JavaField::setValueToInstance):
        * bridge/jni/jsc/JNIBridgeJSC.h:
        (JSC::Bindings::JavaField::type):
        * bridge/jni/jsc/JavaInstanceJSC.cpp:
        (JavaInstance::invokeMethod):
        * bridge/jni/jsc/JavaStringJSC.h:
        (JSC::Bindings::JavaStringImpl::utf8):
        * bridge/runtime_array.cpp:
        (JSC::RuntimeArray::getOwnPropertySlot):
        (JSC::RuntimeArray::getOwnPropertyDescriptor):
        (JSC::RuntimeArray::put):

2010-08-12  Gavin Barraclough  <barraclough@apple.com>

        Speculative build fix for chromium bindings (someone added the old include style!).

        * bindings/v8/V8DOMWindowShell.h:

2010-08-12  MORITA Hajime  <morrita@google.com>

        Reviewed by Tony Chang.

        [Refactoring] TextEvent class has to many flags
        https://bugs.webkit.org/show_bug.cgi?id=43893

        Turned TextEvent::m_isLineBreak, TextEvent::m_isBacktab, TextEvent::m_isPaste 
        into single TextEvent::m_inputType enumeration.
        
        No functional change. No new tests.

        * dom/TextEvent.cpp:
        (WebCore::TextEvent::selectInputType):
        (WebCore::TextEvent::create):
        (WebCore::TextEvent::createForPlainTextPaste):
        (WebCore::TextEvent::createForFragmentPaste):
        (WebCore::TextEvent::TextEvent):
        * dom/TextEvent.h:
        (WebCore::TextEvent::):
        (WebCore::TextEvent::isLineBreak):
        (WebCore::TextEvent::isBackTab):
        (WebCore::TextEvent::isPaste):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleTextInputEvent):

2010-08-12  Kenneth Russell  <kbr@google.com>

        Reviewed by David Levin.

        Delete obsolete CanvasNumberArray
        https://bugs.webkit.org/show_bug.cgi?id=38619

        Deleted unreferenced code. Built WebKit and Chromium to test.

        * Android.derived.jscbindings.mk:
        * Android.derived.v8bindings.mk:
        * Android.jscbindings.mk:
        * Android.mk:
        * bindings/js/JSCanvasNumberArrayCustom.cpp: Removed.
        * html/canvas/CanvasNumberArray.cpp: Removed.
        * html/canvas/CanvasNumberArray.h: Removed.
        * html/canvas/CanvasNumberArray.idl: Removed.

2010-08-12  Anton Muhin  <antonm@chromium.org>

        Reviewed by Nate Chapin.

        [v8] Create callbacks for named access of elements from document object on fly.
        https://bugs.webkit.org/show_bug.cgi?id=43725

        That should speed up access to methods on document as there is no need to
        consult with interceptor before invoking the method.

        This reapplies http://trac.webkit.org/changeset/60670 reverted with
        http://trac.webkit.org/changeset/63845.  The main difference is in treatment
        of removed named elements: we don't remove an accessor any more, but leave it.
        Therefore any accessor should be able to treat the case when there is no
        expando property.

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::namedItemAdded):
        (WebCore::ScriptController::namedItemRemoved):
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::checkDocumentWrapper):
        (WebCore::V8DOMWindowShell::updateDocumentWrapperCache):
        (WebCore::getter):
        (WebCore::V8DOMWindowShell::namedItemAdded):
        (WebCore::V8DOMWindowShell::namedItemRemoved):
        * bindings/v8/V8DOMWindowShell.h:
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::instantiateV8Object):
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        (WebCore::V8HTMLDocument::WrapInShadowObject):
        (WebCore::V8HTMLDocument::GetNamedProperty):
        (WebCore::V8HTMLDocument::allAccessorSetter):
        (WebCore::toV8):
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::removeItemFromMap):

2010-08-12  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Adam Barth.

        Ensure that parser doesn't attach children that have been removed by JavaScript event handlers.
        https://bugs.webkit.org/show_bug.cgi?id=43813

        This patch re-fixes bug 40742 in a way that keeps allowing HTMLLinkElement
        to lazy-attach.

        * html/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::attach): Added parent check.
        * html/HTMLLinkElement.cpp: Basically undoes changes introduced by r61424.
        * html/HTMLLinkElement.h: Ditto.

2010-08-12  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Dumitru Daniliuc.

        Clear PluginData's page pointer on page refresh
        https://bugs.webkit.org/show_bug.cgi?id=43888

        Test: plugins/access-after-page-destroyed.html

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

2010-08-12  Zhenyao Mo  <zmo@google.com>

        Reviewed by Dimitri Glazkov.

        getParameter(STENCIL_VALUE_MASK) (and others) returns the wrong value
        https://bugs.webkit.org/show_bug.cgi?id=31842

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getUnsignedLongParameter): Casting from int to unsigned long correctly.

2010-08-12  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Joseph Pecoraro.

        Web Inspector: mimic FireBug's array detection.
        https://bugs.webkit.org/show_bug.cgi?id=30974

        * inspector/front-end/InjectedScript.js:
        (injectedScriptConstructor):

2010-08-12  Zhenyao Mo  <zmo@google.com>

        Reviewed by Dimitri Glazkov.

        regression in generateMipmap
        https://bugs.webkit.org/show_bug.cgi?id=43873

        * html/canvas/WebGLTexture.cpp:
        (WebCore::WebGLTexture::generateMipmapLevelInfo): should set m_needToUseBlackTexture to false if generateMipmapLevelInfo runs through successfully.

2010-08-12  Ariya Hidayat  <ariya@sencha.com>

        Reviewed by David Hyatt.

        [Qt] Split TransparencyLayer into its own header file.
        https://bugs.webkit.org/show_bug.cgi?id=43935

        * WebCore.pro: Include TransparencyLayer.h.
        * platform/graphics/qt/GraphicsContextQt.cpp:
        * platform/graphics/qt/TransparencyLayer.h: Added.
        (WebCore::TransparencyLayer::TransparencyLayer):
        (WebCore::TransparencyLayer::operator=):

2010-08-12  François Sausset  <sausset@gmail.com>

        Reviewed by Beth Dakin.

        Horizontal padding should be 0 on mrow elements.
        https://bugs.webkit.org/show_bug.cgi?id=43908

        Updated tests in /mathml

        * css/mathml.css:
        (mrow, mfenced):
        (mfenced):

2010-08-12  Aaron Boodman  <aa@chromium.org>

        Reviewed by David Hyatt.

        Make the cascade level of "user" styles configurable
        https://bugs.webkit.org/show_bug.cgi?id=43457

        * WebCore.exp.in:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::CSSStyleSelector):
        * dom/Document.cpp:
        (WebCore::Document::pageGroupUserSheets):
        * page/PageGroup.cpp:
        (WebCore::PageGroup::addUserStyleSheetToWorld):
        * page/PageGroup.h:
        * page/UserStyleSheet.h:
        (WebCore::UserStyleSheet::):
        (WebCore::UserStyleSheet::UserStyleSheet):
        (WebCore::UserStyleSheet::level):

2010-08-12  Jian Li  <jianli@chromium.org>

        Fix qt build break.

        * html/ThreadableBlobRegistry.cpp:
        (WebCore::postTaskToMainThread):

2010-08-12  Jian Li  <jianli@chromium.org>

        Reviewed by David Levin.

        Add ThreadableBlobRegistry to support calling BlobRegistry methods in
        main thread.
        https://bugs.webkit.org/show_bug.cgi?id=43874

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::~ScriptExecutionContext):
        (WebCore::ScriptExecutionContext::addBlob):
        (WebCore::ScriptExecutionContext::removeBlob):
        (WebCore::ScriptExecutionContext::createPublicBlobURL):
        (WebCore::ScriptExecutionContext::revokePublicBlobURL):
        * dom/ScriptExecutionContext.h:
        * html/Blob.cpp:
        (WebCore::Blob::Blob):
        (WebCore::Blob::~Blob):
        (WebCore::Blob::contextDestroyed):
        * html/Blob.h:
        * html/BlobRegistryImpl.cpp:
        (WebCore::BlobRegistryImpl::registerBlobURL):
        (WebCore::BlobRegistryImpl::unregisterBlobURL):
        (WebCore::BlobRegistryImpl::getBlobDataFromURL):
        * html/ThreadableBlobRegistry.cpp: Added.
        * html/ThreadableBlobRegistry.h: Added.

2010-08-12  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Darin Adler.

        generate-bindings.pl should generate warning free code
        https://bugs.webkit.org/show_bug.cgi?id=43353

        * bindings/scripts/CodeGeneratorJS.pm: Suggested parentheses added around && within ||

2010-08-11  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Kent Tamura.

        merge MarkupAccumulator and MarkupAccumulatorWrapper
        https://bugs.webkit.org/show_bug.cgi?id=43834

        Removed MarkupAccumulator and added serializeNodesWithNamespaces to use MarkupAccumulatorWrapper
        in both versions of createMarkup.  Accumulation of nodes done manually in serializeNodes is
        now done by MarkupAccumulatorWrapper as done in the original MarkupAccumulator.

        No new tests added since this is a cleanup.

        * editing/markup.cpp:
        (WebCore::MarkupAccumulatorWrapper::MarkupAccumulatorWrapper): Takes vector of nodes and set it to m_nodes.
        (WebCore::MarkupAccumulatorWrapper::insertOpenTag): Adds node to m_nodes.
        (WebCore::MarkupAccumulatorWrapper::wrapWithNode): Adds node to m_nodes.
        (WebCore::serializeNodes): Adding node to nodes is moved into MarkupAccumulatorWrapper.
        (WebCore::createMarkup): Instantiates MarkupAccumulatorWrapper.
        (WebCore::serializeNodesWithNamespaces): Renamed from MarkupAccumulator::appendMarkup.

2010-08-12  Dirk Schulze  <krit@webkit.org>

        Unreviewed sort of Xcode project file.

        * WebCore.xcodeproj/project.pbxproj:

2010-08-12  Ben Murdoch  <benm@google.com>

        Reviewed by Pavel Feldman.

        InspectorController.h missing InspectorObject forward declaration
        https://bugs.webkit.org/show_bug.cgi?id=43913

        Build fix so no new tests.

        * inspector/InspectorController.h: Adds the necessary forward declaration.

2010-08-12  Hui Huang  <hui.2.huang@nokia.com>

        Reviewed by Eric Seidel.

        m_windowRect is not updated because parent of PluginView is not
        set when updatePluginWidget is called. plugin gets wrong window
        size on setwindow.
        https://bugs.webkit.org/show_bug.cgi?id=43635

        * plugins/symbian/PluginViewSymbian.cpp:
        (WebCore::PluginView::setParent):

2010-08-12  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed, re-apply r65241 and 65243.

        Web Inspector: brush up object proxies, introduce remote object model.
        https://bugs.webkit.org/show_bug.cgi?id=43847

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.CssInHeadRule.prototype.doRun):
        (WebInspector.AuditRules.StylesScriptsOrderRule.prototype.doRun):
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.doEvalInWindow):
        (WebInspector.ConsoleView.prototype._enterKeyPressed.printResult):
        (WebInspector.ConsoleView.prototype._enterKeyPressed):
        (WebInspector.ConsoleView.prototype._format):
        (WebInspector.ConsoleView.prototype._formatarray):
        (WebInspector.ConsoleView.prototype._formatAsArrayEntry):
        (WebInspector.ConsoleMessage.prototype._format):
        (WebInspector.ConsoleCommandResult):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.performSearch):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype._createTooltipForNode):
        * inspector/front-end/EventListenersSidebarPane.js:
        ():
        * inspector/front-end/InjectedScript.js:
        (injectedScriptConstructor):
        (injectedScriptConstructor.):
        * inspector/front-end/ObjectPropertiesSection.js:
        (WebInspector.ObjectPropertiesSection.prototype.update):
        (WebInspector.ObjectPropertiesSection.prototype.updateProperties):
        (WebInspector.ObjectPropertyTreeElement.prototype.onpopulate):
        (WebInspector.ObjectPropertyTreeElement.prototype.update):
        (WebInspector.ObjectPropertyTreeElement.prototype.applyExpression):
        * inspector/front-end/ObjectProxy.js: Removed.
        * inspector/front-end/PropertiesSidebarPane.js:
        (WebInspector.PropertiesSidebarPane.prototype.update.callback):
        * inspector/front-end/RemoteObject.js: Added.
        (WebInspector.RemoteObjectId):
        (WebInspector.RemoteObject):
        (WebInspector.RemoteObject.fromPrimitiveValue):
        (WebInspector.RemoteObject.fromNode):
        (WebInspector.RemoteObject.fromPayload):
        (WebInspector.RemoteObject.type):
        (WebInspector.RemoteObject.prototype.get objectId):
        (WebInspector.RemoteObject.prototype.get type):
        (WebInspector.RemoteObject.prototype.get description):
        (WebInspector.RemoteObject.prototype.get hasChildren):
        (WebInspector.RemoteObject.prototype.isError):
        (WebInspector.RemoteObject.prototype.getPropertyValueDescriptions):
        (WebInspector.RemoteObject.prototype.getOwnProperties):
        (WebInspector.RemoteObject.prototype.getProperties.remoteObjectBinder):
        (WebInspector.RemoteObjectProperty):
        * inspector/front-end/ScopeChainSidebarPane.js:
        (WebInspector.ScopeChainSidebarPane.prototype.update):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.evaluateInSelectedCallFrame.updatingCallbackWrapper):
        (WebInspector.ScriptsPanel.prototype.evaluateInSelectedCallFrame):
        (WebInspector.ScriptsPanel.prototype.doEvalInCallFrame):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._showPopup.evaluateCallback):
        (WebInspector.SourceFrame.prototype._showPopup):
        (WebInspector.SourceFrame.prototype._evalSelectionInCallFrame):
        * inspector/front-end/WatchExpressionsSidebarPane.js:
        (WebInspector.WatchExpressionsSection.prototype.update):
        (WebInspector.WatchExpressionTreeElement.prototype.update):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        (WebInspector.log.logMessage):
        (WebInspector.log):
        * inspector/front-end/utilities.js:
        ():

2010-08-11  Stephen White  <senorblanco@chromium.org>

        Reviewed by David Levin.

        Add support for BGRA pixel format to GraphicsContext3D.
        https://bugs.webkit.org/show_bug.cgi?id=43858

        Although this has been standard in desktop GL since 1.2, it's an 
        extension in GL ES 2.0, so a query function is provided to check
        for support.  Since they differ on semantics (GL ES 2.0 requires 
        TexImage2D()'s format and internalFormat to match, while desktop GL
        will not accept BGRA as an internalFormat), the stub implementation
        returns false until these quirks have been implemented and tested on
        each port.

        * platform/graphics/GraphicsContext3D.cpp:
        (WebCore::GraphicsContext3D::supportsBGRA):
        Add implementation for non-chromium platforms which returns false.
        * platform/graphics/GraphicsContext3D.h:
        (WebCore::GraphicsContext3D::):
        Add query function (supportsBGRA()) and the BGRA_EXT token.

2010-08-12  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed. Rolling out r65241 and 65243 for breaking inspector tests.

2010-08-12  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed. Adding the file missing in r65241.

        * inspector/front-end/RemoteObject.js: Added.
        (WebInspector.RemoteObjectId):
        (WebInspector.RemoteObject):
        (WebInspector.RemoteObject.fromPrimitiveValue):
        (WebInspector.RemoteObject.fromNode):
        (WebInspector.RemoteObject.fromPayload):
        (WebInspector.RemoteObject.type):
        (WebInspector.RemoteObject.prototype.get objectId):
        (WebInspector.RemoteObject.prototype.get type):
        (WebInspector.RemoteObject.prototype.get description):
        (WebInspector.RemoteObject.prototype.get hasChildren):
        (WebInspector.RemoteObject.prototype.isError):
        (WebInspector.RemoteObject.prototype.getPropertyValueDescriptions):
        (WebInspector.RemoteObject.prototype.getOwnProperties):
        (WebInspector.RemoteObject.prototype.getProperties.remoteObjectBinder):
        (WebInspector.RemoteObjectProperty):

2010-08-12  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: brush up object proxies, introduce remote object model.
        https://bugs.webkit.org/show_bug.cgi?id=43847

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/AuditRules.js:
        (WebInspector.AuditRules.CssInHeadRule.prototype.doRun):
        (WebInspector.AuditRules.StylesScriptsOrderRule.prototype.doRun):
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.doEvalInWindow):
        (WebInspector.ConsoleView.prototype._enterKeyPressed.printResult):
        (WebInspector.ConsoleView.prototype._enterKeyPressed):
        (WebInspector.ConsoleView.prototype._format):
        (WebInspector.ConsoleView.prototype._formatnode):
        (WebInspector.ConsoleView.prototype._formatarray):
        (WebInspector.ConsoleView.prototype._formatAsArrayEntry):
        (WebInspector.ConsoleMessage.prototype._format):
        (WebInspector.ConsoleCommandResult):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype._createTooltipForNode):
        * inspector/front-end/EventListenersSidebarPane.js:
        * inspector/front-end/InjectedScript.js:
        (injectedScriptConstructor):
        (injectedScriptConstructor.):
        * inspector/front-end/ObjectPropertiesSection.js:
        (WebInspector.ObjectPropertiesSection.prototype.update):
        (WebInspector.ObjectPropertiesSection.prototype.updateProperties):
        (WebInspector.ObjectPropertyTreeElement.prototype.onpopulate):
        (WebInspector.ObjectPropertyTreeElement.prototype.update):
        (WebInspector.ObjectPropertyTreeElement.prototype.applyExpression):
        * inspector/front-end/ObjectProxy.js: Removed.
        * inspector/front-end/PropertiesSidebarPane.js:
        (WebInspector.PropertiesSidebarPane.prototype.update.callback):
        * inspector/front-end/RemoteObject.js: Added.
        (WebInspector.RemoteObjectId):
        (WebInspector.RemoteObject):
        (WebInspector.RemoteObject.fromPrimitiveValue):
        (WebInspector.RemoteObject.fromErrorMessage):
        (WebInspector.RemoteObject.fromNode):
        (WebInspector.RemoteObject.fromPayload):
        (WebInspector.RemoteObject.type):
        (WebInspector.RemoteObject.prototype.get objectId):
        (WebInspector.RemoteObject.prototype.get type):
        (WebInspector.RemoteObject.prototype.get description):
        (WebInspector.RemoteObject.prototype.get hasChildren):
        (WebInspector.RemoteObject.prototype.isError):
        (WebInspector.RemoteObject.prototype.getPropertyValueDescriptions):
        (WebInspector.RemoteObject.prototype.getOwnProperties):
        (WebInspector.RemoteObject.prototype.getProperties.remoteObjectBinder):
        (WebInspector.RemoteObjectProperty):
        * inspector/front-end/ScopeChainSidebarPane.js:
        (WebInspector.ScopeChainSidebarPane.prototype.update):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.evaluateInSelectedCallFrame.updatingCallbackWrapper):
        (WebInspector.ScriptsPanel.prototype.evaluateInSelectedCallFrame):
        (WebInspector.ScriptsPanel.prototype.doEvalInCallFrame):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._showPopup.evaluateCallback):
        (WebInspector.SourceFrame.prototype._showPopup):
        (WebInspector.SourceFrame.prototype._evalSelectionInCallFrame):
        * inspector/front-end/WatchExpressionsSidebarPane.js:
        (WebInspector.WatchExpressionsSection.prototype.update):
        (WebInspector.WatchExpressionTreeElement.prototype.update):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        (WebInspector.log.logMessage):
        (WebInspector.log):
        * inspector/front-end/utilities.js:

2010-08-12  Ben Murdoch  <benm@google.com>

        Reviewed by Steve Block.

        V8 code generator does not add V8BindingMacros.h include in all places it is needed
        https://bugs.webkit.org/show_bug.cgi?id=43907

        Adds the V8BindingMacros.h header before using the STRING_TO_V8PARAMETER_EXCEPTION_BLOCK
        macro.

        Build fix so no new tests.

        * bindings/scripts/CodeGeneratorV8.pm: include the header at the right time.

2010-08-12  Jeremy Orlow  <jorlow@chromium.org>

        Revert for now
        https://bugs.webkit.org/show_bug.cgi?id=43794 

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * page/GroupSettings.cpp: Removed.
        * page/GroupSettings.h: Removed.
        * page/PageGroup.cpp:
        (WebCore::PageGroup::PageGroup):
        (WebCore::PageGroup::localStorage):
        * page/PageGroup.h:
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setLocalStorageQuota):
        (WebCore::Settings::setLocalStorageDatabasePath):
        * page/Settings.h:
        (WebCore::Settings::localStorageQuota):
        (WebCore::Settings::localStorageDatabasePath):

2010-08-12  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed. Follow up to Jeremys fix, just remove the context parameter, it's not needed anymore.

        * rendering/RenderSVGResourceGradient.cpp:
        (WebCore::createMaskAndSwapContextForTextGradient):
        * rendering/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::applyResource):
        * rendering/SVGImageBufferTools.cpp:
        (WebCore::SVGImageBufferTools::createImageBuffer):
        * rendering/SVGImageBufferTools.h:

2010-08-12  Jeremy Orlow  <jorlow@chromium.org>

        Build fix.

        * rendering/SVGImageBufferTools.cpp:
        (WebCore::SVGImageBufferTools::createImageBuffer):

2010-08-12  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        SVG masking performance very slow
        https://bugs.webkit.org/show_bug.cgi?id=43622

        Create ImageBuffers only as large as the final rendered size on screen. Only gradient on text on CG handled this correctly so far.
        Refactored the code into a new SVGImageBufferTools class, and use the code from RenderSVGResourceMasker -> makes the IE9 demo SVG dice usable.
        Clippers, Patterns and Filters remain to be converted.

        Test: svg/zoom/page/zoom-mask-with-percentages.svg

        * Android.mk: Add SVGImageBufferTools.* to build.
        * CMakeLists.txt: Ditto.
        * GNUmakefile.am: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * rendering/RenderSVGAllInOne.cpp: Ditto.
        * rendering/RenderSVGResourceGradient.cpp: Refactored CG gradient specific "create image buffer in absolute coordinates" code into SVGImageBufferTools class.
        (WebCore::createMaskAndSwapContextForTextGradient):
        (WebCore::clipToTextMask):
        (WebCore::RenderSVGResourceGradient::applyResource):
        * rendering/RenderSVGResourceMasker.cpp: Use new SVGImageBufferTools class, to avoid pixelation when zooming and to create image buffers as big as the final rendered size on screen, not more.
        (WebCore::RenderSVGResourceMasker::invalidateClients):
        (WebCore::RenderSVGResourceMasker::applyResource):
        (WebCore::RenderSVGResourceMasker::drawContentIntoMaskImage):
        (WebCore::RenderSVGResourceMasker::calculateMaskContentRepaintRect):
        (WebCore::RenderSVGResourceMasker::resourceBoundingBox):
        * rendering/RenderSVGResourceMasker.h:
        * rendering/SVGImageBufferTools.cpp: Added.
        (WebCore::SVGImageBufferTools::absoluteTransformFromContext):
        (WebCore::SVGImageBufferTools::createImageBuffer):
        (WebCore::SVGImageBufferTools::clipToImageBuffer):
        * rendering/SVGImageBufferTools.h: Added.
        (WebCore::SVGImageBufferTools::SVGImageBufferTools):
        (WebCore::SVGImageBufferTools::~SVGImageBufferTools):

2010-08-10  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Adam Barth.

        Some settings are linked to the PageGroup not the Page.  Create a new class for those.
        https://bugs.webkit.org/show_bug.cgi?id=43794

        Since persistient storage is shared between pages, there's no way to modify
        some settings related to it on a per page basis.  As such, it's not technically
        correct for these settings to be on the Page's settings.  Create a new class
        called GroupSettings, move the 2 group-wide local storage settings there, and
        add a new setting for IndexedDB's path (which is prompting this change).

        No behavior has changed, so no tests.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * page/PageGroup.cpp:
        (WebCore::PageGroup::PageGroup):
        (WebCore::PageGroup::localStorage):
        * page/PageGroup.h:
        (WebCore::PageGroup::groupSettings):
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setSessionStorageQuota):
        * page/Settings.h:

2010-08-12  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Decode images directly to QPixmap
        https://bugs.webkit.org/show_bug.cgi?id=40797

        Use the new API of Qt 4.7 to decode data from the image
        reader directly to QPixmap.

        This allow us to use JDCT_IFAST when decoding jpeg images
        to pixmap, and to decode animated GIF images, while still
        using in-place conversion of color space.

        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::setData):
        (WebCore::ImageDecoderQt::internalHandleCurrentImage):

2010-07-14  Marcus Bulach  <bulach@chromium.org>

        Reviewed by darin@apple.com.

        Removes DontCheckEnums from some IDLs and fixes the corresponding enums.
        https://bugs.webkit.org/show_bug.cgi?id=42278

        This is a follow-up to https://bugs.webkit.org/show_bug.cgi?id=42250: it fixes some IDL/.h and enables generating compile-time checks for enums.

        Tests: idls should generate valid code.

        * dom/Node.h:
        (WebCore::Node::):
        * dom/Node.idl:
        * dom/OverflowEvent.h:
        (WebCore::OverflowEvent::):
        * dom/OverflowEvent.idl:
        * html/FileReader.cpp:
        (WebCore::FileReader::readyState):
        * html/FileReader.h:
        (WebCore::FileReader::):
        * html/FileReader.idl:

2010-08-12  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by David Levin.

        The #if clause enabling a feature should avoid the all includes of
        the feature
        https://bugs.webkit.org/show_bug.cgi?id=43866

        Modified the position of the guard to avoid including all the
        headers if the feature controlling the guard is not enabled.

        * dom/make_names.pl:

2010-08-12  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r65221.
        http://trac.webkit.org/changeset/65221
        https://bugs.webkit.org/show_bug.cgi?id=43896

        Broke snow leopard build. (Requested by dave_levin on
        #webkit).

        * platform/graphics/GraphicsContext3D.cpp:
        * platform/graphics/GraphicsContext3D.h:
        (WebCore::GraphicsContext3D::):

2010-08-11  Stephen White  <senorblanco@chromium.org>

        Reviewed by David Levin.

        Add support for BGRA pixel format to GraphicsContext3D.
        https://bugs.webkit.org/show_bug.cgi?id=43858

        Although this has been standard in desktop GL since 1.2, it's an 
        extension in GL ES 2.0, so a query function is provided to check
        for support.  Since they differ on semantics (GL ES 2.0 requires 
        TexImage2D()'s format and internalFormat to match, while desktop GL
        will not accept BGRA as an internalFormat), the stub implementation
        returns false until these quirks have been implemented and tested on
        each port.

        * platform/graphics/GraphicsContext3D.cpp:
        (WebCore::GraphicsContext3D::supportsBGRA):
        Add implementation for non-chromium platforms which returns false.
        * platform/graphics/GraphicsContext3D.h:
        (WebCore::GraphicsContext3D::):
        Add query function (supportsBGRA()) and the BGRA_EXT token.

2010-08-11  Satish Sampath  <satish@chromium.org>

        Reviewed by Kent Tamura.

        Handle clicks and recognition events for the speech input button
        https://bugs.webkit.org/show_bug.cgi?id=43857

        * rendering/RenderInputSpeech.cpp:
        (WebCore::RenderInputSpeech::paintInputFieldSpeechButton): Selects the image based on current state.
        * rendering/TextControlInnerElements.cpp:
        (WebCore::InputFieldSpeechButtonElement::InputFieldSpeechButtonElement):
        (WebCore::InputFieldSpeechButtonElement::defaultEventHandler):
        (WebCore::InputFieldSpeechButtonElement::set_state): Switch to a new state and update the UI.
        (WebCore::InputFieldSpeechButtonElement::didCompleteRecording): 
        (WebCore::InputFieldSpeechButtonElement::didCompleteRecognition):
        * rendering/TextControlInnerElements.h:
        (WebCore::InputFieldSpeechButtonElement::):
        (WebCore::InputFieldSpeechButtonElement::state):

2010-08-11  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Alexey Proskuryakov.

        REGRESSION(65135): format specifier warnings
        https://bugs.webkit.org/show_bug.cgi?id=43876

        * websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::appendToBuffer): cast size_t to unsigned long for %lu.
        (WebCore::WebSocketChannel::processBuffer): cast size_t to unsigned long for %lu.

2010-08-11  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix, don't generate WebDOMEventTarget.h/.cpp as we use the ones in bindings/cpp.
        
        * DerivedSources.make:

2010-08-11  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Adam Barth.

        Make PendingScript copyable so that it can be stored in containers
        https://bugs.webkit.org/show_bug.cgi?id=43875

        This will be useful for storing PendingScripts in a Vector or Deque for
        async and defer scripts.

        No new tests because no functional changes.

        * dom/PendingScript.h:
        (WebCore::PendingScript::PendingScript):
        (WebCore::PendingScript::operator=):

2010-08-11  Victoria Kirst  <vrk@google.com>

        Reviewed by David Levin.

        Fixing a regression in the UI for Mac default audio/video controls.
        https://bugs.webkit.org/show_bug.cgi?id=43750

        * rendering/RenderThemeChromiumMac.h:
        * rendering/RenderThemeChromiumMac.mm:
        (WebCore::RenderThemeChromiumMac::paintMediaVolumeSliderContainer):
        (WebCore::RenderThemeChromiumMac::paintMediaSliderThumb):
        (WebCore::RenderThemeChromiumMac::volumeSliderOffsetFromMuteButton):

2010-08-11  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        HTML TreeBuilder hits ASSERT in fragment case with insertAdjacentHTML and colgroup
        https://bugs.webkit.org/show_bug.cgi?id=43758

        This patch conditionalizes some LegacyHTMLTreeBuilder-specific code in
        HTMLElement::createContextualFragment that interferes with the new
        HTMLTreeBuilder.  Doing that exposes the above ASSERT, which I've fixed
        in this patch too.  Fixing that ASSERT involved a small refactoring in
        ExternalCharacterTokenBuffer.

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::createContextualFragment):
        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::ExternalCharacterTokenBuffer::skipLeadingWhitespace):
        (WebCore::HTMLTreeBuilder::ExternalCharacterTokenBuffer::takeLeadingWhitespace):
        (WebCore::HTMLTreeBuilder::ExternalCharacterTokenBuffer::takeLeadingNonWhitespace):
        (WebCore::HTMLTreeBuilder::ExternalCharacterTokenBuffer::skipLeading):
        (WebCore::HTMLTreeBuilder::ExternalCharacterTokenBuffer::takeLeading):
        (WebCore::HTMLTreeBuilder::processCharacterBuffer):

2010-08-11  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Conditionalize wrong fragment parsing code to pass more HTML5lib tests
        https://bugs.webkit.org/show_bug.cgi?id=43877

        This code exists to support the LegacyHTMLTreeBuilder.  Unfortunately,
        it causes problems for the new HTMLTreeBuilder (which is more
        self-contained).

        * dom/Element.cpp:
        (WebCore::Element::createContextualFragment):

2010-08-11  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Tony Chang.

        Can't unbold text in div in font-weight span
        https://bugs.webkit.org/show_bug.cgi?id=26871

        The bug was caused by removeInlineStyle not being able to include styled inline nodes around the start.
        Solved this problem by pushing down all inline styles instead of just text-decorations.
        This approach allows removeInlineStyle to remove styled ancestors properly and generates compact markups.

        Test: editing/style/push-down-inline-styles.html

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::removeCSSStyle): No longer removes attributes or node when mode == RemoveNone.
        (WebCore::ApplyStyleCommand::highestAncestorWithConflictingInlineStyle): Calls shouldRemoveInlineStyleFromElement
        to determine the highest ancestor whose style needs to be pushed down.
        (WebCore::ApplyStyleCommand::extractInlineStyleToPushDown): Renamed from extractTextDecorationStyle.
        Extracts all inline CSS properties specified instead of just text decorations.
        (WebCore::ApplyStyleCommand::applyInlineStyleToPushDown): Renamed from applyTextDecorationStyle.
        Applies inline styles using addInlineStyleIfNeeded or adds inline CSS values.
        (WebCore::ApplyStyleCommand::pushDownInlineStyleAroundNode): Renamed from pushDownTextDecorationStyleAroundNode.
        (WebCore::ApplyStyleCommand::removeInlineStyle): Calls pushDownTextDecorationStyleAroundNode.
        * editing/ApplyStyleCommand.h:
        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::mergeParagraphs): Prevents moveParagraph from preserving
        the style of an empty paragraph when merged with the previous paragraph because we don't use that style anyways.

2010-08-11  Julien Chaffraix  <jchaffraix@codeaurora.org>

        Reviewed by Ariya Hidayat.

        Remove dead code in CSSStyleSelector.
        https://bugs.webkit.org/show_bug.cgi?id=43805

        * css/CSSStyleSelector.cpp: Remove some debugging code that
        was compiled out.

2010-08-11  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        AX: isNativeCheckbox does not work as advertised
        https://bugs.webkit.org/show_bug.cgi?id=43872

        Test: platform/mac/accessibility/native-vs-nonnative-checkboxes.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isInputImage):
            Only say it's an input image if its role has not been overriden
        (WebCore::AccessibilityRenderObject::isNativeCheckboxOrRadio):
        * dom/InputElement.h:
            Add methods to query if it's a checkbox or radio button type element.
        * html/HTMLInputElement.h:
        (WebCore::HTMLInputElement::isCheckbox):

2010-08-11  Kenneth Russell  <kbr@google.com>

        Reviewed by David Levin.

        Remove obsolete WebGLArray type names
        https://bugs.webkit.org/show_bug.cgi?id=43885

        Deleted aliases to obsolete WebGLArray type names. Updated
        affected layout tests, synchronizing them with the versions in the
        Khronos repository where appropriate. Ran all layout tests.

        * bindings/js/JSDOMWindowCustom.cpp:
        * page/DOMWindow.idl:

2010-08-11  Steve Block  <steveblock@google.com>

        Reviewed by David Levin.

        [chromium] Geolocation breaks the compile if ENABLE_GEOLOCATION is set to 0
        https://bugs.webkit.org/show_bug.cgi?id=43753

        This change guards the entire contents of the V8 custom bindings files
        with ENABLE(GEOLOCATION) to match JSC.

        No new tests, build fix only.

        * bindings/v8/custom/V8CustomPositionCallback.cpp:
        * bindings/v8/custom/V8CustomPositionErrorCallback.cpp:
        * bindings/v8/custom/V8GeolocationCustom.cpp:

2010-08-11  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by David Levin.

        Include <wtf/UnusedParam.h> in GraphicsContextSkia.cpp
        https://bugs.webkit.org/show_bug.cgi?id=43843

        wtf/UnusedParam.h must be included because UNUSED_PARAM macro is used.

        * platform/graphics/skia/GraphicsContextSkia.cpp:

2010-08-11  Nico Weber  <thakis@chromium.org>

        Reviewed by David Levin.

        [chromium/mac]: Fix colors in compositing mode
        https://bugs.webkit.org/show_bug.cgi?id=43823

        The textures are drawn by opengl, which doesn't do any color space
        correction -- it assumes everything is in the device color space
        already. Hence, when drawing into the memory that will be uploaded
        as opengl texture, use the device color space.

        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerChromium::updateTextureContents):
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::updateTextureContents):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::setRootLayerCanvasSize):

2010-08-11  Kenneth Russell  <kbr@google.com>

        Reviewed by Dimitri Glazkov.

        Remove obsolete texImage2D and texSubImage2D entry points
        https://bugs.webkit.org/show_bug.cgi?id=40320

        No new tests; covered by existing WebGL tests.

        * html/canvas/WebGLRenderingContext.cpp:
        * html/canvas/WebGLRenderingContext.h:
        * html/canvas/WebGLRenderingContext.idl:

2010-08-11  Gavin Barraclough  <barraclough@apple.com>

        Windows build fix.

        * platform/win/BString.cpp:
        (WebCore::BString::BString):

2010-08-11  Gavin Barraclough  <barraclough@apple.com>

        Qt build fix II.

        * WebCore.xcodeproj/project.pbxproj:
        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::convertValueToQVariant):

2010-08-11  Gavin Barraclough  <barraclough@apple.com>

        Qt build fix.

        * WebCore.xcodeproj/project.pbxproj:
        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::convertValueToQVariant):

2010-08-11  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        Need EmptyDeviceOrientationClient and EmptyDeviceMotionClient for use with SVGImage
        https://bugs.webkit.org/show_bug.cgi?id=43848

        Tested by existing DeviceOrientation tests.

        * loader/EmptyClients.h:
        (WebCore::EmptyDeviceMotionClient::setController):
        (WebCore::EmptyDeviceMotionClient::startUpdating):
        (WebCore::EmptyDeviceMotionClient::stopUpdating):
        (WebCore::EmptyDeviceMotionClient::currentDeviceMotion):
        (WebCore::EmptyDeviceOrientationClient::setController):
        (WebCore::EmptyDeviceOrientationClient::startUpdating):
        (WebCore::EmptyDeviceOrientationClient::stopUpdating):
        (WebCore::EmptyDeviceOrientationClient::lastOrientation):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged):

2010-08-11  Rob Buis  <rwlbuis@gmail.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=42042
        An empty value for xml:lang isn't considered

        Revert last line change of my patch ; it happens to
        behave correctly and same as before, but makes the
        use case of empty values unneededly slower.

        No new tests. (No change in behavior)

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

2010-08-11  Kevin Ollivier  <kevino@theolliviers.com>

        [wx, WebDOM] Build fix. Fix callback params and WebCore::String -> WTF::String fixes.

        * bindings/cpp/WebDOMCustomVoidCallback.cpp: Added.
        (WebDOMCustomVoidCallback::WebDOMCustomVoidCallback):
        (WebDOMCustomVoidCallback::~WebDOMCustomVoidCallback):
        (WebDOMCustomVoidCallback::handleEvent):
        (toWebCore):
        * bindings/cpp/WebDOMCustomVoidCallback.h: Added.
        (WebDOMCustomVoidCallback::create):
        * bindings/cpp/WebDOMHTMLDocumentCustom.cpp:
        (documentWrite):
        * bindings/cpp/WebDOMString.cpp:
        (WebDOMString::equals):
        * bindings/scripts/CodeGeneratorCPP.pm:
        * bindings/scripts/test/CPP/WebDOMTestCallback.cpp:
        (WebDOMTestCallback::callbackWithClass1Param):
        (WebDOMTestCallback::callbackWithClass2Param):
        (WebDOMTestCallback::callbackWithNonBoolReturnType):
        * bindings/scripts/test/CPP/WebDOMTestObj.cpp:
        * bindings/scripts/test/V8/V8TestInterface.h:
        * bindings/scripts/test/V8/V8TestObj.h:
        * wscript:

2010-08-11  Gavin Barraclough  <barraclough@apple.com>

        Rubber stamps by Darin Adler & Sam Weinig.

        Bug 43867 - Some UString cleanup

        Change JSC::UString data(), size(), and from(), to characters(), length(), and number() to match WTF::String.
        Move string concatenation methods to a new header to simplify down UString.h.  Remove is8Bit().

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        (WebCore::hasCSSPropertyNamePrefix):
        (WebCore::cssPropertyName):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::setPort):
        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::dispatchDidParseSource):
        * bindings/js/ScriptString.h:
        (WebCore::ScriptString::size):
        * bindings/js/ScriptValue.cpp:
        (WebCore::jsToInspectorValue):
        * bindings/objc/WebScriptObject.mm:
        (+[WebScriptObject _convertValueToObjcValue:originRootObject:rootObject:]):
        * bridge/jni/jni_jsobject.mm:
        (JavaJSObject::convertValueToJObject):
        * bridge/jni/jsc/JNIUtilityPrivate.cpp:
        (JSC::Bindings::convertArrayInstanceToJavaArray):
        (JSC::Bindings::convertValueToJValue):
        * bridge/objc/objc_runtime.mm:
        (JSC::Bindings::callObjCFallbackObject):

2010-08-10  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=43806, add ability to paginate screen content.
        
        Add a new boolean to Document to indicate that content should be paginated.  This is checked when doing page breaks
        and in a couple of other cases.

        * dom/Document.cpp:
        (WebCore::Document::Document):
        * dom/Document.h:
        (WebCore::Document::paginatedForScreen):
        (WebCore::Document::setPaginatedForScreen):
        (WebCore::Document::paginated):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintChildren):
        (WebCore::RenderBlock::calcColumnWidth):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calcHeight):
        * rendering/RenderView.cpp:
        (WebCore::RenderView::paint):

2010-08-11  Adam Barth  <abarth@webkit.org>

        Windows build fix.  Turns out we need to unconditionally include
        HTMLEntityNames.cpp now that LegacyHTMLDocumentParser doesn't exist.

        * html/HTMLEntityParser.cpp:

2010-08-11  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Darin Adler.

        Inserting a <source> element should immediately set networkState to NETWORK_NO_SOURCE.
        https://bugs.webkit.org/show_bug.cgi?id=42897

        A <source> element inserted as a child of a media element with a networkState of NETWORK_EMPTY
        should cause the networkState to immediately change to NETWORK_NO_SOURCE.

        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Remove unused variable m_processingLoad.
        (WebCore::HTMLMediaElement::prepareForLoad): Set m_networkState to NETWORK_NO_SOURCE.
        (WebCore::HTMLMediaElement::loadInternal): Remove unused variable m_processingLoad.
        (WebCore::HTMLMediaElement::selectMediaResource): No need to change m_networkState, it was done in prepareForLoad.
        * html/HTMLMediaElement.h:

        * html/HTMLSourceElement.cpp:
        (WebCore::HTMLSourceElement::insertedIntoTree): Renamed from insertedIntoDocument because we want
        to do this setup whether or not the parent media element is in the document.
        * html/HTMLSourceElement.h:

2010-08-11  Adam Barth  <abarth@webkit.org>

        Rubber-stamped by Eric Seidel.

        Delete LegacyHTMLDocumentParser and LegacyPreloadScanner
        https://bugs.webkit.org/show_bug.cgi?id=43836

        These classes are bit-rotting disturbingly quickly.  We removed the
        last dependencies on these classes and so we can remove them.

        We might need to preserve some of their particular quirks to handle
        some legacy applications, but our current thinking is to do that with
        individual settings that affect the new parser.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        * dom/DocumentFragment.cpp:
        (WebCore::DocumentFragment::parseHTML):
        * dom/DocumentParser.h:
        * dom/XMLDocumentParserLibxml2.cpp:
        * dom/XMLDocumentParserQt.cpp:
        * html/HTMLConstructionSite.cpp:
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::createParser):
        * html/HTMLEntityParser.cpp:
        (WebCore::decodeNamedEntity):
        * html/HTMLEntityParser.h:
        * html/HTMLFormControlElement.cpp:
        * html/HTMLTreeBuilder.cpp:
        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::createParser):
        * html/LegacyHTMLDocumentParser.cpp: Removed.
        * html/LegacyHTMLDocumentParser.h: Removed.
        * html/LegacyHTMLTreeBuilder.cpp:
        * html/LegacyPreloadScanner.cpp: Removed.
        * html/LegacyPreloadScanner.h: Removed.
        * loader/FTPDirectoryDocument.cpp:
        (WebCore::FTPDirectoryDocumentParser::FTPDirectoryDocumentParser):
        (WebCore::FTPDirectoryDocumentParser::appendEntry):
        (WebCore::FTPDirectoryDocumentParser::createTDForFilename):
        (WebCore::processFilesizeString):
        (WebCore::wasLastDayOfMonth):
        (WebCore::processFileDateString):
        (WebCore::FTPDirectoryDocumentParser::parseAndAppendOneLine):
        (WebCore::FTPDirectoryDocumentParser::loadDocumentTemplate):
        (WebCore::FTPDirectoryDocumentParser::createBasicDocument):
        (WebCore::FTPDirectoryDocumentParser::append):
        (WebCore::FTPDirectoryDocumentParser::finish):
        * page/XSSAuditor.cpp:
        (WebCore::XSSAuditor::decodeHTMLEntities):
        * page/XSSAuditor.h:
        * platform/text/SegmentedString.cpp:
        (WebCore::SegmentedString::prepend):

2010-08-11  Chris Jerdonek  <cjerdonek@webkit.org>

        Reviewed by Adam Barth.

        Refactored FrameLoader::createWindow() out of the FrameLoader class
        since FrameLoader should not be responsible for creating windows.

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

        No new functionality, so no new tests.

        * bindings/generic/BindingDOMWindow.h:
        (WebCore::::createWindow):
          - Updated the call to FrameLoader's createWindow().
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::createWindow):
          - Updated the call to FrameLoader's createWindow().
        * loader/FrameLoader.cpp:
        (WebCore::createWindowFromFrameLoader):
          - Made FrameLoader::createWindow() non-member, non-friend and changed it
            to accept Frame* parameters instead of FrameLoader*.
        * loader/FrameLoader.h:
          - Updated the header file to reflect the above change to FrameLoader.cpp.

2010-08-11  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        WebInspector: small refactoring for CodeGeneratorInspector.
        all "notify" methods are generating in InspectorFrontend
        the other methods are generating in InspectorBackend.
        https://bugs.webkit.org/show_bug.cgi?id=43849

        * inspector/CodeGeneratorInspector.pm:

2010-08-11  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        [GTK] Misc improvements to the scrolling code
        https://bugs.webkit.org/show_bug.cgi?id=41926

        Refactor code that uses deprecated ways of dealing with the
        adjustments to use the GtkVersioning infrastructure.

        * GNUmakefile.am:
        * platform/gtk/GtkVersioning.cpp: Added.
        * platform/gtk/GtkVersioning.h:
        * platform/gtk/ScrollViewGtk.cpp:
        * platform/gtk/ScrollbarGtk.cpp:
        (ScrollbarGtk::detachAdjustment):
        (ScrollbarGtk::updateThumbPosition):
        (ScrollbarGtk::updateThumbProportion):

2010-08-11  Nate Chapin  <japhet@chromium.org>

        Chromium mac build fix (variables weren't being initialized).

        * platform/graphics/filters/FEGaussianBlur.cpp: 
        (WebCore::FEGaussianBlur::apply): Initalize dxLeft, dxRight, dyLeft, dyRight.

2010-08-11  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: apply correct fix to storage panel status bar buttons.

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

        * inspector/front-end/DatabaseTableView.js:
        (WebInspector.DatabaseTableView.prototype.get statusBarItems):
        * inspector/front-end/StoragePanel.js:
        (WebInspector.StoragePanel.prototype._genericViewSetup):

2010-08-11  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Adam Barth.

        Override operator= for C++ DOM binding classes with private structs
        and update C++ DOM bindings test results.
        https://bugs.webkit.org/show_bug.cgi?id=43735

        * bindings/cpp/WebDOMEventTarget.cpp:
        (WebDOMEventTarget::operator=):
        * bindings/cpp/WebDOMEventTarget.h:
        * bindings/scripts/CodeGeneratorCPP.pm:
        * bindings/scripts/test/CPP/WebDOMTestCallback.cpp:
        (WebDOMTestCallback::operator=):
        * bindings/scripts/test/CPP/WebDOMTestCallback.h:
        * bindings/scripts/test/CPP/WebDOMTestInterface.cpp:
        (WebDOMTestInterface::operator=):
        * bindings/scripts/test/CPP/WebDOMTestInterface.h:
        * bindings/scripts/test/CPP/WebDOMTestObj.cpp:
        (WebDOMTestObj::operator=):
        * bindings/scripts/test/CPP/WebDOMTestObj.h:

2010-08-11  Julie Parent  <jparent@chromium.org>

        Reviewed by Justin Garcia.

        Crash in replaceSelectionCommand with RTL text.
        https://bugs.webkit.org/show_bug.cgi?id=41485
        
        For text with mixed directionality, sort the text boxes before
        computing gaps, since that code assumes the boxes are in order.

        Test: editing/execCommand/insert-image-on-top-of-directional-text.html

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::deleteInsignificantText): Sort boxes
        like we do in TextIterator before computing gaps.
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::handleTextNode): Use new compareByStart
        rather than compareBoxStart.  No functional change.
        * rendering/InlineTextBox.h:
        (WebCore::InlineTextBox::compareByStart): Moved compareBoxStart
        from TextIterator here so it can be used in multiple places.

2010-08-11  Fumitoshi Ukai  <ukai@chromium.org>

        Unreviewed build fix of Leopard Intel Debug (Build)

        * websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::processBuffer): use %lu, instead of %ul

2010-08-11  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Dirk Schulze.

        Fixes to the gaussian blur algorithm
        https://bugs.webkit.org/show_bug.cgi?id=41605

        Added the recomendations of SVG regarding the kernel size
        calculation for the approximation of the gaussian
        blur. http://www.w3.org/TR/SVG/filters.html#feGaussianBlurElement.
        Modified also some variable names to clarify algorithm, reviewed
        the situation where both standard deviations are 0.

        * platform/graphics/filters/FEGaussianBlur.cpp:
        (WebCore::FEGaussianBlur::FEGaussianBlur):
        (WebCore::FEGaussianBlur::stdDeviationX):
        (WebCore::FEGaussianBlur::setStdDeviationX):
        (WebCore::FEGaussianBlur::stdDeviationY):
        (WebCore::FEGaussianBlur::setStdDeviationY):
        (WebCore::boxBlur):
        (WebCore::FEGaussianBlur::kernelPosition): Added the SVG kernel
        position recomendation.
        (WebCore::FEGaussianBlur::apply):
        (WebCore::FEGaussianBlur::externalRepresentation):
        * platform/graphics/filters/FEGaussianBlur.h:

2010-08-11  Kristian Monsen  <kristianm@google.com>

        Reviewed by Steve Block.

        Compile fix for Android, added include for <wtf/text/Cstring.h, this
        did not get included in Android.
        https://bugs.webkit.org/show_bug.cgi?id=41517
        
        Build fix only, no new tests.

        * page/PrintContext.cpp:

2010-08-11  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Fix length calculation to be more robust.
        https://bugs.webkit.org/show_bug.cgi?id=43777

        Test: websocket/tests/frame-length-overflow.html

        * websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::appendToBuffer): len is size_t.
         - add sanity check for integer wraps.
        (WebCore::WebSocketChannel::skipBuffer): len is size_t.
        (WebCore::WebSocketChannel::processBuffer): length is size_t.
         - add sanity check for integer wraps.
        * websockets/WebSocketChannel.h: change m_bufferSize and len to size_t.

2010-08-10  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Fix three ASSERTs hit with the HTML5 TreeBuilder in fragment mode
        https://bugs.webkit.org/show_bug.cgi?id=43762

        In fixing the insertAdjacentHTML I had to make small changes to
        the error logic, which ended up bringing us closer to HTML5.

        Test: fast/dom/HTMLElement/insertAdjacentHTML-errors.html

        * html/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::attach):
         - This ASSERT was just wrong, the child should not be attached
           in the case the parent is not attached.
        * html/HTMLElement.cpp:
        (WebCore::contextElementForInsertion):
         - This is part of HTML5, needed to know what to call the
           HTML or XML parsers with.  The previous code always passed
           "this" which is wrong in the case of beforeBegin or afterEnd insertion.
        (WebCore::HTMLElement::insertAdjacentHTML):
         - Use the right contextElement now that we know how to compute it.
        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processEndTagForInCell):
         - This ASSERT is direct from the spec, but it's wrong, so I've filed a spec bug.

2010-08-11  Adam Barth  <abarth@webkit.org>

        Attempt to fix Windows build.

        * platform/win/COMPtr.h:
        (WTF::):

2010-08-11  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Port view-source to new parser
        https://bugs.webkit.org/show_bug.cgi?id=43746

        This patch switches the view-source mode for frames over to using the
        new HTML parsing infrastructure.  This patch is an architectural change
        to how we parser view source documents.

        Previously, the LegacyHTMLDocumentParser would output a "guide string"
        that consided of the inter-attribute whitespace and various "control"
        characters.  The HTMLViewSourceDocument would then interpret this guide
        string to approximately reconstruct the source of the original document
        and colorize various syntatic constructs.

        Unfortunately, that approach is inherently low-fidelity.  It's not
        really feasible to reconstruct the input document from the token
        stream.  The old view source mode also had a number of hacks in the old
        parser (e.g., to turn of decoding of HTML entities).

        Instead of trying to reconstruct the original document from the token
        stream, we use the segmentation information given by the tokens to
        colorize the input document itself.  Each token now caries information
        about where in the input stream it came from and where various
        subcomponents (e.g., attribute names and values) are located.  This
        approach is higher fidelity because we use this segmentation
        information to colorize the original input instead of attempting to
        reconstruct the original input.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLDocumentParser.cpp:
        * html/HTMLToken.h:
        (WebCore::HTMLToken::clear):
        (WebCore::HTMLToken::startIndex):
        (WebCore::HTMLToken::length):
        (WebCore::HTMLToken::end):
        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::createParser):
        (WebCore::HTMLViewSourceDocument::addSource):
        (WebCore::HTMLViewSourceDocument::processDoctypeToken):
        (WebCore::HTMLViewSourceDocument::processTagToken):
        (WebCore::HTMLViewSourceDocument::processCommentToken):
        (WebCore::HTMLViewSourceDocument::processCharacterToken):
        (WebCore::HTMLViewSourceDocument::addRange):
        * html/HTMLViewSourceDocument.h:
        * html/HTMLViewSourceParser.cpp: Added.
        (WebCore::HTMLViewSourceParser::~HTMLViewSourceParser):
        (WebCore::HTMLViewSourceParser::insert):
        (WebCore::HTMLViewSourceParser::pumpTokenizer):
        (WebCore::HTMLViewSourceParser::append):
        (WebCore::HTMLViewSourceParser::sourceForToken):
        (WebCore::HTMLViewSourceParser::updateTokenizerState):
        (WebCore::HTMLViewSourceParser::finish):
        (WebCore::HTMLViewSourceParser::finishWasCalled):
        * html/HTMLViewSourceParser.h: Added.
        (WebCore::HTMLViewSourceParser::HTMLViewSourceParser):
        (WebCore::HTMLViewSourceParser::document):
        * html/LegacyHTMLDocumentParser.cpp:
        (WebCore::LegacyHTMLDocumentParser::processToken):
        (WebCore::LegacyHTMLDocumentParser::processDoctypeToken):

2010-08-11  Yoshiki Hayashi  <yhayashi@google.com>

        Reviewed by Shinichiro Hamaji.

        Make form controls, textarea, legend and datagrid treat width:
        auto as specified in stretching vertical flexbox.  Otherwise it's
        treated as intrinsic as before.
        https://bugs.webkit.org/show_bug.cgi?id=17918

        Test: fast/flexbox/vertical-box-form-controls.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::adjustRenderStyle):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::sizesToIntrinsicWidth):

2010-08-10  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Add leakRef and clear to all RefPtr variants
        https://bugs.webkit.org/show_bug.cgi?id=42389

        * platform/win/COMPtr.h: Changed all uses of "template <...>" to instead do
        "template<...>". Defined many of the inlined functions outside the class
        definition, to avoid style checker warnings about multiple statements on
        a single line and for slightly better clarity of the class definition itself.
        Renamed releaseRef to leakRef. Added a releaseRef that calls leakRef so we
        don't have to rename all callers at once. Added a clear function. Changed
        the hash table code so it doesn't need to call releaseRef, and so it uses
        the hash table deleted value hooks already present within the class.

2010-08-10  Ariya Hidayat  <ariya@sencha.com>

        [Qt] Fix build warning: remove reference to html/BlobRegistryImp.h

        * WebCore.pro:

2010-08-10  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=43803
        <rdar://problem/6988023> Only the last Korean character can be shown if font style is enabled while typing (43803)

        Test: platform/mac/editing/input/bold-node.html

        * editing/Editor.cpp: (WebCore::Editor::setComposition): It is not clear to me what the
        "baseNode == extentNode" check is about in this function , but let's try to make it more
        likely that it passes.

2010-08-10  Hayato Ito  <hayato@chromium.org>

        Reviewed by Kent Tamura.

        Make CSSSelector::specificity() non-recursive.
        https://bugs.webkit.org/show_bug.cgi?id=43784

        This change is one of the required changes to fix the following master bug:
        https://bugs.webkit.org/show_bug.cgi?id=42806

        No functional change, thus no tests.

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::specificity):
        (WebCore::CSSSelector::specificityForOneSelector):
        (WebCore::CSSSelector::specificityForPage):
        * css/CSSSelector.h:

2010-08-10  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Darin Adler.

        2d.path.clip.empty.html test is failing
        https://bugs.webkit.org/show_bug.cgi?id=43161

        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::clip):
        Catching the empty path case from being sent directly to 
        CGContextClip - which would ignore it. Instead, using 
        CGContextClip with a CGRectZero to achieve the desired
        behavior of reducing the clipping region to nothing.

2010-08-10  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Reviewed by Antonio Gomes.

        [EFL] Add video files to enable video in WebKit EFL
        https://bugs.webkit.org/show_bug.cgi?id=43790

        Add files regarding html5 video to CMakeList.txt for WebKit Efl.
        But, this patch is not run html5 video on WebKit EFL yet.

        * CMakeLists.txt: Add files related to html5video.
        * platform/efl/LocalizedStringsEfl.cpp: Add functions for html5 video.
        (WebCore::localizedMediaControlElementString):
        (WebCore::localizedMediaControlElementHelpText):
        (WebCore::localizedMediaTimeDescription):
        * platform/graphics/MediaPlayer.cpp:
        (WebCore::installedMediaEngines): Disable MediaPlayerPrivate::r
      egisterMediaEngine for WebKit EFL.

2010-08-10  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Nikolas Zimmermann.

        Add a toRenderSVGImage function
        https://bugs.webkit.org/show_bug.cgi?id=43789

        Add a function for casting to RenderSVGImage and use it.

        * rendering/RenderSVGImage.h:
        (WebCore::toRenderSVGImage):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::write):
        * rendering/SVGRenderTreeAsText.cpp:
        (WebCore::writeSVGImage):
        * rendering/SVGRenderTreeAsText.h:
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::attach):

2010-08-10  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Clients of HTMLTokenizer should be able to see where characters went in the token
        https://bugs.webkit.org/show_bug.cgi?id=43766

        When viewing the source of a document, we want to colorize different
        parts of the input depending on how they were tokenized.  In this
        patch, we expose the internal segmentation of a token by recording the
        start and end offsets for each attribute name and each attribute value.

        * html/HTMLToken.h:
        (WebCore::HTMLToken::addNewAttribute):
        (WebCore::HTMLToken::beginAttributeName):
        (WebCore::HTMLToken::endAttributeName):
        (WebCore::HTMLToken::beginAttributeValue):
        (WebCore::HTMLToken::endAttributeValue):
        (WebCore::HTMLToken::appendToAttributeName):
        (WebCore::HTMLToken::appendToAttributeValue):
        (WebCore::AtomicHTMLToken::AtomicHTMLToken):
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::nextToken):

2010-08-10  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by David Levin.

        Do not post a sync task to the DB thread if it's terminating.
        https://bugs.webkit.org/show_bug.cgi?id=43676

        * bindings/generic/ActiveDOMCallback.cpp: The context can
        sometimes be NULL. Check if it's NULL instead of asserting that
        it's not.
        (WebCore::ActiveDOMCallback::ActiveDOMCallback):
        * dom/ActiveDOMObject.cpp:
        (WebCore::ActiveDOMObject::ActiveDOMObject):

        * storage/Database.cpp: Do not post a sync task to the DB thread
        if the DB thread is terminating. Also, when a task is destroyed,
        ASSERT that it was completed, or that it had no synchronizer.
        (WebCore::Database::openAndVerifyVersion):
        (WebCore::Database::markAsDeletedAndClose):
        (WebCore::Database::tableNames):
        * storage/DatabaseTask.cpp:
        (WebCore::DatabaseTaskSynchronizer::DatabaseTaskSynchronizer):
        (WebCore::DatabaseTask::~DatabaseTask):
        (WebCore::DatabaseTask::performTask):
        * storage/DatabaseTask.h:
        (WebCore::DatabaseTaskSynchronizer::hasCheckedForTermination):
        (WebCore::DatabaseTaskSynchronizer::setHasCheckedForTermination):
        (WebCore::DatabaseTask::hasSynchronizer):
        (WebCore::DatabaseTask::hasCheckedForTermination):
        * storage/DatabaseThread.cpp:
        (WebCore::DatabaseThread::terminationRequested):
        (WebCore::DatabaseThread::scheduleTask):
        (WebCore::DatabaseThread::scheduleImmediateTask):
        * storage/DatabaseThread.h:

2010-08-10  Gavin Barraclough  <barraclough@apple.com>

        Qt build fix.

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

2010-08-10  Jian Li  <jianli@chromium.org>

        Fix more build break.

        * bindings/v8/SerializedScriptValue.cpp:
        (WebCore::ZigZag::Reader::readBlob):
        (WebCore::ZigZag::Reader::readFile):
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::~ScriptExecutionContext):
        (WebCore::ScriptExecutionContext::revokeBlobURL):
        * dom/ScriptExecutionContext.h:
        * html/Blob.cpp:
        (WebCore::Blob::slice):

2010-08-10  Gavin Barraclough  <barraclough@apple.com>

        Rubber stamped by Sam Weinig

        Bug 43817 - Remove UString::Rep
        UString::Rep has for a long time been replaced by UStringImpl (Rep
        remaining as a typedef).  UStringImpl has since been removed too
        (unified with StringImpl). Remove Rep, rename rep() to impl() and
        m_rep to m_impl.  Also add impl() method to Identifier, and rename
        its UString member from _ustring to m_string.

        * bindings/js/JSDOMBinding.cpp:
        (WebCore::findAtomicString):
        * bindings/js/JSDOMBinding.h:
        (WebCore::ustringToString):
        (WebCore::identifierToString):
        (WebCore::ustringToAtomicString):
        (WebCore::identifierToAtomicString):
        * bindings/js/SerializedScriptValue.h:
        (WebCore::SerializedScriptValueData::SerializedScriptValueData):
        * bridge/IdentifierRep.cpp:
        (WebCore::IdentifierRep::get):
        * bridge/c/c_class.cpp:
        (JSC::Bindings::CClass::methodsNamed):
        (JSC::Bindings::CClass::fieldNamed):
        * bridge/jni/jsc/JavaClassJSC.cpp:
        (JavaClass::JavaClass):
        (JavaClass::methodsNamed):
        (JavaClass::fieldNamed):
        * bridge/jni/jsc/JavaStringJSC.h:
        (JSC::Bindings::JavaStringImpl::~JavaStringImpl):
        (JSC::Bindings::JavaStringImpl::init):
        (JSC::Bindings::JavaStringImpl::UTF8String):
        (JSC::Bindings::JavaStringImpl::uchars):
        (JSC::Bindings::JavaStringImpl::length):
        (JSC::Bindings::JavaStringImpl::uString):
        * bridge/jsc/BridgeJSC.h:

2010-08-10  Jian Li  <jianli@chromium.org>

        Fix qt build break.

        * html/BlobRegistryImpl.cpp:
        * html/BlobRegistryImpl.h:
        * html/BlobURL.cpp:
        * html/BlobURL.h:
        * platform/BlobRegistry.h:

2010-08-10  Jian Li  <jianli@chromium.org>

        Reviewed by David Levin.

        Add the support to register the blob data.
        https://bugs.webkit.org/show_bug.cgi?id=43600

        This is the first step towards adding Blob URL support. The blob has
        an internal URL (used by FileReader) and public URLs (used by Blob.url).
        The URL and its associated data are managed by BlobRegistry interface.

        This patch does not remove the usage of BlobItem. It will be removed
        when all the blob data support is hooked up and the new tests will be
        added then.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::SerializedBlob::create):
        (WebCore::SerializedBlob::url):
        (WebCore::SerializedBlob::type):
        (WebCore::SerializedBlob::size):
        (WebCore::SerializedBlob::SerializedBlob):
        (WebCore::SerializedFile::create):
        (WebCore::SerializedFile::path):
        (WebCore::SerializedFile::url):
        (WebCore::SerializedFile::type):
        (WebCore::SerializedFile::SerializedFile):
        (WebCore::SerializedFileList::item):
        (WebCore::SerializedFileList::SerializedFileList):
        (WebCore::SerializedScriptValueData::SerializedScriptValueData):
        (WebCore::SharedSerializedData::asBlob):
        (WebCore::SharedSerializedData::asFile):
        (WebCore::SerializingTreeWalker::convertIfTerminal):
        (WebCore::DeserializingTreeWalker::convertIfTerminal):
        (WebCore::TeardownTreeWalker::convertIfTerminal):
        * bindings/js/SerializedScriptValue.h:
        (WebCore::SerializedScriptValueData::):
        (WebCore::SerializedScriptValueData::asString):
        (WebCore::SerializedScriptValueData::asBlob):
        (WebCore::SerializedScriptValueData::asFile):
        * bindings/v8/SerializedScriptValue.cpp:
        (WebCore::ZigZag::Writer::writeBlob):
        (WebCore::ZigZag::Writer::writeFile):
        (WebCore::ZigZag::Writer::writeFileList):
        (WebCore::ZigZag::Writer::doWriteUintHelper):
        (WebCore::ZigZag::Writer::doWriteUint32):
        (WebCore::ZigZag::Writer::doWriteUint64):
        (WebCore::ZigZag::Serializer::writeBlob):
        (WebCore::ZigZag::Serializer::writeFile):
        (WebCore::ZigZag::Reader::readBlob):
        (WebCore::ZigZag::Reader::readFile):
        (WebCore::ZigZag::Reader::readFileList):
        (WebCore::ZigZag::Reader::doReadUintHelper):
        (WebCore::ZigZag::Reader::doReadUint32):
        (WebCore::ZigZag::Reader::doReadUint64):
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::~ScriptExecutionContext):
        (WebCore::ScriptExecutionContext::trackBlobURL):
        (WebCore::ScriptExecutionContext::revokeBlobURL):
        * dom/ScriptExecutionContext.h:
        * html/Blob.cpp:
        (WebCore::Blob::Blob):
        (WebCore::Blob::~Blob):
        (WebCore::Blob::createPublicURL):
        * html/Blob.h:
        (WebCore::Blob::create):
        (WebCore::Blob::url):
        * html/BlobRegistryImpl.cpp: Added.
        * html/BlobRegistryImpl.h: Added.
        * html/BlobStorageData.h: Added.
        * html/BlobURL.cpp: Added.
        * html/BlobURL.h: Added.
        * html/File.cpp:
        (WebCore::File::File):
        * html/File.h:
        (WebCore::File::create):
        * platform/BlobData.cpp: Added.
        * platform/BlobData.h: Added.
        * platform/BlobRegistry.h: Added.

2010-08-10  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        SegmentedString should keep track of how many characters it consumes
        https://bugs.webkit.org/show_bug.cgi?id=43765

        The easiest way to keep track of how many characters we've consumed
        would be to increment a counter every time we advance, but that's too
        slow.  Instead, we keep track lazily and update our summary durning the
        slow case of advance (which is sufficiently rare).

        There's some subtly to how this works w.r.t. "unconsuming" characters
        by pushing them back on the front of the segmented string.  This isn't
        really a "right answer" here because the notion of unconsuming input
        isn't present in the API.  This patch makes some assumptions about how
        clients of this class use its API.  In a future patch, we might want to
        rename some of the method names to make this more explicit.

        * platform/text/SegmentedString.cpp:
        (WebCore::SegmentedString::operator=):
        (WebCore::SegmentedString::append):
        (WebCore::SegmentedString::prepend):
        (WebCore::SegmentedString::advanceSubstring):
        * platform/text/SegmentedString.h:
        (WebCore::SegmentedSubstring::numberOfCharactersConsumed):
        (WebCore::SegmentedString::SegmentedString):
        (WebCore::SegmentedString::numberOfCharactersConsumed):

2010-08-10  Gavin Barraclough  <barraclough@apple.com>

        Rubber stamped by Sam Weinig.
        
        Bug 43816 - Remove UStringImpl
        The class was actually removed a long time ago, replaced by StringImpl.
        UStringImpl is just a typedef onto StringImpl.  Remove this.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::findAtomicString):

2010-08-09  Stephen White  <senorblanco@chromium.org>

        Reviewed by David Levin.

        Prefer the medium-quality (bilinear) image resampling for 2D canvas on
        Chromium.
        https://bugs.webkit.org/show_bug.cgi?id=43646
        
        This is what the accelerated path is going to do,
        so do it in the software path as well.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::createImageBuffer):
        * platform/graphics/GraphicsContext.h:

2010-08-10  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Dave Hyatt.

        Removing an element from an anonymous block causes crash
        https://bugs.webkit.org/show_bug.cgi?id=42309

        There was a case where a continuation was added as a child, but if you asked
        that child who is your parent, it would return the wrong answer.
   
        The specific scenario was when a sibling of an element who was the start of a 
        continuation was present. Retrieving the parent object had then follow the sibling
        chain and then follow the originating continuation chain.

        Test: accessibility/removed-anonymous-block-child-causes-crash.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::nextSibling):
            Fix erroneous comment
        (WebCore::nextContinuation):
        (WebCore::AccessibilityRenderObject::renderParentObject):
            Handle unhandled continuation case.
        (WebCore::AccessibilityRenderObject::addChildren):
            ASSERT that the parentObject() is the same when adding a new child.

2010-08-10  Abhishek Arya  <inferno@chromium.org>

        Reviewed by David Hyatt.

        Take checks for ruby base existence out of the ASSERTs.
        https://bugs.webkit.org/show_bug.cgi?id=43795

        Test: fast/ruby/ruby-remove-no-base.html

        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::addChild):
        (WebCore::RenderRubyRun::removeChild):

2010-08-06  Zhenyao Mo  <zmo@google.com>

        Reviewed by Dimitri Glazkov.

        texture functions should gen INVALID_OPERATION if no texture is bound
        https://bugs.webkit.org/show_bug.cgi?id=42907

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::copyTexImage2D): Check if a texture is bound to target.
        (WebCore::WebGLRenderingContext::copyTexSubImage2D): Ditto.
        (WebCore::WebGLRenderingContext::generateMipmap): Ditto.
        (WebCore::WebGLRenderingContext::getTexParameter): Ditto.
        (WebCore::WebGLRenderingContext::texImage2DBase): Ditto.
        (WebCore::WebGLRenderingContext::texParameter): Ditto.
        (WebCore::WebGLRenderingContext::texSubImage2DBase): Ditto.
        (WebCore::WebGLRenderingContext::validateTextureBinding): Check if target is valid and if a texture is bound to it.
        * html/canvas/WebGLRenderingContext.h: Declare validateTextureBinding().

2010-08-10  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Sam Weinig.

        [WINCE] Implement Path::currentPoint()
        https://bugs.webkit.org/show_bug.cgi?id=42927

        * platform/graphics/wince/PathWince.cpp:
        (WebCore::Path::currentPoint):

2010-08-10  Ariya Hidayat  <ariya@sencha.com>

        [Qt] Warning fix, remove reference to platform/text/StringImpl.h

        * WebCore.pro:

2010-08-10  Alice Liu  <alice.liu@apple.com>

        Chromium build fix attempt.  not reviewed
        
        * platform/text/TextBoundaries.cpp: use correct stringimplh include

2010-08-10  Jian Li  <jianli@chromium.org>

        Chromium build fix.

        * platform/graphics/chromium/FontPlatformDataChromiumWin.h:
        * platform/graphics/chromium/FontPlatformDataLinux.cpp:

2010-08-10  Johnny Ding  <jnd@chromium.org>

        Reviewed by Adam Barth.

        Change the ScriptController::processingUserGesture to static method
        and use dynamic(JSC binding)/entered(V8 binding) frame to check the user gesture.
        https://bugs.webkit.org/show_bug.cgi?id=42827.

        Test: fast/events/popup-blocked-from-iframe-script.html

        * WebCore.order:
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::processingUserGesture):
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::setLocation):
        (WebCore::createWindow):
        (WebCore::domWindowAllowPopUp):
        (WebCore::JSDOMWindow::open):
        (WebCore::JSDOMWindow::showModalDialog):
        * bindings/js/JSDocumentCustom.cpp:
        (WebCore::JSDocument::setLocation):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::navigateIfAllowed):
        (WebCore::JSLocation::reload):
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::processingUserGesture):
        * bindings/js/ScriptController.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionWithDynamicFrameAndUserGesture):
        (WebCore::jsTestObjPrototypeFunctionWithDynamicFrameAndUserGestureASAD):
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::processingUserGesture):
        (WebCore::ScriptController::anyPageIsProcessingUserGesture):
        * bindings/v8/ScriptController.h:
        * bindings/v8/specialization/V8BindingState.cpp:
        (WebCore::::processingUserGesture):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::isProcessingUserGesture):

2010-08-10  Gavin Barraclough  <barraclough@apple.com>

        Chromium build fix

        * platform/graphics/chromium/FontPlatformDataLinux.h:

2010-08-10  Gavin Barraclough  <barraclough@apple.com>

        Rubber stamped by Sam Weinig.

        Bug 43786 - Move AtomicStringHash from WebCore to WTF
        Also remove deprecated string headers from WebCore/platform/text.

        * ForwardingHeaders/wtf/text/AtomicStringHash.h: Added.
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        * bindings/cpp/WebDOMHTMLCollectionCustom.cpp:
        * bindings/js/JSCSSStyleDeclarationCustom.cpp:
        * bindings/js/JSClipboardCustom.cpp:
        * bindings/js/JSDOMApplicationCacheCustom.cpp:
        * bindings/js/JSDOMMimeTypeArrayCustom.cpp:
        * bindings/js/JSDOMPluginArrayCustom.cpp:
        * bindings/js/JSDOMPluginCustom.cpp:
        * bindings/js/JSDOMStringMapCustom.cpp:
        * bindings/js/JSDOMWindowCustom.cpp:
        * bindings/js/JSDataGridColumnListCustom.cpp:
        * bindings/js/JSHTMLAllCollectionCustom.cpp:
        * bindings/js/JSHTMLCollectionCustom.cpp:
        * bindings/js/JSMessagePortCustom.cpp:
        * bindings/js/JSNodeListCustom.cpp:
        * bindings/scripts/CodeGeneratorCPP.pm:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/scripts/test/CPP/WebDOMTestCallback.cpp:
        * bindings/scripts/test/CPP/WebDOMTestObj.cpp:
        * bindings/scripts/test/V8/V8TestInterface.h:
        * bindings/scripts/test/V8/V8TestObj.h:
        * bindings/v8/ScriptDebugServer.h:
        * bindings/v8/V8Binding.cpp:
        * bindings/v8/V8Binding.h:
        * bridge/jni/v8/JavaClassV8.h:
        * css/CSSFontFaceSource.h:
        * css/CSSFontSelector.cpp:
        * css/CSSFontSelector.h:
        * css/CSSNamespace.h:
        * css/CSSParser.cpp:
        * css/CSSParser.h:
        * css/CSSParserValues.h:
        * css/CSSStyleSelector.h:
        * css/CSSVariablesDeclaration.h:
        * css/MediaFeatureNames.h:
        * css/MediaQueryExp.h:
        * css/WebKitCSSKeyframesRule.h:
        * dom/CustomEvent.h:
        * dom/Document.cpp:
        * dom/Event.cpp:
        * dom/Event.h:
        * dom/EventNames.h:
        * dom/EventTarget.h:
        * dom/InputElement.h:
        * dom/MessagePort.cpp:
        * dom/MessagePort.h:
        * dom/NameNodeList.h:
        * dom/NodeRareData.h:
        * dom/QualifiedName.h:
        * dom/ScriptElement.cpp:
        * dom/SpaceSplitString.h:
        * dom/TagNodeList.h:
        * dom/XMLDocumentParser.h:
        * editing/EditorCommand.cpp:
        * history/mac/HistoryItemMac.mm:
        * html/BlobBuilder.cpp:
        * html/DataGridColumn.h:
        * html/DataGridColumnList.cpp:
        * html/HTMLDocument.h:
        * html/HTMLInputElement.cpp:
        * html/HTMLTokenizer.cpp:
        * html/HTMLTokenizer.h:
        * html/LegacyPreloadScanner.cpp:
        * html/LegacyPreloadScanner.h:
        * inspector/InspectorCSSStore.h:
        * inspector/InspectorController.h:
        * inspector/InspectorDOMAgent.cpp:
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorValues.h:
        * loader/Cache.h:
        * loader/CrossOriginAccessControl.cpp:
        * loader/CrossOriginPreflightResultCache.h:
        * loader/DocLoader.h:
        * loader/ImageLoader.h:
        * loader/appcache/ApplicationCache.h:
        * loader/appcache/ApplicationCacheStorage.h:
        * loader/appcache/DOMApplicationCache.h:
        * loader/icon/IconDatabase.h:
        * loader/icon/IconRecord.h:
        * loader/loader.h:
        * notifications/Notification.h:
        * page/FrameTree.h:
        * page/Page.cpp:
        * page/PageGroup.h:
        * page/SecurityOrigin.h:
        * page/Settings.h:
        * page/WindowFeatures.cpp:
        * page/animation/AnimationBase.h:
        * page/animation/AnimationControllerPrivate.h:
        * page/animation/CompositeAnimation.h:
        * platform/Cookie.h:
        * platform/KURL.cpp:
        * platform/KURLGoogle.cpp:
        * platform/KURLHash.h:
        * platform/Length.cpp:
        * platform/LinkHash.cpp:
        * platform/LinkHash.h:
        * platform/MIMETypeRegistry.cpp:
        * platform/MIMETypeRegistry.h:
        * platform/SchemeRegistry.h:
        * platform/ThreadGlobalData.cpp:
        * platform/ThreadGlobalData.h:
        * platform/cf/BinaryPropertyList.cpp:
        * platform/chromium/SearchPopupMenuChromium.cpp:
        * platform/efl/ClipboardEfl.cpp:
        * platform/efl/CookieJarEfl.cpp:
        * platform/efl/PlatformKeyboardEventEfl.cpp:
        * platform/graphics/FontCache.cpp:
        * platform/graphics/FontFamily.h:
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/cg/ImageSourceCGWin.cpp:
        * platform/graphics/chromium/FontCacheChromiumWin.cpp:
        * platform/graphics/chromium/FontCacheLinux.cpp:
        * platform/graphics/chromium/FontUtilsChromiumWin.cpp:
        * platform/graphics/chromium/LayerChromium.h:
        * platform/graphics/filters/Filter.h:
        * platform/graphics/mac/FontPlatformData.h:
        * platform/graphics/mac/GraphicsLayerCA.h:
        * platform/graphics/qt/FontCacheQt.cpp:
        * platform/graphics/win/FontCacheWin.cpp:
        * platform/graphics/win/FontPlatformDataCGWin.cpp:
        * platform/graphics/win/FontPlatformDataCairoWin.cpp:
        * platform/graphics/win/FontPlatformDataWin.cpp:
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:
        * platform/graphics/win/WKCACFLayer.h:
        * platform/graphics/wince/FontPlatformData.cpp:
        * platform/graphics/wx/FontPlatformData.h:
        * platform/gtk/ClipboardGtk.cpp:
        * platform/gtk/DataObjectGtk.h:
        * platform/haiku/ClipboardHaiku.cpp:
        * platform/haiku/CookieJarHaiku.cpp:
        * platform/haiku/SearchPopupMenuHaiku.cpp:
        * platform/mac/SearchPopupMenuMac.mm:
        * platform/mac/ThreadCheck.mm:
        * platform/network/CredentialStorage.cpp:
        * platform/network/HTTPHeaderMap.h:
        * platform/network/cf/DNSCFNet.cpp:
        * platform/network/curl/CookieJarCurl.cpp:
        * platform/qt/ClipboardQt.cpp:
        * platform/text/AtomicString.h: Removed.
        * platform/text/AtomicStringHash.h: Removed.
        * platform/text/AtomicStringImpl.h: Removed.
        * platform/text/AtomicStringKeyedMRUCache.h:
        * platform/text/StringBuilder.cpp:
        * platform/text/StringHash.h: Removed.
        * platform/text/StringImpl.h: Removed.
        * platform/text/TextCodecLatin1.cpp:
        * platform/text/TextCodecUTF16.cpp:
        * platform/text/TextCodecUserDefined.cpp:
        * platform/text/cf/HyphenationCF.cpp:
        * platform/text/cf/StringImplCF.cpp:
        * platform/text/mac/HyphenationMac.mm:
        * platform/text/mac/StringImplMac.mm:
        * platform/text/transcoder/FontTranscoder.h:
        * platform/text/wince/TextCodecWinCE.cpp:
        * platform/win/BString.cpp:
        * platform/win/ClipboardWin.cpp:
        * platform/win/SearchPopupMenuWin.cpp:
        * platform/wince/SearchPopupMenuWince.cpp:
        * platform/wx/ClipboardWx.cpp:
        * plugins/DOMMimeTypeArray.cpp:
        * plugins/DOMPlugin.cpp:
        * plugins/DOMPluginArray.cpp:
        * plugins/PluginDatabase.h:
        * plugins/PluginPackage.h:
        * plugins/PluginStream.h:
        * rendering/RenderApplet.h:
        * rendering/RenderText.cpp:
        * rendering/style/BindingURI.h:
        * rendering/style/ContentData.cpp:
        * rendering/style/CounterContent.h:
        * rendering/style/CounterDirectives.h:
        * rendering/style/KeyframeList.h:
        * rendering/style/StyleRareInheritedData.h:
        * storage/AbstractDatabase.cpp:
        * storage/DatabaseAuthorizer.h:
        * storage/DatabaseTracker.h:
        * storage/IDBDatabaseBackendImpl.h:
        * storage/IDBFactoryBackendImpl.h:
        * storage/IDBObjectStoreBackendImpl.h:
        * storage/OriginQuotaManager.h:
        * storage/OriginUsageRecord.h:
        * storage/SQLTransactionCoordinator.h:
        * storage/StorageAreaSync.h:
        * storage/StorageMap.h:
        * storage/StorageNamespaceImpl.cpp:
        * storage/chromium/QuotaTracker.h:
        * svg/SVGAltGlyphElement.h:
        * svg/SVGDocumentExtensions.cpp:
        * svg/SVGDocumentExtensions.h:
        * svg/SVGFitToViewBox.cpp:
        * svg/SVGLangSpace.h:
        * svg/animation/SMILTimeContainer.h:
        * svg/graphics/filters/SVGFilterBuilder.h:
        * websockets/WebSocket.h:
        * websockets/WebSocketChannel.cpp:
        * websockets/WebSocketHandshake.cpp:
        * websockets/WebSocketHandshakeResponse.cpp:
        * wml/WMLPageState.h:
        * workers/AbstractWorker.h:
        * workers/DefaultSharedWorkerRepository.h:
        * workers/Worker.h:
        * workers/WorkerContext.h:
        * xml/XMLHttpRequest.h:
        * xml/XMLHttpRequestUpload.cpp:
        * xml/XMLHttpRequestUpload.h:
        * xml/XPathExpressionNode.h:
        * xml/XPathNamespace.h:
        * xml/XPathParser.cpp:
        * xml/XSLTProcessor.h:

2010-08-10  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed. Adding changes that escaped from r65072.

        Web Inspector: move database processing to native layer.
        https://bugs.webkit.org/show_bug.cgi?id=43788

        * inspector/front-end/InspectorBackendStub.js:
        (WebInspector.InspectorBackendStub):
        * inspector/front-end/StoragePanel.js:
        (WebInspector.StoragePanel.prototype._genericViewSetup):

2010-08-10  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        [GTK] Inputs of type 'search' have weird looking checkboxes instead of search/clear icons
        https://bugs.webkit.org/show_bug.cgi?id=43760

        Draw appropriate GTK+ stock images for search/clear icons in search entries.

        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::paintSearchFieldResultsButton):
        (WebCore::RenderThemeGtk::paintSearchFieldResultsDecoration):
        (WebCore::RenderThemeGtk::paintSearchFieldCancelButton):

2010-08-10  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed. Qt build fix, follow up for r65072.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::releaseFrontendLifetimeAgents):

2010-08-10  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: move database processing to native layer.

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

        * English.lproj/localizedStrings.js:
        * WebCore.gypi:
        * bindings/js/JSInjectedScriptHostCustom.cpp:
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        * inspector/CodeGeneratorInspector.pm:
        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::dispatch):
        * inspector/InjectedScript.h:
        * inspector/InjectedScriptHost.cpp:
        * inspector/InjectedScriptHost.h:
        * inspector/InjectedScriptHost.idl:
        * inspector/Inspector.idl:
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::dispatchOnInjectedScript):
        (WebCore::InspectorBackend::executeSQL):
        * inspector/InspectorBackend.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::releaseFrontendLifetimeAgents):
        * inspector/InspectorController.h:
        * inspector/InspectorDebuggerAgent.h:
        * inspector/InspectorStorageAgent.cpp: Added.
        (WebCore::):
        (WebCore::InspectorStorageAgent::InspectorStorageAgent):
        (WebCore::InspectorStorageAgent::~InspectorStorageAgent):
        (WebCore::InspectorStorageAgent::executeSQL):
        (WebCore::InspectorStorageAgent::clearFrontend):
        * inspector/InspectorStorageAgent.h: Added.
        (WebCore::InspectorStorageAgent::create):
        (WebCore::InspectorStorageAgent::frontend):
        * inspector/front-end/Database.js:
        (WebInspector.Database.prototype.executeSql):
        (WebInspector.sqlTransactionSucceeded):
        (WebInspector.sqlTransactionFailed):
        * inspector/front-end/DatabaseQueryView.js:
        (WebInspector.DatabaseQueryView.prototype._queryFinished):
        (WebInspector.DatabaseQueryView.prototype._queryError):
        * inspector/front-end/DatabaseTableView.js:
        (WebInspector.DatabaseTableView.prototype._queryFinished):
        * inspector/front-end/InjectedScript.js:
        * inspector/front-end/InjectedScriptAccess.js:
        (InjectedScriptAccess._installHandler.InjectedScriptAccess.prototype.methodName):
        (InjectedScriptAccess._installHandler):
        * inspector/front-end/StoragePanel.js:
        (WebInspector.StoragePanel.prototype.dataGridForResult):

2010-08-10  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        [V8] DeviceMotionEvent can not be used from JavaScript
        https://bugs.webkit.org/show_bug.cgi?id=43785

        This is tested by the existing tests fast/dom/DeviceMotion/create-event.html
        and fast/dom/DeviceMotion/optional-event-properties.html.

        * bindings/v8/custom/V8EventCustom.cpp:
        (WebCore::toV8):

2010-08-10  Balazs Kelemen  <kb@inf.u-szeged.hu>

        Reviewed by Antonio Gomes.

        [Qt] Build WebKit2 into a static lib

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

        Just build changes so no new tests.

        * WebCore.pri: Moved feature detection logic into features.pri since we need this in WebKit2.pro as well.
        * WebCore.pro: Moved the specification of the WebKit2 build to WebKit2.pro. Link against the static lib.
        * features.pri: Added.

2010-08-10  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector, Chromium: reloading of inspected page hits assert in InspectorController::enableDebuggerFromFrontend()
        https://bugs.webkit.org/show_bug.cgi?id=43780

        * inspector/CodeGeneratorInspector.pm:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::enableDebuggerFromFrontend):
        * inspector/InspectorController.h:
        (WebCore::InspectorController::hasFrontend):
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::create):
        (WebCore::InspectorDebuggerAgent::InspectorDebuggerAgent):
        (WebCore::InspectorDebuggerAgent::setPauseOnExceptionsState):
        (WebCore::InspectorDebuggerAgent::didParseSource):
        (WebCore::InspectorDebuggerAgent::failedToParseSource):
        (WebCore::InspectorDebuggerAgent::didPause):
        (WebCore::InspectorDebuggerAgent::didContinue):
        * inspector/InspectorDebuggerAgent.h:

2010-08-10  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        Make sure NPAPI plugins get an initial setNPWindow on Mac

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

        * plugins/mac/PluginViewMac.mm:

2010-08-10  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Use SVGPathParser to create SVG paths and to perform path animations
        https://bugs.webkit.org/show_bug.cgi?id=43696

        Removed toString() functions in all SVGPathSeg* objects as well as toPath() in SVGPathSegList.
        These hacks were used to create a SVG path data string or a platform path from a SVGPathSegList.
        Use the new SVGPathParser instead.

        Doesn't affect any tests.

        * svg/SVGAnimateElement.cpp:
        (WebCore::SVGAnimateElement::applyResultsToTarget):
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::toPathData):
        * svg/SVGPathParserFactory.cpp:
        (WebCore::SVGPathParserFactory::buildPathFromSVGPathSegList):
        (WebCore::SVGPathParserFactory::buildStringFromByteStream):
        (WebCore::SVGPathParserFactory::buildStringFromSVGPathSegList):
        * svg/SVGPathParserFactory.h:
        * svg/SVGPathSeg.cpp:
        * svg/SVGPathSeg.h:
        * svg/SVGPathSegArc.cpp:
        * svg/SVGPathSegArc.h:
        * svg/SVGPathSegClosePath.h:
        (WebCore::SVGPathSegClosePath::pathSegTypeAsLetter):
        * svg/SVGPathSegCurvetoCubic.h:
        * svg/SVGPathSegCurvetoCubicSmooth.h:
        * svg/SVGPathSegCurvetoQuadratic.h:
        * svg/SVGPathSegLinetoHorizontal.h:
        * svg/SVGPathSegLinetoVertical.h:
        * svg/SVGPathSegList.cpp:
        (WebCore::SVGPathSegList::getPathSegAtLength):
        * svg/SVGPathSegList.h:

2010-08-10  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r65056.
        http://trac.webkit.org/changeset/65056
        https://bugs.webkit.org/show_bug.cgi?id=43773

        "Clearly I missed something.  I'm too tired to try and fix
        now.  Will re-land in the morning." (Requested by eseidel on
        #webkit).

        * html/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::attach):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::insertAdjacentHTML):
        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processEndTagForInCell):

2010-08-10  Yoshiki Hayashi  <yhayashi@google.com>

        Reviewed by Kent Tamura.

        Iterate over :first-letter so that it will be included in innerText.
        https://bugs.webkit.org/show_bug.cgi?id=39863

        Test: fast/dom/inner-text-first-letter.html

        * editing/TextIterator.cpp:
        (WebCore::TextIterator::TextIterator):
        (WebCore::TextIterator::advance):
        (WebCore::TextIterator::handleTextNode):
        (WebCore::TextIterator::handleTextBox):
        (WebCore::TextIterator::emitText):
        * editing/TextIterator.h:

2010-08-10  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Fix crashes by SelectionController::modify().
        https://bugs.webkit.org/show_bug.cgi?id=43032

        Test: editing/selection/selection-modify-crash.html

        * editing/visible_units.cpp:
        (WebCore::endOfDocument): Add NULL-check for document()->documentElement().

2010-08-10  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Add missing SVGPathSegList source for SVGPathParser
        https://bugs.webkit.org/show_bug.cgi?id=43691

        Added SVGPathSegListSource to parse normalized or unaltered SVGPathSegLists and transform
        them to either a SVG path string, or a SVGPathByteStream. This will be needed to synchronize
        all SVGPathSegLists and the SVG path string of the 'd' attribute.
        Refactored SVGPathSource code, to read concrete path segments instead of type/flag/coordinates
        from the data sources. This is a further abstraction and seperates the reading of content from
        the parsing and interpreting.

        Doesn't affect any tests.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * svg/SVGAllInOne.cpp:
        * svg/SVGPathByteStreamSource.cpp:
        (WebCore::SVGPathByteStreamSource::parseSVGSegmentType):
        (WebCore::SVGPathByteStreamSource::nextCommand):
        (WebCore::SVGPathByteStreamSource::parseMoveToSegment):
        (WebCore::SVGPathByteStreamSource::parseLineToSegment):
        (WebCore::SVGPathByteStreamSource::parseLineToHorizontalSegment):
        (WebCore::SVGPathByteStreamSource::parseLineToVerticalSegment):
        (WebCore::SVGPathByteStreamSource::parseCurveToCubicSegment):
        (WebCore::SVGPathByteStreamSource::parseCurveToCubicSmoothSegment):
        (WebCore::SVGPathByteStreamSource::parseCurveToQuadraticSegment):
        (WebCore::SVGPathByteStreamSource::parseCurveToQuadraticSmoothSegment):
        (WebCore::SVGPathByteStreamSource::parseArcToSegment):
        * svg/SVGPathByteStreamSource.h:
        (WebCore::SVGPathByteStreamSource::moveToNextToken):
        * svg/SVGPathParser.cpp:
        (WebCore::SVGPathParser::parseMoveToSegment):
        (WebCore::SVGPathParser::parseLineToSegment):
        (WebCore::SVGPathParser::parseLineToHorizontalSegment):
        (WebCore::SVGPathParser::parseLineToVerticalSegment):
        (WebCore::SVGPathParser::parseCurveToCubicSegment):
        (WebCore::SVGPathParser::parseCurveToCubicSmoothSegment):
        (WebCore::SVGPathParser::parseCurveToQuadraticSegment):
        (WebCore::SVGPathParser::parseCurveToQuadraticSmoothSegment):
        (WebCore::SVGPathParser::parseArcToSegment):
        * svg/SVGPathSegListSource.cpp: Added.
        (WebCore::SVGPathSegListSource::SVGPathSegListSource):
        (WebCore::SVGPathSegListSource::~SVGPathSegListSource):
        (WebCore::SVGPathSegListSource::hasMoreData):
        (WebCore::SVGPathSegListSource::parseSVGSegmentType):
        (WebCore::SVGPathSegListSource::nextCommand):
        (WebCore::SVGPathSegListSource::parseMoveToSegment):
        (WebCore::SVGPathSegListSource::parseLineToSegment):
        (WebCore::SVGPathSegListSource::parseLineToHorizontalSegment):
        (WebCore::SVGPathSegListSource::parseLineToVerticalSegment):
        (WebCore::SVGPathSegListSource::parseCurveToCubicSegment):
        (WebCore::SVGPathSegListSource::parseCurveToCubicSmoothSegment):
        (WebCore::SVGPathSegListSource::parseCurveToQuadraticSegment):
        (WebCore::SVGPathSegListSource::parseCurveToQuadraticSmoothSegment):
        (WebCore::SVGPathSegListSource::parseArcToSegment):
        * svg/SVGPathSegListSource.h: Added.
        (WebCore::SVGPathSegListSource::create):
        (WebCore::SVGPathSegListSource::moveToNextToken):
        * svg/SVGPathSource.h:
        * svg/SVGPathStringSource.cpp:
        (WebCore::SVGPathStringSource::parseMoveToSegment):
        (WebCore::SVGPathStringSource::parseLineToSegment):
        (WebCore::SVGPathStringSource::parseLineToHorizontalSegment):
        (WebCore::SVGPathStringSource::parseLineToVerticalSegment):
        (WebCore::SVGPathStringSource::parseCurveToCubicSegment):
        (WebCore::SVGPathStringSource::parseCurveToCubicSmoothSegment):
        (WebCore::SVGPathStringSource::parseCurveToQuadraticSegment):
        (WebCore::SVGPathStringSource::parseCurveToQuadraticSmoothSegment):
        (WebCore::SVGPathStringSource::parseArcToSegment):
        * svg/SVGPathStringSource.h:

2010-08-09  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: small refactoring for CodeGeneratorInspector.
        A number of push calls were replaced by embedded text.
        Just for improve code readability.
        https://bugs.webkit.org/show_bug.cgi?id=43770

        * inspector/CodeGeneratorInspector.pm:

2010-08-09  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Fix three ASSERTs hit with the HTML5 TreeBuilder in fragment mode
        https://bugs.webkit.org/show_bug.cgi?id=43762

        In fixing the insertAdjacentHTML I had to make small changes to
        the error logic, which ended up bringing us closer to HTML5.

        Test: fast/dom/HTMLElement/insertAdjacentHTML-errors.html

        * html/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::attach):
         - This ASSERT was just wrong, the child should not be attached
           in the case the parent is not attached.
        * html/HTMLElement.cpp:
        (WebCore::contextElementForInsertion):
         - This is part of HTML5, needed to know what to call the
           HTML or XML parsers with.  The previous code always passed
           "this" which is wrong in the case of beforeBegin or afterEnd insertion.
        (WebCore::HTMLElement::insertAdjacentHTML):
         - Use the right contextElement now that we know how to compute it.
        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processEndTagForInCell):
         - This ASSERT is direct from the spec, but it's wrong, so I've filed a spec bug.

2010-08-09  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: remove InspectorFrontend class and use RemoteInspectorFrontend instead.
        https://bugs.webkit.org/show_bug.cgi?id=43726

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::close):
        (WebCore::InspectorController::disconnectFrontend):
        * inspector/InspectorController.h:
        * inspector/InspectorFrontend.cpp: Removed.
        * inspector/InspectorFrontend.h: Removed.

2010-08-09  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Remove obsolete JS wrappers for did* methods.
        https://bugs.webkit.org/show_bug.cgi?id=43738

        * inspector/CodeGeneratorInspector.pm:
        * inspector/Inspector.idl:
        * inspector/front-end/BreakpointManager.js:
        * inspector/front-end/Callback.js:
        * inspector/front-end/ConsoleView.js:
        * inspector/front-end/DOMAgent.js:
        * inspector/front-end/DOMStorage.js:
        * inspector/front-end/Database.js:
        * inspector/front-end/InjectedScriptAccess.js:
        * inspector/front-end/ProfilesPanel.js:
        * inspector/front-end/ResourcesPanel.js:
        * inspector/front-end/ScriptView.js:
        * inspector/front-end/ScriptsPanel.js:
        * inspector/front-end/inspector.js:
        (WebInspector.reportProtocolError):

2010-08-09  Gavin Barraclough  <barraclough@apple.com>

        Qt build fix attempt VIII.

        * dom/QualifiedName.cpp:
        (WebCore::QualifiedName::toString):
        * dom/XMLDocumentParserQt.cpp:
        (WebCore::handleElementNamespaces):

2010-08-09  Gavin Barraclough  <barraclough@apple.com>

        Qt build fix attempt VII.

        * dom/QualifiedName.cpp:
        (WebCore::QualifiedName::toString):
        * dom/XMLDocumentParserQt.cpp:
        (WebCore::handleElementNamespaces):

2010-08-09  Gavin Barraclough  <barraclough@apple.com>

        Qt build fix attempt VI.

        * dom/QualifiedName.cpp:
        (WebCore::QualifiedName::toString):
        * dom/XMLDocumentParserQt.cpp:
        (WebCore::handleElementNamespaces):

2010-08-09  Gavin Barraclough  <barraclough@apple.com>

        Qt build fix attempt V.

        * dom/QualifiedName.cpp:
        (WebCore::QualifiedName::toString):
        * dom/XMLDocumentParserQt.cpp:
        (WebCore::handleElementNamespaces):

2010-08-09  Gavin Barraclough  <barraclough@apple.com>

        Qt build fix attempt IV.

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::selectorText):
        * dom/QualifiedName.cpp:
        (WebCore::QualifiedName::toString):
        * dom/XMLDocumentParserQt.cpp:
        (WebCore::handleElementNamespaces):

2010-08-09  Gavin Barraclough  <barraclough@apple.com>

        Speculative chromium build fix.

        * platform/graphics/chromium/FontCacheChromiumWin.cpp:
        (WebCore::charactersAreAllASCII):

2010-08-09  Gavin Barraclough  <barraclough@apple.com>

        Qt build fix III.

        * css/CSSSelector.cpp:

2010-08-09  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Remove error-prone external SegementedSubstring contructor
        https://bugs.webkit.org/show_bug.cgi?id=43752

        There's a lot of code that assumes that SegmentedString takes ownership
        of its substrings.  For example, when the HTML parser pauses and
        resumes asynchronously, it could explode if SegmentedString didn't own
        its substrings.

        Prior to this patch, there was a constructor that let
        SegmentedSubstring use an external string buffer.  It turns out it was
        only used in a handful of places, but I'd rather pay the memcpy of
        these small strings than risk having them used after free.

        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::documentWrite):
        * html/LegacyHTMLDocumentParser.cpp:
        (WebCore::LegacyHTMLDocumentParser::parseNonHTMLText):
        (WebCore::LegacyHTMLDocumentParser::scriptHandler):
        (WebCore::LegacyHTMLDocumentParser::parseComment):
        * platform/text/SegmentedString.h:
        (WebCore::SegmentedString::SegmentedString):

2010-08-09  Gavin Barraclough  <barraclough@apple.com>

        Speculative Qt build fix.

        * css/CSSSelector.cpp:

2010-08-09  Gavin Barraclough  <barraclough@apple.com>

        Speculative gtk build fix.

        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::handlePostReadFile):

2010-08-06  Gavin Barraclough  <barraclough@apple.com>

        Rubber stamped by Sam Weinig

        Bug 43594 - Add string forwards to Forward.h
        This allows us to remove forward declarations for these classes from
        WebCore/WebKit (a step in moving these class from WebCore:: to WTF::).

        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/AXObjectCache.h:
        * accessibility/AccessibilityARIAGrid.h:
        * accessibility/AccessibilityListBoxOption.h:
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/AccessibilityTable.h:
        * bindings/cpp/WebDOMCString.h:
        * bindings/cpp/WebDOMString.h:
        * bindings/gobject/ConvertToUTF8String.h:
        * bindings/js/DOMWrapperWorld.h:
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSMessagePortCustom.h:
        * bindings/js/JavaScriptCallFrame.h:
        * bindings/js/ScriptController.h:
        * bindings/js/ScriptProfile.h:
        * bindings/js/ScriptSourceProvider.h:
        * bindings/js/ScriptString.h:
        * bindings/js/WorkerScriptController.h:
        * bindings/objc/DOMImplementationFront.h:
        * bindings/v8/ScheduledAction.h:
        * bindings/v8/ScriptController.h:
        * bindings/v8/V8DOMWindowShell.h:
        * bindings/v8/V8Proxy.h:
        * bindings/v8/V8Utilities.h:
        * bindings/v8/custom/V8CustomXPathNSResolver.h:
        * bridge/c/c_utility.h:
        * css/CSSFontSelector.h:
        * css/CSSHelper.h:
        * css/CSSOMUtils.h:
        * css/CSSPrimitiveValue.h:
        * css/MediaList.h:
        * css/StyleBase.h:
        * css/StyleSheetList.h:
        * css/WebKitCSSKeyframesRule.h:
        * dom/CheckedRadioButtons.h:
        * dom/DOMImplementation.h:
        * dom/DocumentMarker.h:
        * dom/DynamicNodeList.h:
        * dom/EventTarget.h:
        * dom/MessagePort.h:
        * dom/MessagePortChannel.h:
        * dom/NameNodeList.h:
        * dom/Node.h:
        * dom/NodeList.h:
        * dom/OptionGroupElement.h:
        * dom/ScriptExecutionContext.h:
        * dom/SelectElement.h:
        * dom/ViewportArguments.h:
        * dom/make_names.pl:
        * editing/HTMLInterchange.h:
        * editing/htmlediting.h:
        * editing/markup.h:
        * html/CollectionCache.h:
        * html/DOMFormData.h:
        * html/DataGridColumnList.h:
        * html/DateComponents.h:
        * html/FileStream.h:
        * html/FileStreamProxy.h:
        * html/FormDataList.h:
        (WebCore::FormDataList::appendData):
        * html/HTMLCollection.h:
        * html/HTMLElementStack.h:
        * html/HTMLFormattingElementList.h:
        * html/HTMLParserQuirks.h:
        * html/HTMLQuoteElement.h:
        * html/HTMLScriptRunnerHost.h:
        * html/StepRange.h:
        * html/canvas/CanvasGradient.h:
        * html/canvas/CanvasNumberArray.h:
        * html/canvas/CanvasPattern.h:
        * inspector/InjectedScript.h:
        * inspector/InspectorCSSStore.h:
        * inspector/InspectorClient.h:
        * inspector/InspectorFrontendClient.h:
        * inspector/InspectorValues.h:
        * inspector/ScriptDebugListener.h:
        * loader/CachedResourceClient.h:
        * loader/CrossOriginAccessControl.h:
        * loader/DocumentThreadableLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/RedirectScheduler.h:
        * loader/SubframeLoader.h:
        * loader/appcache/DOMApplicationCache.h:
        * loader/archive/ArchiveFactory.h:
        * loader/icon/IconDatabaseClient.h:
        * notifications/NotificationPresenter.h:
        * page/Chrome.h:
        * page/ChromeClient.h:
        * page/Console.h:
        * page/ContextMenuClient.h:
        * page/DOMSelection.h:
        * page/EditorClient.h:
        * page/EventHandler.h:
        * page/FrameView.h:
        * page/GeolocationPositionCache.h:
        * page/History.h:
        * page/Location.h:
        * page/Navigator.h:
        * page/NavigatorBase.h:
        * page/PluginHalterClient.h:
        * page/PrintContext.h:
        * page/SpeechInput.h:
        * page/SpeechInputListener.h:
        * page/animation/AnimationController.h:
        * platform/CookieJar.h:
        * platform/CrossThreadCopier.h:
        * platform/DragImage.h:
        * platform/FileSystem.h:
        * platform/Language.h:
        * platform/Length.h:
        * platform/LinkHash.h:
        * platform/LocalizationStrategy.h:
        * platform/LocalizedStrings.h:
        * platform/Logging.h:
        * platform/Pasteboard.h:
        * platform/PopupMenuClient.h:
        * platform/SearchPopupMenu.h:
        * platform/Widget.h:
        * platform/cf/BinaryPropertyList.h:
        * platform/chromium/ChromiumBridge.h:
        * platform/chromium/ClipboardUtilitiesChromium.h:
        * platform/cocoa/KeyEventCocoa.h:
        * platform/graphics/Color.h:
        * platform/graphics/FontCache.h:
        * platform/graphics/FontData.h:
        * platform/graphics/FontSelector.h:
        * platform/graphics/GraphicsTypes.h:
        * platform/graphics/Icon.h:
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/ImageSource.h:
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        * platform/graphics/Path.h:
        * platform/graphics/StringTruncator.h:
        * platform/graphics/cairo/FontCustomPlatformData.h:
        * platform/graphics/cairo/FontPlatformData.h:
        * platform/graphics/cg/FontPlatformData.h:
        * platform/graphics/cg/ImageSourceCG.h:
        * platform/graphics/chromium/FontCustomPlatformData.h:
        * platform/graphics/chromium/FontPlatformDataChromiumWin.h:
        * platform/graphics/chromium/FontPlatformDataLinux.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        * platform/graphics/haiku/FontCustomPlatformData.h:
        * platform/graphics/mac/FontCustomPlatformData.h:
        * platform/graphics/mac/FontPlatformData.h:
        * platform/graphics/qt/FontCustomPlatformData.h:
        * platform/graphics/qt/FontPlatformData.h:
        * platform/graphics/win/FontCustomPlatformData.h:
        * platform/graphics/win/FontCustomPlatformDataCairo.h:
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.h:
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.h:
        * platform/graphics/wince/FontPlatformData.h:
        * platform/graphics/wince/MediaPlayerPrivateWince.h:
        * platform/graphics/wince/MediaPlayerProxy.h:
        * platform/graphics/wx/FontCustomPlatformData.h:
        * platform/graphics/wx/FontPlatformData.h:
        * platform/mac/PasteboardHelper.h:
        * platform/network/DNS.h:
        * platform/network/FormData.h:
        * platform/network/FormDataBuilder.h:
        * platform/network/HTTPParsers.h:
        * platform/text/Hyphenation.h:
        * platform/text/LineEnding.h:
        * platform/text/TextCodec.h:
        * platform/text/TextEncoding.h:
        * platform/text/TextStream.h:
        * platform/win/BString.h:
        * platform/win/ClipboardUtilitiesWin.h:
        * platform/win/WCDataObject.h:
        * platform/win/WebCoreTextRenderer.h:
        * plugins/DOMMimeType.h:
        * plugins/DOMMimeTypeArray.h:
        * plugins/DOMPlugin.h:
        * plugins/DOMPluginArray.h:
        * rendering/CounterNode.h:
        * rendering/HitTestResult.h:
        * rendering/RenderObjectChildList.h:
        * rendering/RenderText.h:
        * rendering/RenderTreeAsText.h:
        * rendering/TextControlInnerElements.h:
        * rendering/style/ContentData.h:
        * rendering/style/RenderStyle.h:
        * storage/DatabaseAuthorizer.h:
        * storage/DatabaseTrackerClient.h:
        * storage/SQLTransaction.h:
        * storage/SQLTransactionSync.h:
        * storage/Storage.h:
        * storage/chromium/DatabaseObserver.h:
        * svg/SVGAnimatedTemplate.h:
        * svg/SVGDocumentExtensions.h:
        * svg/SVGGlyphElement.h:
        * svg/SVGHKernElement.h:
        * svg/SVGNumberList.h:
        * svg/SVGPointList.h:
        * svg/SVGPreserveAspectRatio.h:
        * svg/SVGStylable.h:
        * svg/SVGTests.h:
        * svg/SVGTransformList.h:
        * svg/SVGTransformable.h:
        * svg/SVGVKernElement.h:
        * websockets/ThreadableWebSocketChannel.h:
        * websockets/ThreadableWebSocketChannelClientWrapper.h:
        * websockets/WebSocket.h:
        * websockets/WebSocketChannel.h:
        * websockets/WebSocketHandshakeResponse.h:
        * wml/WMLErrorHandling.h:
        * wml/WMLPageState.h:
        * wml/WMLVariables.h:
        * workers/DefaultSharedWorkerRepository.h:
        * workers/SharedWorkerRepository.h:
        * workers/Worker.h:
        * workers/WorkerContextProxy.h:
        * workers/WorkerLoaderProxy.h:
        * workers/WorkerLocation.h:
        * workers/WorkerMessagingProxy.h:
        * workers/WorkerReportingProxy.h:
        * workers/WorkerThread.h:
        * xml/DOMParser.h:
        * xml/XMLHttpRequestUpload.h:
        * xml/XPathEvaluator.h:
        * xml/XPathExpression.h:
        * xml/XPathNSResolver.h:
        * xml/XPathResult.h:
        * xml/XPathUtil.h:

2010-08-09  Nat Duca  <nduca@chromium.org>

        Reviewed by Dimitri Glazkov.

        [chromium] Blue line visible at the right hand side of the window with accelerated compositor
        https://bugs.webkit.org/show_bug.cgi?id=43748

        Correct the ortho projection matrix for the root layer, which was
        too large by 0.5px in both width and height. For even view sizes,
        this would cause the viewport to appear 1 pixel too small.

        Fixing this requires removal of several 0.5 correction factors
        that were previously added to compensate for the too-large viewport.

        Finally, compute the translation for the root layer quad using
        floating point rather than integer arithmetic. This avoids us losing
        a key half-pixel of translation when the width of the window is odd.

        To test, size window to even/odd dimensions. No blue line should be visible.

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::drawLayers):

2010-08-09  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Justin Garcia.

        fontColorChangesComputedStyle, fontSizeChangesComputedStyle, and fontFaceChangesComputedStyle should be removed
        https://bugs.webkit.org/show_bug.cgi?id=43465

        Removed fontColorChangesComputedStyle, fontSizeChangesComputedStyle, and fontFaceChangesComputedStyle
        because StyleChange's applyFontColor, applyFontFace, and applyFontSize all return false
        if there was no difference between the new font color, font size, font face and that of the computed style.

        Also added a work-around for the bug 28282 in getPropertiesNotInComputedStyle with a test so that
        the above change will not add a redundant font or span element.

        Test: editing/style/fore-color-by-name.html

        * editing/ApplyStyleCommand.cpp:
        (WebCore::getRGBAFontColor): Added.
        (WebCore::StyleChange::extractTextStyles): Calls getRGBAFontColor.
        (WebCore::getPropertiesNotInComputedStyle): Removes color property manually by checking the RGBA values.
        (WebCore::ApplyStyleCommand::addInlineStyleIfNeeded): See above.

2010-08-09  Kenneth Russell  <kbr@google.com>

        Reviewed by David Levin.

        Fix compilation of VideoLayerChromium on Mac OS X with compositor
        https://bugs.webkit.org/show_bug.cgi?id=43757

        No new tests; build fix only (associated functionality not implemented yet).

        * platform/graphics/chromium/VideoLayerChromium.cpp:
        (WebCore::VideoLayerChromium::VideoLayerChromium):
        (WebCore::VideoLayerChromium::updateTextureContents):
        (WebCore::VideoLayerChromium::createTextureRect):
        (WebCore::VideoLayerChromium::updateTextureRect):
        * platform/graphics/chromium/VideoLayerChromium.h:

2010-08-09  Ariya Hidayat  <ariya@sencha.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Need to implement GraphicsContextQt::clipConvexPolygon()
        https://bugs.webkit.org/show_bug.cgi?id=41310

        Based on the prototype code by Simon Hausmann.

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::clipConvexPolygon):
        * rendering/RenderObject.h:

2010-08-09  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by David Kilzer.

        AX: Placeholder value for text fields not exposed like it should be
        https://bugs.webkit.org/show_bug.cgi?id=43598

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::placeholderValue):
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::title):
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityAttributeNames]):
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):

2010-08-09  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Justin Garcia.

        Undo fails in RemoveCSSPropertyCommand when the corresponding style attribute is removed
        https://bugs.webkit.org/show_bug.cgi?id=43639

        The bug was caused when RemoveCSSPropertyCommand is called with CSSMutableStyleDeclaration of some styled element,
        and the style attribute of the element is removed subsequently. When the attribute removal is undone, new instance of
        CSSMutableStyleDeclaration is created and RemoveCSSPropertyCommand's m_style became detached from the element.

        Modified RemoveCSSPropertyCommand to store the styled element directly instead of its CSSMutableStyleDeclaration.

        Test: editing/undo/remove-css-property-and-remove-style.html

        * WebCore.order:
        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::removeCSSStyle): Calls removeCSSProperty.
        (WebCore::ApplyStyleCommand::extractTextDecorationStyle): Calls removeCSSProperty.
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::removeCSSProperty): Takes StyledElement instead of CSSMutableStyleDeclaration.
        * editing/CompositeEditCommand.h:
        * editing/RemoveCSSPropertyCommand.cpp:
        (WebCore::RemoveCSSPropertyCommand::RemoveCSSPropertyCommand): Takes StyledElement instead of CSSMutableStyleDeclaration.
        (WebCore::RemoveCSSPropertyCommand::doApply): See above.
        (WebCore::RemoveCSSPropertyCommand::doUnapply): See above.
        * editing/RemoveCSSPropertyCommand.h:
        (WebCore::RemoveCSSPropertyCommand::create): See above.

2010-08-09  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Tony Chang.

        Use getIdentifierValue to obtain direction and unicode-bidi properties in ApplyStyleCommand
        https://bugs.webkit.org/show_bug.cgi?id=43699

        Deployed getIdentifierValue in various parts of ApplyStyleCommand where
        direction and unicode-bidi properties were obtained manually.

        No new tests since this is a cleanup.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::getIdentifierValue): Takes CSSStyleDeclaration instead of CSSMutableStyleDeclaration.
        (WebCore::ApplyStyleCommand::splitAncestorsWithUnicodeBidi): Calls getIdentifierValue.
        (WebCore::ApplyStyleCommand::removeEmbeddingUpToEnclosingBlock): Calls getIdentifierValue.
        (WebCore::ApplyStyleCommand::applyInlineStyle): Calls getIdentifierValue.
        * editing/ApplyStyleCommand.h:

2010-08-09  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Remove trailing whitespace in HTMLViewSourceDocument.cpp
        https://bugs.webkit.org/show_bug.cgi?id=43741

        No behavior change.  The whitespace was distracting me while porting
        this class to the new parser.

        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::createContainingTable):
        (WebCore::HTMLViewSourceDocument::addViewSourceToken):
        (WebCore::HTMLViewSourceDocument::addLine):
        (WebCore::HTMLViewSourceDocument::addText):
        (WebCore::HTMLViewSourceDocument::addLink):

2010-08-09  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Use the HTML5 TreeBuilder for Fragment Parsing
        https://bugs.webkit.org/show_bug.cgi?id=43586

        The bulk of this change is just a transcription of the HTML5 spec:
        http://www.whatwg.org/specs/web-apps/current-work/multipage/the-end.html#fragment-case

        DocumentParser() now sets the right tokenizer state before handling
        fragments.  Since default code path uses the HTML5 tokenizer with the
        legacy tree builder, this fixes 2 tokenizer-state tests for the html5lib.
        This fixes 2 more tree-builder tests when the html5 treebuilder is enabled too.

        * dom/DocumentFragment.cpp:
        (WebCore::DocumentFragment::parseHTML):
         - HTML5 implementation of fragment parsing requires the context element (parent)
           pointer.  The legacy implementation handles all parsing branches which require
           the context element outside of the parser itself, which likely produces "wrong"
           results.  We'll remove those branches when we turn on the HMTL5 fragment parser.
        (WebCore::DocumentFragment::parseXML):
         - Rename "parent" to "contextElement" to match the HTML path (and the HTML5 spec).
        * dom/DocumentFragment.h:
        * dom/Element.cpp:
        (WebCore::Element::createContextualFragment):
         - Pass the contextElement (this).
        * html/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::setForm):
         - Needed by for the fragment case.
        (WebCore::HTMLConstructionSite::insertHTMLBodyStartTagInBody):
         - I'm not sure this method should exist, it only has one caller.
           but for now, I've moved the fragment case FIXME out to the
           one caller and implemented it.
        * html/HTMLConstructionSite.h:
        * html/HTMLDocumentParser.cpp:
        (WebCore::HTMLNames::tokenizerStateForContextElement):
         - Part of the fragment case handling for the HTML5 parser.
        (WebCore::HTMLDocumentParser::HTMLDocumentParser):
         - Set the Tokenizer state based on the contextElement.
        (WebCore::HTMLDocumentParser::parseDocumentFragment):
         - Take a contextElement argument.
        * html/HTMLDocumentParser.h:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::setInnerHTML):
         - Added a FIXME before the branches the old parser used to avoid ever needing
           to pass a context element when parsing HTML fragments.
        (WebCore::HTMLElement::insertAdjacentHTML):
         - Pass the context element.
        * html/HTMLTokenizer.h:
        * html/HTMLTreeBuilder.cpp:
         - I added a new helper class FragmentParsingContext to simplify the two
           HTMLTreeBuilder constructors and hide the existence of m_dummyDocumentForFragmentParse.
         - I also removed m_isParsingFragment and replaced it with an isParsingFragment() function.
        (WebCore::HTMLTreeBuilder::HTMLTreeBuilder):
        (WebCore::HTMLTreeBuilder::FragmentParsingContext::FragmentParsingContext):
        (WebCore::HTMLTreeBuilder::FragmentParsingContext::document):
        (WebCore::HTMLTreeBuilder::FragmentParsingContext::~FragmentParsingContext):
        (WebCore::HTMLTreeBuilder::passTokenToLegacyParser):
        (WebCore::HTMLTreeBuilder::processStartTagForInBody):
         - I had to implement two notImplemented() states in order to get most of the
           layout tests to pass when using the HTML5 parser fragment case.
        (WebCore::HTMLTreeBuilder::processColgroupEndTagForInColumnGroup):
        (WebCore::HTMLTreeBuilder::processStartTagForInTable):
        (WebCore::HTMLTreeBuilder::processStartTag):
        (WebCore::HTMLTreeBuilder::resetInsertionModeAppropriately):
        (WebCore::HTMLTreeBuilder::processEndTagForInTableBody):
        (WebCore::HTMLTreeBuilder::processEndTagForInRow):
        (WebCore::HTMLTreeBuilder::processEndTagForInCell):
        (WebCore::HTMLTreeBuilder::processCaptionEndTagForInCaption):
        (WebCore::HTMLTreeBuilder::processTrEndTagForInRow):
        (WebCore::HTMLTreeBuilder::processTableEndTagForInTable):
        (WebCore::HTMLTreeBuilder::processEndTag):
        (WebCore::HTMLTreeBuilder::processCharacterBuffer):
        (WebCore::HTMLTreeBuilder::processEndOfFile):
        (WebCore::HTMLTreeBuilder::finished):
         - The HTML5 parsing algorithm fragment case uses a dummy document to handle all the parsing
           and then moves all the children from the dummy document over into a DocumentFragment
           when the parse is done.  We could avoid this adopt step by making the TreeBuilder a bit
           more complicated, but I'm not sure that's necessary (yet).
        * html/HTMLTreeBuilder.h:
        (WebCore::HTMLTreeBuilder::isParsingFragment):
        (WebCore::HTMLTreeBuilder::FragmentParsingContext::fragment):
        (WebCore::HTMLTreeBuilder::FragmentParsingContext::contextElement):
        (WebCore::HTMLTreeBuilder::FragmentParsingContext::scriptingPermission):
        * xml/XSLTProcessor.cpp:
        (WebCore::createFragmentFromSource):

2010-08-09  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Adam Barth.

        Auto-generate most HTML5 DB bindings.
        https://bugs.webkit.org/show_bug.cgi?id=43382

        * Android.jscbindings.mk: Remove {JS|V8}Database{Sync}Custom.cpp
        and the custom implementations of openDatabase{Sync}().
        * Android.v8bindings.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSDOMWindowCustom.cpp:
        * bindings/js/JSDatabaseCustom.cpp: Removed.
        * bindings/js/JSDatabaseSyncCustom.cpp: Removed.
        * bindings/js/JSWorkerContextCustom.cpp:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        * bindings/v8/custom/V8DatabaseCustom.cpp: Removed.
        * bindings/v8/custom/V8DatabaseSyncCustom.cpp: Removed.
        * bindings/v8/custom/V8WorkerContextCustom.cpp:

        * bindings/scripts/CodeGeneratorGObject.pm: Change the code generators
        to check that each value can be converted to the respective
        argument type.
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/scripts/test/JS/JSTestCallback.cpp:
        (WebCore::JSTestCallback::~JSTestCallback):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionVoidMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionIntMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionObjMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionMethodThatRequiresAllArgs):
        (WebCore::jsTestObjPrototypeFunctionMethodThatRequiresAllArgsAndThrows):
        (WebCore::jsTestObjPrototypeFunctionSerializedValue):
        (WebCore::jsTestObjPrototypeFunctionIdbKey):
        (WebCore::jsTestObjPrototypeFunctionCustomArgsAndException):
        (WebCore::jsTestObjPrototypeFunctionWithDynamicFrameAndArg):
        (WebCore::jsTestObjPrototypeFunctionWithDynamicFrameAndOptionalArg):
        (WebCore::jsTestObjPrototypeFunctionWithDynamicFrameAndUserGesture):
        (WebCore::jsTestObjPrototypeFunctionWithDynamicFrameAndUserGestureASAD):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndOptionalArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndTwoOptionalArgs):
        (WebCore::jsTestObjPrototypeFunctionMethodWithCallbackArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonCallbackArgAndCallbackArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithCallbackAndOptionalArg):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod1):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod2):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod3):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod4):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjInternal::voidMethodWithArgsCallback):
        (WebCore::TestObjInternal::intMethodWithArgsCallback):
        (WebCore::TestObjInternal::objMethodWithArgsCallback):
        (WebCore::TestObjInternal::methodThatRequiresAllArgsCallback):
        (WebCore::TestObjInternal::methodThatRequiresAllArgsAndThrowsCallback):
        (WebCore::TestObjInternal::idbKeyCallback):
        (WebCore::TestObjInternal::customArgsAndExceptionCallback):
        (WebCore::TestObjInternal::withDynamicFrameAndArgCallback):
        (WebCore::TestObjInternal::withDynamicFrameAndOptionalArgCallback):
        (WebCore::TestObjInternal::withDynamicFrameAndUserGestureCallback):
        (WebCore::TestObjInternal::withDynamicFrameAndUserGestureASADCallback):
        (WebCore::TestObjInternal::methodWithOptionalArgCallback):
        (WebCore::TestObjInternal::methodWithNonOptionalArgAndOptionalArgCallback):
        (WebCore::TestObjInternal::methodWithNonOptionalArgAndTwoOptionalArgsCallback):
        (WebCore::TestObjInternal::methodWithNonCallbackArgAndCallbackArgCallback):
        (WebCore::TestObjInternal::methodWithCallbackAndOptionalArgCallback):
        (WebCore::TestObjInternal::overloadedMethod1Callback):
        (WebCore::TestObjInternal::overloadedMethod2Callback):
        (WebCore::TestObjInternal::overloadedMethod3Callback):
        (WebCore::TestObjInternal::overloadedMethod4Callback):
        (WebCore::):
        (WebCore::ConfigureV8TestObjTemplate):
        * bindings/v8/custom/V8BindingMacros.h:

        * bindings/v8/V8Binding.h: Minor changes required to support the
        auto-generated bindings.
        (WebCore::V8Parameter::V8Parameter):
        * bindings/v8/custom/V8SQLTransactionCustom.cpp:
        (WebCore::V8SQLTransaction::executeSqlCallback):
        * bindings/v8/custom/V8SQLTransactionSyncCustom.cpp:
        (WebCore::V8SQLTransactionSync::executeSqlCallback):
        * page/DOMWindow.idl:
        * storage/Database.cpp:
        (WebCore::Database::transaction):
        (WebCore::Database::readTransaction):
        (WebCore::Database::runTransaction):
        * storage/Database.h:
        * storage/Database.idl:
        * storage/DatabaseSync.cpp:
        (WebCore::DatabaseSync::transaction):
        (WebCore::DatabaseSync::readTransaction):
        (WebCore::DatabaseSync::runTransaction):
        * storage/DatabaseSync.h:
        * storage/DatabaseSync.idl:
        * workers/WorkerContext.idl:

2010-08-09  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Move HTMLViewSourceDocument from legacyParserAddChild to parserAddChild
        https://bugs.webkit.org/show_bug.cgi?id=43740

        This removes the DTD checks, which aren't needed for view source
        documents.

        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::createContainingTable):
        (WebCore::HTMLViewSourceDocument::addSpanWithClassName):
        (WebCore::HTMLViewSourceDocument::addLine):
        (WebCore::HTMLViewSourceDocument::addText):
        (WebCore::HTMLViewSourceDocument::addLink):

2010-08-09  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        Fixed an uninitialized member variable in the Color(CGColorRef) constructor.

        * platform/graphics/cg/ColorCG.cpp:
        (WebCore::Color::Color): Initialize m_valid to true if the color is not 0.

2010-08-09  James Robinson  <jamesr@chromium.org>

        Chromium compile fix, unreviewed.

        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::~PlatformContextSkia):
        (WebCore::PlatformContextSkia::setGraphicsContext3D):

2010-08-09  James Robinson  <jamesr@chromium.org>

        Reviewed by Dimitri Glazkov.

        [chromium] Add a PrepareTextureCallback to the chromium canvas layer compositor to upload mixed-mode results before compositing
        https://bugs.webkit.org/show_bug.cgi?id=43656

        When compositing an accelerated canvas that is using both hardware and software drawing,
        we need a callback before compositing the layer to make sure that we upload any software
        drawn results to the texture.  This will go away as soon as implement all draw calls
        in hardware.

        To test, run any canvas demo that runs in mixed mode and verifies that the software results
        always show up.

        * platform/graphics/chromium/CanvasLayerChromium.cpp:
        (WebCore::CanvasLayerChromium::updateTextureContents):
        * platform/graphics/chromium/CanvasLayerChromium.h:
        (WebCore::CanvasLayerChromium::setPrepareTextureCallback):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PrepareTextureCallbackImpl::create):
        (WebCore::PrepareTextureCallbackImpl::willPrepareTexture):
        (WebCore::PrepareTextureCallbackImpl::PrepareTextureCallbackImpl):
        (WebCore::PlatformContextSkia::setGraphicsContext3D):

2010-08-09  Zhenyao Mo  <zmo@google.com>

        Reviewed by David Levin.

        sizeInBytes should be removed
        https://bugs.webkit.org/show_bug.cgi?id=43693

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::sizeInBytes): Don't generate GL errors.  Generate them in the callers instead.
        (WebCore::WebGLRenderingContext::vertexAttribPointer): Generate GL error if sizeInBytes fails.
        * html/canvas/WebGLRenderingContext.h: Make sizeInBytes private helper.
        * html/canvas/WebGLRenderingContext.idl: Remove sizeInBytes.

2010-08-09  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=43702
        <video> element does not resize correctly

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::setReadyState): RenderVideo::videoSizeChanged is gone, just use
        updateFromElement instead.
        (WebCore::HTMLMediaElement::mediaPlayerDurationChanged): Ditto.
        (WebCore::HTMLMediaElement::mediaPlayerSizeChanged): Ditto.

        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::parseMappedAttribute): Clear the image loader and cached image when 
        the 'poster' attribute is changed and we aren't displaying a poster.

        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::RenderVideo):
        (WebCore::RenderVideo::intrinsicSizeChanged): videoSizeChanged -> updateIntrinsicSize.
        (WebCore::RenderVideo::updateIntrinsicSize): Renamed from videoSizeChanged, calculate initial 
        intrinsic size with calculateIntrinsicSize
        (WebCore::RenderVideo::calculateIntrinsicSize): New, calculate size according to current spec.
        (WebCore::RenderVideo::imageChanged): Reset intrinsic size to default when poster fails to load.
        (WebCore::RenderVideo::updatePlayer): Call updateIntrinsicSize.
        * rendering/RenderVideo.h: Renamed videoSizeChanged to updateIntrinsicSize and make private.

2010-08-09  Marcus Bulach  <bulach@chromium.org>

        Reviewed by Jeremy Orlow.

        Fixes custom JS bindings for IDBCursor after r64828.
        https://bugs.webkit.org/show_bug.cgi?id=43729

        Build fix, no tests.

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSIDBAnyCustom.cpp:
        (WebCore::toJS):
        * storage/IDBObjectStore.h:

2010-08-09  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r64993.
        http://trac.webkit.org/changeset/64993
        https://bugs.webkit.org/show_bug.cgi?id=43734

        broke chromium compile (Requested by jamesr on #webkit).

        * platform/graphics/chromium/CanvasLayerChromium.cpp:
        (WebCore::CanvasLayerChromium::updateTextureContents):
        * platform/graphics/chromium/CanvasLayerChromium.h:
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::~PlatformContextSkia):
        (WebCore::PlatformContextSkia::setGraphicsContext3D):

2010-08-09  James Robinson  <jamesr@chromium.org>

        Reviewed by Dimitri Glazkov.

        [chromium] Add a PrepareTextureCallback to the chromium canvas layer compositor to upload mixed-mode results before compositing
        https://bugs.webkit.org/show_bug.cgi?id=43656

        When compositing an accelerated canvas that is using both hardware and software drawing,
        we need a callback before compositing the layer to make sure that we upload any software
        drawn results to the texture.  This will go away as soon as implement all draw calls
        in hardware.

        To test, run any canvas demo that runs in mixed mode and verifies that the software results
        always show up.

        * platform/graphics/chromium/CanvasLayerChromium.cpp:
        (WebCore::CanvasLayerChromium::updateTextureContents):
        * platform/graphics/chromium/CanvasLayerChromium.h:
        (WebCore::CanvasLayerChromium::setPrepareTextureCallback):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PrepareTextureCallbackImpl::create):
        (WebCore::PrepareTextureCallbackImpl::willPrepareTexture):
        (WebCore::PrepareTextureCallbackImpl::PrepareTextureCallbackImpl):
        (WebCore::PlatformContextSkia::setGraphicsContext3D):

2010-08-09  Dominic Cooney  <dominicc@google.com>

        Reviewed by Adam Barth.

        Moves window.open logic into the generic bindings.

        This patch moves window.open logic from V8 into the generic
        bindings so it could be shared with JSC. JSC sharing is not in
        this patch. This patch is of the same flavor/intent as 33201.

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

        * bindings/generic/BindingDOMWindow.h:
        (WebCore::::createWindow):
        (WebCore::::open):
        (WebCore::::completeURL):
        * bindings/generic/BindingSecurity.h:
        (WebCore::::allowPopUp):
        (WebCore::::shouldAllowNavigation):
        * bindings/v8/V8Binding.h:
        (WebCore::V8Binding::emptyScriptValue):
        * bindings/v8/V8Utilities.cpp:
        (WebCore::transferHiddenDependency):
        (WebCore::processingUserGesture):
        (WebCore::shouldAllowNavigation):
        (WebCore::completeURL):
        * bindings/v8/custom/V8ArrayBufferCustom.cpp:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::showModalDialogCallback):
        (WebCore::V8DOMWindow::openCallback):
        * bindings/v8/specialization/V8BindingState.cpp:
        (WebCore::::getActiveFrame):
        (WebCore::::getFirstFrame):
        (WebCore::::processingUserGesture):
        * bindings/v8/specialization/V8BindingState.h:
        (WebCore::):

2010-08-09  Marcus Bulach  <bulach@chromium.org>

        Reviewed by Darin Adler.

        Fixes xcode project issues after r64828:
        https://bugs.webkit.org/show_bug.cgi?id=43638

        Build fix, no tests (sort-Xcode-project-file should not throw any warnings).

        * WebCore.xcodeproj/project.pbxproj: fixed IDBCursor and related IndexedDB files, and re-ran sort-Xcode-project-file.

2010-08-09  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Remove callId argument from all backend agents' methods.
        https://bugs.webkit.org/show_bug.cgi?id=43723

        * inspector/CodeGeneratorInspector.pm:
        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::getApplicationCaches):
        * inspector/InspectorApplicationCacheAgent.h:
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::getProfilerLogLines):
        (WebCore::InspectorBackend::clearConsoleMessages):
        (WebCore::InspectorBackend::getDatabaseTableNames):
        * inspector/InspectorBackend.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::getCookies):
        (WebCore::InspectorController::getDOMStorageEntries):
        (WebCore::InspectorController::setDOMStorageItem):
        (WebCore::InspectorController::removeDOMStorageItem):
        (WebCore::InspectorController::getProfileHeaders):
        (WebCore::InspectorController::getProfile):
        (WebCore::InspectorController::getResourceContent):
        * inspector/InspectorController.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::getChildNodes):
        (WebCore::InspectorDOMAgent::setAttribute):
        (WebCore::InspectorDOMAgent::removeAttribute):
        (WebCore::InspectorDOMAgent::removeNode):
        (WebCore::InspectorDOMAgent::changeTagName):
        (WebCore::InspectorDOMAgent::getOuterHTML):
        (WebCore::InspectorDOMAgent::setOuterHTML):
        (WebCore::InspectorDOMAgent::setTextNodeValue):
        (WebCore::InspectorDOMAgent::getEventListenersForNode):
        (WebCore::InspectorDOMAgent::getStyles):
        (WebCore::InspectorDOMAgent::getAllStyles):
        (WebCore::InspectorDOMAgent::getStyleSheet):
        (WebCore::InspectorDOMAgent::getRuleRanges):
        (WebCore::InspectorDOMAgent::getInlineStyle):
        (WebCore::InspectorDOMAgent::getComputedStyle):
        (WebCore::InspectorDOMAgent::applyStyleText):
        (WebCore::InspectorDOMAgent::setStyleText):
        (WebCore::InspectorDOMAgent::setStyleProperty):
        (WebCore::InspectorDOMAgent::toggleStyleEnabled):
        (WebCore::InspectorDOMAgent::setRuleSelector):
        (WebCore::InspectorDOMAgent::addRule):
        (WebCore::InspectorDOMAgent::pushNodeByPathToFrontend):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::setBreakpoint):
        (WebCore::InspectorDebuggerAgent::editScriptSource):
        (WebCore::InspectorDebuggerAgent::getScriptSource):
        * inspector/InspectorDebuggerAgent.h:

2010-08-09  François Sausset  <sausset@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        Take into account style color to draw MathML mroot radical.
        https://bugs.webkit.org/show_bug.cgi?id=43628

        Test: mathml/presentation/roots.xhtml

        * mathml/RenderMathMLRoot.cpp:
        (WebCore::RenderMathMLRoot::paint):

2010-08-09  François Sausset  <sausset@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        Implement MathML deprecated style attributes
        https://bugs.webkit.org/show_bug.cgi?id=43503

        Test: mathml/presentation/attributes.xhtml

        * mathml/MathMLElement.cpp:
        (WebCore::MathMLElement::mapToEntry):
        (WebCore::MathMLElement::parseMappedAttribute):
        * mathml/mathattrs.in:

2010-08-09  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: remove unnecessary did* methods from RemoteInspectorFrontend.
        https://bugs.webkit.org/show_bug.cgi?id=43721

        * inspector/CodeGeneratorInspector.pm:

2010-08-09  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Antonio Gomes.

        Canvas: Fast-path for setting the already set color with setStrokeColor() and setFillColor()
        https://bugs.webkit.org/show_bug.cgi?id=43718

        Avoid creating CanvasStyle objects when setting the same fill or stroke color using
        the WebKit-specific setters of CanvasRenderingContext2D.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setStrokeColor):
        (WebCore::CanvasRenderingContext2D::setFillColor):
        * html/canvas/CanvasStyle.cpp:
        (WebCore::CanvasStyle::isEquivalentColor):
        * html/canvas/CanvasStyle.h: Added CanvasStyle::isEquivalentColor() overloads
        for RGBA and CMYKA channel values.

2010-08-09  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: restore original last panel restore logic.

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

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

2010-08-09  Dumitru Daniliuc  <dumi@chromium.org>

        Unreviewed, fixing the builds after r64967.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:

2010-05-27  MORITA Hajime  <morrita@google.com>

        Reviewed by Ojan Vafai.

        <http://webkit.org/b/36359>
        Double clicking page's last editable inline element causes assertion failure.
        <http://webkit.org/b/36360>
        Double clicking page's first editable inline element cannot select a word. 

        nextBoundary() and previousBoundary() assumed that editable
        boundaries are on block-level elements, But it can appear on
        inline-level elements. So we start boundary look-up from the given
        node, instead of the containingBlock of the given node.
        Also, added TextIteratorEndsAtEditingBoundary to
        BackwardsCharacterIterator, otherwise, the VisiblePosition
        returned by BackwardsCharacterIterator might cross an editing
        boundary.

        Test: editing/selection/doubleclick-inline-first-last-contenteditable.html        

        * dom/Position.cpp:
        (WebCore::Position::parentEditingBoundary): Added.
        * dom/Position.h:
        * editing/TextIterator.cpp:
        (WebCore::TextIterator::TextIterator):
        (WebCore::SimplifiedBackwardsTextIterator::SimplifiedBackwardsTextIterator):
        (WebCore::SimplifiedBackwardsTextIterator::advance):
        (WebCore::SimplifiedBackwardsTextIterator::crossesEditingBoundary): Added.
        (WebCore::SimplifiedBackwardsTextIterator::setCurrentNode): Added.
        (WebCore::SimplifiedBackwardsTextIterator::clearCurrentNode): Added.
        (WebCore::BackwardsCharacterIterator::BackwardsCharacterIterator):
        * editing/TextIterator.h:
        (WebCore::):
        * editing/visible_units.cpp:
        (WebCore::previousBoundary):
        (WebCore::nextBoundary):

2010-08-09  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        WebInspector: Current implementation of showPanel is a bit complicated.
        It is using internal enum for all the panels and this is the problem because
        we should change a lot of code for a new panel.
        https://bugs.webkit.org/show_bug.cgi?id=43711

        * WebCore.exp.in:
        * inspector/Inspector.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::storeLastActivePanel):
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::showPanel):
        (WebCore::InspectorController::disconnectFrontend):
        * inspector/InspectorController.h:
        * inspector/InspectorFrontend.cpp:
        * inspector/InspectorFrontend.h:
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype.selectOnMouseDown):
        * inspector/front-end/ExtensionServer.js:
        (WebInspector.ExtensionServer.prototype._onRevealAndSelectResource):
        * inspector/front-end/inspector.js:
        (WebInspector.documentClick.followLink):
        (WebInspector.documentClick):
        (WebInspector.toggleSearchingForNode):
        (WebInspector.showPanel):
        (WebInspector.selectDatabase):
        (WebInspector.selectDOMStorage):
        (WebInspector.showProfileForURL):

2010-08-09  Ariya Hidayat  <ariya@sencha.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] GraphicsContext::clipOut(IntRect) ignores the transformation matrix.
        https://bugs.webkit.org/show_bug.cgi?id=43705

        Just like clipOut(Path), which is taken care in r60796 already,
        clipOut(IntRect) must transform the window bounding box properly.

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

2010-08-09  François Sausset  <sausset@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        Implement mfenced MathML element
        Update stretchy operator code to take into account new brackets and to tune layout parameters
        https://bugs.webkit.org/show_bug.cgi?id=42472

        Test: mathml/presentation/fenced.xhtml

        * WebCore.xcodeproj/project.pbxproj:
        * mathml/MathMLInlineContainerElement.cpp:
        (WebCore::MathMLInlineContainerElement::MathMLInlineContainerElement):
        (WebCore::MathMLInlineContainerElement::createRenderer):
        * mathml/RenderMathMLFenced.cpp: Added.
        (WebCore::RenderMathMLFenced::RenderMathMLFenced):
        (WebCore::RenderMathMLFenced::updateFromElement):
        (WebCore::RenderMathMLFenced::makeOperatorStyle):
        (WebCore::RenderMathMLFenced::makeFences):
        (WebCore::RenderMathMLFenced::addChild):
        (WebCore::RenderMathMLFenced::layout):
        * mathml/RenderMathMLFenced.h: Added.
        * mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::RenderMathMLOperator):
        (WebCore::RenderMathMLOperator::stretchToHeight):
        (WebCore::):
        (WebCore::RenderMathMLOperator::updateFromElement):
        (WebCore::RenderMathMLOperator::createStackableStyle):
        (WebCore::RenderMathMLOperator::createGlyph):

2010-08-08  ryuan choi  <ryuan.choi@samsung.com>

        Reviewed by Darin Adler.

        REGRESSION(64898,64949) build break because of wrong filename
        https://bugs.webkit.org/show_bug.cgi?id=43701

        add SVGPathStringSource.cpp and modify SVGPathSourceString.cpp to
        SVGPathStringSource.cpp

        simple fixing build break, so No new tests.

        * CMakeLists.txt:

2010-08-08  Ariya Hidayat  <ariya@sencha.com>

        Reviewed by Antonio Gomes.

        Inconsistent Qt version checks
        https://bugs.webkit.org/show_bug.cgi?id=43695

        Use QT_VERSION_CHECK macro instead of encoded hex.

        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::getImageData):
        * platform/network/qt/NetworkStateNotifierPrivate.h:
        * platform/network/qt/NetworkStateNotifierQt.cpp:
        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::QNetworkReplyHandler):
        (WebCore::QNetworkReplyHandler::start):
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::paintMediaSliderTrack):

2010-08-08  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Antonio Gomes.

        Web Inspector: Fix warning in WebCore/inspector/InspectorDebuggerAgent.cpp
        https://bugs.webkit.org/show_bug.cgi?id=43698

        * inspector/InspectorDebuggerAgent.cpp:
        (WebCore::InspectorDebuggerAgent::editScriptSource): Add suggested parentheses.

2010-08-05  MORITA Hajime  <morrita@google.com>

        Reviewed by Tony Chang.

        Pasting should fire textInput event.
        https://bugs.webkit.org/show_bug.cgi?id=42958

        - Extended TextEvents to hold paste-specific parameters
        - Did fire TextEvents at where we originally did immediate pastes.
        - Factored out TextEvent handling from EventHandler::defaultTextInputEventHandler()
          to Editor::handleTextEvent() because it's solely done by the editor.
        - move actual pasting logic to Editor::handleTextEvent() 

        Test: editing/pasteboard/paste-text-events.html

        * WebCore.exp.in:
        * dom/TextEvent.cpp:
        (WebCore::TextEvent::create):
        (WebCore::TextEvent::createForPlainTextPaste):
        (WebCore::TextEvent::createForFragmentPaste):
        (WebCore::TextEvent::TextEvent):
        * dom/TextEvent.h:
        (WebCore::TextEvent::isPaste):
        (WebCore::TextEvent::shouldSmartReplace):
        (WebCore::TextEvent::shouldMatchStyle):
        (WebCore::TextEvent::pastingFragment):
        * editing/Editor.cpp:
        (WebCore::Editor::handleTextEvent):
        (WebCore::Editor::pasteAsPlainText):
        (WebCore::Editor::pasteAsFragment):
        (WebCore::Editor::pasteAsPlainTextWithPasteboard):
        (WebCore::Editor::pasteWithPasteboard):
        (WebCore::Editor::dispatchCPPEvent):
        (WebCore::Editor::findEventTargetFromSelection):
        * editing/Editor.h:
        * page/EventHandler.cpp:
        (WebCore::EventHandler::defaultTextInputEventHandler):

2010-08-08  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix, add member needed to compile Mac-specific font code.

        * platform/graphics/wx/FontPlatformData.h:
        (WebCore::FontPlatformData::ctFont):

2010-08-08  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Eric Seidel.

        [Qt] Fix warnings in WebCore/platform/WindowsKeyboardCodes.h
        https://bugs.webkit.org/show_bug.cgi?id=43360

        * platform/WindowsKeyboardCodes.h: Undef macros which are also defined in MinGW/include/winuser.h to aviod gcc redefinition warning

2010-08-08  James Robinson  <jamesr@chromium.org>

        Reviewed by Adam Barth.

        Set the shouldLazyAttach flag to true in the tree builder's adoption agency algorithm
        https://bugs.webkit.org/show_bug.cgi?id=43610

        Sets the shouldLazyAttach flag to true for appendChild() calls inside the HTML tree
        builder's adoption agency flag.  This is a speedup assuming that nodes subjected
        to the adoption agency are likely to be frequently reparented, and thus it is better
        to delay creating the render tree until later (when hopefully the DOM is finalized).

        On my mac pro this speeds up fast/parser/residual-style-hang.html by 2.6X.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::callTheAdoptionAgency):

2010-08-08  Nikita Vasilyev  <me@elv1s.ru>

        Reviewed by Pavel Feldman.

        Web Inspector: speed-up Element.prototype.removeChildren
        https://bugs.webkit.org/show_bug.cgi?id=43687

        * inspector/front-end/utilities.js:
        (Element.prototype.removeChildren):

2010-08-08  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        WebInspector: remove hand written InspectorFrontend from almost all places.
        https://bugs.webkit.org/show_bug.cgi?id=43630

        * inspector/ConsoleMessage.cpp:
        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::pushNodePathToFrontend):
        * inspector/InjectedScriptHost.h:
        * inspector/Inspector.idl:
        * inspector/InspectorBackend.cpp:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::inspectedPageDestroyed):
        (WebCore::InspectorController::inspect):
        (WebCore::InspectorController::focusNode):
        (WebCore::InspectorController::windowVisible):
        (WebCore::InspectorController::addConsoleMessage):
        (WebCore::InspectorController::inspectedWindowScriptObjectCleared):
        (WebCore::InspectorController::setSearchingForNode):
        (WebCore::InspectorController::setMonitoringXHR):
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::show):
        (WebCore::InspectorController::showPanel):
        (WebCore::InspectorController::close):
        (WebCore::InspectorController::disconnectFrontend):
        (WebCore::InspectorController::populateScriptObjects):
        (WebCore::InspectorController::didCommitLoad):
        (WebCore::InspectorController::enableResourceTracking):
        (WebCore::InspectorController::disableResourceTracking):
        (WebCore::InspectorController::startTimelineProfiler):
        (WebCore::InspectorController::stopTimelineProfiler):
        (WebCore::InspectorController::postWorkerNotificationToFrontend):
        (WebCore::InspectorController::didCreateWorker):
        (WebCore::InspectorController::didDestroyWorker):
        (WebCore::InspectorController::toggleRecordButton):
        (WebCore::InspectorController::enableProfiler):
        (WebCore::InspectorController::disableProfiler):
        (WebCore::InspectorController::enableDebuggerFromFrontend):
        (WebCore::InspectorController::enableDebugger):
        (WebCore::InspectorController::disableDebugger):
        (WebCore::InspectorController::evaluateForTestInFrontend):
        * inspector/InspectorFrontend.cpp:
        * inspector/InspectorFrontend.h:
        * inspector/InspectorFrontendClientLocal.cpp:
        * inspector/TimelineRecordFactory.cpp:

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

        Try to fix the Chromium Mac build after r64915.

        * platform/graphics/chromium/FontPlatformDataChromiumMac.mm:
        (WebCore::FontPlatformData::ctFont): Copied from mac/FontPlatformDataMac.mm.

2010-08-08  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Add missing String builder for SVGPathParser
        https://bugs.webkit.org/show_bug.cgi?id=43682

        Introduces SVGPathStringBuilder. SVGPathParser clients, like normalized and unaltered
        SVGPathSegLists or SVGPathByteStreams, can be parsed and transformed to a string.
        StringBuilder can create a string of individual strings, seperated by spaces now.
        Share more code in SVGPathParserFactory and use a common general concept to manage SVG path
        data parsing.

        Doesn't affect any tests.

        * Android.mk:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/text/StringBuilder.cpp:
        (WebCore::StringBuilder::toString): Added possibility to use a space between individual strings. 
        * platform/text/StringBuilder.h: Cleanup according to WebKit style.
        (WebCore::):
        (WebCore::StringBuilder::StringBuilder):
        (WebCore::StringBuilder::setNonNull):
        (WebCore::StringBuilder::isNull):
        * svg/SVGAllInOne.cpp:
        * svg/SVGPathBuilder.h:
        (WebCore::SVGPathBuilder::cleanup): Clear all references.
        * svg/SVGPathByteStreamBuilder.h:
        (WebCore::SVGPathByteStreamBuilder::cleanup): dito.
        * svg/SVGPathConsumer.h:
        * svg/SVGPathParser.cpp:
        (WebCore::SVGPathParser::cleanup): dito.
        * svg/SVGPathParser.h:
        * svg/SVGPathParserFactory.cpp: Cleanup of factory. More code get shared.
        (WebCore::globalSVGPathBuilder):
        (WebCore::globalSVGPathSegListBuilder):
        (WebCore::globalSVGPathByteStreamBuilder):
        (WebCore::globalSVGPathStringBuilder):
        (WebCore::globalSVGPathParser):
        (WebCore::SVGPathParserFactory::buildPathFromString):
        (WebCore::SVGPathParserFactory::buildPathFromByteStream):
        (WebCore::SVGPathParserFactory::buildSVGPathSegListFromString):
        (WebCore::SVGPathParserFactory::buildSVGPathSegListFromByteStream):
        (WebCore::SVGPathParserFactory::buildStringFromByteStream):
        (WebCore::SVGPathParserFactory::buildSVGPathByteStreamFromString):
        * svg/SVGPathParserFactory.h:
        * svg/SVGPathSegListBuilder.h:
        (WebCore::SVGPathSegListBuilder::cleanup):
        * svg/SVGPathStringBuilder.cpp: Added. Build string from parsed SVG data.
        (WebCore::SVGPathStringBuilder::SVGPathStringBuilder):
        (WebCore::SVGPathStringBuilder::moveTo):
        (WebCore::SVGPathStringBuilder::lineTo):
        (WebCore::SVGPathStringBuilder::lineToHorizontal):
        (WebCore::SVGPathStringBuilder::lineToVertical):
        (WebCore::SVGPathStringBuilder::curveToCubic):
        (WebCore::SVGPathStringBuilder::curveToCubicSmooth):
        (WebCore::SVGPathStringBuilder::curveToQuadratic):
        (WebCore::SVGPathStringBuilder::curveToQuadraticSmooth):
        (WebCore::SVGPathStringBuilder::arcTo):
        (WebCore::SVGPathStringBuilder::closePath):
        * svg/SVGPathStringBuilder.h: Added.
        (WebCore::SVGPathStringBuilder::cleanup):
        (WebCore::SVGPathStringBuilder::result):

2010-08-08  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        cross_fuzz WebCore::SelectionController::isFocusedAndActive ReadAV@NULL (9e865de49b1800ec790dcc35d8ebd069)
        https://bugs.webkit.org/show_bug.cgi?id=43040

        The pointer from Document to Frame can be null.  See http://webkit.org/coding/major-objects.html.

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

2010-08-08  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        frame()->selection() can't be null
        https://bugs.webkit.org/show_bug.cgi?id=43681

        SelectionController is a component of Frame.  If frame is non-null, it
        can't possibly be null.

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::setActive):

2010-08-08  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        SVGLength uses ASSERTs to validate user input
        https://bugs.webkit.org/show_bug.cgi?id=43680

        ASSERTs aren't in release builds, so we can't use them to validate user
        input!  We've seen a bunch of examples of this in SVG code.  It might
        be worth auditing all the code to remove this misguided pattern.

        Test: svg/dom/svg-length-units.html

        * svg/SVGLength.cpp:
        (WebCore::SVGLength::newValueSpecifiedUnits):
        (WebCore::SVGLength::convertToSpecifiedUnits):

2010-08-07  Adam Barth  <abarth@webkit.org>

        Reviewed by Sam Weinig.

        Empty strings can have more than one ref
        https://bugs.webkit.org/show_bug.cgi?id=43666

        These asserts are trying to say that we have a thread-safe copy of the
        string, but they're not accurate for empty strings because we use a
        special static empty string that magically has infinite refs.

        * storage/OriginUsageRecord.cpp:
        (WebCore::OriginUsageRecord::addDatabase):
        (WebCore::OriginUsageRecord::markDatabase):

2010-08-07  Gyuyoung Kim  <gyuyoung.kim@samsung.com>
        Reviewed by Eric Seidel.

        [WML] Add KURL parameter to WMLDocument::create() 
        https://bugs.webkit.org/show_bug.cgi?id=43173

        To fix build break in WML, url parameter is added. Because, 
        Document class has url parameter.

        * wml/WMLDocument.cpp:
        (WebCore::WMLDocument::WMLDocument):
        * wml/WMLDocument.h:
        (WebCore::WMLDocument::create): Add an url parameter to create() method

2010-08-07  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Reviewed by Eric Seidel.

        [WML] Change getIDAttribute() with getIdAttribute()
        https://bugs.webkit.org/show_bug.cgi?id=43175

        Change getIDAttribute() with getIdAttribute() because function 
        name was changed.

        * wml/WMLCardElement.cpp:
        (WebCore::WMLCardElement::findNamedCardInDocument): Change getIDAttribute() with getIdAttribute().

2010-08-07  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Adam Barth.

        WebTiming does not take page cache into account
        https://bugs.webkit.org/show_bug.cgi?id=42772

        When restoring a page from the page cache, reset its DocumentLoadTiming
        struct and record navigationStart.
    
        Test: fast/events/onunload-back-to-page-cache.html

        * loader/DocumentLoadTiming.h: removed Noncopyable, since it's just a simple struct.
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::resetTiming): Added method.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopLoading): Uncommented assert.
        (WebCore::FrameLoader::loadProvisionalItemFromCachedPage): Added resetTiming() call.

2010-08-07  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Eric Seidel.

        Allow custom memory allocation control for EventHandlingState struct
        https://bugs.webkit.org/show_bug.cgi?id=43548

        Inherits the following class from FastAllocBase because it is
        instantiated by 'new':

        struct name         - instantiated at: WebCore/
        EventHandlingState  - html/HTMLInputElement.cpp:2051

        * html/HTMLInputElement.cpp:

2010-08-07  Jay Civelli  <jcivelli@chromium.org>

        Reviewed by Eric Seidel.

        [Chromium] Remove unecessary focus code.
        https://bugs.webkit.org/show_bug.cgi?id=43542

        * platform/chromium/ChromiumBridge.h:
        * platform/chromium/WidgetChromium.cpp:
        (WebCore::Widget::setFocus):

2010-08-07  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Reviewed by Eric Seidel.

        [WML] Include FormDataBuilder.h in WMLGoElement.h
        https://bugs.webkit.org/show_bug.cgi?id=43177

        To fix build breaks in WMLGoElement.cpp, FormDataBuilder.h needs to be included.

        * wml/WMLGoElement.cpp: Include FormDataBuilder.h

2010-08-07  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Reviewed by Eric Seidel.

        [WML] Add dummy argument to SelectElement::defaultEventHandler() in WMLSelectElement
        https://bugs.webkit.org/show_bug.cgi?id=43176

        * wml/WMLSelectElement.cpp:
        (WebCore::WMLSelectElement::defaultEventHandler): Sets NULL parameter to SelectElement::defaultEventHandler.

2010-08-07  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Reviewed by Eric Seidel.

        [WML] Change DocumentParser with ScriptableDocumentParser in WMLDocument
        https://bugs.webkit.org/show_bug.cgi?id=43174

        * wml/WMLDocument.cpp:
        (WebCore::WMLDocument::finishedParsing): Change DocumentParser with ScriptableDocumentParser.

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

        Reviewed by Sam Weinig.

        Use ctFont() to get the CTFont.

        * platform/graphics/mac/FontMac.mm:
        (WebCore::showGlyphsWithAdvances):

2010-08-07  Adam Barth  <abarth@webkit.org>

        Reviewed by Sam Weinig.

        document->documentElement can always be null
        https://bugs.webkit.org/show_bug.cgi?id=43677

        This ASSERT is bogus.

        * css/StyleMedia.cpp:
        (WebCore::StyleMedia::matchMedium):

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

        Reviewed by Anders Carlsson.

        <rdar://problem/8285090> First word on a line doesn’t hyphenate properly
        https://bugs.webkit.org/show_bug.cgi?id=43679

        Test: fast/text/hyphenate-first-word.html

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::tryHyphenating): The character at lastSpace is not necessarily a whitespace character
        before the current word. It can also be part of the word, such as when the word is the first
        one on the line. Include the charcater at lastSpace in the string passed to lastHyphenLocation().

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

        Build fix

        * platform/graphics/SimpleFontData.h:

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

        Reviewed by Anders Carlsson.

        Created a separate SimpleFontData constructor exclusively for SVG fonts and moved the CTFontRef
        from SimpleFontData to FontPlatformData.
        https://bugs.webkit.org/show_bug.cgi?id=43674

        * config.h: Moved definitions of WTF_USE_CORE_TEXT and WTF_USE_ATSUI from here to wtf/Platform.h.
        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::getFontData): Use new SimpleFontData constructor for SVG fonts.
        * platform/graphics/SimpleFontData.cpp:
        (WebCore::SimpleFontData::SimpleFontData): Separated into two constructors, one for
        PlatformFontData-based fonts and one for SVG fonts.
        * platform/graphics/SimpleFontData.h: Moved the m_CTFont member variable and the getCTFont()
        accessor from here…
        * platform/graphics/mac/FontPlatformData.h: …to here, renaming the latter ctFont().
        * platform/graphics/mac/FontPlatformDataMac.mm:
        (WebCore::FontPlatformData::FontPlatformData): Copy m_CTFont.
        (WebCore::FontPlatformData::operator=): Copy m_CTFont.
        (WebCore::FontPlatformData::setFont): Clear m_CTFont.
        (WebCore::FontPlatformData::ctFont): Moved here from SimpleFontDataCoreText.cpp and renamed.
        * platform/graphics/mac/SimpleFontDataCoreText.cpp:
        (WebCore::SimpleFontData::getCFStringAttributes): Updated to use FontPlatformData::ctFont().
        * svg/SVGFontData.cpp:
        (WebCore::SVGFontData::SVGFontData): Added an assertion.

2010-08-07  Adam Barth  <abarth@webkit.org>

        Reviewed by Dimitri Glazkov.

        Regression: Memory corruption in tree builder
        https://bugs.webkit.org/show_bug.cgi?id=43672

        Turns out this ASSERT was wrong and we need the branch.  Yay for
        test-driven development.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::callTheAdoptionAgency):

2010-08-07  Dirk Schulze  <krit@webkit.org>

        Unreviewed build-fix.

        Come up with a more efficient way to represent Path segments
        https://bugs.webkit.org/show_bug.cgi?id=41159

        Landed wrong version of the patch.

        * svg/SVGPathByteStreamSource.cpp:
        (WebCore::SVGPathByteStreamSource::SVGPathByteStreamSource):
        (WebCore::SVGPathByteStreamSource::hasMoreData):
        * svg/SVGPathByteStreamSource.h:
        (WebCore::SVGPathByteStreamSource::moveToNextToken):
        * svg/SVGPathParserFactory.cpp:
        (WebCore::SVGPathParserFactory::buildSVGPathSegListFromByteStream):
        (WebCore::SVGPathParserFactory::createSVGPathByteStreamFromString):
        * svg/SVGPathParserFactory.h:

2010-08-07  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Come up with a more efficient way to represent Path segments
        https://bugs.webkit.org/show_bug.cgi?id=41159

        Introduce SVGPathByteStream as a fast and efficient way to organize the synchronization
        of Path, SVG path data string and SVGPathSegList in normalized and unaltered modes.
        Extended SVGPathParserFactory to accept SVGPathByteStreams as input source and to create
        a SVGPathByteStream from a SVG path data string.

        Doesn't affect any tests.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * svg/SVGAllInOne.cpp:
        * svg/SVGPathByteStream.h: Added.
        (WebCore::):
        (WebCore::SVGPathByteStream::create):
        (WebCore::SVGPathByteStream::data):
        (WebCore::SVGPathByteStream::begin):
        (WebCore::SVGPathByteStream::end):
        (WebCore::SVGPathByteStream::append):
        (WebCore::SVGPathByteStream::clear):
        (WebCore::SVGPathByteStream::isEmpty):
        (WebCore::SVGPathByteStream::SVGPathByteStream):
        * svg/SVGPathByteStreamBuilder.cpp: Added.
        (WebCore::SVGPathByteStreamBuilder::SVGPathByteStreamBuilder):
        (WebCore::SVGPathByteStreamBuilder::moveTo):
        (WebCore::SVGPathByteStreamBuilder::lineTo):
        (WebCore::SVGPathByteStreamBuilder::lineToHorizontal):
        (WebCore::SVGPathByteStreamBuilder::lineToVertical):
        (WebCore::SVGPathByteStreamBuilder::curveToCubic):
        (WebCore::SVGPathByteStreamBuilder::curveToCubicSmooth):
        (WebCore::SVGPathByteStreamBuilder::curveToQuadratic):
        (WebCore::SVGPathByteStreamBuilder::curveToQuadraticSmooth):
        (WebCore::SVGPathByteStreamBuilder::arcTo):
        (WebCore::SVGPathByteStreamBuilder::closePath):
        * svg/SVGPathByteStreamBuilder.h: Added.
        (WebCore::SVGPathByteStreamBuilder::setCurrentByteStream):
        (WebCore::SVGPathByteStreamBuilder::writeType):
        (WebCore::SVGPathByteStreamBuilder::writeFlag):
        (WebCore::SVGPathByteStreamBuilder::writeFloat):
        (WebCore::SVGPathByteStreamBuilder::writeFloatPoint):
        (WebCore::SVGPathByteStreamBuilder::writeSegmentType):
        * svg/SVGPathByteStreamSource.cpp: Added.
        (WebCore::SVGPathByteStreamSource::SVGPathByteStreamSource):
        (WebCore::SVGPathByteStreamSource::~SVGPathByteStreamSource):
        (WebCore::SVGPathByteStreamSource::hasMoreData):
        (WebCore::SVGPathByteStreamSource::parseFloat):
        (WebCore::SVGPathByteStreamSource::parseFlag):
        (WebCore::SVGPathByteStreamSource::parseSVGSegmentType):
        (WebCore::SVGPathByteStreamSource::nextCommand):
        * svg/SVGPathByteStreamSource.h: Added.
        (WebCore::SVGPathByteStreamSource::create):
        (WebCore::SVGPathByteStreamSource::readType):
        (WebCore::SVGPathByteStreamSource::readFlag):
        (WebCore::SVGPathByteStreamSource::readFloat):
        (WebCore::SVGPathByteStreamSource::readSVGSegmentType):
        (WebCore::SVGPathByteStreamSource::readFloatPoint):
        * svg/SVGPathParserFactory.cpp:
        (WebCore::globalSVGPathByteStreamBuilder):
        (WebCore::SVGPathParserFactory::buildPathFromByteStream):
        (WebCore::SVGPathParserFactory::buildSVGPathSegListFromByteStream):
        (WebCore::SVGPathParserFactory::buildSVGPathByteStreamFromString):
        * svg/SVGPathParserFactory.h:

2010-08-07  Dirk Schulze  <krit@webkit.org>

        Not reviewed. Sort Xcode project file.

        * WebCore.xcodeproj/project.pbxproj:

2010-08-07  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r64904.
        http://trac.webkit.org/changeset/64904
        https://bugs.webkit.org/show_bug.cgi?id=43671

        Broke the Qt Windows builders. (Requested by bbandix on
        #webkit).

        * WebCore.pri:
        * WebCore.pro:
        * features.pri: Removed.

2010-08-07  Balazs Kelemen  <kb@inf.u-szeged.hu>

        Reviewed by Eric Seidel.

        [Qt] Build WebKit2 into a static lib

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

        Just build changes so no new tests.

        * WebCore.pri: Moved feature detection logic into features.pri since we need this in WebKit2.pro as well.
        * WebCore.pro: Moved the specification of the WebKit2 build to WebKit2.pro. Link against the static lib.
        * features.pri: Added.

2010-08-07  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Daniel Bates.

        Pattern fill with image not rendered after reload
        https://bugs.webkit.org/show_bug.cgi?id=41596

        Fixed by a one-liner. Instead of just invalidating it's own resources, images also have to update
        resources in the ancestor chain, if imageChanged() has been called (for example, a slow loading image)

        Test: http/tests/misc/slow-loading-image-in-pattern.html

        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::imageChanged):

2010-08-06  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Generalize SVGPathParser to allow more than just strings as input source
        https://bugs.webkit.org/show_bug.cgi?id=43618

        Generalize SVGPathParser, by allowing different parsing sources than just strings.
        For now only a SVGPathStringSource is available, parsing from bytestreams follows soon.
        Each client that wants to parse strings, like Path or SVGPathSegList objects, only
        needs to use the new central SVGPathParserFactory, which glues consumer and sources together.
        Moved the SVGPathSegType enum from SVGPathSeg class in WebCore namespace, for
        easier access throughout the SVG code.

        Doesn't affect any tests.

        * Android.mk:
        * CMakeLists.txt
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj
        * svg/SVGAllInOne.cpp:
        * svg/SVGAnimateElement.cpp:
        (WebCore::SVGAnimateElement::calculateFromAndToValues):
        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::parseMappedAttribute):
        * svg/SVGGlyphElement.cpp:
        (WebCore::parsePathData):
        * svg/SVGPathBuilder.cpp:
        (WebCore::SVGPathBuilder::SVGPathBuilder):
        (WebCore::SVGPathBuilder::moveTo):
        (WebCore::SVGPathBuilder::lineTo):
        (WebCore::SVGPathBuilder::curveToCubic):
        (WebCore::SVGPathBuilder::closePath):
        * svg/SVGPathBuilder.h:
        (WebCore::SVGPathBuilder::setCurrentPath):
        (WebCore::SVGPathBuilder::arcTo):
        * svg/SVGPathConsumer.h:
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::parseMappedAttribute):
        * svg/SVGPathParser.cpp:
        (WebCore::SVGPathParser::SVGPathParser):
        (WebCore::SVGPathParser::parseClosePathSegment):
        (WebCore::SVGPathParser::parseMoveToSegment):
        (WebCore::SVGPathParser::parseLineToSegment):
        (WebCore::SVGPathParser::parseLineToHorizontalSegment):
        (WebCore::SVGPathParser::parseLineToVerticalSegment):
        (WebCore::SVGPathParser::parseCurveToCubicSegment):
        (WebCore::SVGPathParser::parseCurveToCubicSmoothSegment):
        (WebCore::SVGPathParser::parseCurveToQuadraticSegment):
        (WebCore::SVGPathParser::parseCurveToQuadraticSmoothSegment):
        (WebCore::SVGPathParser::parseArcToSegment):
        (WebCore::SVGPathParser::parsePathDataFromSource):
        (WebCore::SVGPathParser::decomposeArcToCubic):
        * svg/SVGPathParser.h:
        (WebCore::SVGPathParser::setCurrentConsumer):
        * svg/SVGPathParserFactory.cpp: Added.
        (WebCore::globalSVGPathBuilder):
        (WebCore::globalSVGPathSegListBuilder):
        (WebCore::globalSVGPathParser):
        (WebCore::SVGPathParserFactory::self):
        (WebCore::SVGPathParserFactory::SVGPathParserFactory):
        (WebCore::SVGPathParserFactory::~SVGPathParserFactory):
        (WebCore::SVGPathParserFactory::buildPathFromString):
        (WebCore::SVGPathParserFactory::buildSVGPathSegListFromString):
        * svg/SVGPathParserFactory.h: Added.
        * svg/SVGPathSeg.h:
        (WebCore::):
        (WebCore::SVGPathSeg::~SVGPathSeg):
        (WebCore::SVGPathSeg::):
        (WebCore::SVGPathSeg::pathSegType):
        (WebCore::SVGPathSeg::pathSegTypeAsLetter):
        (WebCore::SVGPathSeg::toString):
        (WebCore::SVGPathSeg::associatedAttributeName):
        (WebCore::SVGPathSeg::SVGPathSeg):
        (WebCore::SVGPathSegSingleCoord::SVGPathSegSingleCoord):
        (WebCore::SVGPathSegSingleCoord::setX):
        (WebCore::SVGPathSegSingleCoord::x):
        (WebCore::SVGPathSegSingleCoord::setY):
        (WebCore::SVGPathSegSingleCoord::y):
        (WebCore::SVGPathSegSingleCoord::toString):
        * svg/SVGPathSegList.cpp:
        (WebCore::SVGPathSegList::getPathSegAtLength):
        (WebCore::SVGPathSegList::toPathData):
        (WebCore::SVGPathSegList::createAnimated):
        * svg/SVGPathSegListBuilder.cpp:
        (WebCore::SVGPathSegListBuilder::SVGPathSegListBuilder):
        (WebCore::SVGPathSegListBuilder::moveTo):
        (WebCore::SVGPathSegListBuilder::lineTo):
        (WebCore::SVGPathSegListBuilder::curveToCubic):
        (WebCore::SVGPathSegListBuilder::curveToCubicSmooth):
        (WebCore::SVGPathSegListBuilder::curveToQuadratic):
        (WebCore::SVGPathSegListBuilder::curveToQuadraticSmooth):
        (WebCore::SVGPathSegListBuilder::arcTo):
        * svg/SVGPathSegListBuilder.h:
        (WebCore::SVGPathSegListBuilder::setCurrentSVGPathSegList):
        * svg/SVGPathSource.h: Added.
        (WebCore::SVGPathSource::~SVGPathSource):
        (WebCore::SVGPathSource::SVGPathSource):
        * svg/SVGPathStringSource.cpp: Added.
        (WebCore::SVGPathStringSource::SVGPathStringSource):
        (WebCore::SVGPathStringSource::~SVGPathStringSource):
        (WebCore::SVGPathStringSource::endOfStream):
        (WebCore::SVGPathStringSource::parseFloat):
        (WebCore::SVGPathStringSource::parseFlag):
        (WebCore::SVGPathStringSource::skipSpaces):
        (WebCore::SVGPathStringSource::parseSVGSegmentType):
        (WebCore::SVGPathStringSource::hasRemainingCoordinatesInCurrentCommand):
        * svg/SVGPathStringSource.h: Added.
        (WebCore::SVGPathStringSource::create):

2010-08-06  Robert Hogan  <robert@webkit.org>

        Reviewed by Adam Barth.

        Define setPrivateBrowsingEnabled()
        https://bugs.webkit.org/show_bug.cgi?id=42283

        Define the scope of 'private browsing' in WebKit
        See also https://bugs.webkit.org/show_bug.cgi?id=41801

        * page/Settings.h:

2010-08-06  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        REGRESSION (r64712): YouTube video pages have contents of <noembed> elements overlapping the video description
        https://bugs.webkit.org/show_bug.cgi?id=43605

        The old parser used to drop <noembed> on the floor.  We're supposed to
        add it to the DOM, but we don't want to create a renderer for it.

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

2010-08-06  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Adam Barth.

        Fix style violations in Document
        https://bugs.webkit.org/show_bug.cgi?id=43657

        No new tests because no new functionality.

        * dom/Document.cpp:
        (WebCore::acceptsEditingFocus):
        (WebCore::Document::Document):
        (WebCore::Document::importNode):
        (WebCore::Document::adoptNode):
        (WebCore::Document::getElementById):
        (WebCore::Document::readyState):
        (WebCore::Document::createTreeWalker):
        (WebCore::Document::shouldScheduleLayout):
        (WebCore::Document::nextFocusableNode):
        (WebCore::Document::previousFocusableNode):
        (WebCore::Document::nodeAbsIndex):
        (WebCore::Document::nodeWithAbsIndex):
        (WebCore::Document::childTypeAllowed):
        (WebCore::Document::canReplaceChild):
        (WebCore::Document::recalcStyleSelector):
        (WebCore::Document::setFocusedNode):
        (WebCore::Document::attachNodeIterator):
        (WebCore::Document::detachNodeIterator):
        (WebCore::Document::parseQualifiedName):
        (WebCore::Document::getImageMap):
        (WebCore::Document::setInPageCache):
        (WebCore::Document::addMarker):
        (WebCore::Document::copyMarkers):
        (WebCore::Document::shiftMarkers):
        (WebCore::Document::setMarkersActive):
        (WebCore::Document::parentDocument):
        (WebCore::Document::topDocument):
        (WebCore::FormElementKeyHash::hash):
        (WebCore::Document::initSecurityContext):
        * dom/Document.h:
        (WebCore::Document::incDOMTreeVersion):
        (WebCore::Document::domTreeVersion):

2010-08-06  Eric Carlson  <eric.carlson@apple.com>

        Unreviewed, release Qt build fix.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::containsPaintedContent): Guard call to toRenderVideo()
        with #if ENABLE(VIDEO).

2010-08-06  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        HTML5 "video" tag with poster frame defined "flashes" right before movie displays
        https://bugs.webkit.org/show_bug.cgi?id=37591
        <rdar://problem/5650561>

        If a video element has a poster frame, display it until the playback is requested or the movie's
        time is changed.

        Test: compositing/video/video-poster.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Initialize m_displayMode.
        (WebCore::HTMLMediaElement::prepareForLoad): Set m_displayMode to Unknown.
        (WebCore::HTMLMediaElement::loadResource): Call updateDisplayState to let it set configure
        the poster, if necessary.
        (WebCore::HTMLMediaElement::noneSupported): updatePosterImage -> updateDisplayState.
        (WebCore::HTMLMediaElement::setNetworkState): Ditto.
        (WebCore::HTMLMediaElement::setReadyState): Ditto.
        (WebCore::HTMLMediaElement::finishSeek): Set display mode to Video so a video frame will be
        displayed if a poster is currently visible.
        (WebCore::HTMLMediaElement::mediaPlayerRepaint): updatePosterImage -> updateDisplayState.
        (WebCore::HTMLMediaElement::updatePlayState): Set display mode to Video.
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::displayMode): New.
        (WebCore::HTMLMediaElement::setDisplayMode): Ditto.
        (WebCore::HTMLMediaElement::updateDisplayState): Ditto.

        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::HTMLVideoElement): Remove m_shouldDisplayPosterImage.
        (WebCore::HTMLVideoElement::attach): Call shouldDisplayPosterImage instead of checking
        m_shouldDisplayPosterImage directly.
        (WebCore::HTMLVideoElement::detach): Ditto.
        (WebCore::HTMLVideoElement::parseMappedAttribute): Set m_displayMode to Unknown before calling 
        updateDisplayState so shouldDisplayPosterImage() will return the correct result. Remove the
        PLUGIN_PROXY_FOR_VIDEO code, it is now in updateDisplayState.
        (WebCore::HTMLVideoElement::setDisplayMode): Renamed from updatePosterImage and rework logic
        so we tell the media engine it is OK to display video frames when there is no poster, or 
        once the media engine has something to display and the movie has started or seeked.
        (WebCore::HTMLVideoElement::updateDisplayState): New, manage display mode based on poster 
        attribute.
        * html/HTMLVideoElement.h:
        (WebCore::HTMLVideoElement::shouldDisplayPosterImage):

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::MediaPlayer::prepareForRendering): New, call media engine's prepareForRendering.
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::prepareForRendering):

        * platform/graphics/mac/MediaPlayerPrivateQTKit.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate): Initialize m_isAllowedToRender.
        (WebCore::MediaPlayerPrivate::setUpVideoRendering):
        (WebCore::MediaPlayerPrivate::isReadyForVideoSetup): Renamed from isReadyForRendering.
        (WebCore::MediaPlayerPrivate::prepareForRendering): New, set m_isAllowedToRender and
        inform the client that render tree should be updated so we correctly switch from showing
        the poster, which often doens't use a layer, to showing video frames, which do.
        (WebCore::MediaPlayerPrivate::updateStates): Don't call setUpVideoRendering until 
        isReadyForVideoSetup() returns true.
        (WebCore::MediaPlayerPrivate::supportsAcceleratedRendering): isReadyForRendering -> isReadyForVideoSetup

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::containsPaintedContent): Only consider video when displaying
        video frames so a poster won't force compositing mode.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingForVideo): Ditto.

        * rendering/RenderVideo.cpp:
        (WebCore::RenderVideo::shouldDisplayVideo): New, return true when not displaying a poster.
        * rendering/RenderVideo.h:

2010-08-06  James Robinson  <jamesr@chromium.org>

        Reviewed by Simon Fraser.

        Accelerated 2d canvases should get compositing layers
        https://bugs.webkit.org/show_bug.cgi?id=43362

        Allows for 2d canvas rendering contexts to use a GraphicsContext3D for
        accelerated rendering.  The rendering context holds the GraphicsContext3D
        alive and exposes it to the compositor.  The 3d context itself is passed
        down through the GraphicsContext to use for actual rendering:
        https://bug-43362-attachments.webkit.org/attachment.cgi?id=63557

        This approach will let us simultaneously prototype accelerated techniques
        for canvas 2d and revise the design of canvas elements without destabilizing
        all ports.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext):
        (WebCore::HTMLCanvasElement::willDraw):
        (WebCore::HTMLCanvasElement::makeRenderingResultsAvailable):
        * html/canvas/CanvasRenderingContext.h:
        (WebCore::CanvasRenderingContext::paintRenderingResultsToCanvas):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::CanvasRenderingContext2D):
        (WebCore::CanvasRenderingContext2D::isAccelerated):
        (WebCore::CanvasRenderingContext2D::reset):
        (WebCore::CanvasRenderingContext2D::willDraw):
        (WebCore::CanvasRenderingContext2D::paintRenderingResultsToCanvas):
        * html/canvas/CanvasRenderingContext2D.h:
        (WebCore::CanvasRenderingContext2D::graphicsContext3D):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::paintRenderingResultsToCanvas):
        * html/canvas/WebGLRenderingContext.h:
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::syncSoftwareCanvas):

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

        Reviewed by Chris Fleizach.

        Make AX Code use more specific RenderObject subclass types
        https://bugs.webkit.org/show_bug.cgi?id=43632

        No functional change, thus no tests.

        * accessibility/AXObjectCache.cpp:
        (WebCore::nodeHasRole):
         - Make this take a String instead of AtomicString, to avoid
           thrashing the atomic string hash.
           It would be better to take a const char* here, except
           one caller passes nullAtom.
        (WebCore::createFromRenderer):
         - Split this out from getOrCreate to make it simpler.
         - No longer needs to deal with setting a "result"
           pointer and can instead just return.
         - I've also made this function use RenderBoxModelObject*
           where appropriate.
        (WebCore::AXObjectCache::getOrCreate):
        * accessibility/AXObjectCache.h:
        * accessibility/AccessibilityImageMapLink.cpp:
        (WebCore::AccessibilityImageMapLink::AccessibilityImageMapLink):
         - Fix style.
        * accessibility/AccessibilityMenuList.cpp:
        (WebCore::AccessibilityMenuList::AccessibilityMenuList):
         - Use a more specific type.
        (WebCore::AccessibilityMenuList::renderer):
        * accessibility/AccessibilityMenuList.h:
        (WebCore::AccessibilityMenuList::create):
        * accessibility/AccessibilityMenuListPopup.cpp:
         - Need RenderMenuList.h since renderer() is a RenderMenuList*
        * accessibility/AccessibilityObject.cpp:
        (WebCore::renderListItemContainerForNode):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::renderBoxModelObject):
         - New helper function, similar to Node::renderBoxModelObject()
        (WebCore::isInlineWithContinuation):
        (WebCore::AccessibilityRenderObject::isNativeImage):
        (WebCore::AccessibilityRenderObject::isAttachment):
        (WebCore::AccessibilityRenderObject::isMultiSelectable):
        (WebCore::AccessibilityRenderObject::isReadOnly):
        (WebCore::AccessibilityRenderObject::isFieldset):
        (WebCore::AccessibilityRenderObject::actionElement):
        (WebCore::AccessibilityRenderObject::stringValue):
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnored):
        (WebCore::AccessibilityRenderObject::setValue):
        (WebCore::AccessibilityRenderObject::widget):
        (WebCore::AccessibilityRenderObject::visiblePositionForPoint):
        (WebCore::AccessibilityRenderObject::doAccessibilityHitTest):
        (WebCore::AccessibilityRenderObject::renderObjectIsObservable):
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        (WebCore::AccessibilityRenderObject::addChildren):
        (WebCore::msaaRoleForRenderer):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::isTableExposableThroughAccessibility):
        * accessibility/AccessibilityTable.h:
         - Remove unneeded "using namespace std".

2010-08-06  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Eric Seidel.

        Factor an AsyncScriptRunner out of Document
        https://bugs.webkit.org/show_bug.cgi?id=43633

        This copies the existing implementation exactly. In the future
        this will use PendingScript which handles ref counting without
        the need for those manual ref()/deref()s. This is also currently
        a trivial class, but a little more logic will be added to it to
        support <script async>.

        No new tests because no new functionality.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/AsyncScriptRunner.cpp: Added.
        (WebCore::AsyncScriptRunner::AsyncScriptRunner):
        (WebCore::AsyncScriptRunner::~AsyncScriptRunner):
        (WebCore::AsyncScriptRunner::executeScriptSoon):
        (WebCore::AsyncScriptRunner::suspend):
        (WebCore::AsyncScriptRunner::resume):
        (WebCore::AsyncScriptRunner::timerFired):
        * dom/AsyncScriptRunner.h: Added.
        (WebCore::AsyncScriptRunner::create):
        (WebCore::AsyncScriptRunner::hasPendingScripts):
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::~Document):
        * dom/Document.h:
        (WebCore::Document::asyncScriptRunner):
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElementData::notifyFinished):
        * page/PageGroupLoadDeferrer.cpp:
        (WebCore::PageGroupLoadDeferrer::PageGroupLoadDeferrer):
        (WebCore::PageGroupLoadDeferrer::~PageGroupLoadDeferrer):

2010-08-06  James Robinson  <jamesr@chromium.org>

        Reviewed by Dimitri Glazkov.

        [chromium] Implement GLES2Canvas/Texture in terms of GraphicsContext3D instead of direct OpenGL calls
        https://bugs.webkit.org/show_bug.cgi?id=43608

        This converts all OpenGL calls in GLES2(Canvas|Texture) to calls on the corresponding GraphicsContext3D
        API, due to feedback on https://bugs.webkit.org/show_bug.cgi?id=43362.  Nearly all the changes are
        applying the regex s/gl([A-Z])/m_context->%1</ and removing unnecessary makeCurrent() calls.
        Other changes hilighted below.

        * platform/graphics/chromium/GLES2Canvas.cpp:
        (WebCore::affineTo3x3):
        (WebCore::GLES2Canvas::GLES2Canvas):
        (WebCore::GLES2Canvas::~GLES2Canvas):
        (WebCore::GLES2Canvas::clearRect):
        (WebCore::GLES2Canvas::fillRect):
        (WebCore::GLES2Canvas::drawTexturedRect):
        (WebCore::GLES2Canvas::applyCompositeOperator):
        (WebCore::GLES2Canvas::getQuadVertices):
        (WebCore::GLES2Canvas::getQuadIndices):
            - use new typed XXArray classes for buffer uploads
        (WebCore::loadShader):
        (WebCore::GLES2Canvas::getSimpleProgram):
        (WebCore::GLES2Canvas::getTexProgram):
        (WebCore::GLES2Canvas::createTexture):
        (WebCore::GLES2Canvas::checkGLError):
        * platform/graphics/chromium/GLES2Canvas.h:
        (WebCore::GLES2Canvas::context):
        * platform/graphics/chromium/GLES2Texture.cpp:
        (WebCore::GLES2Texture::GLES2Texture):
        (WebCore::GLES2Texture::~GLES2Texture):
        (WebCore::GLES2Texture::create):
        (WebCore::convertFormat):
        (WebCore::GLES2Texture::load):
        (WebCore::GLES2Texture::bind):
        * platform/graphics/chromium/GLES2Texture.h:
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::fillRect):
            - add a missing restore() call to the H/W path
        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::drawBitmapGLES2):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::setGraphicsContext3D):
        (WebCore::PlatformContextSkia::uploadSoftwareToHardware):
            - avoid applying CTM to uploads
        (WebCore::PlatformContextSkia::readbackHardwareToSoftware):
        * platform/graphics/skia/PlatformContextSkia.h:

2010-08-06  James Robinson  <jamesr@chromium.org>

        Reviewed by Simon Fraser.

        Composited canvas should be treated the same by the compositor and not be WebGL specific
        https://bugs.webkit.org/show_bug.cgi?id=43589

        This treats all GraphicsContext3D-backed layers the same instead of special casing WebGL.
        The cross-platform change is to rename GraphicsLayer::setContentsToWebGL() to
        GraphicsLayer::setContentsToCanvas() and to rename all implementations.

        This patch also renames the chromium class used for accelerating these layers.

        Cross platform changes:
        * WebCore.gypi:
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::setContentsToCanvas):
            Rename the function on the base class. GraphicsLayerCA and GraphicsLayerChromium implement this.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::isAcceleratedCanvas):
            Helper function to see if a renderer is associated with an accelerated compositing layer.
        (WebCore::RenderLayerBacking::updateGraphicsLayerConfiguration):
        (WebCore::RenderLayerBacking::containsPaintedContent):
        (WebCore::RenderLayerBacking::rendererContentChanged):
       Chromium specific changes:
        * platform/graphics/chromium/CanvasLayerChromium.cpp: Added.
        (WebCore::CanvasLayerChromium::create):
        (WebCore::CanvasLayerChromium::CanvasLayerChromium):
        (WebCore::CanvasLayerChromium::textureId):
        (WebCore::CanvasLayerChromium::updateTextureContents):
        (WebCore::CanvasLayerChromium::setContext):
        * platform/graphics/chromium/CanvasLayerChromium.h: Added.
        (WebCore::CanvasLayerChromium::drawsContent):
        (WebCore::CanvasLayerChromium::ownsTexture):
        (WebCore::CanvasLayerChromium::shaderProgramId):
        (WebCore::CanvasLayerChromium::setShaderProgramId):
        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::setContentsNeedsDisplay):
        (WebCore::GraphicsLayerChromium::setContentsToCanvas):
        * platform/graphics/chromium/GraphicsLayerChromium.h:
        (WebCore::GraphicsLayerChromium::):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::drawLayer):
        (WebCore::LayerRendererChromium::initializeSharedGLObjects):
        * platform/graphics/chromium/LayerRendererChromium.h:
        (WebCore::LayerRendererChromium::):
        * platform/graphics/chromium/WebGLLayerChromium.cpp: Removed.
        * platform/graphics/chromium/WebGLLayerChromium.h: Removed.
        Mac specific changes:
        * platform/graphics/mac/GraphicsLayerCA.h:
        (WebCore::GraphicsLayerCA::):
        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers):
        (WebCore::GraphicsLayerCA::updateContentsCanvasLayer):
        (WebCore::GraphicsLayerCA::setContentsToCanvas):

2010-08-06  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Eric Seidel.

        Add PluginView::bindingInstance() to PluginViewNone
        https://bugs.webkit.org/show_bug.cgi?id=42936

        * bindings/js/ScriptControllerEfl.cpp:
        (WebCore::ScriptController::createScriptInstanceForWidget): Removed workaround.
        * plugins/PluginViewNone.cpp: Added property svn:eol-style.
        (WebCore::PluginView::bindingInstance): Added missing method and use it on WinCE.

2010-08-06  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        Use new "package" name also for the directory where the inspector
        support files are installed.

        * GNUmakefile.am:

2010-08-06  Jian Li  <jianli@chromium.org>

        Fix chromium build break.

        * inspector/InspectorDebuggerAgent.h:

2010-08-06  Dirk Schulze  <krit@webkit.org>

        Not reviewed. Sort Xcode project file.

        * WebCore.xcodeproj/project.pbxproj:

2010-08-06  Jessie Berlin  <jberlin@apple.com>

        Roll out http://trac.webkit.org/changeset/64801, which broke the Safari Windows Build.
        Unreviewed.

        * accessibility/AXObjectCache.h:
        * accessibility/AccessibilityARIAGrid.h:
        * accessibility/AccessibilityListBoxOption.h:
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/AccessibilityTable.h:
        * bindings/cpp/WebDOMCString.h:
        * bindings/cpp/WebDOMString.h:
        * bindings/gobject/ConvertToUTF8String.h:
        * bindings/js/DOMWrapperWorld.h:
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSMessagePortCustom.h:
        * bindings/js/JavaScriptCallFrame.h:
        * bindings/js/ScriptController.h:
        * bindings/js/ScriptProfile.h:
        * bindings/js/ScriptSourceProvider.h:
        * bindings/js/ScriptString.h:
        * bindings/js/WorkerScriptController.h:
        * bindings/objc/DOMImplementationFront.h:
        * bindings/v8/ScheduledAction.h:
        * bindings/v8/ScriptController.h:
        * bindings/v8/V8DOMWindowShell.h:
        * bindings/v8/V8Proxy.h:
        * bindings/v8/V8Utilities.h:
        * bindings/v8/custom/V8CustomXPathNSResolver.h:
        * bridge/c/c_utility.h:
        * css/CSSFontSelector.h:
        * css/CSSHelper.h:
        * css/CSSOMUtils.h:
        * css/CSSPrimitiveValue.h:
        * css/MediaList.h:
        * css/StyleBase.h:
        * css/StyleSheetList.h:
        * css/WebKitCSSKeyframesRule.h:
        * dom/CheckedRadioButtons.h:
        * dom/DOMImplementation.h:
        * dom/DocumentMarker.h:
        * dom/DynamicNodeList.h:
        * dom/EventTarget.h:
        * dom/MessagePort.h:
        * dom/MessagePortChannel.h:
        * dom/NameNodeList.h:
        * dom/Node.h:
        * dom/NodeList.h:
        * dom/OptionGroupElement.h:
        * dom/ScriptExecutionContext.h:
        * dom/SelectElement.h:
        * dom/ViewportArguments.h:
        * dom/make_names.pl:
        * editing/HTMLInterchange.h:
        * editing/htmlediting.h:
        * editing/markup.h:
        * html/CollectionCache.h:
        * html/DOMFormData.h:
        * html/DataGridColumnList.h:
        * html/DateComponents.h:
        * html/FileStream.h:
        * html/FileStreamProxy.h:
        * html/FormDataList.h:
        (WebCore::FormDataList::appendData):
        * html/HTMLCollection.h:
        * html/HTMLElementStack.h:
        * html/HTMLFormattingElementList.h:
        * html/HTMLParserQuirks.h:
        * html/HTMLQuoteElement.h:
        * html/HTMLScriptRunnerHost.h:
        * html/StepRange.h:
        * html/canvas/CanvasGradient.h:
        * html/canvas/CanvasNumberArray.h:
        * html/canvas/CanvasPattern.h:
        * inspector/InjectedScript.h:
        * inspector/InspectorCSSStore.h:
        * inspector/InspectorClient.h:
        * inspector/InspectorFrontendClient.h:
        * inspector/InspectorValues.h:
        * inspector/ScriptDebugListener.h:
        * loader/CachedResourceClient.h:
        * loader/CrossOriginAccessControl.h:
        * loader/DocumentThreadableLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/RedirectScheduler.h:
        * loader/SubframeLoader.h:
        * loader/appcache/DOMApplicationCache.h:
        * loader/archive/ArchiveFactory.h:
        * loader/icon/IconDatabaseClient.h:
        * notifications/NotificationPresenter.h:
        * page/Chrome.h:
        * page/ChromeClient.h:
        * page/Console.h:
        * page/ContextMenuClient.h:
        * page/DOMSelection.h:
        * page/EditorClient.h:
        * page/EventHandler.h:
        * page/FrameView.h:
        * page/GeolocationPositionCache.h:
        * page/History.h:
        * page/Location.h:
        * page/Navigator.h:
        * page/NavigatorBase.h:
        * page/PluginHalterClient.h:
        * page/PrintContext.h:
        * page/SpeechInput.h:
        * page/SpeechInputListener.h:
        * page/animation/AnimationController.h:
        * platform/CookieJar.h:
        * platform/CrossThreadCopier.h:
        * platform/DragImage.h:
        * platform/FileSystem.h:
        * platform/Language.h:
        * platform/Length.h:
        * platform/LinkHash.h:
        * platform/LocalizationStrategy.h:
        * platform/LocalizedStrings.h:
        * platform/Logging.h:
        * platform/Pasteboard.h:
        * platform/PopupMenuClient.h:
        * platform/SearchPopupMenu.h:
        * platform/Widget.h:
        * platform/cf/BinaryPropertyList.h:
        * platform/chromium/ChromiumBridge.h:
        * platform/chromium/ClipboardUtilitiesChromium.h:
        * platform/cocoa/KeyEventCocoa.h:
        * platform/graphics/Color.h:
        * platform/graphics/FontCache.h:
        * platform/graphics/FontData.h:
        * platform/graphics/FontSelector.h:
        * platform/graphics/GraphicsTypes.h:
        * platform/graphics/Icon.h:
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/ImageSource.h:
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        * platform/graphics/Path.h:
        * platform/graphics/StringTruncator.h:
        * platform/graphics/cairo/FontCustomPlatformData.h:
        * platform/graphics/cairo/FontPlatformData.h:
        * platform/graphics/cg/FontPlatformData.h:
        * platform/graphics/cg/ImageSourceCG.h:
        * platform/graphics/chromium/FontCustomPlatformData.h:
        * platform/graphics/chromium/FontPlatformDataChromiumWin.h:
        * platform/graphics/chromium/FontPlatformDataLinux.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        * platform/graphics/haiku/FontCustomPlatformData.h:
        * platform/graphics/mac/FontCustomPlatformData.h:
        * platform/graphics/mac/FontPlatformData.h:
        * platform/graphics/qt/FontCustomPlatformData.h:
        * platform/graphics/qt/FontPlatformData.h:
        * platform/graphics/win/FontCustomPlatformData.h:
        * platform/graphics/win/FontCustomPlatformDataCairo.h:
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.h:
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.h:
        * platform/graphics/wince/FontPlatformData.h:
        * platform/graphics/wince/MediaPlayerPrivateWince.h:
        * platform/graphics/wince/MediaPlayerProxy.h:
        * platform/graphics/wx/FontCustomPlatformData.h:
        * platform/graphics/wx/FontPlatformData.h:
        * platform/mac/PasteboardHelper.h:
        * platform/network/DNS.h:
        * platform/network/FormData.h:
        * platform/network/FormDataBuilder.h:
        * platform/network/HTTPParsers.h:
        * platform/text/Hyphenation.h:
        * platform/text/LineEnding.h:
        * platform/text/TextCodec.h:
        * platform/text/TextEncoding.h:
        * platform/text/TextStream.h:
        * platform/win/BString.h:
        * platform/win/ClipboardUtilitiesWin.h:
        * platform/win/WCDataObject.h:
        * platform/win/WebCoreTextRenderer.h:
        * plugins/DOMMimeType.h:
        * plugins/DOMMimeTypeArray.h:
        * plugins/DOMPlugin.h:
        * plugins/DOMPluginArray.h:
        * rendering/CounterNode.h:
        * rendering/HitTestResult.h:
        * rendering/RenderObjectChildList.h:
        * rendering/RenderText.h:
        * rendering/RenderTreeAsText.h:
        * rendering/TextControlInnerElements.h:
        * rendering/style/ContentData.h:
        * rendering/style/RenderStyle.h:
        * storage/DatabaseAuthorizer.h:
        * storage/DatabaseTrackerClient.h:
        * storage/SQLTransaction.h:
        * storage/SQLTransactionSync.h:
        * storage/Storage.h:
        * storage/chromium/DatabaseObserver.h:
        * svg/SVGAnimatedTemplate.h:
        * svg/SVGDocumentExtensions.h:
        * svg/SVGGlyphElement.h:
        * svg/SVGHKernElement.h:
        * svg/SVGNumberList.h:
        * svg/SVGPointList.h:
        * svg/SVGPreserveAspectRatio.h:
        * svg/SVGStylable.h:
        * svg/SVGTests.h:
        * svg/SVGTransformList.h:
        * svg/SVGTransformable.h:
        * svg/SVGVKernElement.h:
        * websockets/ThreadableWebSocketChannel.h:
        * websockets/ThreadableWebSocketChannelClientWrapper.h:
        * websockets/WebSocket.h:
        * websockets/WebSocketChannel.h:
        * websockets/WebSocketHandshakeResponse.h:
        * wml/WMLErrorHandling.h:
        * wml/WMLPageState.h:
        * wml/WMLVariables.h:
        * workers/DefaultSharedWorkerRepository.h:
        * workers/SharedWorkerRepository.h:
        * workers/Worker.h:
        * workers/WorkerContextProxy.h:
        * workers/WorkerLoaderProxy.h:
        * workers/WorkerLocation.h:
        * workers/WorkerMessagingProxy.h:
        * workers/WorkerReportingProxy.h:
        * workers/WorkerThread.h:
        * xml/DOMParser.h:
        * xml/XMLHttpRequestUpload.h:
        * xml/XPathEvaluator.h:
        * xml/XPathExpression.h:
        * xml/XPathNSResolver.h:
        * xml/XPathResult.h:
        * xml/XPathUtil.h:

2010-08-04  Zhenyao Mo  <zmo@google.com>

        Reviewed by Dimitri Glazkov.

        WebGLBuffer::associateBufferData(ArrayBufferView* array) copies incorrect data for sliced views
        https://bugs.webkit.org/show_bug.cgi?id=42124

        * html/canvas/WebGLBuffer.cpp:
        (WebCore::WebGLBuffer::associateBufferDataImpl): Helper function that's called by all associateBufferData().
        (WebCore::WebGLBuffer::associateBufferData): Call associateBufferDataImpl().
        (WebCore::WebGLBuffer::associateBufferSubDataImpl): Helper function that's called by all associateBufferSubData().
        (WebCore::WebGLBuffer::associateBufferSubData): Call associateBufferSubDataImpl().
        * html/canvas/WebGLBuffer.h: Declare helper functions.

2010-08-06  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        noembed should respect whether plugins are enabled
        https://bugs.webkit.org/show_bug.cgi?id=43611

        This instruction isn't in the HTML5 spec, but it seems like the right
        thing to do.  I suspect this is because the spec doesn't understand
        that plugins can be disabled.

        I'm not sure how we can test this in DumpRenderTree, but I'm open to
        suggestions.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::adjustedLexerState):
        (WebCore::HTMLTreeBuilder::processStartTagForInBody):
        (WebCore::HTMLTreeBuilder::processStartTagForInHead):
        (WebCore::HTMLTreeBuilder::scriptEnabled):
        (WebCore::HTMLTreeBuilder::pluginsEnabled):
        * html/HTMLTreeBuilder.h:

2010-08-06  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Adam Barth.

        Factor out PendingScript and protect its members
        https://bugs.webkit.org/show_bug.cgi?id=43391

        This will be shared by AsyncScriptRunner.

        No new tests because no new functionality.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/PendingScript.cpp: Added.
        (WebCore::PendingScript::~PendingScript):
        (WebCore::PendingScript::element):
        (WebCore::PendingScript::releaseElementAndClear):
        (WebCore::PendingScript::setCachedScript):
        (WebCore::PendingScript::cachedScript):
        * dom/PendingScript.h: Added.
        (WebCore::PendingScript::PendingScript):
        (WebCore::PendingScript::startingLineNumber):
        (WebCore::PendingScript::watchingForLoad):
        (WebCore::PendingScript::setWatchingForLoad):
        (WebCore::PendingScript::hasElement):
        (WebCore::PendingScript::adoptElement):
        (WebCore::PendingScript::notifyFinished):
        * html/HTMLScriptRunner.cpp:
        (WebCore::HTMLScriptRunner::sourceFromPendingScript):
        (WebCore::HTMLScriptRunner::haveParsingBlockingScript):
        (WebCore::HTMLScriptRunner::requestScript):
        * html/HTMLScriptRunner.h:

2010-08-06  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Reviewed by Darin Adler.

        Change permission to access methods in XMLDocumentParser.h
        https://bugs.webkit.org/show_bug.cgi?id=43180

        Change permission to access wellFormed(), lineNumber() and columnNumber()
        in XMLDocumentParser.h. Because, the methods are used by WML.

        * dom/XMLDocumentParser.h:
        (WebCore::XMLDocumentParser::wellFormed): Change accebility permission. 

2010-08-06  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] Support for image drags
        https://bugs.webkit.org/show_bug.cgi?id=40788

        Add image drag-and-drop support for WebKit GTK+.

        * platform/gtk/ClipboardGtk.cpp:
        (WebCore::ClipboardGtk::setDragImage): Filled this stub.
        (WebCore::ClipboardGtk::setDragImageElement): Filled this stub.
        (WebCore::ClipboardGtk::createDragImage): Filled this stub.
        (WebCore::ClipboardGtk::declareAndWriteDragImage): Write the image URL, markup, and image itself to the data object member.
        * platform/gtk/ClipboardGtk.h: Brought method declarations into line with the parent class.

2010-08-06  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: extract debugger implementation into InspectorDebuggerAgent
        https://bugs.webkit.org/show_bug.cgi?id=42340

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/CodeGeneratorInspector.pm:
        * inspector/Inspector.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::didCommitLoad):
        (WebCore::InspectorController::enableDebuggerFromFrontend):
        (WebCore::InspectorController::disableDebugger):
        (WebCore::InspectorController::resume):
        (WebCore::InspectorController::loadBreakpoints):
        (WebCore::InspectorController::saveBreakpoints):
        * inspector/InspectorController.h:
        (WebCore::InspectorController::debuggerAgent):
        * inspector/InspectorDebuggerAgent.cpp: Added.
        (WebCore::md5Base16):
        (WebCore::formatBreakpointId):
        (WebCore::InspectorDebuggerAgent::create):
        (WebCore::InspectorDebuggerAgent::InspectorDebuggerAgent):
        (WebCore::InspectorDebuggerAgent::~InspectorDebuggerAgent):
        (WebCore::InspectorDebuggerAgent::isDebuggerAlwaysEnabled):
        (WebCore::InspectorDebuggerAgent::activateBreakpoints):
        (WebCore::InspectorDebuggerAgent::deactivateBreakpoints):
        (WebCore::InspectorDebuggerAgent::setBreakpoint):
        (WebCore::InspectorDebuggerAgent::removeBreakpoint):
        (WebCore::InspectorDebuggerAgent::editScriptSource):
        (WebCore::InspectorDebuggerAgent::getScriptSource):
        (WebCore::InspectorDebuggerAgent::pause):
        (WebCore::InspectorDebuggerAgent::resume):
        (WebCore::InspectorDebuggerAgent::stepOverStatement):
        (WebCore::InspectorDebuggerAgent::stepIntoStatement):
        (WebCore::InspectorDebuggerAgent::stepOutOfFunction):
        (WebCore::InspectorDebuggerAgent::setPauseOnExceptionsState):
        (WebCore::InspectorDebuggerAgent::clearForPageNavigation):
        (WebCore::InspectorDebuggerAgent::currentCallFrames):
        (WebCore::InspectorDebuggerAgent::loadBreakpoints):
        (WebCore::InspectorDebuggerAgent::saveBreakpoints):
        (WebCore::InspectorDebuggerAgent::didParseSource):
        (WebCore::InspectorDebuggerAgent::failedToParseSource):
        (WebCore::InspectorDebuggerAgent::didPause):
        (WebCore::InspectorDebuggerAgent::didContinue):
        (WebCore::InspectorDebuggerAgent::remoteFrontend):
        * inspector/InspectorDebuggerAgent.h: Added.
        * inspector/InspectorFrontend.cpp:
        * inspector/InspectorFrontend.h:
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):

2010-08-06  Dean Jackson  <dino@apple.com>

        Reviewed by Simon Fraser and Steve Block.

        https://bugs.webkit.org/show_bug.cgi?id=42865
        Implement DeviceMotionEvent

        Implement the DeviceMotionEvent interface as defined
        in http://dev.w3.org/geo/api/spec-source-orientation.html
        This is currently an empty implementation, in that there is
        no motion client connected - the platform implementations
        will need to do that.

        Tests: fast/dom/DeviceMotion/create-event.html
               fast/dom/DeviceMotion/optional-event-properties.html
               fast/dom/DeviceMotion/window-property.html

        * Android.derived.jscbindings.mk:
        * Android.derived.v8bindings.mk:
        * Android.jscbindings.mk:
        * Android.mk:
        * Android.v8bindings.mk:
        * CMakeLists.txt:
        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
          - Add new files for DeviceMotionEvent build support
        * bindings/generic/RuntimeEnabledFeatures.cpp:
        * bindings/generic/RuntimeEnabledFeatures.h:
          - new runtime flags for device motion
        * bindings/js/JSDeviceMotionEventCustom.cpp: Added.
        * bindings/v8/custom/V8DeviceMotionEventCustom.cpp: Added.
          - Custom JS binding to translate property access through
            to the DeviceMotionData object that the Event holds
        * bindings/js/JSEventCustom.cpp:
          - Include the custom code for DeviceMotionEvent
        * dom/DeviceMotionClient.h: Added.
          - Pure virtual client for DeviceMotion access
        * dom/DeviceMotionController.cpp: Added.
        * dom/DeviceMotionController.h: Added.
          - Controller class that manages event dispatch
        * dom/DeviceMotionData.cpp: Added.
        * dom/DeviceMotionData.h: Added.
          - Representation of the data that comes from a device motion
            client that is then used within the event.
        * dom/DeviceMotionEvent.cpp: Added.
        * dom/DeviceMotionEvent.h: Added.
        * dom/DeviceMotionEvent.idl: Added.
          - The actual event implementation
        * dom/Document.cpp:
        (WebCore::Document::createEvent):
          - Update createEvent to allow "devicemotion" events
        * dom/Event.cpp:
        * dom/Event.h:
          - isDeviceMotionEvent virtual method
        * dom/EventNames.h:
          - new "devicemotion" event type
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::addEventListener):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
          - allow creation of "devicemotion" events and pass registration
            through to the Page's deviceMotionController object
        * page/Page.cpp:
        * page/Page.h:
          - new PageClient for deviceMotionController

2010-08-06  Kavita Kanetkar  <kkanetkar@chromium.org>

        Reviewed by Joseph Pecoraro.

        Web Inspector: Remove "Online/Offline" icon for Chrome's appcache devtools UI.
        https://bugs.webkit.org/show_bug.cgi?id=43450

        * inspector/front-end/ApplicationCacheItemsView.js:
        (WebInspector.ApplicationCacheItemsView):
        (WebInspector.ApplicationCacheItemsView.prototype.get statusBarItems):
        (WebInspector.ApplicationCacheItemsView.prototype.updateNetworkState):
        * inspector/front-end/Settings.js:

2010-08-06  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed. Rolling out 64835, 64836 and 64839.

        * Android.jscbindings.mk:
        * Android.v8bindings.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::openDatabase):
        * bindings/js/JSDatabaseCustom.cpp: Added.
        (WebCore::JSDatabase::changeVersion):
        (WebCore::createTransaction):
        (WebCore::JSDatabase::transaction):
        (WebCore::JSDatabase::readTransaction):
        * bindings/js/JSDatabaseSyncCustom.cpp: Added.
        (WebCore::JSDatabaseSync::changeVersion):
        (WebCore::createTransaction):
        (WebCore::JSDatabaseSync::transaction):
        (WebCore::JSDatabaseSync::readTransaction):
        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::openDatabase):
        (WebCore::JSWorkerContext::openDatabaseSync):
        * bindings/scripts/CodeGeneratorGObject.pm:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/scripts/test/JS/JSTestCallback.cpp:
        (WebCore::JSTestCallback::~JSTestCallback):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionVoidMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionIntMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionObjMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionMethodThatRequiresAllArgs):
        (WebCore::jsTestObjPrototypeFunctionMethodThatRequiresAllArgsAndThrows):
        (WebCore::jsTestObjPrototypeFunctionSerializedValue):
        (WebCore::jsTestObjPrototypeFunctionIdbKey):
        (WebCore::jsTestObjPrototypeFunctionCustomArgsAndException):
        (WebCore::jsTestObjPrototypeFunctionWithDynamicFrameAndArg):
        (WebCore::jsTestObjPrototypeFunctionWithDynamicFrameAndOptionalArg):
        (WebCore::jsTestObjPrototypeFunctionWithDynamicFrameAndUserGesture):
        (WebCore::jsTestObjPrototypeFunctionWithDynamicFrameAndUserGestureASAD):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndOptionalArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndTwoOptionalArgs):
        (WebCore::jsTestObjPrototypeFunctionMethodWithCallbackArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonCallbackArgAndCallbackArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithCallbackAndOptionalArg):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod1):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod2):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod3):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod4):
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjInternal::voidMethodWithArgsCallback):
        (WebCore::TestObjInternal::intMethodWithArgsCallback):
        (WebCore::TestObjInternal::objMethodWithArgsCallback):
        (WebCore::TestObjInternal::methodThatRequiresAllArgsCallback):
        (WebCore::TestObjInternal::methodThatRequiresAllArgsAndThrowsCallback):
        (WebCore::TestObjInternal::serializedValueCallback):
        (WebCore::TestObjInternal::idbKeyCallback):
        (WebCore::TestObjInternal::customArgsAndExceptionCallback):
        (WebCore::TestObjInternal::withDynamicFrameAndArgCallback):
        (WebCore::TestObjInternal::withDynamicFrameAndOptionalArgCallback):
        (WebCore::TestObjInternal::withDynamicFrameAndUserGestureCallback):
        (WebCore::TestObjInternal::withDynamicFrameAndUserGestureASADCallback):
        (WebCore::TestObjInternal::methodWithOptionalArgCallback):
        (WebCore::TestObjInternal::methodWithNonOptionalArgAndOptionalArgCallback):
        (WebCore::TestObjInternal::methodWithNonOptionalArgAndTwoOptionalArgsCallback):
        (WebCore::TestObjInternal::methodWithCallbackArgCallback):
        (WebCore::TestObjInternal::methodWithNonCallbackArgAndCallbackArgCallback):
        (WebCore::TestObjInternal::methodWithCallbackAndOptionalArgCallback):
        (WebCore::TestObjInternal::overloadedMethod1Callback):
        (WebCore::TestObjInternal::overloadedMethod2Callback):
        (WebCore::TestObjInternal::overloadedMethod3Callback):
        (WebCore::TestObjInternal::overloadedMethod4Callback):
        (WebCore::):
        (WebCore::ConfigureV8TestObjTemplate):
        * bindings/v8/V8Binding.h:
        (WebCore::String):
        (WebCore::AtomicString):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::openDatabaseCallback):
        * bindings/v8/custom/V8DatabaseCustom.cpp: Added.
        (WebCore::V8Database::changeVersionCallback):
        (WebCore::createTransaction):
        (WebCore::V8Database::transactionCallback):
        (WebCore::V8Database::readTransactionCallback):
        * bindings/v8/custom/V8DatabaseSyncCustom.cpp: Added.
        (WebCore::V8DatabaseSync::changeVersionCallback):
        (WebCore::createTransaction):
        (WebCore::V8DatabaseSync::transactionCallback):
        (WebCore::V8DatabaseSync::readTransactionCallback):
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        (WebCore::V8WorkerContext::openDatabaseCallback):
        (WebCore::V8WorkerContext::openDatabaseSyncCallback):
        * page/DOMWindow.idl:
        * storage/Database.cpp:
        (WebCore::Database::transaction):
        * storage/Database.h:
        * storage/Database.idl:
        * storage/DatabaseSync.cpp:
        (WebCore::DatabaseSync::transaction):
        * storage/DatabaseSync.h:
        * storage/DatabaseSync.idl:
        * workers/WorkerContext.idl:

2010-08-06  Dumitru Daniliuc  <dumi@chromium.org>

        Unreviewed, fix the "GTK Linux 64-bit Debug" bot.

        CodeGeneratorGObject.pm doesn't know yet how to auto-generate
        callbacks, so we should not auto-generate functions that take
        callbacks as parameters. This shouldn't break anything, because
        all these functions were marked as ["Custom"] until now, and this
        code generator skipped those functions anyway.

        * bindings/scripts/CodeGeneratorGObject.pm:

2010-08-06  Dumitru Daniliuc  <dumi@chromium.org>

        Unreviewed, "Qt Linux Realese minimal" build fix.

        * bindings/scripts/CodeGeneratorJS.pm:

2010-08-06  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Adam Barth.

        Auto-generate all HTML5 DB bindings.
        https://bugs.webkit.org/show_bug.cgi?id=43382

        * Android.jscbindings.mk: Remove {JS|V8}Database{Sync}Custom.cpp
        and the custom implementations of openDatabas{Sync}().
        * Android.v8bindings.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSDOMWindowCustom.cpp:
        * bindings/js/JSDatabaseCustom.cpp: Removed.
        * bindings/js/JSDatabaseSyncCustom.cpp: Removed.
        * bindings/js/JSWorkerContextCustom.cpp:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        * bindings/v8/custom/V8DatabaseCustom.cpp: Removed.
        * bindings/v8/custom/V8DatabaseSyncCustom.cpp: Removed.
        * bindings/v8/custom/V8WorkerContextCustom.cpp:

        * bindings/scripts/CodeGeneratorJS.pm: Change the code generators
        to check that a value was passed for each non-optional argument,
        and that the value can be converted to the argument type.
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/scripts/test/JS/JSTestCallback.cpp:
        (WebCore::JSTestCallback::~JSTestCallback):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionVoidMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionIntMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionObjMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionMethodThatRequiresAllArgs):
        (WebCore::jsTestObjPrototypeFunctionMethodThatRequiresAllArgsAndThrows):
        (WebCore::jsTestObjPrototypeFunctionSerializedValue):
        (WebCore::jsTestObjPrototypeFunctionIdbKey):
        (WebCore::jsTestObjPrototypeFunctionCustomArgsAndException):
        (WebCore::jsTestObjPrototypeFunctionWithDynamicFrameAndArg):
        (WebCore::jsTestObjPrototypeFunctionWithDynamicFrameAndOptionalArg):
        (WebCore::jsTestObjPrototypeFunctionWithDynamicFrameAndUserGesture):
        (WebCore::jsTestObjPrototypeFunctionWithDynamicFrameAndUserGestureASAD):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndOptionalArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndTwoOptionalArgs):
        (WebCore::jsTestObjPrototypeFunctionMethodWithCallbackArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonCallbackArgAndCallbackArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithCallbackAndOptionalArg):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod1):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod2):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod3):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod4):
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjInternal::voidMethodWithArgsCallback):
        (WebCore::TestObjInternal::intMethodWithArgsCallback):
        (WebCore::TestObjInternal::objMethodWithArgsCallback):
        (WebCore::TestObjInternal::methodThatRequiresAllArgsCallback):
        (WebCore::TestObjInternal::methodThatRequiresAllArgsAndThrowsCallback):
        (WebCore::TestObjInternal::serializedValueCallback):
        (WebCore::TestObjInternal::idbKeyCallback):
        (WebCore::TestObjInternal::customArgsAndExceptionCallback):
        (WebCore::TestObjInternal::withDynamicFrameAndArgCallback):
        (WebCore::TestObjInternal::withDynamicFrameAndOptionalArgCallback):
        (WebCore::TestObjInternal::withDynamicFrameAndUserGestureCallback):
        (WebCore::TestObjInternal::withDynamicFrameAndUserGestureASADCallback):
        (WebCore::TestObjInternal::methodWithOptionalArgCallback):
        (WebCore::TestObjInternal::methodWithNonOptionalArgAndOptionalArgCallback):
        (WebCore::TestObjInternal::methodWithNonOptionalArgAndTwoOptionalArgsCallback):
        (WebCore::TestObjInternal::methodWithCallbackArgCallback):
        (WebCore::TestObjInternal::methodWithNonCallbackArgAndCallbackArgCallback):
        (WebCore::TestObjInternal::methodWithCallbackAndOptionalArgCallback):
        (WebCore::TestObjInternal::overloadedMethod1Callback):
        (WebCore::TestObjInternal::overloadedMethod2Callback):
        (WebCore::TestObjInternal::overloadedMethod3Callback):
        (WebCore::TestObjInternal::overloadedMethod4Callback):
        (WebCore::):
        (WebCore::ConfigureV8TestObjTemplate):
        * bindings/v8/V8Binding.h:
        (WebCore::String):
        (WebCore::AtomicString):

        * page/DOMWindow.idl: Minor changes required by the auto-generated
        bindings.
        * storage/Database.cpp:
        (WebCore::Database::transaction):
        (WebCore::Database::readTransaction):
        (WebCore::Database::runTransaction):
        * storage/Database.h:
        * storage/Database.idl:
        * storage/DatabaseSync.cpp:
        (WebCore::DatabaseSync::transaction):
        (WebCore::DatabaseSync::readTransaction):
        (WebCore::DatabaseSync::runTransaction):
        * storage/DatabaseSync.h:
        * storage/DatabaseSync.idl:
        * workers/WorkerContext.idl:

2010-08-06  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed. Sort Xcode project file.

        * WebCore.xcodeproj/project.pbxproj:

2010-08-06  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed. Fix warning, breaking win build.

        * svg/SVGLength.cpp:
        (WebCore::SVGLength::toCSSPrimitiveValue):

2010-08-06  Alexey Proskuryakov  <ap@apple.com>

        Fix crashing Leopard and Gtk bots.

        * platform/text/TextCodecICU.cpp: (WebCore::TextCodecICU::registerExtendedEncodingNames):
        Don't register ISO8859-16, because older versions of ICU don't support ISO-8859-16, causing
        crashes when we try to register an alias. Also, we don't need it, because Firefox doesn't
        support this particular alias (it supports ISO8859-1 to ISO8859-15, but only supports the
        main name for ISO-8859-16).

2010-08-06  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        SVG - stroke-width:0 bug with stroke other than "none"
        https://bugs.webkit.org/show_bug.cgi?id=42387

        Stop storing refcounted CSSValue/CSSValueList objects in SVGRenderStyle, replacing them with SVGLength types.
        Allows us to directly specify default values for stroke-dashoffset/width in the SVGRenderStyle, fixing a problem
        with stroke-width animations when resetting to the original stored baseVal, exposed in svg/W3C-1.1/animate-elem-40-t.svg
        Originally discovered by Fady Samuel.

        Test: svg/custom/path-zero-strokewidth.svg

        * css/SVGCSSComputedStyleDeclaration.cpp:
        (WebCore::strokeDashArrayToCSSValueList): New helper function converting from Vector<SVGLength> to CSSValueList.
        (WebCore::CSSComputedStyleDeclaration::getSVGPropertyCSSValue): Convert SVGLength values to CSSPrimitiveValues.
        * css/SVGCSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applySVGProperty): Convert CSSPrimitiveValues to SVGLength objects, for SVGRenderStyle storage.
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::calculateMarkerBoundsIfNeeded): Just grab strokeWidth SVGLength value from SVGRenderSTyle, no need to call cssPrimitiveToLength anymore.
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::strokeBoundingBox): Ditto.
        * rendering/SVGCharacterLayoutInfo.cpp:
        (WebCore::calculateBaselineShift): Ditto (for baseline-shift).
        * rendering/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::buildLayoutInformation): Ditto (for kerning).
        * rendering/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::applyStrokeStyleToContext): Ditto (for stroke-width/stroke-dashoffset/stroke-dasharray).
        * rendering/SVGRenderSupport.h:
        * rendering/SVGRenderTreeAsText.cpp:
        (WebCore::writeStyle): Ditto.
        * rendering/SVGTextLayoutUtilities.cpp:
        (WebCore::calculateCSSKerning): Ditto.
        * rendering/SVGTextLayoutUtilities.h:
        * rendering/style/SVGRenderStyle.cpp: Remove no longer needed cssPrimitiveToLength function.
        * rendering/style/SVGRenderStyle.h: Stop storing RefPtr<CSSValue> / RefPtr<CSSValueList> but use SVGLength/Vector<SVGLength>.
        (WebCore::SVGRenderStyle::initialStrokeDashArray): Allows us to specify correct default values, instead of null pointers.
        (WebCore::SVGRenderStyle::initialBaselineShiftValue): Specify 0px default value.
        (WebCore::SVGRenderStyle::initialKerning): Ditto.
        (WebCore::SVGRenderStyle::initialStrokeDashOffset): Ditto.
        (WebCore::SVGRenderStyle::initialStrokeWidth): Specify 1px default value.
        (WebCore::SVGRenderStyle::setStrokeDashArray): Takes a Vector<SVGLength> now, not a PassRefPtr<CSSValueList>.
        (WebCore::SVGRenderStyle::setStrokeWidth): Takes a SVGLength now, not a PassRefPtr<CSSValue>.
        (WebCore::SVGRenderStyle::setStrokeDashOffset): Ditto.
        (WebCore::SVGRenderStyle::setKerning): Ditto.
        (WebCore::SVGRenderStyle::setStopColor): Pass Color as const-reference.
        (WebCore::SVGRenderStyle::setFloodColor): Ditto.
        (WebCore::SVGRenderStyle::setLightingColor): Ditto.
        (WebCore::SVGRenderStyle::setBaselineShiftValue): Takes a SVGLength now, not a PassRefPtr<CSSValue>.
        (WebCore::SVGRenderStyle::setShadow): Reformat, had wrong style.
        (WebCore::SVGRenderStyle::setClipperResource): Pass String as const-reference.
        (WebCore::SVGRenderStyle::setFilterResource): Ditto.
        (WebCore::SVGRenderStyle::setMaskerResource): Ditto.
        (WebCore::SVGRenderStyle::setMarkerStartResource): Ditto.
        (WebCore::SVGRenderStyle::setMarkerMidResource): Ditto.
        (WebCore::SVGRenderStyle::setMarkerEndResource): Ditto.
        (WebCore::SVGRenderStyle::strokeDashArray): Return Vector<SVGLength>.
        (WebCore::SVGRenderStyle::strokeWidth): Return SVGLength.
        (WebCore::SVGRenderStyle::strokeDashOffset): Ditto.
        (WebCore::SVGRenderStyle::kerning): Ditto.
        (WebCore::SVGRenderStyle::baselineShiftValue): Ditto.
        * rendering/style/SVGRenderStyleDefs.cpp:
        (WebCore::StyleStrokeData::StyleStrokeData): Changed initialization order, to group stroke properties.
        * rendering/style/SVGRenderStyleDefs.h: Store SVGLength values instead of reference counted CSS objects.
        * svg/SVGLength.cpp:
        (WebCore::SVGLength::SVGLength): Add copy constructor.
        (WebCore::SVGLength::operator==): Add comparision operator.
        (WebCore::SVGLength::operator!=): Ditto.
        (WebCore::SVGLength::fromCSSPrimitiveValue): New static helper function to convert from a CSSPrimitiveValue.
        (WebCore::SVGLength::toCSSPrimitiveValue): New static helper function to convert to a CSSPrimitiveValue.
        * svg/SVGLength.h: Reindent.

2010-08-06  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Move Qt's popup menu implementation from WebCore to WebKit layer
        https://bugs.webkit.org/show_bug.cgi?id=43427

        After PopupMenu changes in bug 42592 class QtAbstractWebPopup became unecessary and
        there is no need to keep any Qt specific code for popup menus in WebCore/platform/qt.

        PopupMenuQt has been moved from WebCore/platform/qt to WebKit/qt/WebCoreSupport and
        assumed the responsibilities of QtAbstractWebPopup. SearchPopupMenuQt has been moved
        to WebKit/qt/WebCoreSupport as well.

        All classes that previously inherited from QtAbstractWebPopup now inherit from 
        QWebSelectMethod and QtPlatformPlugin's method createSelectInputMethod now returns an
        instance of class QWebSelectMethod instead of QtAbstractWebPopup.

        * WebCore.pro:
        * platform/qt/PopupMenuQt.cpp: Removed.
        * platform/qt/PopupMenuQt.h: Removed.
        * platform/qt/QtAbstractWebPopup.cpp: Removed.
        * platform/qt/QtAbstractWebPopup.h: Removed.
        * platform/qt/SearchPopupMenuQt.cpp: Removed.
        * platform/qt/SearchPopupMenuQt.h: Removed.

2010-08-05  Marcus Bulach  <bulach@chromium.org>

        Reviewed by Jeremy Orlow.

        Initial bindings and plumbing for IDBCursor.
        https://bugs.webkit.org/show_bug.cgi?id=41888

        Test: storage/indexeddb/idb-opencursor.html

        * Android.derived.jscbindings.mk:
        * Android.derived.v8bindings.mk:
        * Android.mk:
        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/v8/custom/V8IDBAnyCustom.cpp:
        (WebCore::toV8):
        * storage/IDBAny.cpp:
        (WebCore::IDBAny::idbCursor):
        (WebCore::IDBAny::set):
        * storage/IDBAny.h:
        (WebCore::IDBAny::):
        * storage/IDBCallbacks.h:
        * storage/IDBCursor.cpp: Added.
        (WebCore::IDBCursor::IDBCursor):
        (WebCore::IDBCursor::~IDBCursor):
        (WebCore::IDBCursor::direction):
        (WebCore::IDBCursor::key):
        (WebCore::IDBCursor::value):
        (WebCore::IDBCursor::update):
        (WebCore::IDBCursor::continueFunction):
        (WebCore::IDBCursor::remove):
        * storage/IDBCursor.h: Added.
        (WebCore::IDBCursor::):
        (WebCore::IDBCursor::create):
        * storage/IDBCursor.idl: Added.
        * storage/IDBCursorBackendImpl.cpp: Added.
        (WebCore::IDBCursorBackendImpl::IDBCursorBackendImpl):
        (WebCore::IDBCursorBackendImpl::~IDBCursorBackendImpl):
        (WebCore::IDBCursorBackendImpl::direction):
        (WebCore::IDBCursorBackendImpl::key):
        (WebCore::IDBCursorBackendImpl::value):
        (WebCore::IDBCursorBackendImpl::update):
        (WebCore::IDBCursorBackendImpl::continueFunction):
        (WebCore::IDBCursorBackendImpl::remove):
        * storage/IDBCursorBackendImpl.h: Added.
        (WebCore::IDBCursorBackendImpl::create):
        * storage/IDBCursorBackendInterface.h: Added.
        (WebCore::IDBCursorBackendInterface::~IDBCursorBackendInterface):
        * storage/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::openCursor):
        * storage/IDBObjectStore.h:
        * storage/IDBObjectStore.idl:
        * storage/IDBObjectStoreBackendImpl.cpp:
        (WebCore::IDBObjectStoreBackendImpl::openCursor):
        * storage/IDBObjectStoreBackendImpl.h:
        * storage/IDBObjectStoreBackendInterface.h:
        * storage/IDBRequest.cpp:
        (WebCore::IDBRequest::onSuccess):
        (WebCore::IDBRequest::timerFired):
        * storage/IDBRequest.h:

2010-08-06  Andrei Popescu  <andreip@google.com>

        Unreviewed, release build fix.

        Leopard relase build is broken due to absolute path to JSIDBTransaction.cpp file present in Xcode project file.
        https://bugs.webkit.org/show_bug.cgi?id=43616

        * WebCore.xcodeproj/project.pbxproj:

2010-08-05  Andrei Popescu  <andreip@dhcp-172-16-14-12.lon.corp.google.com>

        Reviewed by Jeremy Orlow.

        [IndexedDB] IndexedDB is missing the Transaction interface.
        https://bugs.webkit.org/show_bug.cgi?id=42970

        Add IDBTransaction boilerplate.

        No new tests, not functional yet.

        * Android.derived.jscbindings.mk:
        * Android.derived.v8bindings.mk:
        * Android.mk:
        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/EventNames.h:
        * storage/IDBDatabase.cpp:
        (WebCore::IDBDatabase::transaction):
        * storage/IDBDatabase.h:
        * storage/IDBDatabase.idl:
        * storage/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::transaction):
        * storage/IDBDatabaseBackendImpl.h:
        * storage/IDBDatabaseBackendInterface.h:
        * storage/IDBRequest.cpp:
        (WebCore::IDBRequest::IDBRequest):
        (WebCore::IDBRequest::canSuspend):
        (WebCore::IDBRequest::timerFired):
        (WebCore::IDBRequest::onEventCommon):
        * storage/IDBRequest.h:
        * storage/IDBTransaction.cpp: Added.
        (WebCore::IDBTransaction::IDBTransaction):
        (WebCore::IDBTransaction::~IDBTransaction):
        (WebCore::IDBTransaction::mode):
        (WebCore::IDBTransaction::db):
        (WebCore::IDBTransaction::objectStore):
        (WebCore::IDBTransaction::abort):
        (WebCore::IDBTransaction::scriptExecutionContext):
        (WebCore::IDBTransaction::canSuspend):
        (WebCore::IDBTransaction::eventTargetData):
        (WebCore::IDBTransaction::ensureEventTargetData):
        * storage/IDBTransaction.h: Added.
        (WebCore::IDBTransaction::create):
        (WebCore::IDBTransaction::):
        (WebCore::IDBTransaction::toIDBTransaction):
        (WebCore::IDBTransaction::refEventTarget):
        (WebCore::IDBTransaction::derefEventTarget):
        * storage/IDBTransaction.idl: Added.
        * storage/IDBTransactionBackendInterface.h: Added.
        (WebCore::IDBTransactionBackendInterface::~IDBTransactionBackendInterface):

2010-08-06  Rafael Antognolli  <antognolli@profusion.mobi>

        Unreviewed build fix.

        [EFL] Regression (64735) build fix for efl.
        https://bugs.webkit.org/show_bug.cgi?id=43564

        Removing bindings/js/ScriptArray.cpp from the WebCore_SOURCES.
        No new features, so no new tests.

        * CMakeLists.txt:

2010-08-05  Alexey Proskuryakov  <ap@apple.com>

        Fix http/tests/webarchive/test-css-url-encoding-shift-jis.html

        For some reason, I didn't see the failure locally, but bots complain.

        * platform/text/TextCodecICU.cpp: (WebCore::TextCodecICU::registerExtendedEncodingNames):
        Register "shift-jis" (with dash instead of underscore). At least Firefox supports it.

2010-08-05  Ben Murdoch  <benm@google.com>

        Reviewed by Simon Fraser.

        Form button input elements lacking text in some cases after switching from
        visibility:collapse to visibility:visible
        https://bugs.webkit.org/show_bug.cgi?id=38050
        
        A relayout is required after toggling visibility from collapse to another value.

        Test: fast/css/visibility-collapse-form-buttons.html

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::diff): If we're toggling from visibility:collapse to another
            visibility value (or vice versa) then we need to trigger a relayout.

2010-08-05  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=43554
        Way too many encoding aliases are treated as valid

        <rdar://problem/7863399> Garbage characters displayed in some yesky.com pages.

        <rdar://problem/7859068> Garbage characters displayed for most text at ceping.zhaopin.com

        Test: http/tests/misc/bad-charset-alias.html

        * loader/TextResourceDecoder.cpp: (WebCore::TextResourceDecoder::checkForCSSCharset):
        Fix encoding name length computation. Previously, a trailing quote was ignored by
        TextEncodingRegistry.
        
        * platform/text/TextCodecICU.cpp: (WebCore::TextCodecICU::registerExtendedEncodingNames):
        Added dashes to alias names that didn't have them. Added aliases prompted by regression tests.

        * platform/text/TextCodecLatin1.cpp: (WebCore::TextCodecLatin1::registerEncodingNames):
        Don't register 8859-1, other browsers do not support this encoding name.

        * platform/text/TextEncoding.cpp: (WebCore::Latin1Encoding):
        "Latin-1" is not a real encoding name, it's not known to Firefox or IE.

        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::TextEncodingNameHash::equal): Changed to no longer ignore non-alphanumeric characters.
        There is a good chance that we'll be missing support for some necessary alias names, but other
        browsers don't ignore any characters when matching names.
        (WebCore::TextEncodingNameHash::hash): Ditto.
        (WebCore::checkExistingName): Re-formatted a line.
        (WebCore::isUndesiredAlias): Added a filter to reject "8859_1" and any names containing commas.
        (WebCore::addToTextEncodingNameMap): Used it.
        (WebCore::atomicCanonicalTextEncodingName): Changed to no longer ignore non-alphanumeric characters.

2010-08-05  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Temporary files should not be created in the current directory
        https://bugs.webkit.org/show_bug.cgi?id=43562

        Don't create temporary files in the current directory, use QDir::tempPath()
        instead, as suggested by the QTemporaryFile documentation.

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

2010-08-05  François Sausset  <sausset@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        Make STIX font the default one to render MathML
        https://bugs.webkit.org/show_bug.cgi?id=41961

        * css/mathml.css:
        (math):

2010-08-05  Cosmin Truta  <ctruta@chromium.org>

        Reviewed by Eric Seidel.

        Apply a stylistic fix to the patch 62640.
        https://bug-41175-attachments.webkit.org/attachment.cgi?id=62640
        https://bugs.webkit.org/show_bug.cgi?id=41175

        * WebCore/platform/graphics/skia/ImageBufferSkia.cpp:
        (getImageData):

2010-08-05  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Adam Roben.

        Make SearchPopupMenuWin more portable
        https://bugs.webkit.org/show_bug.cgi?id=43527

        Add #if PLATFORM(CF) around CoreFoundation code.

        * platform/win/SearchPopupMenuWin.cpp:
        (WebCore::SearchPopupMenuWin::enabled):
        (WebCore::SearchPopupMenuWin::saveRecentSearches):
        (WebCore::SearchPopupMenuWin::loadRecentSearches):

2010-08-05  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r63653.
        http://trac.webkit.org/changeset/63653
        https://bugs.webkit.org/show_bug.cgi?id=43592

        regressed multiple background-images (Requested by smfr on
        #webkit).

        * manual-tests/css3-background-layer-count.html: Removed.
        * rendering/style/FillLayer.cpp:
        (WebCore::FillLayer::fillUnsetProperties):
        (WebCore::FillLayer::cullEmptyLayers):
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::adjustBackgroundLayers):
        (WebCore::InheritedFlags::adjustMaskLayers):

2010-08-05  Mark Rowe  <mrowe@apple.com>

        Reviewed by Jon Honeycutt.

        Fix some leaks seen on the buildbot.

        * platform/graphics/cg/GraphicsContext3DCG.cpp:
        (WebCore::GraphicsContext3D::paintToCanvas): Adopt the newly-created CoreGraphics objects rather than sharing ownership
        and over-incrementing their reference count. Also cleaned up the bizarre wrapping used for function arguments while I was
        touching this code.

2010-08-05  James Robinson  <jamesr@chromium.org>

        Rubber stamped by Eric Seidel.

        [SVG] SVGPathSeg.cpp needs an #if ENABLE(SVG) guard
        https://bugs.webkit.org/show_bug.cgi?id=43599

        Matches the rest of the .cpp files in this directory.

        * svg/SVGPathSeg.cpp:

2010-08-05  Erik Arvidsson  <arv@chromium.org>

        Reviewed by Kent Tamura.

        Calling setCustomValidity should trigger a layout
        https://bugs.webkit.org/show_bug.cgi?id=43582

        Test: fast/forms/setCustomValidity.html

        * html/ValidityState.cpp:
        (WebCore::ValidityState::setCustomErrorMessage): Call setNeedsValidityCheck to tell the system that the validity might have changed.
        * html/ValidityState.h:

2010-08-05  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Add ability to get a JSValueRef for a node handle and a world
        https://bugs.webkit.org/show_bug.cgi?id=43591

        * WebCore.exp.in: Add exports.

2010-08-05  Gavin Barraclough  <barraclough@apple.com>

        Rubber stamped by Sam Weinig

        Bug 43594 - Add string forwards to Forward.h
        This allows us to remove forward declarations for these classes from
        WebCore/WebKit (a step in moving these class from WebCore:: to WTF::).

        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/AXObjectCache.h:
        * accessibility/AccessibilityARIAGrid.h:
        * accessibility/AccessibilityListBoxOption.h:
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/AccessibilityTable.h:
        * bindings/cpp/WebDOMCString.h:
        * bindings/cpp/WebDOMString.h:
        * bindings/gobject/ConvertToUTF8String.h:
        * bindings/js/DOMWrapperWorld.h:
        * bindings/js/JSDOMBinding.h:
        * bindings/js/JSDOMWindowBase.h:
        * bindings/js/JSMessagePortCustom.h:
        * bindings/js/JavaScriptCallFrame.h:
        * bindings/js/ScriptController.h:
        * bindings/js/ScriptProfile.h:
        * bindings/js/ScriptSourceProvider.h:
        * bindings/js/ScriptString.h:
        * bindings/js/WorkerScriptController.h:
        * bindings/objc/DOMImplementationFront.h:
        * bindings/v8/ScheduledAction.h:
        * bindings/v8/ScriptController.h:
        * bindings/v8/V8DOMWindowShell.h:
        * bindings/v8/V8Proxy.h:
        * bindings/v8/V8Utilities.h:
        * bindings/v8/custom/V8CustomXPathNSResolver.h:
        * bridge/c/c_utility.h:
        * css/CSSFontSelector.h:
        * css/CSSHelper.h:
        * css/CSSOMUtils.h:
        * css/CSSPrimitiveValue.h:
        * css/MediaList.h:
        * css/StyleBase.h:
        * css/StyleSheetList.h:
        * css/WebKitCSSKeyframesRule.h:
        * dom/CheckedRadioButtons.h:
        * dom/DOMImplementation.h:
        * dom/DocumentMarker.h:
        * dom/DynamicNodeList.h:
        * dom/EventTarget.h:
        * dom/MessagePort.h:
        * dom/MessagePortChannel.h:
        * dom/NameNodeList.h:
        * dom/Node.h:
        * dom/NodeList.h:
        * dom/OptionGroupElement.h:
        * dom/ScriptExecutionContext.h:
        * dom/SelectElement.h:
        * dom/ViewportArguments.h:
        * dom/make_names.pl:
        * editing/HTMLInterchange.h:
        * editing/htmlediting.h:
        * editing/markup.h:
        * html/CollectionCache.h:
        * html/DOMFormData.h:
        * html/DataGridColumnList.h:
        * html/DateComponents.h:
        * html/FileStream.h:
        * html/FileStreamProxy.h:
        * html/FormDataList.h:
        (WebCore::FormDataList::appendData):
        * html/HTMLCollection.h:
        * html/HTMLElementStack.h:
        * html/HTMLFormattingElementList.h:
        * html/HTMLParserQuirks.h:
        * html/HTMLQuoteElement.h:
        * html/HTMLScriptRunnerHost.h:
        * html/StepRange.h:
        * html/canvas/CanvasGradient.h:
        * html/canvas/CanvasNumberArray.h:
        * html/canvas/CanvasPattern.h:
        * inspector/InjectedScript.h:
        * inspector/InspectorCSSStore.h:
        * inspector/InspectorClient.h:
        * inspector/InspectorFrontendClient.h:
        * inspector/InspectorValues.h:
        * inspector/ScriptDebugListener.h:
        * loader/CachedResourceClient.h:
        * loader/CrossOriginAccessControl.h:
        * loader/DocumentThreadableLoader.h:
        * loader/FrameLoaderClient.h:
        * loader/RedirectScheduler.h:
        * loader/SubframeLoader.h:
        * loader/appcache/DOMApplicationCache.h:
        * loader/archive/ArchiveFactory.h:
        * loader/icon/IconDatabaseClient.h:
        * notifications/NotificationPresenter.h:
        * page/Chrome.h:
        * page/ChromeClient.h:
        * page/Console.h:
        * page/ContextMenuClient.h:
        * page/DOMSelection.h:
        * page/EditorClient.h:
        * page/EventHandler.h:
        * page/FrameView.h:
        * page/GeolocationPositionCache.h:
        * page/History.h:
        * page/Location.h:
        * page/Navigator.h:
        * page/NavigatorBase.h:
        * page/PluginHalterClient.h:
        * page/PrintContext.h:
        * page/SpeechInput.h:
        * page/SpeechInputListener.h:
        * page/animation/AnimationController.h:
        * platform/CookieJar.h:
        * platform/CrossThreadCopier.h:
        * platform/DragImage.h:
        * platform/FileSystem.h:
        * platform/Language.h:
        * platform/Length.h:
        * platform/LinkHash.h:
        * platform/LocalizationStrategy.h:
        * platform/LocalizedStrings.h:
        * platform/Logging.h:
        * platform/Pasteboard.h:
        * platform/PopupMenuClient.h:
        * platform/SearchPopupMenu.h:
        * platform/Widget.h:
        * platform/cf/BinaryPropertyList.h:
        * platform/chromium/ChromiumBridge.h:
        * platform/chromium/ClipboardUtilitiesChromium.h:
        * platform/cocoa/KeyEventCocoa.h:
        * platform/graphics/Color.h:
        * platform/graphics/FontCache.h:
        * platform/graphics/FontData.h:
        * platform/graphics/FontSelector.h:
        * platform/graphics/GraphicsTypes.h:
        * platform/graphics/Icon.h:
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/ImageSource.h:
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        * platform/graphics/Path.h:
        * platform/graphics/StringTruncator.h:
        * platform/graphics/cairo/FontCustomPlatformData.h:
        * platform/graphics/cairo/FontPlatformData.h:
        * platform/graphics/cg/FontPlatformData.h:
        * platform/graphics/cg/ImageSourceCG.h:
        * platform/graphics/chromium/FontCustomPlatformData.h:
        * platform/graphics/chromium/FontPlatformDataChromiumWin.h:
        * platform/graphics/chromium/FontPlatformDataLinux.h:
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
        * platform/graphics/haiku/FontCustomPlatformData.h:
        * platform/graphics/mac/FontCustomPlatformData.h:
        * platform/graphics/mac/FontPlatformData.h:
        * platform/graphics/qt/FontCustomPlatformData.h:
        * platform/graphics/qt/FontPlatformData.h:
        * platform/graphics/win/FontCustomPlatformData.h:
        * platform/graphics/win/FontCustomPlatformDataCairo.h:
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.h:
        * platform/graphics/win/MediaPlayerPrivateQuickTimeWin.h:
        * platform/graphics/wince/FontPlatformData.h:
        * platform/graphics/wince/MediaPlayerPrivateWince.h:
        * platform/graphics/wince/MediaPlayerProxy.h:
        * platform/graphics/wx/FontCustomPlatformData.h:
        * platform/graphics/wx/FontPlatformData.h:
        * platform/mac/PasteboardHelper.h:
        * platform/network/DNS.h:
        * platform/network/FormData.h:
        * platform/network/FormDataBuilder.h:
        * platform/network/HTTPParsers.h:
        * platform/text/Hyphenation.h:
        * platform/text/LineEnding.h:
        * platform/text/TextCodec.h:
        * platform/text/TextEncoding.h:
        * platform/text/TextStream.h:
        * platform/win/BString.h:
        * platform/win/ClipboardUtilitiesWin.h:
        * platform/win/WCDataObject.h:
        * platform/win/WebCoreTextRenderer.h:
        * plugins/DOMMimeType.h:
        * plugins/DOMMimeTypeArray.h:
        * plugins/DOMPlugin.h:
        * plugins/DOMPluginArray.h:
        * rendering/CounterNode.h:
        * rendering/HitTestResult.h:
        * rendering/RenderObjectChildList.h:
        * rendering/RenderText.h:
        * rendering/RenderTreeAsText.h:
        * rendering/TextControlInnerElements.h:
        * rendering/style/ContentData.h:
        * rendering/style/RenderStyle.h:
        * storage/DatabaseAuthorizer.h:
        * storage/DatabaseTrackerClient.h:
        * storage/SQLTransaction.h:
        * storage/SQLTransactionSync.h:
        * storage/Storage.h:
        * storage/chromium/DatabaseObserver.h:
        * svg/SVGAnimatedTemplate.h:
        * svg/SVGDocumentExtensions.h:
        * svg/SVGGlyphElement.h:
        * svg/SVGHKernElement.h:
        * svg/SVGNumberList.h:
        * svg/SVGPointList.h:
        * svg/SVGPreserveAspectRatio.h:
        * svg/SVGStylable.h:
        * svg/SVGTests.h:
        * svg/SVGTransformList.h:
        * svg/SVGTransformable.h:
        * svg/SVGVKernElement.h:
        * websockets/ThreadableWebSocketChannel.h:
        * websockets/ThreadableWebSocketChannelClientWrapper.h:
        * websockets/WebSocket.h:
        * websockets/WebSocketChannel.h:
        * websockets/WebSocketHandshakeResponse.h:
        * wml/WMLErrorHandling.h:
        * wml/WMLPageState.h:
        * wml/WMLVariables.h:
        * workers/DefaultSharedWorkerRepository.h:
        * workers/SharedWorkerRepository.h:
        * workers/Worker.h:
        * workers/WorkerContextProxy.h:
        * workers/WorkerLoaderProxy.h:
        * workers/WorkerLocation.h:
        * workers/WorkerMessagingProxy.h:
        * workers/WorkerReportingProxy.h:
        * workers/WorkerThread.h:
        * xml/DOMParser.h:
        * xml/XMLHttpRequestUpload.h:
        * xml/XPathEvaluator.h:
        * xml/XPathExpression.h:
        * xml/XPathNSResolver.h:
        * xml/XPathResult.h:
        * xml/XPathUtil.h:

2010-08-05  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        U+0000 is turned to U+FFFD (replacement character)
        https://bugs.webkit.org/show_bug.cgi?id=42112

        This patch introduces an intentional parsing difference from the HTML5
        parsing specificiation.  The spec requires us to convert NULL
        characters to U+FFFD, but doing so causes compatibility issues with a
        number of sites, including US Bank.

        In this patch, we strip the null characters instead in certain cases.
        Firefox has made a corresponding change.  After gathering compatability
        data, we hope to convince the HTML WG to adopt this change.

        Tests: fast/tokenizer/null-in-text.html
               fast/tokenizer/null-xss.html

        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::HTMLTokenizer):
        (WebCore::HTMLTokenizer::reset):
        * html/HTMLTokenizer.h:
        (WebCore::HTMLTokenizer::setSkipLeadingNewLineForListing):
        (WebCore::HTMLTokenizer::forceNullCharacterReplacement):
        (WebCore::HTMLTokenizer::setForceNullCharacterReplacement):
        (WebCore::HTMLTokenizer::shouldSkipNullCharacters):
        (WebCore::HTMLTokenizer::InputStreamPreprocessor::InputStreamPreprocessor):
        (WebCore::HTMLTokenizer::InputStreamPreprocessor::peek):
        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::passTokenToLegacyParser):
        (WebCore::HTMLTreeBuilder::constructTreeFromToken):
        (WebCore::HTMLTreeBuilder::processStartTagForInBody):

2010-08-05  Andy Estes  <aestes@apple.com>

        Reviewed by David Kilzer.

        Rename iOS-related OS and PLATFORM macros.
        https://bugs.webkit.org/show_bug.cgi?id=43493

        Rename WTF_OS_IPHONE_OS to WTF_OS_IOS, WTF_PLATFORM_IPHONE to
        WTF_PLATFORM_IOS, and WTF_PLATFORM_IPHONE_SIMULATOR to
        WTF_PLATFORM_IOS_SIMULATOR.

        * platform/cocoa/KeyEventCocoa.mm:
        * platform/iphone/KeyEventIPhone.mm:
        * platform/network/Credential.h:

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

        Reviewed by Sam Weinig.

        Use the visited link provider for visited links
        https://bugs.webkit.org/show_bug.cgi?id=43583

        Export Page::visitedStateChanged and Page::allvisitedStateChanged.

        * WebCore.exp.in:

2010-08-05  Eric Seidel  <eric@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Touching SVGNames should only rebuild hundreds of files, not thousands
        https://bugs.webkit.org/show_bug.cgi?id=43308

        Remove SVGNames.h include from several core SVG header files
        which do not need to include it.

        One of them, SVGPathSeg.h, required creation of an SVGPathSeg.cpp.
        A bunch of SVGPathSeg* could remove PlatformString.h includes if
        we moved their toString() methods into the .cpp files.

        I re-indented on header to stop check-webkit-style from complaining.
        I removed a couple mode lines I saw, since my understanding from
        previous webkit-dev threads is that we plan to remove those all.

        No functional change, thus no tests.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * svg/SVGAllInOne.cpp:
        * svg/SVGAngle.h:
        * svg/SVGPathSeg.cpp: Added.
        (WebCore::SVGPathSeg::~SVGPathSeg):
        (WebCore::SVGPathSeg::pathSegType):
        (WebCore::SVGPathSeg::pathSegTypeAsLetter):
        (WebCore::SVGPathSeg::toString):
        (WebCore::SVGPathSeg::associatedAttributeName):
        (WebCore::SVGPathSegSingleCoord::toString):
        * svg/SVGPathSeg.h:
        (WebCore::SVGPathSegSingleCoord::SVGPathSegSingleCoord):
        * svg/SVGPathSegArc.cpp:
        (WebCore::SVGPathSegArc::toString):
        * svg/SVGPathSegArc.h:
        (WebCore::SVGPathSegArc::SVGPathSegArc):
        * svg/SVGPathSegClosePath.h:
        (WebCore::SVGPathSegClosePath::create):
        (WebCore::SVGPathSegClosePath::pathSegType):
        (WebCore::SVGPathSegClosePath::pathSegTypeAsLetter):
        (WebCore::SVGPathSegClosePath::toString):
        * svg/SVGPathSegCurvetoCubic.h:
        * svg/SVGPathSegCurvetoCubicSmooth.h:
        * svg/SVGPathSegCurvetoQuadratic.h:
        * svg/SVGPathSegCurvetoQuadraticSmooth.h:
        * svg/SVGPathSegLineto.h:
        * svg/SVGPathSegLinetoHorizontal.h:
        * svg/SVGPathSegLinetoVertical.h:
        * svg/SVGPathSegMoveto.h:
        * svg/SVGTransform.h:

2010-08-05  Dirk Schulze  <krit@webkit.org>

        Unreviewed sort of Xcode project file.

        * WebCore.xcodeproj/project.pbxproj:

2010-08-05  Adam Barth  <abarth@webkit.org>

        Actually make HTMLEntityNames.json valid JSON.

        * html/HTMLEntityNames.json:

2010-08-05  Beth Dakin  <bdakin@apple.com>

        Reviewed by Kenneth Rohde Christiansen.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=43516 REGRESSION: 
        Huge number of memory leaks after enabling MathML
        -and corresponding-
        <rdar://problem/8274123>

        Destroy the old children in 
        RenderMathMLOperator::updateFromElement() instead of just removing 
        them since just removing them will cause them to leak.
        * mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::updateFromElement):

2010-08-05  Tony Chang  <tony@chromium.org>

        Reviewed by David Hyatt.

        Fix a crash when a hidden iframe with a custom scrollbar finishes loading an image.
        https://bugs.webkit.org/show_bug.cgi?id=42724

        Test: scrollbars/hidden-iframe-scrollbar-crash2.html

        * page/FrameView.cpp:
        (WebCore::FrameView::createScrollbar):
        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::createCustomScrollbar): Pass in Frame
        (WebCore::RenderScrollbar::RenderScrollbar): Pass in Frame
        (WebCore::RenderScrollbar::owningRenderer): Use the frame to get the RenderBox
        (WebCore::RenderScrollbar::getScrollbarPseudoStyle):
        (WebCore::RenderScrollbar::updateScrollbarParts):
        (WebCore::RenderScrollbar::updateScrollbarPart):
        * rendering/RenderScrollbar.h:
        * rendering/RenderScrollbarPart.cpp:
        (WebCore::RenderScrollbarPart::computeScrollbarWidth): null check
        (WebCore::RenderScrollbarPart::computeScrollbarHeight): null check

2010-08-05  Yong Li  <yoli@rim.com>

        Reviewed by Adam Treat.

        Fix the problem that down-sampling code doesn't work
        for some GIF's. GIF reader can call setSize() multiple times.
        We should clear the scaling maps before adding new entries.
        Also add a fast path to check if the size has changed since last time.

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

        * platform/image-decoders/ImageDecoder.cpp:
        (WebCore::ImageDecoder::prepareScaleDataIfNecessary):
        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::setSize):

2010-08-05  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        WebInspector: In the current implementation of inspector agents we're calling
        did methods manually. That is error prone and is bad from protocol point of view.
        It would be better to call did methods automatically from the corresponding methods
        of InspectorBackendDispatcher and report the results. As far as our protocol is
        statefull this trick will keep it in the consistent state.
        https://bugs.webkit.org/show_bug.cgi?id=43489

        * inspector/CodeGeneratorInspector.pm:
        * inspector/Inspector.idl:
        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::getApplicationCaches):
        * inspector/InspectorApplicationCacheAgent.h:
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::getProfilerLogLines):
        (WebCore::InspectorBackend::setInjectedScriptSource):
        (WebCore::InspectorBackend::dispatchOnInjectedScript):
        (WebCore::InspectorBackend::clearConsoleMessages):
        (WebCore::InspectorBackend::releaseWrapperObjectGroup):
        (WebCore::InspectorBackend::getDatabaseTableNames):
        * inspector/InspectorBackend.h:
        * inspector/InspectorCSSStore.cpp:
        (WebCore::InspectorCSSStore::inspectorStyleSheet):
        * inspector/InspectorCSSStore.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::getCookies):
        (WebCore::InspectorController::getDOMStorageEntries):
        (WebCore::InspectorController::setDOMStorageItem):
        (WebCore::InspectorController::removeDOMStorageItem):
        (WebCore::InspectorController::getProfileHeaders):
        (WebCore::InspectorController::getProfile):
        (WebCore::InspectorController::editScriptSource):
        (WebCore::InspectorController::getScriptSource):
        (WebCore::InspectorController::setBreakpoint):
        (WebCore::InspectorController::getResourceContent):
        * inspector/InspectorController.h:
        (WebCore::InspectorController::inspectorClient):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::getChildNodes):
        (WebCore::InspectorDOMAgent::setAttribute):
        (WebCore::InspectorDOMAgent::removeAttribute):
        (WebCore::InspectorDOMAgent::removeNode):
        (WebCore::InspectorDOMAgent::changeTagName):
        (WebCore::InspectorDOMAgent::getOuterHTML):
        (WebCore::InspectorDOMAgent::setOuterHTML):
        (WebCore::InspectorDOMAgent::setTextNodeValue):
        (WebCore::InspectorDOMAgent::getEventListenersForNode):
        (WebCore::InspectorDOMAgent::getStyles):
        (WebCore::InspectorDOMAgent::getAllStyles):
        (WebCore::InspectorDOMAgent::getStyleSheet):
        (WebCore::InspectorDOMAgent::getRuleRanges):
        (WebCore::InspectorDOMAgent::getInlineStyle):
        (WebCore::InspectorDOMAgent::getComputedStyle):
        (WebCore::InspectorDOMAgent::applyStyleText):
        (WebCore::InspectorDOMAgent::setStyleText):
        (WebCore::InspectorDOMAgent::setStyleProperty):
        (WebCore::InspectorDOMAgent::toggleStyleEnabled):
        (WebCore::InspectorDOMAgent::setRuleSelector):
        (WebCore::InspectorDOMAgent::addRule):
        (WebCore::InspectorDOMAgent::buildObjectForRule):
        (WebCore::InspectorDOMAgent::pushNodeByPathToFrontend):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorValues.cpp:
        (WebCore::InspectorValue::asNumber):
        (WebCore::InspectorBasicValue::asNumber):
        * inspector/InspectorValues.h:
        * inspector/front-end/Callback.js:
        (WebInspector.Callback.prototype.processCallback):
        (WebInspector.Callback.prototype.removeCallbackEntry):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.reset):
        * inspector/front-end/inspector.js:
        (WebInspector.reportProtocolError):

2010-08-04  Kenneth Russell  <kbr@google.com>

        Reviewed by Dimitri Glazkov.

        Style cleanups in WebGL
        https://bugs.webkit.org/show_bug.cgi?id=38761

        Cleaned up all style violations in WebGL-related files reported by
        check-webkit-style. No logic or other changes. Built WebKit and
        Chromium and ran WebGL layout tests.

        * html/canvas/ArrayBuffer.cpp:
        (WebCore::ArrayBuffer::ArrayBuffer):
        (WebCore::ArrayBuffer::data):
        (WebCore::ArrayBuffer::byteLength):
        (WebCore::ArrayBuffer::~ArrayBuffer):
        (WebCore::ArrayBuffer::tryAllocate):
        * html/canvas/ArrayBufferView.cpp:
        (WebCore::ArrayBufferView::setImpl):
        * html/canvas/ArrayBufferView.h:
        * html/canvas/TypedArrayBase.h:
        * html/canvas/WebGLBuffer.cpp:
        (WebCore::WebGLBuffer::deleteObjectImpl):
        (WebCore::WebGLBuffer::associateBufferData):
        * html/canvas/WebGLBuffer.h:
        (WebCore::WebGLBuffer::~WebGLBuffer):
        (WebCore::WebGLBuffer::elementArrayBuffer):
        (WebCore::WebGLBuffer::getTarget):
        (WebCore::WebGLBuffer::isBuffer):
        * html/canvas/WebGLFramebuffer.cpp:
        (WebCore::WebGLFramebuffer::deleteObjectImpl):
        * html/canvas/WebGLFramebuffer.h:
        (WebCore::WebGLFramebuffer::~WebGLFramebuffer):
        (WebCore::WebGLFramebuffer::isDepthAttached):
        (WebCore::WebGLFramebuffer::isStencilAttached):
        (WebCore::WebGLFramebuffer::isDepthStencilAttached):
        (WebCore::WebGLFramebuffer::isFramebuffer):
        * html/canvas/WebGLGetInfo.cpp:
        * html/canvas/WebGLGetInfo.h:
        * html/canvas/WebGLObject.cpp:
        (WebCore::WebGLObject::deleteObject):
        * html/canvas/WebGLObject.h:
        (WebCore::WebGLObject::object):
        (WebCore::WebGLObject::detachContext):
        (WebCore::WebGLObject::context):
        (WebCore::WebGLObject::isBuffer):
        (WebCore::WebGLObject::isFramebuffer):
        (WebCore::WebGLObject::isProgram):
        (WebCore::WebGLObject::isRenderbuffer):
        (WebCore::WebGLObject::isShader):
        (WebCore::WebGLObject::isTexture):
        * html/canvas/WebGLProgram.cpp:
        (WebCore::WebGLProgram::deleteObjectImpl):
        * html/canvas/WebGLProgram.h:
        (WebCore::WebGLProgram::~WebGLProgram):
        (WebCore::WebGLProgram::isLinkFailureFlagSet):
        (WebCore::WebGLProgram::setLinkFailureFlag):
        (WebCore::WebGLProgram::isProgram):
        * html/canvas/WebGLRenderbuffer.cpp:
        (WebCore::WebGLRenderbuffer::deleteObjectImpl):
        * html/canvas/WebGLRenderbuffer.h:
        (WebCore::WebGLRenderbuffer::~WebGLRenderbuffer):
        (WebCore::WebGLRenderbuffer::setInternalFormat):
        (WebCore::WebGLRenderbuffer::getInternalFormat):
        (WebCore::WebGLRenderbuffer::isInitialized):
        (WebCore::WebGLRenderbuffer::setInitialized):
        (WebCore::WebGLRenderbuffer::isRenderbuffer):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::beginPaint):
        (WebCore::WebGLRenderingContext::blendEquation):
        (WebCore::WebGLRenderingContext::getActiveAttrib):
        (WebCore::WebGLRenderingContext::getActiveUniform):
        (WebCore::WebGLRenderingContext::getBufferParameter):
        (WebCore::WebGLRenderingContext::getFramebufferAttachmentParameter):
        (WebCore::WebGLRenderingContext::vertexAttribPointer):
        * html/canvas/WebGLRenderingContext.h:
        (WebCore::WebGLRenderingContext::is3d):
        (WebCore::WebGLRenderingContext::isAccelerated):
        (WebCore::WebGLRenderingContext::graphicsContext3D):
        (WebCore::WebGLRenderingContext::cleanupAfterGraphicsCall):
        (WebCore::WebGLRenderingContext::VertexAttribState::VertexAttribState):
        (WebCore::WebGLRenderingContext::VertexAttribState::initValue):
        * html/canvas/WebGLShader.cpp:
        (WebCore::WebGLShader::deleteObjectImpl):
        * html/canvas/WebGLShader.h:
        (WebCore::WebGLShader::~WebGLShader):
        (WebCore::WebGLShader::getType):
        (WebCore::WebGLShader::isShader):
        * html/canvas/WebGLTexture.cpp:
        (WebCore::WebGLTexture::deleteObjectImpl):
        * html/canvas/WebGLTexture.h:
        (WebCore::WebGLTexture::~WebGLTexture):
        (WebCore::WebGLTexture::isCubeMapRWrapModeInitialized):
        (WebCore::WebGLTexture::setCubeMapRWrapModeInitialized):
        (WebCore::WebGLTexture::isTexture):
        (WebCore::WebGLTexture::LevelInfo::LevelInfo):
        (WebCore::WebGLTexture::LevelInfo::setInfo):
        * platform/graphics/GraphicsContext3D.h:
        (WebCore::GraphicsContext3D::):
        (WebCore::GraphicsContext3D::Attributes::Attributes):
        (WebCore::GraphicsContext3D::platformGraphicsContext3D):
        (WebCore::GraphicsContext3D::platformTexture):
        (WebCore::GraphicsContext3D::platformLayer):

2010-08-05  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Simon Hausmann.

        Make the viewport meta tag parser support the Android
        target-densitydpi extension.
        http://webkit.org/b/43492

        http://developer.android.com/reference/android/webkit/WebView.html
        Section 'Building web pages to support different screen densities'

        * dom/ViewportArguments.cpp:
        (WebCore::setViewportFeature):
        (WebCore::viewportErrorMessageTemplate):
        * dom/ViewportArguments.h:
        (WebCore::):
        (WebCore::ViewportArguments::ViewportArguments):
        (WebCore::ViewportArguments::hasCustomArgument):

2010-08-05  Jian Li  <jianli@chromium.org>
 
        Reviewed by David Levin.

        Unify blob related feature defines to ENABLE(BLOB).
        https://bugs.webkit.org/show_bug.cgi?id=43081

        * Configurations/FeatureDefines.xcconfig:
        * GNUmakefile.am:
        * WebCore.pri:
        * bindings/js/JSEventTarget.cpp:
        (WebCore::toJS):
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::convertEventTargetToV8Object):
        * dom/EventTarget.cpp:
        * dom/EventTarget.h:
        * dom/ExceptionCode.h:
        (WebCore::):
        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::~ScriptExecutionContext):
        * dom/ScriptExecutionContext.h:
        * html/Blob.cpp:
        * html/Blob.h:
        * html/Blob.idl:
        * html/FileError.h:
        * html/FileError.idl:
        * html/FileReader.cpp:
        * html/FileReader.h:
        * html/FileReader.idl:
        * html/FileStream.cpp:
        (WebCore::FileStream::openForRead):
        * html/FileStream.h:
        * html/FileStreamClient.h:
        * html/FileStreamProxy.cpp:
        * html/FileStreamProxy.h:
        * html/FileThread.cpp:
        * html/FileThread.h:
        * page/DOMWindow.idl:
        * platform/BlobItem.cpp:
        (WebCore::getFileSnapshotModificationTime):
        (WebCore::DataBlobItem::slice):
        (WebCore::FileBlobItem::slice):
        * platform/BlobItem.h:
        * platform/network/FormData.cpp:
        (WebCore::FormData::deepCopy):
        (WebCore::FormData::appendFile):
        (WebCore::FormData::appendItem):
        (WebCore::FormData::appendKeyValuePairItems):
        * platform/network/FormData.h:
        (WebCore::operator==):
        * platform/network/mac/FormDataStreamMac.mm:
        (WebCore::closeCurrentStream):
        (WebCore::advanceCurrentStream):
        (WebCore::formCreate):
        (WebCore::formRead):
        (WebCore::setHTTPBody):

2010-08-05  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        When trying to wrap a Node we know is an Element fallback to a
        simple Element wrapper in the worst case, not to Node.

        * bindings/gobject/WebKitDOMBinding.cpp:
        (WebKit::createWrapper):

2010-08-05  François Sausset  <sausset@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        Implement basic values of MathML mathvariant attribute
        https://bugs.webkit.org/show_bug.cgi?id=43481

        Test: mathml/presentation/attributes.xhtml

        * css/mathml.css:
        (math[mathvariant="normal"], mstyle[mathvariant="normal"], mo[mathvariant="normal"], mn[mathvariant="normal"], mi[mathvariant="normal"], mtext[mathvariant="normal"], mspace[mathvariant="normal"], ms[mathvariant="normal"]):
        (math[mathvariant="bold"], mstyle[mathvariant="bold"], mo[mathvariant="bold"], mn[mathvariant="bold"], mi[mathvariant="bold"], mtext[mathvariant="bold"], mspace[mathvariant="bold"], ms[mathvariant="bold"]):
        (math[mathvariant="italic"], mstyle[mathvariant="italic"], mo[mathvariant="italic"], mn[mathvariant="italic"], mi[mathvariant="italic"], mtext[mathvariant="italic"], mspace[mathvariant="italic"], ms[mathvariant="italic"]):
        (math[mathvariant="bold-italic"], mstyle[mathvariant="bold-italic"], mo[mathvariant="bold-italic"], mn[mathvariant="bold-italic"], mi[mathvariant="bold-italic"], mtext[mathvariant="bold-italic"], mspace[mathvariant="bold-italic"], ms[mathvariant="bold-italic"]):
        * mathml/mathattrs.in:

2010-08-05  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: inspected page crashes when there is a cyclic reference in Object prototype
        https://bugs.webkit.org/show_bug.cgi?id=43558

        Test: inspector/debugger-cyclic-ref.html

        * bindings/v8/ScriptValue.cpp:
        (WebCore::v8ToInspectorValue):

2010-08-05  Satish Sampath  <satish@chromium.org>

        Reviewed by Jeremy Orlow.

        Fix rendering of speech button and enable layout tests
        https://bugs.webkit.org/show_bug.cgi?id=43425

        Rewrote the speech button rendering code to match how the spin buttons (for input type=number)
        are implemented as the previous implementation did not work well on many platforms.

        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::~RenderTextControlSingleLine):
        (WebCore::RenderTextControlSingleLine::layout):
        (WebCore::RenderTextControlSingleLine::nodeAtPoint):
        (WebCore::RenderTextControlSingleLine::styleDidChange):
        (WebCore::RenderTextControlSingleLine::hasControlClip):
        (WebCore::RenderTextControlSingleLine::adjustControlHeightBasedOnLineHeight):
        (WebCore::RenderTextControlSingleLine::createSubtreeIfNeeded):
        (WebCore::RenderTextControlSingleLine::createInnerTextStyle):
        (WebCore::RenderTextControlSingleLine::createSpeechButtonStyle):
        (WebCore::RenderTextControlSingleLine::clientPaddingRight):
        * rendering/RenderTextControlSingleLine.h:
        * rendering/TextControlInnerElements.cpp:
        (WebCore::InputFieldSpeechButtonElement::InputFieldSpeechButtonElement):
        (WebCore::InputFieldSpeechButtonElement::create):
        * rendering/TextControlInnerElements.h:

2010-08-05  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Separated WebInspector extension API injection logic from other scripts that inspector injects.
        Enabled injection of the API scripts even if inspector is disabled for inspector front-end page.
        https://bugs.webkit.org/show_bug.cgi?id=43344

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::inspectedWindowScriptObjectCleared):
        (WebCore::InspectorController::setInspectorExtensionAPI):
        * inspector/InspectorController.h:
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::setExtensionAPI):

2010-08-05  Charles Wei  <charles.wei@torchmobile.com.cn>

        Reviewed by George Staikos.

        <noscript> is working the other way around in some cases with xhtmlmp enabled
        https://bugs.webkit.org/show_bug.cgi?id=43469

        Test: fast/xhtmlmp/noscript-basic.xhtml

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

2010-08-05  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Fix Win compilation.

        * bindings/js/JSBindingsAllInOne.cpp:

2010-08-05  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Clean up the input method handling
        https://bugs.webkit.org/show_bug.cgi?id=43545

        Changed input method hint interface to be more efficient by setting
        all hints in one shot, like in QWidget.

        * platform/qt/QWebPageClient.h:

2010-08-05  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: remove mutator methods from ScriptObject and remove ScriptArray.
        We shouldn't modify JS objects from InspectorController, InspectorValues
        should be used instead.
        https://bugs.webkit.org/show_bug.cgi?id=43546

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/ScriptArray.cpp: Removed.
        * bindings/js/ScriptArray.h: Removed.
        * bindings/js/ScriptCallStack.h:
        * bindings/js/ScriptObject.cpp:
        * bindings/js/ScriptObject.h:
        * bindings/v8/ScriptArray.cpp: Removed.
        * bindings/v8/ScriptArray.h: Removed.
        * bindings/v8/ScriptCallStack.h:
        * bindings/v8/ScriptObject.cpp:
        * bindings/v8/ScriptObject.h:

2010-08-05  Ned Holbrook  <nholbrook@apple.com>

        Reviewed by Darin Adler.

        ~5% complex layout performance improvement.
        https://bugs.webkit.org/show_bug.cgi?id=43436

        * platform/graphics/mac/ComplexTextController.h:
        * platform/graphics/mac/ComplexTextControllerCoreText.cpp:
        (WebCore::ComplexTextController::ComplexTextRun::ComplexTextRun): Use Vector rather than CFMutableData.
        (WebCore::ComplexTextController::ComplexTextRun::createTextRunFromFontDataCoreText): Ditto.
        (WebCore::ComplexTextController::collectComplexTextRunsForCharactersCoreText): Avoid typesetter allocation unless using typesetter options.

2010-08-05  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        targetReferenceFromResource() in SVGResources.cpp is missing an ENABLE(FILTERS) guard
        https://bugs.webkit.org/show_bug.cgi?id=43550

        Also updates an existing ENABLE(FILTERS) guard to avoid a compiler
        warning 'case FilterResourceType not handled in switch' when FILTERS
        is not enabled.

        No new tests, build fix only.

        * rendering/SVGResources.cpp:
        (WebCore::targetReferenceFromResource):
        (WebCore::SVGResources::resourceDestroyed):

2010-08-05  Victoria Kirst  <vrk@google.com>

        Reviewed by David Levin.

        Added logic to use glMapTexSubImage2D to write video layer to GPU
        texture. Also fixes CPU usage problem from previous patch.
        https://bugs.webkit.org/show_bug.cgi?id=43101

        No change in user-visible functionality (since it isn't turned on),
        so no new tests.

        * platform/graphics/chromium/VideoLayerChromium.cpp:
        (WebCore::VideoLayerChromium::VideoLayerChromium):
        (WebCore::VideoLayerChromium::updateTextureContents):
        (WebCore::VideoLayerChromium::createTextureRect):
        (WebCore::VideoLayerChromium::updateTextureRect):
        (WebCore::VideoLayerChromium::updateCompleted):
        * platform/graphics/chromium/VideoLayerChromium.h:

2010-08-05  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Simon Hausmann.

        Allow custom memory allocation control for ClipperData struct
        https://bugs.webkit.org/show_bug.cgi?id=43337

        Inherits the following class from FastAllocBase because it is
        instantiated by 'new':                                     

        class name         - instantiated at: WebCore/'location'
        RenderLayerBacking - rendering/RenderSVGResourceClipper.cpp:165

        * rendering/RenderSVGResourceClipper.h:

2010-08-05  Zoltan Horvath  <zoltan@webkit.org>

        Reviewed by Simon Hausmann.

        Allow custom memory allocation control for DoctypeData class
        https://bugs.webkit.org/show_bug.cgi?id=43343

        Inherits the following class from Noncopyable because it is
        instantiated by 'new' and no need to be copyable:

        class name  - instantiated at: WebCore/'location'
        DoctypeData - html/HTMLToken.h:113

        * html/HTMLToken.h:

2010-08-05  François Sausset  <sausset@gmail.com>

        Reviewed by Darin Adler.

        Small style adjustments for MathML merror element.
        https://bugs.webkit.org/show_bug.cgi?id=43432

        * css/mathml.css:
        (merror):

2010-08-05  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: forbid InspectorController to create script objects directly in the frontend
        https://bugs.webkit.org/show_bug.cgi?id=43541

        Cookie and AppCache data are now serialized into InspectorValues instead of
        ScriptObjects. These were last usages of InspectorFrontend::newScript{Object,Array}
        so we can remove them now and use only InspectorValues to pass data to the inspector
        frontend.

        * inspector/Inspector.idl:
        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::InspectorApplicationCacheAgent):
        (WebCore::InspectorApplicationCacheAgent::getApplicationCaches):
        (WebCore::InspectorApplicationCacheAgent::buildObjectForApplicationCache):
        (WebCore::InspectorApplicationCacheAgent::buildArrayForApplicationCacheResources):
        (WebCore::InspectorApplicationCacheAgent::buildObjectForApplicationCacheResource):
        * inspector/InspectorApplicationCacheAgent.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::getCookies):
        (WebCore::InspectorController::buildArrayForCookies):
        (WebCore::InspectorController::buildObjectForCookie):
        * inspector/InspectorController.h:
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::setRecordingProfile):
        * inspector/InspectorFrontend.h:

2010-08-05  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Extra check needed at AccessibilityObject::visiblePositionRangeForRange
        https://bugs.webkit.org/show_bug.cgi?id=43418

        Ensure the renderer is a RenderText before calling toRenderText()

        Also, simplified code a bit to avoid so many nested if's in that
        part of the code, while keeping the same logic.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::visiblePositionRangeForRange):

2010-08-05  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Kent Tamura.

        [BREWMP] Define htonl, htons, ntohl and ntohs
        https://bugs.webkit.org/show_bug.cgi?id=43397

        In BREWMP, AEEStdLib.h provides macros for byte order conversion: HTONL, HTONS, NTOHL and NTOHS.
        Use these macros to define htonl, htons, ntohl and ntohs used by WOFFFileFormat.cpp.

        * platform/graphics/WOFFFileFormat.cpp:

2010-08-04  Zoltan Herczeg  <zherczeg@webkit.org>

        Reviewed by Nikolas Zimmermann.

        SVGFilterElement & SVGFE*Element don't support dynamic invalidation, when attributes change
        https://bugs.webkit.org/show_bug.cgi?id=42244

        Implementing svgAttributeChanged for SVGFESpotLightElement object.
        Furthermore, invalidateFilter has been moved to SVGFilterElement, and
        it is a static function now.

        Tests: svg/dynamic-updates/SVGFESpotLightElement-dom-limitingConeAngle-attr.html
               svg/dynamic-updates/SVGFESpotLightElement-dom-pointsAtX-attr.html
               svg/dynamic-updates/SVGFESpotLightElement-dom-pointsAtY-attr.html
               svg/dynamic-updates/SVGFESpotLightElement-dom-pointsAtZ-attr.html
               svg/dynamic-updates/SVGFESpotLightElement-dom-specularExponent-attr.html
               svg/dynamic-updates/SVGFESpotLightElement-dom-x-attr.html
               svg/dynamic-updates/SVGFESpotLightElement-dom-y-attr.html
               svg/dynamic-updates/SVGFESpotLightElement-dom-z-attr.html
               svg/dynamic-updates/SVGFESpotLightElement-svgdom-limitingConeAngle-prop.html
               svg/dynamic-updates/SVGFESpotLightElement-svgdom-pointsAtX-prop.html
               svg/dynamic-updates/SVGFESpotLightElement-svgdom-pointsAtY-prop.html
               svg/dynamic-updates/SVGFESpotLightElement-svgdom-pointsAtZ-prop.html
               svg/dynamic-updates/SVGFESpotLightElement-svgdom-specularExponent-prop.html
               svg/dynamic-updates/SVGFESpotLightElement-svgdom-x-prop.html
               svg/dynamic-updates/SVGFESpotLightElement-svgdom-y-prop.html
               svg/dynamic-updates/SVGFESpotLightElement-svgdom-z-prop.html

        * svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::svgAttributeChanged):
        * svg/SVGFELightElement.cpp:
        (WebCore::SVGFELightElement::svgAttributeChanged):
        (WebCore::SVGFELightElement::childrenChanged):
        * svg/SVGFELightElement.h:
        * svg/SVGFEOffsetElement.cpp:
        (WebCore::SVGFEOffsetElement::svgAttributeChanged):
        * svg/SVGFESpecularLightingElement.cpp:
        * svg/SVGFilterElement.h:
        (WebCore::SVGFilterElement::invalidateFilter):
        * svg/SVGFilterPrimitiveStandardAttributes.cpp:
        (WebCore::SVGFilterPrimitiveStandardAttributes::svgAttributeChanged):
        (WebCore::SVGFilterPrimitiveStandardAttributes::childrenChanged):
        * svg/SVGFilterPrimitiveStandardAttributes.h:

2010-08-05  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: serialize DOM storage items to InspectorValues
        https://bugs.webkit.org/show_bug.cgi?id=43486

        * inspector/Inspector.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::populateScriptObjects):
        (WebCore::InspectorController::didUseDOMStorage):
        (WebCore::InspectorController::selectDOMStorage):
        (WebCore::InspectorController::getDOMStorageEntries):
        (WebCore::InspectorController::setDOMStorageItem):
        (WebCore::InspectorController::removeDOMStorageItem):
        * inspector/InspectorDOMStorageResource.cpp:
        (WebCore::InspectorDOMStorageResource::bind):
        * inspector/InspectorDOMStorageResource.h:
        * inspector/InspectorFrontend.cpp:
        * inspector/InspectorFrontend.h:

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

        Reviewed by Adam Barth.

        Enable HTML5 tree builder
        https://bugs.webkit.org/show_bug.cgi?id=42804

        Months of work into a single line code change.
        Geez.  Should have thought of this sooner.

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

2010-08-04  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Spin-button behavior improvement for out-of-range values
        https://bugs.webkit.org/show_bug.cgi?id=43463

        If the current value is smaller than the minimum value, the up
        button should change the value to the minimum value. If the
        current value is larger than the maximum value, the down button
        should change the value to the maximum value.

        Test: fast/forms/input-number-outofrange.html

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

2010-08-04  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Daniel Bates.

        Remove superfluous non-negative checks in HitTestResult:padding{Width|Height}
        https://bugs.webkit.org/show_bug.cgi?id=43534

        As pointed out by Steve Block in https://bugs.webkit.org/show_bug.cgi?id=40197#c54 ,
        the non-negative checks present in both paddingWidth and paddingHeight methods of
        HitTestResults class are superflous, after we changed the rect based hit testing logic
        of invalid padding from IntSize(-1, -1) to IntSize(0, 0). Patch addresses this issue.

        No new tests needed.

        * rendering/HitTestResult.h:
        (WebCore::HitTestResult::paddingWidth):
        (WebCore::HitTestResult::paddingHeight):

2010-08-04  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r64674.
        http://trac.webkit.org/changeset/64674
        https://bugs.webkit.org/show_bug.cgi?id=43532

        Doesn't work with HTML5 tree builder (Requested by tonyg-cr on
        #webkit).

        * html/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::attemptToEnd):
        (WebCore::HTMLDocumentParser::endIfDelayed):
        * html/HTMLDocumentParser.h:
        * html/HTMLScriptRunner.cpp:
        (WebCore::HTMLScriptRunner::requestScript):
        (WebCore::HTMLScriptRunner::runScript):
        * html/HTMLScriptRunner.h:

2010-08-04  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        fast/parser/residual-style-hang.html hangs
        https://bugs.webkit.org/show_bug.cgi?id=42950

        We need to cap the iteration of the adoption agency algorithm to
        prevent this hang.  The legacy tree builder does this as well.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::callTheAdoptionAgency):

2010-08-04  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Pick up spec change w.r.t. figcaption and summary
        https://bugs.webkit.org/show_bug.cgi?id=43075

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processEndTagForInBody):

2010-08-04  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Pick up spec change w.r.t. replacement character and <frameset>
        https://bugs.webkit.org/show_bug.cgi?id=43073

        Apparently this fixes parsing for some home router configuration pages.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processCharacterBuffer):

2010-08-04  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        Bug 43515 - Fix small design issues with PageAllocation, split out PageReservation.
        (add forwarding headers)

        * ForwardingHeaders/wtf/Bitmap.h: Added.
        * ForwardingHeaders/wtf/PageReservation.h: Added.

2010-08-04  Zhenyao Mo  <zmo@google.com>

        Reviewed by Adam Barth.

        getAttachedShaders takes wrong parameter type in WebGLRenderingContext.idl
        https://bugs.webkit.org/show_bug.cgi?id=43517

        * html/canvas/WebGLRenderingContext.idl: Fix the wrong parameter type in getAttachedShaders().

2010-08-04  Kenneth Russell  <kbr@google.com>

        Reviewed by Dimitri Glazkov.

        Rename CanvasObject to WebGLObject
        https://bugs.webkit.org/show_bug.cgi?id=31564

        Renamed CanvasObject to WebGLObject using do-webcore-rename script.
        Because it seems the new convention is to not check in the changes
        made to this script, only checking in its effects. No new tests;
        built and ran WebGL in Safari and Chromium to test.

        * Android.mk:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * html/canvas/CanvasObject.cpp: Removed.
        * html/canvas/CanvasObject.h: Removed.
        * html/canvas/CanvasRenderingContext.h:
        * html/canvas/WebGLBuffer.cpp:
        (WebCore::WebGLBuffer::WebGLBuffer):
        * html/canvas/WebGLBuffer.h:
        * html/canvas/WebGLFramebuffer.cpp:
        (WebCore::WebGLFramebuffer::WebGLFramebuffer):
        (WebCore::WebGLFramebuffer::setAttachment):
        (WebCore::WebGLFramebuffer::onAttachedObjectChange):
        (WebCore::WebGLFramebuffer::isUninitialized):
        (WebCore::WebGLFramebuffer::setInitialized):
        * html/canvas/WebGLFramebuffer.h:
        * html/canvas/WebGLObject.cpp: Copied from WebCore/html/canvas/CanvasObject.cpp.
        (WebCore::WebGLObject::WebGLObject):
        (WebCore::WebGLObject::~WebGLObject):
        (WebCore::WebGLObject::setObject):
        (WebCore::WebGLObject::deleteObject):
        * html/canvas/WebGLObject.h: Copied from WebCore/html/canvas/CanvasObject.h.
        * html/canvas/WebGLProgram.cpp:
        (WebCore::WebGLProgram::WebGLProgram):
        * html/canvas/WebGLProgram.h:
        * html/canvas/WebGLRenderbuffer.cpp:
        (WebCore::WebGLRenderbuffer::WebGLRenderbuffer):
        * html/canvas/WebGLRenderbuffer.h:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::objectOrZero):
        (WebCore::WebGLRenderingContext::validateWebGLObject):
        (WebCore::WebGLRenderingContext::removeObject):
        (WebCore::WebGLRenderingContext::addObject):
        (WebCore::WebGLRenderingContext::detachAndRemoveAllObjects):
        (WebCore::WebGLRenderingContext::findTexture):
        (WebCore::WebGLRenderingContext::findRenderbuffer):
        (WebCore::WebGLRenderingContext::findBuffer):
        (WebCore::WebGLRenderingContext::findShader):
        * html/canvas/WebGLRenderingContext.h:
        * html/canvas/WebGLShader.cpp:
        (WebCore::WebGLShader::WebGLShader):
        * html/canvas/WebGLShader.h:
        * html/canvas/WebGLTexture.cpp:
        (WebCore::WebGLTexture::WebGLTexture):
        * html/canvas/WebGLTexture.h:
        * html/canvas/WebGLUniformLocation.h:
        * platform/graphics/mac/GraphicsContext3DMac.mm:
        * platform/graphics/qt/GraphicsContext3DQt.cpp:

2010-08-04  Dan Bernstein  <mitz@apple.com>

        Build fix.

        * platform/text/mac/HyphenationMac.mm:
        (WebCore::lastHyphenLocation):

2010-08-04  Dan Bernstein  <mitz@apple.com>

        Release build fix.

        * platform/text/mac/HyphenationMac.mm:
        (WebCore::lastHyphenLocation):

2010-08-04  Mark Rowe  <mrowe@apple.com>

        Reviewed by Sam Weinig.

        Don't leak FontDescription objects inside MathML.

        * mathml/RenderMathMLOperator.cpp:
        (WebCore::RenderMathMLOperator::updateFromElement): Don't unnecessarily allocate the FontDescription on the heap.
        (WebCore::RenderMathMLOperator::createStackableStyle): Ditto.

2010-08-04  Kenneth Russell  <kbr@google.com>

        Reviewed by Dimitri Glazkov.

        Add ANGLE dependency for Chromium WebCore build
        https://bugs.webkit.org/show_bug.cgi?id=43508

        No new tests. Built modified version of patch from bug 42405 in
        Chromium to test.

        * WebCore.gyp/WebCore.gyp:

2010-08-04  Dan Bernstein  <mitz@apple.com>

        Allow the language for hyphenation to be specified
        https://bugs.webkit.org/show_bug.cgi?id=43467

        Test: fast/text/hyphenate-locale.html

        Added a -webkit-hyphenate-locale property whose value can be either auto or a locale identifier
        string. The initial value is auto and the property is inherited. When the value is a locale
        identifier, hyphenation should follow the rules for the specified locale.

        * WebCore.xcodeproj/project.pbxproj: Added AtomicStringKeyedMRUCache.h.
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue): Handle -webkit-hyphenate-locale.
        Updated for the renaming of RenderStyle::hyphenateCharacter() to hyphenationString().
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue): Parse -webkit-hyphenate-locale.
        * css/CSSPropertyNames.in: Added -webkit-hyphenate-locale.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty): Apply the -webkit-hyphenate-locale property to the
        RenderStyle. Updated for the renaming of RenderStyle::hyphenateCharacter() to hyphenationString().
        * platform/text/AtomicStringKeyedMRUCache.h: Added.
        (WebCore::AtomicStringKeyedMRUCache::get):
        * platform/text/Hyphenation.cpp:
        (WebCore::canHyphenate): Added an implementation that returns false.
        (WebCore::lastHyphenLocation): Now asserts that it is not called, because it is an error to call
        this function if canHyphenate() returned false.
        * platform/text/Hyphenation.h:
        Added canHyphenate(). Returns true if hyphenation is possible for the given locale identifier.
        * platform/text/android/HyphenationAndroid.cpp:
        (WebCore::canHyphenate): Added an implementation that returns true and a FIXME.
        (WebCore::lastHyphenLocation): Added unused localeIdentifier parameter.
        * platform/text/cf/HyphenationCF.cpp:
        (WebCore::AtomicStringKeyedMRUCache<RetainPtr<CFLocaleRef> >::createValueForNullKey): Returns
        the CFLocaleRef for the current search locale.
        (WebCore::AtomicStringKeyedMRUCache<RetainPtr<CFLocaleRef> >::createValueForKey): Returns a
        CFLocaleRef for the locale identifier.
        (WebCore::canHyphenate): Added. Returns true.
        (WebCore::lastHyphenLocation): Added localeIdentifier parameter, used to pass a CFLocaleRef to
        the hyphenation function.
        * platform/text/mac/HyphenationMac.mm:
        (WebCore::AtomicStringKeyedMRUCache<bool>::createValueForNullKey): Returns whether the current
        search locale is english.
        (WebCore::AtomicStringKeyedMRUCache<bool>::createValueForKey): Returns whether the locale identifier
        string identifies locale with the English language.
        (WebCore::canHyphenate): Added. Returns true if the locale language is English.
        (WebCore::lastHyphenLocation): Added localeIdentifier parameter and an assertion that its language
        is English.
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::tryHyphenating): Added a locale identifier parameter, which is passed down to
        lastHyphenLocation(). Added 1 to the value passed for the beforeIndex parameter to lastHyphenLocation(),
        because the latter only returns values smaller than that index. The Mac implementation could
        return a value equal to beforeIndex, but that is fixed in the WebKitSystemInterface part of this patch.
        (WebCore::RenderBlock::findNextLineBreak): Only set canHyphenate to true if hyphenation is possible
        for the specified hyphenation locale. Pass the hyphenation locale to tryHyphenating().
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::diff): Compare hyphenation locales.
        (WebCore::RenderStyle::hyphenString): Updated for the renaming of hyphenateCharacter() to
        hyphenationString().
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::hyphenationString): Renamed hyphenateCharacter() to this.
        (WebCore::InheritedFlags::hyphenationLocale): Added this accessor.
        (WebCore::InheritedFlags::setHyphenationString): Renamed setHyphenateCharacter() to this.
        (WebCore::InheritedFlags::setHyphenationLocale): Added this accessor.
        (WebCore::InheritedFlags::initialHyphenationString): Renamed initialHyphenateCharacter() to this.
        (WebCore::InheritedFlags::initialHyphenateLocale): Added. Returns the null atom, which represents a
        value of auto.
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData): Copy the hyphenation locale. Updated for
        rename.
        (WebCore::StyleRareInheritedData::operator==): Compare the hyphenation locales. Updated for rename.
        * rendering/style/StyleRareInheritedData.h:

2010-08-04  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Eric Seidel.

        Support <script defer> as specified by HTML5
        https://bugs.webkit.org/show_bug.cgi?id=40934

        See: http://dev.w3.org/html5/spec/Overview.html#the-end

        Tests: fast/dom/HTMLScriptElement/defer-double-defer-write.html
               fast/dom/HTMLScriptElement/defer-double-write.html
               fast/dom/HTMLScriptElement/defer-inline-script.html
               fast/dom/HTMLScriptElement/defer-onbeforeload.html
               fast/dom/HTMLScriptElement/defer-script-invalid-url.html
               http/tests/misc/script-defer-after-slow-stylesheet.html
               http/tests/misc/script-defer-write-slow-stylesheet.html
               http/tests/misc/script-defer.html

        * html/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::attemptToEnd):
        (WebCore::HTMLDocumentParser::endIfDelayed):
        (WebCore::HTMLDocumentParser::executeScriptsWaitingForParsingAndEnd):
        * html/HTMLDocumentParser.h:
        * html/HTMLScriptRunner.cpp:
        (WebCore::HTMLScriptRunner::executeScriptsWaitingForParsing):
        (WebCore::HTMLScriptRunner::requestScript):
        (WebCore::HTMLScriptRunner::requestParsingBlockingScript):
        (WebCore::HTMLScriptRunner::requestDeferredScript):
        (WebCore::HTMLScriptRunner::runScript):
        * html/HTMLScriptRunner.h:
        (WebCore::HTMLScriptRunner::PendingScript::PendingScript):
        (WebCore::HTMLScriptRunner::PendingScript::operator=):

2010-08-04  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix for gcc not importing all symbols from convenience libraries.
        Works on 10.6 only for Mac until the build system is reworked.

        * bindings/scripts/CodeGeneratorCPP.pm: Add conditionals in impl. to header as well.
        * wscript: 

2010-08-04  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix. Enclose PlatformStrategy methods in USE(PLATFORM_STRATEGIES).
        
        * platform/LocalizedStrings.cpp:

2010-08-04  François Sausset  <sausset@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        Remove unnecessary calls to setStyle() in MathML code that made RenderLayer crash.
        https://bugs.webkit.org/show_bug.cgi?id=42894

        Test: mathml/presentation/style.xhtml

        * mathml/MathMLInlineContainerElement.cpp:
        (WebCore::MathMLInlineContainerElement::createRenderer):
        * mathml/MathMLMathElement.cpp:
        (WebCore::MathMLMathElement::createRenderer):
        * mathml/MathMLTextElement.cpp:
        (WebCore::MathMLTextElement::createRenderer):

2010-08-03  Kenneth Russell  <kbr@google.com>

        Reviewed by Nate Chapin.

        Move WebGL-specific code out of GraphicsContext3D so that G3D can be used as a generic accelerated drawing API
        https://bugs.webkit.org/show_bug.cgi?id=43221

        Added a helper function to extract the contents of WebGL objects
        to reduce duplicated code and fix a couple of potential crashes
        introduced in the previous refactoring.

        No new tests; ran existing WebGL tests.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::attachShader):
        (WebCore::WebGLRenderingContext::bindAttribLocation):
        (WebCore::WebGLRenderingContext::bindBuffer):
        (WebCore::WebGLRenderingContext::bindFramebuffer):
        (WebCore::WebGLRenderingContext::bindRenderbuffer):
        (WebCore::WebGLRenderingContext::bindTexture):
        (WebCore::WebGLRenderingContext::compileShader):
        (WebCore::WebGLRenderingContext::detachShader):
        (WebCore::WebGLRenderingContext::framebufferRenderbuffer):
        (WebCore::WebGLRenderingContext::framebufferTexture2D):
        (WebCore::WebGLRenderingContext::getActiveAttrib):
        (WebCore::WebGLRenderingContext::getActiveUniform):
        (WebCore::WebGLRenderingContext::getAttachedShaders):
        (WebCore::WebGLRenderingContext::getAttribLocation):
        (WebCore::WebGLRenderingContext::getProgramParameter):
        (WebCore::WebGLRenderingContext::getProgramInfoLog):
        (WebCore::WebGLRenderingContext::getShaderParameter):
        (WebCore::WebGLRenderingContext::getShaderInfoLog):
        (WebCore::WebGLRenderingContext::getShaderSource):
        (WebCore::WebGLRenderingContext::getUniform):
        (WebCore::WebGLRenderingContext::getUniformLocation):
        (WebCore::WebGLRenderingContext::linkProgram):
        (WebCore::WebGLRenderingContext::shaderSource):
        (WebCore::WebGLRenderingContext::useProgram):
        (WebCore::WebGLRenderingContext::validateProgram):
        (WebCore::WebGLRenderingContext::handleNPOTTextures):
        (WebCore::WebGLRenderingContext::restoreStatesAfterVertexAttrib0Simulation):

2010-08-04  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Jeremy Orlow.

        [Gtk] Make sure DRT return the right AXTitle for controls
        https://bugs.webkit.org/show_bug.cgi?id=39997

        Fallback to the text under the given element as its name in case
        it's a control element and has no associated label for it.

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

2010-08-02  Kenneth Russell  <kbr@google.com>

        Reviewed by Dimitri Glazkov.

        Port Chromium's accelerated compositing to Mac OS X
        https://bugs.webkit.org/show_bug.cgi?id=43398

        No new tests. Tested manually with CSS 3D and WebGL tests.

        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::clearBorderColor):
        (WebCore::clearLayerBackgroundColor):
         - Fixed compilation problems with gcc.
        * platform/graphics/chromium/ImageLayerChromium.cpp:
        (WebCore::ImageLayerChromium::updateTextureContents):
         - Added Core Graphics port.
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::LayerChromium):
         - Fixed compilation problems with gcc related to initialization
           order of members.
        (WebCore::LayerChromium::updateTextureContents):
        (WebCore::LayerChromium::updateTextureRect):
         - Ported to Core Graphics, adjusting for lower-left coordinate
           system origin.
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::LayerRendererChromium):
         - Fixed compilation problems with gcc related to initialization
           order of members.
        (WebCore::LayerRendererChromium::setRootLayerCanvasSize):
         - Ported to Core Graphics.
        (WebCore::LayerRendererChromium::drawLayers):
         - Added more debug-only error calls during drawing phase.
           Adjusted scrolling and incremental updating code for Core
           Graphics' lower-left coordinate system origin.
        (WebCore::LayerRendererChromium::initializeSharedGLObjects):
         - Removed color channel swizzling in Core Graphics port. Fixed
           preexisting bug in initialization check of m_rootLayerTextureId.
        * platform/graphics/chromium/LayerRendererChromium.h:
         - Added needed data members for Core Graphics port.

2010-08-04  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: use InspectorValue to push dispatch results from the injected script
        https://bugs.webkit.org/show_bug.cgi?id=43483

        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::JSInjectedScriptHost::reportDidDispatchOnInjectedScript):
        * bindings/v8/custom/V8InjectedScriptHostCustom.cpp:
        (WebCore::V8InjectedScriptHost::reportDidDispatchOnInjectedScriptCallback):
        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::dispatch):
        * inspector/InjectedScript.h:
        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::reportDidDispatchOnInjectedScript):
        (WebCore::InjectedScriptHost::remoteFrontend):
        * inspector/InjectedScriptHost.h:
        * inspector/Inspector.idl:
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::dispatchOnInjectedScript):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::didContinue):
        * inspector/InspectorFrontend.cpp:
        * inspector/InspectorFrontend.h:

2010-08-04  Abhishek Arya  <inferno@chromium.org>

        Unreviewed. Put missing equivalent js bindings check.

        Forgot putting js bindings check in http://trac.webkit.org/changeset/64647. This fixes the qt crash.

        * bindings/js/JSDesktopNotificationsCustom.cpp:
        (WebCore::JSNotificationCenter::requestPermission):

2010-08-04  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: serialize database resources to InspectorValues
        https://bugs.webkit.org/show_bug.cgi?id=43482

        * inspector/Inspector.idl:
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::getDatabaseTableNames):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::populateScriptObjects):
        (WebCore::InspectorController::selectDatabase):
        (WebCore::InspectorController::didOpenDatabase):
        * inspector/InspectorController.h:
        * inspector/InspectorDatabaseResource.cpp:
        (WebCore::InspectorDatabaseResource::create):
        (WebCore::InspectorDatabaseResource::InspectorDatabaseResource):
        (WebCore::InspectorDatabaseResource::bind):
        * inspector/InspectorDatabaseResource.h:
        * inspector/InspectorFrontend.cpp:
        * inspector/InspectorFrontend.h:
        * storage/Database.cpp:
        (WebCore::Database::openDatabase):

2010-08-03  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Null the script execution context when disconnecting frame in notifications.
        Make sure that script execution context is valid in notification requestPermission.
        https://bugs.webkit.org/show_bug.cgi?id=43295

        Tests: fast/notifications/notifications-document-close-crash.html

        * bindings/v8/custom/V8NotificationCenterCustom.cpp:
        (WebCore::V8NotificationCenter::requestPermissionCallback):
        * notifications/NotificationCenter.cpp:
        (WebCore::NotificationCenter::disconnectFrame):

2010-08-03  Adam Roben  <aroben@apple.com>

        Turn on PLATFORM_STRATEGIES on Windows

        Fixes <http://webkit.org/b/43431>.

        Reviewed by Anders Carlsson.

        * WebCore.vcproj/WebCore.vcproj: Added LocalizedStrings.cpp,
        PlatformStrategies.h, LocalizationStrategy.h, PluginStrategy.h, and
        VisitedLinkStrategy.h. Removed PluginDataWin.cpp

        * platform/LocalizedStrings.cpp: Wrapped Mac-only functions in
        PLATFORM(MAC) guards.

        (WebCore::uploadFileText):
        (WebCore::allFilesText):
        Added these Windows-only functions.

        * plugins/win/PluginDataWin.cpp: Removed.

2010-08-04  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: serialize CPU profiles to InspectorValues instead of
        using JS wrappers.
        https://bugs.webkit.org/show_bug.cgi?id=43475

        * Android.jscbindings.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/ScriptProfile.h:
        * bindings/js/ScriptProfiler.cpp:
        (WebCore::ScriptProfiler::stop):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/v8/ScriptProfile.cpp:
        (WebCore::buildInspectorObjectFor):
        (WebCore::ScriptProfile::buildInspectorObjectForHead):
        * bindings/v8/ScriptProfile.h:
        * inspector/Inspector.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::addProfile):
        (WebCore::InspectorController::addProfileFinishedMessageToConsole):
        (WebCore::InspectorController::getProfileHeaders):
        (WebCore::InspectorController::getProfile):
        (WebCore::InspectorController::createProfileHeader):
        * inspector/InspectorController.h:
        * inspector/InspectorFrontend.cpp:
        * inspector/InspectorFrontend.h:

2010-08-04  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Use a QImage for the stroke applier scratch context

        This avoids leaking a server-side resource on some graphics systems.

        * platform/graphics/qt/PathQt.cpp:
        (WebCore::scratchContext):

2010-08-03  Ben Murdoch  <benm@google.com>

        Reviewed by Darin Adler.

        HTML5 parser may cause onload not to fire
        https://bugs.webkit.org/show_bug.cgi?id=43423

        If a complex page causes the HTML parser to yield,
        then when parsing continues again and eventually
        finishes, we are missing a call to endIfDelayed(). This
        results in onload never being called.

        Not for lack of trying, but it seems almost
        impossible to write a reliable test for this bug,
        due to the highly timing-dependent nature of the
        bug. The link above contains further discussion and
        attempts at writing a test.
        
        * html/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::resumeParsingAfterYield):
        Add a call to endIfDelayed() after pumping the tokenizer
        post the parser yielding to ensure that the parsing step
        is completed properly and the onload event fires.

2010-08-04  Dirk Schulze  <krit@webkit.org>

        Unreviewed sort of Xcode project file.

        * WebCore.xcodeproj/project.pbxproj:

2010-08-03  Darin Adler  <darin@apple.com>

        Reviewed by Dan Bernstein.

        System color changes are not applied properly
        https://bugs.webkit.org/show_bug.cgi?id=43468

        * manual-tests/system-color-change.html: Added.

        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::platformColorsDidChange): Added a call to
        Page::setNeedsReapplyStyles, so all frames of all pages will recompute
        in case they use system colors. It's rare for these colors to change,
        so OK to do a little extra style computation.

2010-08-04  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed. Revert changed license in SVGFEOffsetElement.h, thanks Gabor for noticing.

        * svg/SVGFEOffsetElement.h:

2010-08-03  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=42939
        WebEditorClient::didBeginEditing is never called in WebKit2

        * page/FocusController.cpp: (WebCore::FocusController::setFocused): Focusing a page without
        a focused frame makes little sense, so WebKit used to focus a frame first when its view
        became first responder. For viewless frames, WebKit cannot know what to focus. The assumption
        here is that in all cases with null m_focusedFrame, it's the main frame that needs to be focused.

2010-08-03  Gavin Barraclough  <barraclough@apple.com>

        Build fix following r64624.

        * ForwardingHeaders/wtf/BitMap.h: Added.

2010-08-03  Kent Tamura  <tkent@chromium.org>

        Reviewed by Ojan Vafai.

        <input type=number> UI: Support wheel events
        https://bugs.webkit.org/show_bug.cgi?id=42441

        Test: fast/forms/input-number-wheel.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::defaultEventHandler):
         Call stepUpFromRenderer() for wheelDeltaY.

2010-08-03  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by David Kilzer.

        Limit ApplicationCache Total and Per-Origin Storage Capacity (Quotas)
        https://bugs.webkit.org/show_bug.cgi?id=40627

        Part 6 - LayoutTest and Cleanup

        Test: http/tests/appcache/origin-quota.html

        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::scheduleReachedOriginQuotaCallback): made synchronous, as asynchronously the cache group was deleted too soon.
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::storeUpdatedQuotaForOrigin): all storing operations should force the database to be created if needed.

2010-08-03  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        extractAndNegateTextDecorationStyle and maxRangeOffset in ApplyStyleCommand.cpp should be deleted
        https://bugs.webkit.org/show_bug.cgi?id=43437

        Removed extractAndNegateTextDecorationStyle because we never push down text decorations added by CSS rules
        as discussed on the bug 27809. Also removed pushDownTextDecorationStyleAtBoundaries because it only existed
        to encapsulate the complexity of calling pushDownTextDecorationStyleAroundNode first with forceNegate = false
        (calling pushDownTextDecorationStyleAroundNode) and again with forceNegate = true (calling extractAndNegateTextDecorationStyle)
        after updating layout but neither the layout update nor the second call to pushDownTextDecorationStyleAroundNode
        is needed after the removal of extractAndNegateTextDecorationStyle.

        Also replaced maxRangeOffset by lastOffsetForEditing as FIXME (added by r48235) indicated.

        No new tests added since this is a clean up.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::pushDownTextDecorationStyleAroundNode): No longer takes forceNegate as an argument.
        (WebCore::ApplyStyleCommand::removeInlineStyle): Calls pushDownTextDecorationStyleAroundNode directly.
        * editing/ApplyStyleCommand.h:

2010-08-03  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Ojan Vafai.

        Extract a function that serializes nodes from the range version of createMarkup
        https://bugs.webkit.org/show_bug.cgi?id=43405

        Extracted serializeNodes that serializes nodes from createMarkup.
        No new tests added since this is a clean up.

        * editing/markup.cpp:
        (WebCore::serializeNodes): Added.
        (WebCore::createMarkup): Calls serializeNodes.

2010-08-03  Brian Weinstein  <bweinstein@apple.com>

        Fix the build by adding the needed MathML source files to WebCore's vcproj.
        Also, Visual Studio did some drive-by resorting of the vcproj, the added
        MathML files are the only important change.

        * WebCore.vcproj/WebCore.vcproj:

2010-08-03  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Nate Chapin.

        Web Inspector: Missing ApplicationCache InspectorBackend Stub
        https://bugs.webkit.org/show_bug.cgi?id=43265

        Registered "getApplicationCaches".

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

2010-08-03  Brian Weinstein  <bweinstein@apple.com>

        Fix the Windows build by adding WebCore/mathml to the list of paths to look for header
        files.

        * WebCore.vcproj/WebCoreCommon.vsprops:

2010-08-03  Mark Rowe  <mrowe@apple.com>

        Fix the i386 build with a static_cast hammer.

        * mathml/RenderMathMLFraction.cpp:
        (WebCore::RenderMathMLFraction::layout):

2010-08-03  Beth Dakin  <bdakin@apple.com>

        Speculative build fix for Leopard.

        * mathml/RenderMathMLOperator.cpp:
        * mathml/RenderMathMLRoot.cpp:
        (WebCore::RenderMathMLRoot::paint):
        (WebCore::RenderMathMLRoot::layout):
        * mathml/RenderMathMLSquareRoot.cpp:
        (WebCore::RenderMathMLSquareRoot::paint):
        * mathml/RenderMathMLSubSup.cpp:

2010-08-03  Beth Dakin  <bdakin@apple.com>

        Speculative build fix.

        * css/mathml.css:
        (mi):
        (math[mathsize="small"], mstyle[mathsize="small"], mo[mathsize="small"], mn[mathsize="small"], mi[mathsize="small"], mtext[mathsize="small"], mspace[mathsize="small"], ms[mathsize="small"]):
        (math[mathsize="normal"], mstyle[mathsize="normal"], mo[mathsize="normal"], mn[mathsize="normal"], mi[mathsize="normal"], mtext[mathsize="normal"], mspace[mathsize="normal"], ms[mathsize="normal"]):
        (math[mathsize="big"], mstyle[mathsize="big"], mo[mathsize="big"], mn[mathsize="big"], mi[mathsize="big"], mtext[mathsize="big"], mspace[mathsize="big"], ms[mathsize="big"]):

2010-08-03  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Mark Rowe.

        https://bugs.webkit.org/show_bug.cgi?id=43444
        PLATFORM(CF) is false on Windows in JavaScriptCore

        Moved some PLATFORM(WIN) #defines down into JavaScriptCore.

        * config.h: Moved WTF_PLATFORM_CF 1 and WTF_USE_PTHREADS 0 to wtf/Platform.h.
        Removed #undef WTF_USE_WININET because wtf/Platform.h no longer #defines it.

2010-08-03  Alex Milowski  <alex@milowski.com>

        Reviewed by Beth Dakin.

        Changed the ENABLE_MATHML value to enable MathML by default.

        * Configurations/FeatureDefines.xcconfig:

2010-07-30  Stephen White  <senorblanco@chromium.org>

        Reviewed by Ojan Vafai.

        Move PlatformContextSkia and NativeImageSkia into the WebCore namespace.
        https://bugs.webkit.org/show_bug.cgi?id=43272

        One wrinkle is that PlatformContext and NativeImagePtr are 
        typedef'ed outside outside the WebCore namespace block, so the
        PlatformContextSkia and NativeImageSkia have to be forward-declared 
        explicitly within that namespace.  Another solution might be to move
        those declarations into the WebCore namespace block below, but that
        would affect platforms other than Skia, so I leave it to the reviewer
        to decide.

        Test:  if it compiles, you're happy.

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/Image.h:
        * platform/graphics/ImageSource.h:
        * platform/graphics/skia/NativeImageSkia.cpp:
        (WebCore::NativeImageSkia::hasResizedBitmap):
        (WebCore::NativeImageSkia::shouldCacheResampling):
        * platform/graphics/skia/NativeImageSkia.h:
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (WebCore::PlatformContextSkia::State::State):
        (WebCore::PlatformContextSkia::beginLayerClippedToImage):
        (WebCore::PlatformContextSkia::drawRect):
        (WebCore::PlatformContextSkia::setupPaintForStroking):
        (WebCore::PlatformContextSkia::getStrokeStyle):
        (WebCore::PlatformContextSkia::setStrokeStyle):
        (WebCore::PlatformContextSkia::setTextDrawingMode):
        (WebCore::PlatformContextSkia::interpolationQuality):
        (WebCore::PlatformContextSkia::setInterpolationQuality):
        (WebCore::PlatformContextSkia::getImageResamplingHint):
        (WebCore::PlatformContextSkia::setImageResamplingHint):
        (WebCore::PlatformContextSkia::clearImageResamplingHint):
        (WebCore::PlatformContextSkia::applyClipFromImage):
        (WebCore::PlatformContextSkia::setGLES2Context):
        (WebCore::PlatformContextSkia::prepareForSoftwareDraw):
        (WebCore::PlatformContextSkia::prepareForHardwareDraw):
        (WebCore::PlatformContextSkia::syncSoftwareCanvas):
        (WebCore::PlatformContextSkia::uploadSoftwareToHardware):
        * platform/graphics/skia/PlatformContextSkia.h:
        (WebCore::PlatformContextSkia::gpuCanvas):
        * platform/graphics/skia/SkiaFontWin.cpp:
        (WebCore::windowsCanHandleDrawTextShadow):
        (WebCore::paintSkiaText):
        * platform/graphics/skia/SkiaFontWin.h:

2010-08-03  Adam Roben  <aroben@apple.com>

        Rename LocalizedStringsMac.mm to LocalizedStrings.cpp

        LocalizedStringsMac.mm should be usable by other ports
        https://bugs.webkit.org/show_bug.cgi?id=43441

        Reviewed by Anders Carlsson.

        * WebCore.xcodeproj/project.pbxproj: Updated the file's name and path.

        * platform/LocalizedStrings.cpp: Renamed from
        WebCore/platform/mac/LocalizedStringsMac.mm. Changed #imports to
        #includes.

2010-08-03  James Robinson  <jamesr@chromium.org>

        Reviewed by Darin Fisher.

        Move WebGL-specific code out of GraphicsContext3D so that G3D can be used as a generic accelerated drawing API
        https://bugs.webkit.org/show_bug.cgi?id=43221

        Changes the GraphicsContext3D API to use Platform3DObjects instead of WebGLFoo* types like WebGLTexture.
        WebGLRenderingContext still uses WebGLFoo types and converts to Platform3DObjects internally.  Other
        consumers of the GraphicsContext3D can use the Platform3DObject APIs directly without any ties to WebGL.

        The majority of this change is purely mechanical.  The less obvious changes are:
        - move all null checking on WebGLFoo types to WebGLRenderingContext, instead of mixing them
          between WebGLRenderingContext and the various port-specific implementations of GraphicsContext3D
        - add a GraphicsContext3D getter to CanvasRenderingContext.  This is needed for the readback
          path on Chromium/mac.  It may be possible to remove this, but I would prefer to do that
          in a follow-up patch to minimize churn.
        - move some texture cube map logic that existed only in the Chromium port of GC3D to
          WebGLRenderingContext behind #if PLATFORM(CHROMIUM). I think this logic should either
          exist for all ports or exist for none, but again I would rather change the behavior
          in a different patch from this one.

        * html/canvas/CanvasRenderingContext.h:
        (WebCore::CanvasRenderingContext::graphicsContext3D):
        * html/canvas/WebGLProgram.cpp:
        (WebCore::WebGLProgram::cacheActiveAttribLocations):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::attachShader):
        (WebCore::WebGLRenderingContext::bindAttribLocation):
        (WebCore::WebGLRenderingContext::bindBuffer):
        (WebCore::WebGLRenderingContext::bindFramebuffer):
        (WebCore::WebGLRenderingContext::bindRenderbuffer):
        (WebCore::WebGLRenderingContext::bindTexture):
        (WebCore::WebGLRenderingContext::compileShader):
        (WebCore::WebGLRenderingContext::detachShader):
        (WebCore::WebGLRenderingContext::framebufferRenderbuffer):
        (WebCore::WebGLRenderingContext::framebufferTexture2D):
        (WebCore::WebGLRenderingContext::getActiveAttrib):
        (WebCore::WebGLRenderingContext::getActiveUniform):
        (WebCore::WebGLRenderingContext::getAttachedShaders):
        (WebCore::WebGLRenderingContext::getAttribLocation):
        (WebCore::WebGLRenderingContext::getProgramParameter):
        (WebCore::WebGLRenderingContext::getProgramInfoLog):
        (WebCore::WebGLRenderingContext::getShaderParameter):
        (WebCore::WebGLRenderingContext::getShaderInfoLog):
        (WebCore::WebGLRenderingContext::getShaderSource):
        (WebCore::WebGLRenderingContext::getUniform):
        (WebCore::WebGLRenderingContext::getUniformLocation):
        (WebCore::WebGLRenderingContext::isBuffer):
        (WebCore::WebGLRenderingContext::isFramebuffer):
        (WebCore::WebGLRenderingContext::isProgram):
        (WebCore::WebGLRenderingContext::isRenderbuffer):
        (WebCore::WebGLRenderingContext::isShader):
        (WebCore::WebGLRenderingContext::isTexture):
        (WebCore::WebGLRenderingContext::linkProgram):
        (WebCore::WebGLRenderingContext::shaderSource):
        (WebCore::WebGLRenderingContext::useProgram):
        (WebCore::WebGLRenderingContext::validateProgram):
        (WebCore::WebGLRenderingContext::handleNPOTTextures):
        (WebCore::WebGLRenderingContext::createFallbackBlackTextures1x1):
        (WebCore::WebGLRenderingContext::initVertexAttrib0):
        (WebCore::WebGLRenderingContext::simulateVertexAttrib0):
        (WebCore::WebGLRenderingContext::restoreStatesAfterVertexAttrib0Simulation):
        * html/canvas/WebGLRenderingContext.h:
        (WebCore::WebGLRenderingContext::graphicsContext3D):
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/mac/GraphicsContext3DMac.mm:
        (WebCore::GraphicsContext3D::paintRenderingResultsToCanvas):
        (WebCore::GraphicsContext3D::beginPaint):
        (WebCore::GraphicsContext3D::attachShader):
        (WebCore::GraphicsContext3D::bindAttribLocation):
        (WebCore::GraphicsContext3D::bindBuffer):
        (WebCore::GraphicsContext3D::bindFramebuffer):
        (WebCore::GraphicsContext3D::bindRenderbuffer):
        (WebCore::GraphicsContext3D::bindTexture):
        (WebCore::GraphicsContext3D::compileShader):
        (WebCore::GraphicsContext3D::detachShader):
        (WebCore::GraphicsContext3D::framebufferRenderbuffer):
        (WebCore::GraphicsContext3D::framebufferTexture2D):
        (WebCore::GraphicsContext3D::getActiveAttrib):
        (WebCore::GraphicsContext3D::getActiveUniform):
        (WebCore::GraphicsContext3D::getAttachedShaders):
        (WebCore::GraphicsContext3D::getAttribLocation):
        (WebCore::GraphicsContext3D::isBuffer):
        (WebCore::GraphicsContext3D::isFramebuffer):
        (WebCore::GraphicsContext3D::isProgram):
        (WebCore::GraphicsContext3D::isRenderbuffer):
        (WebCore::GraphicsContext3D::isShader):
        (WebCore::GraphicsContext3D::isTexture):
        (WebCore::GraphicsContext3D::linkProgram):
        (WebCore::GraphicsContext3D::shaderSource):
        (WebCore::GraphicsContext3D::useProgram):
        (WebCore::GraphicsContext3D::validateProgram):
        (WebCore::GraphicsContext3D::getProgramiv):
        (WebCore::GraphicsContext3D::getProgramInfoLog):
        (WebCore::GraphicsContext3D::getShaderiv):
        (WebCore::GraphicsContext3D::getShaderInfoLog):
        (WebCore::GraphicsContext3D::getShaderSource):
        (WebCore::GraphicsContext3D::getUniformfv):
        (WebCore::GraphicsContext3D::getUniformiv):
        (WebCore::GraphicsContext3D::getUniformLocation):
        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3D::beginPaint):
        (WebCore::GraphicsContext3D::paintRenderingResultsToCanvas):
        (WebCore::GraphicsContext3D::attachShader):
        (WebCore::GraphicsContext3D::bindAttribLocation):
        (WebCore::GraphicsContext3D::bindBuffer):
        (WebCore::GraphicsContext3D::bindFramebuffer):
        (WebCore::GraphicsContext3D::bindRenderbuffer):
        (WebCore::GraphicsContext3D::bindTexture):
        (WebCore::GraphicsContext3D::compileShader):
        (WebCore::GraphicsContext3D::detachShader):
        (WebCore::GraphicsContext3D::framebufferRenderbuffer):
        (WebCore::GraphicsContext3D::framebufferTexture2D):
        (WebCore::GraphicsContext3D::getActiveAttrib):
        (WebCore::GraphicsContext3D::getActiveUniform):
        (WebCore::GraphicsContext3D::getAttribLocation):
        (WebCore::GraphicsContext3D::isBuffer):
        (WebCore::GraphicsContext3D::isFramebuffer):
        (WebCore::GraphicsContext3D::isProgram):
        (WebCore::GraphicsContext3D::isRenderbuffer):
        (WebCore::GraphicsContext3D::isShader):
        (WebCore::GraphicsContext3D::isTexture):
        (WebCore::GraphicsContext3D::linkProgram):
        (WebCore::GraphicsContext3D::shaderSource):
        (WebCore::GraphicsContext3D::useProgram):
        (WebCore::GraphicsContext3D::validateProgram):
        (WebCore::GraphicsContext3D::getProgramiv):
        (WebCore::GraphicsContext3D::getProgramInfoLog):
        (WebCore::GraphicsContext3D::getShaderiv):
        (WebCore::GraphicsContext3D::getShaderInfoLog):
        (WebCore::GraphicsContext3D::getShaderSource):
        (WebCore::GraphicsContext3D::getUniformfv):
        (WebCore::GraphicsContext3D::getUniformiv):
        (WebCore::GraphicsContext3D::getUniformLocation):

2010-08-03  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        [GTK] Fix DOM event dispatch
        https://bugs.webkit.org/show_bug.cgi?id=40847

        Bind UI and Mouse events and add ad-hoc kit method for WebCore
        Events.

        * GNUmakefile.am:
        * bindings/gobject/WebKitDOMBinding.cpp:
        (WebKit::kit):
        * bindings/gobject/WebKitDOMBinding.h:
        * bindings/gobject/WebKitDOMEventTarget.cpp:
        (WebKit::core):
        * bindings/gobject/WebKitDOMEventTargetPrivate.h: Added.
        * bindings/scripts/CodeGeneratorGObject.pm:

2010-08-03  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Eric Seidel.

        Cleanup all of svg/ code
        https://bugs.webkit.org/show_bug.cgi?id=43311

        Unify the license header in all files in svg/, to use the same template as most WebCore files use.
        Unified email adress style, etc. all generated with a perl script attached to bug 43311.

        * svg/...: Updated header template in all files, in the svg/ subdirectory.

2010-08-03  Andrei Popescu  <andreip@google.com>

        Reviewed by Jeremy Orlow.

        [IndexedDB] IDBObjectStoreRequest should be called IDBObjectStore
        https://bugs.webkit.org/show_bug.cgi?id=43420

        Renaming IDBObjectStoreRequest to IDBObjectStore.

        No new tests needed, just refactoring.

        * Android.derived.jscbindings.mk:
        * Android.derived.v8bindings.mk:
        * Android.mk:
        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSIDBAnyCustom.cpp:
        (WebCore::toJS):
        * bindings/v8/custom/V8IDBAnyCustom.cpp:
        (WebCore::toV8):
        * storage/IDBAny.cpp:
        (WebCore::IDBAny::idbObjectStore):
        (WebCore::IDBAny::set):
        * storage/IDBAny.h:
        (WebCore::IDBAny::):
        * storage/IDBCallbacks.h:
        * storage/IDBDatabase.cpp:
        (WebCore::IDBDatabase::objectStore):
        * storage/IDBDatabase.h:
        * storage/IDBDatabaseBackendImpl.cpp:
        (WebCore::IDBDatabaseBackendImpl::createObjectStore):
        (WebCore::IDBDatabaseBackendImpl::objectStore):
        * storage/IDBDatabaseBackendImpl.h:
        * storage/IDBDatabaseBackendInterface.h:
        * storage/IDBObjectStore.cpp: Added.
        (WebCore::IDBObjectStore::IDBObjectStore):
        (WebCore::IDBObjectStore::name):
        (WebCore::IDBObjectStore::keyPath):
        (WebCore::IDBObjectStore::indexNames):
        (WebCore::IDBObjectStore::get):
        (WebCore::IDBObjectStore::add):
        (WebCore::IDBObjectStore::put):
        (WebCore::IDBObjectStore::remove):
        (WebCore::IDBObjectStore::createIndex):
        (WebCore::IDBObjectStore::index):
        (WebCore::IDBObjectStore::removeIndex):
        * storage/IDBObjectStore.h:
        (WebCore::IDBObjectStore::create):
        (WebCore::IDBObjectStore::~IDBObjectStore):
        * storage/IDBObjectStore.idl: Added.
        * storage/IDBObjectStoreBackendImpl.cpp: Added.
        (WebCore::IDBObjectStoreBackendImpl::~IDBObjectStoreBackendImpl):
        (WebCore::IDBObjectStoreBackendImpl::IDBObjectStoreBackendImpl):
        (WebCore::IDBObjectStoreBackendImpl::indexNames):
        (WebCore::IDBObjectStoreBackendImpl::get):
        (WebCore::IDBObjectStoreBackendImpl::put):
        (WebCore::IDBObjectStoreBackendImpl::remove):
        (WebCore::IDBObjectStoreBackendImpl::createIndex):
        (WebCore::IDBObjectStoreBackendImpl::index):
        (WebCore::IDBObjectStoreBackendImpl::removeIndex):
        * storage/IDBObjectStoreBackendImpl.h: Added.
        (WebCore::IDBObjectStoreBackendImpl::create):
        (WebCore::IDBObjectStoreBackendImpl::name):
        (WebCore::IDBObjectStoreBackendImpl::keyPath):
        * storage/IDBObjectStoreBackendInterface.h: Added.
        (WebCore::IDBObjectStoreBackendInterface::~IDBObjectStoreBackendInterface):
        * storage/IDBObjectStoreImpl.cpp: Removed.
        * storage/IDBObjectStoreImpl.h: Removed.
        * storage/IDBObjectStoreRequest.cpp: Removed.
        * storage/IDBObjectStoreRequest.h: Removed.
        * storage/IDBObjectStoreRequest.idl: Removed.
        * storage/IDBRequest.cpp:
        (WebCore::IDBRequest::onSuccess):
        * storage/IDBRequest.h:

2010-08-03  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Ojan Vafai.

        [GTK] Incorrect keyIdentifier for print screen key events
        https://bugs.webkit.org/show_bug.cgi?id=43422

        Produce the correct keyIdentifier for GDK_Print (print screen).

        * platform/gtk/KeyEventGtk.cpp:
        (WebCore::keyIdentifierForGdkKeyCode):

2010-08-03  Anton Muhin  <antonm@chromium.org>

        Reviewed by David Levin.

        [v8] Get current memory usage and make it available on stack before crashing due to out of memory
        https://bugs.webkit.org/show_bug.cgi?id=43426

        That should allow us to diagnose the cases when the process just ran out of memory
        and hence V8 failed to allocate more OS pages.

        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::reportFatalErrorInV8):

2010-08-03  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Kenneth Rohde Christiansen.

        [EFL] Implement HTML5 slider theme (using the scrollbar theme as base).
        https://bugs.webkit.org/show_bug.cgi?id=43430

        EFL port does not yet support automated tests.

        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::paintThemePart):
        (WebCore::RenderThemeEfl::edjeGroupFromFormType): Add Edje groups
        for both vertical and horizontal sliders.
        (WebCore::supportsFocus): Add sliders as focusable elements.
        (WebCore::RenderThemeEfl::paintSliderTrack): Implement.
        (WebCore::RenderThemeEfl::adjustSliderTrackStyle): Implement.
        (WebCore::RenderThemeEfl::adjustSliderThumbStyle): Use
        adjustSliderTrackStyle() implementation.
        (WebCore::RenderThemeEfl::paintSliderThumb): Use paintSliderTrack()
        implementation().
        * platform/efl/RenderThemeEfl.h: Add SliderVertical and
        * SliderHorizontal.
        (WebCore::): Added prototypes for adjustSlider*/paintSlider*.

2010-08-03  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Joseph Pecoraro.

        Web Inspector: incorrect absolute protocol-less URLs in tooltips of links in the ElementsTreeOutline
        https://bugs.webkit.org/show_bug.cgi?id=43246

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

2010-08-03  Adam Roben  <aroben@apple.com>

        Compile out two Mac-only localized strings on non-Mac platforms

        Fixes <http://webkit.org/b/43433> copyImageUnknownFileLabel and
        AXARIAContentGroupText should only be compiled on Mac

        Reviewed by Anders Carlsson.

        * platform/LocalizationStrategy.h:
        * platform/LocalizedStrings.h:
        Wrapped copyImageUnknownFileLabel and AXARIAContentGroupText in
        PLATFORM(MAC).

2010-08-03  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix, don't build some DOM bindings we don't use.

        * wscript:

2010-08-03  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] Remove a memory leak from CusorGtk.cpp
        https://bugs.webkit.org/show_bug.cgi?id=43424

        * platform/gtk/CursorGtk.cpp:
        (WebCore::createNamedCursor):
        (WebCore::createCustomCursor):
        (WebCore::Cursor::ensurePlatformCursor):
        * platform/gtk/KeyEventGtk.cpp:
        (WebCore::keyIdentifierForGdkKeyCode):

2010-08-03  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: speculative chromium tests fix.

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

2010-08-03  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Antonio Gomes.

        Fix warning in WebCore/rendering/RenderBoxModelObject.cpp
        https://bugs.webkit.org/show_bug.cgi?id=43412

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::clipBorderSidePolygon): Remove useless assignment.

2010-08-03  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Make string parameters be 'const char*' instead of just 'char*'.

        * bindings/scripts/CodeGeneratorGObject.pm:

2010-08-03  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Get rid of extra spaces in the type strings.

        * bindings/scripts/CodeGeneratorGObject.pm:

2010-08-03  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Adam Roben.

        Fix warning in WebCore/plugins/win/PluginMessageThrottlerWin.cpp
        https://bugs.webkit.org/show_bug.cgi?id=43413

        * plugins/win/PluginMessageThrottlerWin.cpp:
        (WebCore::PluginMessageThrottlerWin::PluginMessageThrottlerWin): Modify initialization order.

2010-08-03  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: use InspectorValue to push resource data to the frontend
        https://bugs.webkit.org/show_bug.cgi?id=43414

        * inspector/Inspector.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::disconnectFrontend): destroy remote frontend object along with the old inspector frontend
        (WebCore::InspectorController::populateScriptObjects):
        (WebCore::InspectorController::didCommitLoad):
        (WebCore::InspectorController::didLoadResourceFromMemoryCache):
        (WebCore::InspectorController::identifierForInitialRequest):
        (WebCore::InspectorController::mainResourceFiredDOMContentEvent):
        (WebCore::InspectorController::mainResourceFiredLoadEvent):
        (WebCore::InspectorController::willSendRequest):
        (WebCore::InspectorController::didReceiveResponse):
        (WebCore::InspectorController::didReceiveContentLength):
        (WebCore::InspectorController::didFinishLoading):
        (WebCore::InspectorController::didFailLoading):
        (WebCore::InspectorController::resourceRetrievedByXMLHttpRequest):
        (WebCore::InspectorController::scriptImported):
        * inspector/InspectorFrontend.cpp:
        * inspector/InspectorFrontend.h:
        * inspector/InspectorResource.cpp:
        (WebCore::buildHeadersObject):
        (WebCore::buildObjectForTiming):
        (WebCore::InspectorResource::updateScriptObject):
        * inspector/InspectorResource.h:
        * inspector/front-end/inspector.js:
        (WebInspector.updateResource):

2010-08-03  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r64539.
        http://trac.webkit.org/changeset/64539
        https://bugs.webkit.org/show_bug.cgi?id=43409

        Accidently changed licenses in some files (Requested by
        WildFox on #webkit).

        * svg/...:
    
2010-08-03  Andrei Popescu  <andreip@google.com>

        Unreviewed, build fix.

        [IndexedDB] Chromium build is broken due to typo in WebCore.gypi:3501
        https://bugs.webkit.org/show_bug.cgi?id=43408

        Add missing ' in WebCore.gypi:3501.

        * WebCore.gypi:

2010-07-30  Andrei Popescu  <andreip@dhcp-172-16-14-12.lon.corp.google.com>

        Reviewed by Jeremy Orlow.

        Rename IDBDatabaseRequest to IDBDatabase
        https://bugs.webkit.org/show_bug.cgi?id=43250

        No new tests, just refactoring.

        * Android.derived.jscbindings.mk:
        * Android.derived.v8bindings.mk:
        * Android.mk:
        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.vcproj/WebCore.vcproj~: Added.
        * WebCore.xcodeproj/project.pbxproj:
        * WebCore.xcodeproj/project.pbxproj~: Added.
        * bindings/js/JSIDBAnyCustom.cpp:
        (WebCore::toJS):
        * bindings/v8/custom/V8IDBAnyCustom.cpp:
        (WebCore::toV8):
        * storage/IDBAny.cpp:
        (WebCore::IDBAny::idbDatabase):
        (WebCore::IDBAny::set):
        * storage/IDBAny.h:
        (WebCore::IDBAny::):
        * storage/IDBCallbacks.h:
        * storage/IDBDatabase.cpp: Added.
        (WebCore::IDBDatabase::IDBDatabase):
        (WebCore::IDBDatabase::~IDBDatabase):
        (WebCore::IDBDatabase::createObjectStore):
        (WebCore::IDBDatabase::objectStore):
        (WebCore::IDBDatabase::removeObjectStore):
        * storage/IDBDatabase.h:
        (WebCore::IDBDatabase::create):
        (WebCore::IDBDatabase::name):
        (WebCore::IDBDatabase::description):
        (WebCore::IDBDatabase::version):
        (WebCore::IDBDatabase::objectStores):
        * storage/IDBDatabase.idl: Added.
        * storage/IDBDatabaseBackendImpl.cpp: Added.
        (WebCore::IDBDatabaseBackendImpl::IDBDatabaseBackendImpl):
        (WebCore::IDBDatabaseBackendImpl::~IDBDatabaseBackendImpl):
        (WebCore::IDBDatabaseBackendImpl::objectStores):
        (WebCore::IDBDatabaseBackendImpl::createObjectStore):
        (WebCore::IDBDatabaseBackendImpl::objectStore):
        (WebCore::IDBDatabaseBackendImpl::removeObjectStore):
        * storage/IDBDatabaseBackendImpl.h: Added.
        (WebCore::IDBDatabaseBackendImpl::create):
        (WebCore::IDBDatabaseBackendImpl::name):
        (WebCore::IDBDatabaseBackendImpl::description):
        (WebCore::IDBDatabaseBackendImpl::version):
        * storage/IDBDatabaseBackendInterface.h: Added.
        (WebCore::IDBDatabaseBackendInterface::~IDBDatabaseBackendInterface):
        * storage/IDBDatabaseImpl.cpp: Removed.
        * storage/IDBDatabaseImpl.h: Removed.
        * storage/IDBDatabaseRequest.cpp: Removed.
        * storage/IDBDatabaseRequest.h: Removed.
        * storage/IDBDatabaseRequest.idl: Removed.
        * storage/IDBFactoryBackendImpl.cpp:
        (WebCore::IDBFactoryBackendImpl::open):
        * storage/IDBFactoryBackendImpl.h:
        * storage/IDBRequest.cpp:
        (WebCore::IDBRequest::onSuccess):
        * storage/IDBRequest.h:

2010-08-03  Satish Sampath  <satish@chromium.org>

        Reviewed by Kent Tamura.

        Initiate speech input requests on click event
        https://bugs.webkit.org/show_bug.cgi?id=43352

        * rendering/TextControlInnerElements.cpp:
        (WebCore::InputFieldSpeechButtonElement::defaultEventHandler):

2010-08-02  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: debugger code should serialize call frames to InspectorObjects instead of SerializedScriptValues.
        https://bugs.webkit.org/show_bug.cgi?id=43339

        No new tests. Refactoring.

        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::callFrames):
        * inspector/InjectedScript.h:
        * inspector/Inspector.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::editScriptSource):
        (WebCore::InspectorController::getScriptSource):
        (WebCore::InspectorController::currentCallFrames):
        (WebCore::InspectorController::didPause):
        * inspector/InspectorController.h:
        * inspector/front-end/InspectorBackendStub.js:
        (WebInspector.InspectorBackendStub):

2010-08-03  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Cleanup all of svg/ code
        https://bugs.webkit.org/show_bug.cgi?id=43311

        Unify the license header in all files in svg/, to use the same template as most WebCore files use.
        Unified email adress style, etc. all generated with a perl script attached to bug 43311.i

        * svg/...: Updated header template in all files, in the svg/ subdirectory.

2010-08-03  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Adam Barth.

        Turn all callbacks into ActiveDOMObjects and create callbacks in the correct context.
        https://bugs.webkit.org/show_bug.cgi?id=40112

        Test: http/tests/storage/callbacks-are-called-in-correct-context.html

        * CMakeLists.txt: Added new files.
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:

        * bindings/generic/ActiveDOMCallback.cpp: Added. The base class
        for all callbacks, that behaves like an ActiveDOMObject.
        (WebCore::DestroyOnContextThreadTask::create):
        (WebCore::DestroyOnContextThreadTask::performTask):
        (WebCore::DestroyOnContextThreadTask::DestroyOnContextThreadTask):
        (WebCore::ActiveDOMObjectCallbackImpl::ActiveDOMObjectCallbackImpl):
        (WebCore::ActiveDOMObjectCallbackImpl::contextDestroyed):
        (WebCore::ActiveDOMObjectCallbackImpl::canSuspend):
        (WebCore::ActiveDOMObjectCallbackImpl::suspend):
        (WebCore::ActiveDOMObjectCallbackImpl::resume):
        (WebCore::ActiveDOMObjectCallbackImpl::stop):
        (WebCore::ActiveDOMObjectCallbackImpl::canInvokeCallback):
        (WebCore::ActiveDOMObjectCallbackImpl::scriptExecutionContext):
        (WebCore::ActiveDOMObjectCallbackImpl::mutex):
        (WebCore::destroyOnContextThread):
        (WebCore::ActiveDOMCallback::ActiveDOMCallback):
        (WebCore::ActiveDOMCallback::~ActiveDOMCallback):
        (WebCore::ActiveDOMCallback::canInvokeCallback):
        (WebCore::ActiveDOMCallback::scriptExecutionContext):
        * bindings/generic/ActiveDOMCallback.h: Added.

        * bindings/js/JSCustomSQLStatementErrorCallback.cpp: Pass the
        right ScriptExecutionContext to the JSC callbacks.
        (WebCore::JSSQLStatementErrorCallback::handleEvent):
        * bindings/js/JSSQLTransactionCustom.cpp:
        (WebCore::JSSQLTransaction::executeSql):

        * bindings/scripts/CodeGeneratorJS.pm: Make all callbacks inherit
        from ActiveDOMCallback, and make them use the right
        ScriptExecutionContext.
        * bindings/scripts/CodeGeneratorV8.pm:

        * bindings/scripts/test/JS/JSTestCallback.cpp: Update the
        expectations for the code generated by CodeGenerator{JS|V8}.pm.
        (WebCore::JSTestCallback::JSTestCallback):
        (WebCore::JSTestCallback::~JSTestCallback):
        (WebCore::JSTestCallback::callbackWithClass1Param):
        (WebCore::JSTestCallback::callbackWithClass2Param):
        * bindings/scripts/test/JS/JSTestCallback.h:
        * bindings/scripts/test/V8/V8TestCallback.cpp:
        (WebCore::V8TestCallback::V8TestCallback):
        (WebCore::V8TestCallback::callbackWithClass1Param):
        (WebCore::V8TestCallback::callbackWithClass2Param):
        * bindings/scripts/test/V8/V8TestCallback.h:
        (WebCore::V8TestCallback::create):
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjInternal::methodWithCallbackArgCallback):
        (WebCore::TestObjInternal::methodWithNonCallbackArgAndCallbackArgCallback):
        (WebCore::TestObjInternal::methodWithCallbackAndOptionalArgCallback):

        * bindings/v8/custom/V8CustomSQLStatementErrorCallback.cpp: Pass
        the right ScriptExecutionContext to the V8 callbacks.
        (WebCore::V8SQLStatementErrorCallback::handleEvent):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::openDatabaseCallback):
        * bindings/v8/custom/V8DatabaseCustom.cpp:
        (WebCore::V8Database::changeVersionCallback):
        (WebCore::createTransaction):
        * bindings/v8/custom/V8DatabaseSyncCustom.cpp:
        (WebCore::V8DatabaseSync::changeVersionCallback):
        (WebCore::createTransaction):
        * bindings/v8/custom/V8SQLTransactionCustom.cpp:
        (WebCore::V8SQLTransaction::executeSqlCallback):
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        (WebCore::V8WorkerContext::openDatabaseCallback):
        (WebCore::V8WorkerContext::openDatabaseSyncCallback):

        * dom/ActiveDOMObject.cpp: Simplify the code.
        (WebCore::ActiveDOMObject::ActiveDOMObject):
        (WebCore::ActiveDOMObject::~ActiveDOMObject):

        * storage/Database.cpp: CallbackClass::handleEvent() doesn't take
        a ScriptExecutionContext anymore.
        (WebCore::DatabaseCreationCallbackTask::performTask):
        * storage/DatabaseCallback.h:
        * storage/DatabaseSync.cpp:
        (WebCore::DatabaseSync::openDatabaseSync):
        * storage/EntryCallback.h:
        * storage/ErrorCallback.h:
        * storage/FileSystemCallback.h:
        * storage/MetadataCallback.h:
        * storage/SQLStatement.cpp:
        (WebCore::SQLStatement::performCallback):
        * storage/SQLStatementCallback.h:
        * storage/SQLStatementErrorCallback.h:
        * storage/SQLTransaction.cpp:
        (WebCore::SQLTransaction::deliverTransactionCallback):
        (WebCore::SQLTransaction::deliverTransactionErrorCallback):
        * storage/SQLTransactionCallback.h:
        * storage/SQLTransactionErrorCallback.h:
        * storage/SQLTransactionSync.cpp:
        (WebCore::SQLTransactionSync::execute):
        * storage/SQLTransactionSyncCallback.h:

2010-08-02  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        WebInspector: Trivial InspectorBackend functions were removed.
        And now it is   bit simpler to change Inspector API because we have
        less number of abstraction layers.
        https://bugs.webkit.org/show_bug.cgi?id=43402

        * inspector/CodeGeneratorInspector.pm:
        * inspector/Inspector.idl:
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::clearConsoleMessages):
        (WebCore::InspectorBackend::releaseWrapperObjectGroup):
        (WebCore::InspectorBackend::inspectorFrontend):
        (WebCore::InspectorBackend::remoteFrontend):
        * inspector/InspectorBackend.h:
        (WebCore::InspectorBackend::inspectorDOMAgent):
        (WebCore::InspectorBackend::inspectorApplicationCacheAgent):
        * inspector/InspectorController.h:

2010-08-03  Alexey Proskuryakov  <ap@apple.com>

        Unreviewed (emergency test fix).

        REGRESSION (r64518): Most regression tests fail on ASSERT(shouldTrackVisitedLinks)
        on Snow Leopard.

        Platforms that use strategies now use a different code path than others, and that code path
        lacks necessary checks. We don't have a Snow Leopard debug buildbot.

        * page/PageGroup.cpp: (WebCore::PageGroup::addVisitedLinkHash): The private version of
        addVisitedLink() must not be called when we're not tracking visited links.

2010-08-02  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Chromium DevTools: Get rid of DevTools RPC.

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

        * bindings/js/ScriptProfiler.h:
        (WebCore::ScriptProfiler::getProfilerLogLines):
        * bindings/v8/ScriptProfiler.cpp:
        (WebCore::ScriptProfiler::getProfilerLogLines):
        * bindings/v8/ScriptProfiler.h:
        * inspector/Inspector.idl:
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::takeHeapSnapshot):
        (WebCore::InspectorBackend::getProfilerLogLines):
        * inspector/InspectorBackend.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::disableProfiler):
        * inspector/InspectorController.h:
        * inspector/InspectorFrontend.h:
        * inspector/front-end/InspectorBackendStub.js:
        (WebInspector.InspectorBackendStub):

2010-08-02  Dan Bernstein  <mitz@apple.com>

        Rubber-stamped by Sam Weinig.

        Removed temporary build rule introduced in r62594.

        * DerivedSources.make:

2010-08-02  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed. Rolling out r64525 for breaking chromium tests.

        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::retrieve):

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

        [wx] Build fix, add stubs for FontCustomPlatformData to compile code that uses them.

        * css/CSSFontFaceSource.cpp:
        * platform/graphics/wx/FontCustomPlatformData.cpp: Added.
        (WebCore::FontCustomPlatformData::~FontCustomPlatformData):
        (WebCore::FontCustomPlatformData::fontPlatformData):
        (WebCore::createFontCustomPlatformData):
        (WebCore::FontCustomPlatformData::supportsFormat):
        * platform/graphics/wx/FontCustomPlatformData.h: Added.
        (WebCore::FontCustomPlatformData::FontCustomPlatformData):
        * wscript:

2010-08-02  Brady Eidson  <beidson@apple.com>

        Reviewed by NOBODY (Build fix, forgot to svn add this file)

        * platform/VisitedLinkStrategy.h: Added.
        (WebCore::VisitedLinkStrategy::~VisitedLinkStrategy):

2010-08-02  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] WebKit2 requires lazy cursor support
        https://bugs.webkit.org/show_bug.cgi?id=43053

        Add lazy cursor support for GTK+. Lazy cursor support is used on some
        WebKit2 ports to support changing the cursor.

        No new tests, as this should not change functionality.

        * platform/Cursor.h: Changed the m_platformCursor member to be a GRefPtr.
        This simplifies the logic a great deal.
        * platform/gtk/CursorGtk.cpp:
        (WebCore::createNamedCursor): Added, adapted from existing code.
        (WebCore::createCustomCursor): Added, adapted from existing code.
        (WebCore::Cursor::ensurePlatformCursor): Added.
        (WebCore::Cursor::Cursor): Added.
        (WebCore::Cursor::operator=): Added.
        (WebCore::Cursor::~Cursor): Added.
        * platform/gtk/WidgetGtk.cpp:
        (WebCore::Widget::setCursor): Call platformCusor now to get the actual GdkCursor.

2010-08-02  Rajiv Makhijani  <rajivmakhijani@chromium.org>

        Reviewed by Adam Barth. 

        Committed by Dirk Pranke.

        Bug 38705 - [v8] chromium fails http/tests/sandbox-inherit-to-initial-document-2
        https://bugs.webkit.org/show_bug.cgi?id=38705

        WebCore::V8Proxy::retrieve(Frame* frame) calls WebCore::ScriptController::canExecuteScripts
        and returns 0 if canExecuteScripts is false. It should return the proxy regardless
        of whether the frame can execute scripts.

        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::retrieve): Removed canExecuteScripts check.

2010-08-02  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders Carlsson.

        Add VisitedLinkStrategy for each platform to implement
        https://bugs.webkit.org/show_bug.cgi?id=43393

        No new tests. (No change in behavior)

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::SelectorChecker::determineLinkStateSlowCase): Use VisitedLinkStrategy if it's enabled.
        
        * loader/HistoryController.cpp:
        (WebCore::addVisitedLink): Choose VisitedLinkStrategy if it's enabled, else fallback to PageGroup.
        (WebCore::HistoryController::updateForStandardLoad): Use addVisitedLink helper.
        (WebCore::HistoryController::updateForRedirectWithLockedBackForwardList): Ditto.
        (WebCore::HistoryController::updateForClientRedirect): Ditto.
        (WebCore::HistoryController::updateForSameDocumentNavigation): Ditto.
        
        * platform/PlatformStrategies.h:
        (WebCore::PlatformStrategies::visitedLinkStrategy):
        (WebCore::PlatformStrategies::PlatformStrategies):

2010-08-02  Chris Fleizach  <cfleizach@apple.com>

        Unreviewed, rolling out r64471.
        http://trac.webkit.org/changeset/64471
        https://bugs.webkit.org/show_bug.cgi?id=43005

        Rolling out https://bugs.webkit.org/show_bug.cgi?id=43005
        until further discussion

        * Android.derived.v8bindings.mk:
        * Android.jscbindings.mk:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::):
        * accessibility/Accessibility.cpp: Removed.
        * accessibility/Accessibility.h: Removed.
        * accessibility/Accessibility.idl: Removed.
        * accessibility/AccessibilityObject.h:
        * accessibility/ScreenReader.cpp: Removed.
        * accessibility/ScreenReader.h: Removed.
        * accessibility/ScreenReader.idl: Removed.
        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::postPlatformNotification):
        * accessibility/mac/AccessibilityObjectMac.mm:
        * page/Navigator.cpp:
        (WebCore::Navigator::disconnectFrame):
        (WebCore::Navigator::mimeTypes):
        * page/Navigator.h:
        * page/Navigator.idl:

2010-08-02  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Eric Seidel.

        Range::create should not be calling deprecatedEditingOffset and node on start and end
        https://bugs.webkit.org/show_bug.cgi?id=43385

        Replaced node() and deprecatedEditingOffset() by containerNode() and computeOffsetInContainerNode().

        No new tests added since this does not change the behavior.

        * dom/Range.cpp:
        (WebCore::Range::create):

2010-08-02  Chris Fleizach  <cfleizach@apple.com>

        Unreviewed, rolling out r64472.
        http://trac.webkit.org/changeset/64472
        https://bugs.webkit.org/show_bug.cgi?id=43005

        Rolling out https://bugs.webkit.org/show_bug.cgi?id=43005
        until further discussion

        * WebCore.vcproj/WebCore.vcproj:

2010-08-02  Chris Fleizach  <cfleizach@apple.com>

        Unreviewed, rolling out r64476.
        http://trac.webkit.org/changeset/64476

        Rolling out https://bugs.webkit.org/show_bug.cgi?id=43005
        until further discussion

        * WebCore.vcproj/WebCore.vcproj:

2010-07-27  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Darin Fisher.

        PopupMenu refactoring in preparation to WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=42592

        Classes PopupMenu and SearchPopupMenu have been made pure virtual.

        * platform/PopupMenu.h:
        (WebCore::PopupMenu::~PopupMenu):
        * platform/SearchPopupMenu.h:
        (WebCore::SearchPopupMenu::~SearchPopupMenu):

        Classes RenderMenuList and RenderTexyControlSingleLine have been changed to use
        the new pure virtual PopupMenu and SearchPopupMenu.

        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::adjustInnerStyle):
        (WebCore::RenderMenuList::showPopup):
        * rendering/RenderMenuList.h:
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::~RenderTextControlSingleLine):
        (WebCore::RenderTextControlSingleLine::addSearchResult):
        (WebCore::RenderTextControlSingleLine::showPopup):
        (WebCore::RenderTextControlSingleLine::hidePopup):
        (WebCore::RenderTextControlSingleLine::updateFromElement):
        (WebCore::RenderTextControlSingleLine::valueChanged):
        * rendering/RenderTextControlSingleLine.h:

        Chrome and ChromeClient were made responsible for providing instances of classes
        PopupMenu and SearchPopupMenu to its users.

        * loader/EmptyClients.h:
        (WebCore::EmptyPopupMenu::show):
        (WebCore::EmptyPopupMenu::hide):
        (WebCore::EmptyPopupMenu::updateFromElement):
        (WebCore::EmptyPopupMenu::disconnectClient):
        (WebCore::EmptySearchPopupMenu::popupMenu):
        (WebCore::EmptySearchPopupMenu::saveRecentSearches):
        (WebCore::EmptySearchPopupMenu::loadRecentSearches):
        (WebCore::EmptySearchPopupMenu::enabled):
        (WebCore::EmptyChromeClient::selectItemWritingDirectionIsNatural):
        (WebCore::EmptyChromeClient::createPopupMenu):
        (WebCore::EmptyChromeClient::createSearchPopupMenu):
        * page/Chrome.cpp:
        (WebCore::Chrome::selectItemWritingDirectionIsNatural):
        (WebCore::Chrome::createPopupMenu):
        (WebCore::Chrome::createSearchPopupMenu):
        * page/Chrome.h:
        * page/ChromeClient.h:

        Original contents of files PopupMenu.h and SearchPopupMenu.h have been splited
        in several files, two for each platform (PopupMenuXXX.h and SearchPopupMenuXXX.h).
        Each of new the files contain the concrete classes that inherit form PopupMenu or
        SearchPopupMenu and are specific for the corresponding platform.

        brew:

        * platform/brew/PopupMenuBrew.cpp:
        (WebCore::PopupMenuBrew::PopupMenuBrew):
        (WebCore::PopupMenuBrew::~PopupMenuBrew):
        (WebCore::PopupMenuBrew::disconnectClient):
        (WebCore::PopupMenuBrew::show):
        (WebCore::PopupMenuBrew::hide):
        (WebCore::PopupMenuBrew::updateFromElement):
        * platform/brew/PopupMenuBrew.h: Added.
        (WebCore::PopupMenuBrew::client):
        * platform/brew/SearchPopupMenuBrew.cpp:
        (WebCore::SearchPopupMenuBrew::saveRecentSearches):
        (WebCore::SearchPopupMenuBrew::loadRecentSearches):
        (WebCore::SearchPopupMenuBrew::SearchPopupMenuBrew):
        (WebCore::SearchPopupMenuBrew::enabled):
        (WebCore::SearchPopupMenuBrew::popupMenu):
        * platform/brew/SearchPopupMenuBrew.h: Added.

        chromium:

        * WebCore.gypi:
        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupMenuChromium::PopupMenuChromium):
        (WebCore::PopupMenuChromium::~PopupMenuChromium):
        (WebCore::PopupMenuChromium::show):
        (WebCore::PopupMenuChromium::hide):
        (WebCore::PopupMenuChromium::updateFromElement):
        (WebCore::PopupMenuChromium::disconnectClient):
        * platform/chromium/PopupMenuChromium.h:
        (WebCore::PopupMenuChromium::client):
        * platform/chromium/SearchPopupMenuChromium.cpp:
        (WebCore::SearchPopupMenuChromium::SearchPopupMenuChromium):
        (WebCore::SearchPopupMenuChromium::popupMenu):
        (WebCore::SearchPopupMenuChromium::enabled):
        (WebCore::SearchPopupMenuChromium::saveRecentSearches):
        (WebCore::SearchPopupMenuChromium::loadRecentSearches):
        * platform/chromium/SearchPopupMenuChromium.h: Added.

        efl:

        * platform/efl/PopupMenuEfl.cpp:
        (WebCore::PopupMenuEfl::PopupMenuEfl):
        (WebCore::PopupMenuEfl::~PopupMenuEfl):
        (WebCore::PopupMenuEfl::show):
        (WebCore::PopupMenuEfl::hide):
        (WebCore::PopupMenuEfl::updateFromElement):
        (WebCore::PopupMenuEfl::disconnectClient):
        * platform/efl/PopupMenuEfl.h: Added.
        (WebCore::PopupMenuEfl::client):
        * platform/efl/SearchPopupMenuEfl.cpp:
        (WebCore::SearchPopupMenuEfl::SearchPopupMenuEfl):
        (WebCore::SearchPopupMenuEfl::popupMenu):
        (WebCore::SearchPopupMenuEfl::saveRecentSearches):
        (WebCore::SearchPopupMenuEfl::loadRecentSearches):
        (WebCore::SearchPopupMenuEfl::enabled):
        * platform/efl/SearchPopupMenuEfl.h: Added.

        gtk:

        * GNUmakefile.am:
        * platform/gtk/PopupMenuGtk.cpp:
        (WebCore::PopupMenuGtk::PopupMenuGtk):
        (WebCore::PopupMenuGtk::~PopupMenuGtk):
        (WebCore::PopupMenuGtk::show):
        (WebCore::PopupMenuGtk::hide):
        (WebCore::PopupMenuGtk::updateFromElement):
        (WebCore::PopupMenuGtk::disconnectClient):
        (WebCore::PopupMenuGtk::menuItemActivated):
        (WebCore::PopupMenuGtk::menuUnmapped):
        (WebCore::PopupMenuGtk::menuPositionFunction):
        (WebCore::PopupMenuGtk::menuRemoveItem):
        * platform/gtk/PopupMenuGtk.h: Added.
        (WebCore::PopupMenuGtk::client):
        * platform/gtk/SearchPopupMenuGtk.cpp:
        (WebCore::SearchPopupMenuGtk::SearchPopupMenuGtk):
        (WebCore::SearchPopupMenuGtk::popupMenu):
        (WebCore::SearchPopupMenuGtk::saveRecentSearches):
        (WebCore::SearchPopupMenuGtk::loadRecentSearches):
        (WebCore::SearchPopupMenuGtk::enabled):
        * platform/gtk/SearchPopupMenuGtk.h: Added.

        haiku:

        * platform/haiku/PopupMenuHaiku.cpp:
        (WebCore::HaikuPopup::HaikuPopup):
        (WebCore::HaikuPopup::~HaikuPopup):
        (WebCore::PopupMenuHaiku::PopupMenuHaiku):
        (WebCore::PopupMenuHaiku::~PopupMenuHaiku):
        (WebCore::PopupMenuHaiku::disconnectClient):
        (WebCore::PopupMenuHaiku::show):
        (WebCore::PopupMenuHaiku::hide):
        (WebCore::PopupMenuHaiku::updateFromElement):
        * platform/haiku/PopupMenuHaiku.h: Added.
        (WebCore::PopupMenuHaiku::disconnectClient):
        (WebCore::PopupMenuHaiku::client):
        * platform/haiku/SearchPopupMenuHaiku.cpp:
        (WebCore::SearchPopupMenuHaiku::SearchPopupMenuHaiku):
        (WebCore::SearchPopupMenuHaiku::saveRecentSearches):
        (WebCore::SearchPopupMenuHaiku::loadRecentSearches):
        (WebCore::SearchPopupMenuHaiku::enabled):
        (WebCore::SearchPopupMenuHaiku::popupMenu):
        * platform/haiku/SearchPopupMenuHaiku.h: Added.

        mac:

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mac/PopupMenuMac.h: Added.
        (WebCore::PopupMenuMac::disconnectClient):
        (WebCore::PopupMenuMac::client):
        * platform/mac/PopupMenuMac.mm:
        (WebCore::PopupMenuMac::PopupMenuMac):
        (WebCore::PopupMenuMac::~PopupMenuMac):
        (WebCore::PopupMenuMac::clear):
        (WebCore::PopupMenuMac::populate):
        (WebCore::PopupMenuMac::show):
        (WebCore::PopupMenuMac::hide):
        (WebCore::PopupMenuMac::updateFromElement):
        (WebCore::PopupMenuMac::itemWritingDirectionIsNatural):
        * platform/mac/SearchPopupMenuMac.h: Added.
        * platform/mac/SearchPopupMenuMac.mm:
        (WebCore::SearchPopupMenuMac::SearchPopupMenuMac):
        (WebCore::SearchPopupMenuMac::popupMenu):
        (WebCore::SearchPopupMenuMac::enabled):
        (WebCore::SearchPopupMenuMac::saveRecentSearches):
        (WebCore::SearchPopupMenuMac::loadRecentSearches):

        qt:

        * WebCore.pro:
        * platform/qt/PopupMenuQt.cpp:
        (WebCore::PopupMenuQt::PopupMenuQt):
        (WebCore::PopupMenuQt::~PopupMenuQt):
        (WebCore::PopupMenuQt::disconnectClient):
        (WebCore::PopupMenuQt::show):
        (WebCore::PopupMenuQt::hide):
        (WebCore::PopupMenuQt::updateFromElement):
        * platform/qt/PopupMenuQt.h: Added.
        * platform/qt/QtAbstractWebPopup.h:
        * platform/qt/SearchPopupMenuQt.cpp:
        (WebCore::SearchPopupMenuQt::SearchPopupMenuQt):
        (WebCore::SearchPopupMenuQt::popupMenu):
        (WebCore::SearchPopupMenuQt::saveRecentSearches):
        (WebCore::SearchPopupMenuQt::loadRecentSearches):
        (WebCore::SearchPopupMenuQt::enabled):
        * platform/qt/SearchPopupMenuQt.h: Added.

        win:

        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenuWin::PopupMenuWin):
        (WebCore::PopupMenuWin::~PopupMenuWin):
        (WebCore::PopupMenuWin::disconnectClient):
        (WebCore::PopupMenuWin::popupClassName):
        (WebCore::PopupMenuWin::show):
        (WebCore::PopupMenuWin::hide):
        (WebCore::PopupMenuWin::calculatePositionAndSize):
        (WebCore::PopupMenuWin::setFocusedIndex):
        (WebCore::PopupMenuWin::visibleItems):
        (WebCore::PopupMenuWin::listIndexAtPoint):
        (WebCore::PopupMenuWin::focusedIndex):
        (WebCore::PopupMenuWin::focusFirst):
        (WebCore::PopupMenuWin::focusLast):
        (WebCore::PopupMenuWin::down):
        (WebCore::PopupMenuWin::up):
        (WebCore::PopupMenuWin::invalidateItem):
        (WebCore::PopupMenuWin::clientRect):
        (WebCore::PopupMenuWin::incrementWheelDelta):
        (WebCore::PopupMenuWin::reduceWheelDelta):
        (WebCore::PopupMenuWin::scrollToRevealSelection):
        (WebCore::PopupMenuWin::updateFromElement):
        (WebCore::PopupMenuWin::paint):
        (WebCore::PopupMenuWin::valueChanged):
        (WebCore::PopupMenuWin::invalidateScrollbarRect):
        (WebCore::PopupMenuWin::registerClass):
        (WebCore::PopupMenuWin::PopupMenuWndProc):
        (WebCore::PopupMenuWin::wndProc):
        * platform/win/PopupMenuWin.h: Added.
        (WebCore::PopupMenuWin::client):
        (WebCore::PopupMenuWin::scrollbar):
        (WebCore::PopupMenuWin::itemHeight):
        (WebCore::PopupMenuWin::windowRect):
        (WebCore::PopupMenuWin::popupHandle):
        (WebCore::PopupMenuWin::setWasClicked):
        (WebCore::PopupMenuWin::wasClicked):
        (WebCore::PopupMenuWin::setScrollOffset):
        (WebCore::PopupMenuWin::scrollOffset):
        (WebCore::PopupMenuWin::wheelDelta):
        (WebCore::PopupMenuWin::scrollbarCapturingMouse):
        (WebCore::PopupMenuWin::setScrollbarCapturingMouse):
        * platform/win/SearchPopupMenuWin.cpp:
        (WebCore::SearchPopupMenuWin::SearchPopupMenuWin):
        (WebCore::SearchPopupMenuWin::popupMenu):
        (WebCore::SearchPopupMenuWin::enabled):
        (WebCore::SearchPopupMenuWin::saveRecentSearches):
        (WebCore::SearchPopupMenuWin::loadRecentSearches):
        * platform/win/SearchPopupMenuWin.h: Added.

        wx:

        * platform/wx/PopupMenuWx.cpp:
        (WebCore::PopupMenuWx::PopupMenuWx):
        (WebCore::PopupMenuWx::~PopupMenuWx):
        (WebCore::PopupMenuWx::disconnectClient):
        (WebCore::PopupMenuWx::show):
        (WebCore::PopupMenuWx::OnMenuItemSelected):
        (WebCore::PopupMenuWx::hide):
        (WebCore::PopupMenuWx::updateFromElement):
        * platform/wx/PopupMenuWx.h: Added.
        (WebCore::PopupMenuWx::client):
        * platform/wx/SearchPopupMenuWx.cpp:
        (WebCore::SearchPopupMenuWx::SearchPopupMenuWx):
        (WebCore::SearchPopupMenuWx::saveRecentSearches):
        (WebCore::SearchPopupMenuWx::loadRecentSearches):
        (WebCore::SearchPopupMenuWx::enabled):
        (WebCore::SearchPopupMenuWx::popupMenu):
        * platform/wx/SearchPopupMenuWx.h: Added.



2010-08-02  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Use GdkPixbuf for ImageBuffer::toDataURL
        https://bugs.webkit.org/show_bug.cgi?id=43088

        Implement ImageBuffer::toDataURL with GdkPixbuf instead of Cairo. This
        allows the method to support a larger variety of image types.

        * GNUmakefile.am: Add new files to the source list.
        * platform/MIMETypeRegistry.cpp: 
        (WebCore::initializeSupportedImageMIMETypesForEncoding):
        Add the list of image types supported by GTK.
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        * platform/graphics/gtk/CairoUtilities.cpp: Added.
        (getCairoSurfacePixel): Move this method from ImageGtk.cpp.
        (getGdkPixbufPixel): Move this method from ImageGtk.cpp.
        (cairoImageSurfaceToGdkPixbuf): Move this method from ImageGtk.cpp.
        * platform/graphics/gtk/CairoUtilities.h: Added.
        * platform/graphics/gtk/ImageBufferGtk.cpp: Added.
        (WebCore::ImageBuffer::toDataURL): Use GdkPixbuf to do the conversion to a data url.
        * platform/graphics/gtk/ImageGtk.cpp:
        (WebCore::BitmapImage::getGdkPixbuf): Use the new helper method in CairoUtilities.h.

2010-08-02  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        [GTK] Add support for the Audio element in the DOM bindings
        https://bugs.webkit.org/show_bug.cgi?id=43313

        The IDL definition of some HTMLMediaElement methods does not match
        the C++ implementation API, take this fact into account when
        generating the bindings.

        * bindings/gobject/WebKitHTMLElementWrapperFactory.cpp:
        (WebKit::createAudioWrapper):
        (WebKit::createHTMLElementWrapper):
        * bindings/scripts/CodeGeneratorGObject.pm:

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

        Reviewed by Sam Weinig.

        Fix plug-in test failures and remove tests from the Skipped list
        https://bugs.webkit.org/show_bug.cgi?id=43389

        * WebCore.exp.in:
        Export FrameLoader::cancelledError.

2010-08-02  Brady Eidson  <beidson@apple.com>

        Reviewed by Anders Carlsson.

        Basic WK2 visited link coloring
        https://bugs.webkit.org/show_bug.cgi?id=43377

        No new tests. (No change in behavior)

        * WebCore.exp.in:
        
        * page/PageGroup.cpp:
        (WebCore::PageGroup::addVisitedLinkHash):
        * page/PageGroup.h:

2010-08-02  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Style cleanup for CairoPath.h
        https://bugs.webkit.org/show_bug.cgi?id=43133

        Turn CairoPath into a class, as it has a constructor and destructor.
        Change raw member access to use the new accessor.

        No new tests as functionality has not changed.

        * platform/graphics/cairo/CairoPath.h: Cleanup and indentation fix.
        (WebCore::CairoPath::CairoPath):
        (WebCore::CairoPath::~CairoPath):
        (WebCore::CairoPath::context):
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::addPath): Convert raw member access to accessor access.
        (WebCore::GraphicsContext::clip): Ditto.
        * platform/graphics/cairo/PathCairo.cpp:
        (WebCore::Path::Path): Ditto.
        (WebCore::Path::operator=): Ditto.
        (WebCore::Path::clear): Ditto.
        (WebCore::Path::isEmpty): Ditto.
        (WebCore::Path::currentPoint): Ditto.
        (WebCore::Path::translate): Ditto.
        (WebCore::Path::moveTo): Ditto.
        (WebCore::Path::addLineTo): Ditto.
        (WebCore::Path::addRect): Ditto.
        (WebCore::Path::addQuadCurveTo): Ditto.
        (WebCore::Path::addBezierCurveTo): Ditto.
        (WebCore::Path::addArc): Ditto.
        (WebCore::Path::addArcTo): Ditto.
        (WebCore::Path::addEllipse): Ditto.
        (WebCore::Path::closeSubpath): Ditto.
        (WebCore::Path::boundingRect): Ditto.
        (WebCore::Path::strokeBoundingRect): Ditto.
        (WebCore::Path::contains): Ditto.
        (WebCore::Path::strokeContains): Ditto.
        (WebCore::Path::apply): Ditto.
        (WebCore::Path::transform): Ditto.
        (WebCore::Path::debugString): Ditto.

2010-07-20  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        focusing the body of a contentEditable iframe resets the selection
        https://bugs.webkit.org/show_bug.cgi?id=42645
        
        The selection shouldn't be reset to the beginning of the rootEditableElement
        if it is already inside the rootEditableElement.

        Test: editing/selection/focus-contenteditable-iframe.html

        * dom/Element.cpp:
        (WebCore::Element::updateFocusAppearance):

2010-07-20  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Eric Seidel.

        focusing an unfocused contentEditable element should place the cursor at the beginning
        https://bugs.webkit.org/show_bug.cgi?id=42646

        r14666 made this change for the body and html elements, but not for all contentEditable 
        elements. Doing this for all contentEditable elements matches all other browsers.

        * dom/Element.cpp:
        (WebCore::Element::updateFocusAppearance):

2010-08-02  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Kent Tamura.

        Group functions used in createMarkup (range version) into a class so they are easier to understand
        https://bugs.webkit.org/show_bug.cgi?id=43227

        Added MarkupAccumulatorWrapper to group getStartMarkup, getEndMarkup, joinMarkups, and addStyleMarkup.
        MarkupAccumulatorWrapper is intended to be merged with MarkupAccumulator in the future.

        No new tests added since this is a clean up.

        * editing/markup.cpp:
        (WebCore::MarkupAccumulatorWrapper::MarkupAccumulatorWrapper): Added.
        (WebCore::MarkupAccumulatorWrapper::insertString): Added.
        (WebCore::MarkupAccumulatorWrapper::insertOpenTag): Added.
        (WebCore::MarkupAccumulatorWrapper::insertEndTag): Added.
        (WebCore::MarkupAccumulatorWrapper::wrapWithNode): Added.
        (WebCore::MarkupAccumulatorWrapper::wrapWithStyleNode): Added.
        (WebCore::MarkupAccumulatorWrapper::takeResults): Added.
        (WebCore::createMarkup): Uses MarkupAccumulatorWrapper.

2010-08-02  Brian Weinstein  <bweinstein@apple.com>

        Add a missing </File> tag to WebCore.vcproj.

        * WebCore.vcproj/WebCore.vcproj:

2010-08-02  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Chris Fleizach.

        [GTK] Implement support for get_character_extents and get_range_extents
        https://bugs.webkit.org/show_bug.cgi?id=25677

        Implement get_range_extents() and modify get_character_extents()
        to properly work after "The Great Flattening" occurred in the ATK
        objects hierarchy, some months ago.

        In the case of the GTK port, not just the text controls should be
        considered when it comes to these functions but also those
        composite objects that would also allow to work with text ranges,
        such as headings and links. To take care of this, a new function
        AccessibilityObject::allowsTextRanges() was defined with a default
        implementation in the header file and an specific one for GTK in
        AccessibilityObjectAtk.cpp.

        Based on a previous patch by Joanmarie Diggs.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::visiblePositionRangeForRange):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::allowsTextRanges): New
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::visiblePositionForIndex):
        (WebCore::AccessibilityRenderObject::doAXBoundsForRange):
        * accessibility/gtk/AccessibilityObjectAtk.cpp:
        (WebCore::AccessibilityObject::allowsTextRanges): New
        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (textExtents):
        (webkit_accessible_text_get_character_extents):
        (webkit_accessible_text_get_range_extents):
        (atk_text_interface_init):

2010-08-02  Chris Fleizach  <cfleizach@apple.com>

        AX: Support methods for web apps to interact with the native accessibility APIs
        https://bugs.webkit.org/show_bug.cgi?id=43005

        Fix for windows build. No review.

        * WebCore.vcproj/WebCore.vcproj:

2010-08-02  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by David Kilzer.

        AX: Support methods for web apps to interact with the native accessibility APIs
        https://bugs.webkit.org/show_bug.cgi?id=43005

        Adds a new "accessibility" object that hangs off of "window.navigator".
        This accessibility object will allow web apps to interact with native accessibility APIs
        to provide a richer experience (for screen reader users primarily).

        Test: platform/mac/accessibility/js-accessibility.html

        * Android.derived.v8bindings.mk:
        * Android.jscbindings.mk:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::):
        * accessibility/Accessibility.cpp: Added.
        (WebCore::Accessibility::Accessibility):
        (WebCore::Accessibility::~Accessibility):
        (WebCore::Accessibility::disconnectFrame):
        (WebCore::Accessibility::screenChanged):
        (WebCore::Accessibility::elementsChanged):
        (WebCore::Accessibility::screenReader):
        * accessibility/Accessibility.h: Added.
        (WebCore::Accessibility::create):
        * accessibility/Accessibility.idl: Added.
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isScreenReaderRunning):
        (WebCore::AccessibilityObject::screenReaderFocusedElement):
        (WebCore::AccessibilityObject::screenReaderVersion):
        * accessibility/ScreenReader.cpp: Added.
        (WebCore::ScreenReader::ScreenReader):
        (WebCore::ScreenReader::~ScreenReader):
        (WebCore::ScreenReader::disconnectFrame):
        (WebCore::ScreenReader::active):
        (WebCore::ScreenReader::activeElement):
        (WebCore::ScreenReader::version):
        * accessibility/ScreenReader.h: Added.
        (WebCore::ScreenReader::create):
        * accessibility/ScreenReader.idl: Added.
        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::postPlatformNotification):
        * accessibility/mac/AccessibilityObjectMac.mm:
        (WebCore::AccessibilityObject::isScreenReaderRunning):
        (WebCore::AccessibilityObject::screenReaderFocusedElement):
        (WebCore::AccessibilityObject::screenReaderVersion):
        * page/Navigator.cpp:
        (WebCore::Navigator::disconnectFrame):
        (WebCore::Navigator::accessibility):
        * page/Navigator.h:
        * page/Navigator.idl:

2010-08-02  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [Gtk] DOM listeners get wrong keycodes for some keys
        https://bugs.webkit.org/show_bug.cgi?id=35170

        Emit the proper DOM keyCode for the print screen, keypad insert,
        and keypad delete keys.

        * platform/gtk/KeyEventGtk.cpp:
        (WebCore::windowsKeyCodeForKeyEvent): Fix mapping between GDK key codes
        and Windows key codes.

2010-08-02  Dirk Schulze  <krit@webkit.org>

        Unreviewed sort of Xcode project file.

        * WebCore.xcodeproj/project.pbxproj:

2010-08-02  Kristian Monsen  <kristianm@google.com>

        Reviewed by Steve Block.

        Compile fix for Android, adding guards around filter specific code.
        https://bugs.webkit.org/show_bug.cgi?id=43338
        This CL introduced the code:
        http://trac.webkit.org/changeset/64196

        Compile fix only, no new tests.

        * rendering/SVGResourcesCycleSolver.cpp:
        (WebCore::SVGResourcesCycleSolver::breakCycle):

2010-08-02  Kristian Monsen  <kristianm@google.com>

        Reviewed by Steve Block.

        Compile fix for Android, guard inspector code with ENABLE(INSPECTOR).
        https://bugs.webkit.org/show_bug.cgi?id=43345
        Code introduced in this CL:
        http://trac.webkit.org/changeset/63891

        No new tests, just a compile fix.

        * bindings/v8/ScriptValue.cpp:

2010-08-02  Jeremy Orlow  <jorlow@chromium.org>

        Speculative revert of 64425 due to Chromium instability
        https://bugs.webkit.org/show_bug.cgi?id=43347

        * GNUmakefile.am:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/EmptyClients.h:
        * page/Chrome.cpp:
        * page/Chrome.h:
        * page/ChromeClient.h:
        * platform/PopupMenu.h:
        (WebCore::PopupMenu::create):
        (WebCore::PopupMenu::disconnectClient):
        (WebCore::PopupMenu::client):
        (WebCore::PopupMenu::scrollbar):
        (WebCore::PopupMenu::itemHeight):
        (WebCore::PopupMenu::windowRect):
        (WebCore::PopupMenu::popupHandle):
        (WebCore::PopupMenu::setWasClicked):
        (WebCore::PopupMenu::wasClicked):
        (WebCore::PopupMenu::setScrollOffset):
        (WebCore::PopupMenu::scrollOffset):
        (WebCore::PopupMenu::wheelDelta):
        (WebCore::PopupMenu::scrollbarCapturingMouse):
        (WebCore::PopupMenu::setScrollbarCapturingMouse):
        (WebCore::PopupMenu::isActive):
        (WebCore::PopupMenu::scrollbarCornerPresent):
        * platform/SearchPopupMenu.h:
        (WebCore::SearchPopupMenu::create):
        * platform/brew/PopupMenuBrew.cpp:
        (WebCore::PopupMenu::PopupMenu):
        (WebCore::PopupMenu::~PopupMenu):
        (WebCore::PopupMenu::show):
        (WebCore::PopupMenu::hide):
        (WebCore::PopupMenu::updateFromElement):
        (WebCore::PopupMenu::itemWritingDirectionIsNatural):
        * platform/brew/PopupMenuBrew.h: Removed.
        * platform/brew/SearchPopupMenuBrew.cpp:
        (WebCore::SearchPopupMenu::saveRecentSearches):
        (WebCore::SearchPopupMenu::loadRecentSearches):
        (WebCore::SearchPopupMenu::SearchPopupMenu):
        (WebCore::SearchPopupMenu::enabled):
        * platform/brew/SearchPopupMenuBrew.h: Removed.
        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupMenu::PopupMenu):
        (WebCore::PopupMenu::~PopupMenu):
        (WebCore::PopupMenu::show):
        (WebCore::PopupMenu::hide):
        (WebCore::PopupMenu::updateFromElement):
        (WebCore::PopupMenu::itemWritingDirectionIsNatural):
        * platform/chromium/PopupMenuChromium.h:
        * platform/chromium/SearchPopupMenuChromium.cpp:
        (WebCore::SearchPopupMenu::SearchPopupMenu):
        (WebCore::SearchPopupMenu::enabled):
        (WebCore::SearchPopupMenu::saveRecentSearches):
        (WebCore::SearchPopupMenu::loadRecentSearches):
        * platform/chromium/SearchPopupMenuChromium.h: Removed.
        * platform/efl/PopupMenuEfl.cpp:
        (WebCore::PopupMenu::PopupMenu):
        (WebCore::PopupMenu::~PopupMenu):
        (WebCore::PopupMenu::show):
        (WebCore::PopupMenu::hide):
        (WebCore::PopupMenu::updateFromElement):
        (WebCore::PopupMenu::itemWritingDirectionIsNatural):
        * platform/efl/PopupMenuEfl.h: Removed.
        * platform/efl/SearchPopupMenuEfl.cpp:
        (WebCore::SearchPopupMenu::SearchPopupMenu):
        (WebCore::SearchPopupMenu::saveRecentSearches):
        (WebCore::SearchPopupMenu::loadRecentSearches):
        (WebCore::SearchPopupMenu::enabled):
        * platform/efl/SearchPopupMenuEfl.h: Removed.
        * platform/gtk/PopupMenuGtk.cpp:
        (WebCore::PopupMenu::PopupMenu):
        (WebCore::PopupMenu::~PopupMenu):
        (WebCore::PopupMenu::show):
        (WebCore::PopupMenu::hide):
        (WebCore::PopupMenu::updateFromElement):
        (WebCore::PopupMenu::itemWritingDirectionIsNatural):
        (WebCore::PopupMenu::menuItemActivated):
        (WebCore::PopupMenu::menuUnmapped):
        (WebCore::PopupMenu::menuPositionFunction):
        (WebCore::PopupMenu::menuRemoveItem):
        * platform/gtk/PopupMenuGtk.h: Removed.
        * platform/gtk/SearchPopupMenuGtk.cpp:
        (WebCore::SearchPopupMenu::SearchPopupMenu):
        (WebCore::SearchPopupMenu::saveRecentSearches):
        (WebCore::SearchPopupMenu::loadRecentSearches):
        (WebCore::SearchPopupMenu::enabled):
        * platform/gtk/SearchPopupMenuGtk.h: Removed.
        * platform/haiku/PopupMenuHaiku.cpp:
        (WebCore::PopupMenuHaiku::PopupMenuHaiku):
        (WebCore::PopupMenuHaiku::~PopupMenuHaiku):
        (WebCore::PopupMenu::PopupMenu):
        (WebCore::PopupMenu::~PopupMenu):
        (WebCore::PopupMenu::show):
        (WebCore::PopupMenu::hide):
        (WebCore::PopupMenu::updateFromElement):
        (WebCore::PopupMenu::itemWritingDirectionIsNatural):
        * platform/haiku/PopupMenuHaiku.h: Removed.
        * platform/haiku/SearchPopupMenuHaiku.cpp:
        (WebCore::SearchPopupMenu::SearchPopupMenu):
        (WebCore::SearchPopupMenu::saveRecentSearches):
        (WebCore::SearchPopupMenu::loadRecentSearches):
        (WebCore::SearchPopupMenu::enabled):
        * platform/haiku/SearchPopupMenuHaiku.h: Removed.
        * platform/mac/PopupMenuMac.h: Removed.
        * platform/mac/PopupMenuMac.mm:
        (WebCore::PopupMenu::PopupMenu):
        (WebCore::PopupMenu::~PopupMenu):
        (WebCore::PopupMenu::clear):
        (WebCore::PopupMenu::populate):
        (WebCore::PopupMenu::show):
        (WebCore::PopupMenu::hide):
        (WebCore::PopupMenu::updateFromElement):
        (WebCore::PopupMenu::itemWritingDirectionIsNatural):
        * platform/mac/SearchPopupMenuMac.h: Removed.
        * platform/mac/SearchPopupMenuMac.mm:
        (WebCore::SearchPopupMenu::SearchPopupMenu):
        (WebCore::SearchPopupMenu::enabled):
        (WebCore::SearchPopupMenu::saveRecentSearches):
        (WebCore::SearchPopupMenu::loadRecentSearches):
        * platform/qt/PopupMenuQt.cpp:
        (WebCore::PopupMenu::PopupMenu):
        (WebCore::PopupMenu::~PopupMenu):
        (WebCore::PopupMenu::show):
        (WebCore::PopupMenu::hide):
        (WebCore::PopupMenu::updateFromElement):
        (WebCore::PopupMenu::itemWritingDirectionIsNatural):
        * platform/qt/PopupMenuQt.h: Removed.
        * platform/qt/QtAbstractWebPopup.h:
        * platform/qt/SearchPopupMenuQt.cpp:
        (WebCore::SearchPopupMenu::SearchPopupMenu):
        (WebCore::SearchPopupMenu::saveRecentSearches):
        (WebCore::SearchPopupMenu::loadRecentSearches):
        (WebCore::SearchPopupMenu::enabled):
        * platform/qt/SearchPopupMenuQt.h: Removed.
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::PopupMenu):
        (WebCore::PopupMenu::~PopupMenu):
        (WebCore::PopupMenu::popupClassName):
        (WebCore::PopupMenu::show):
        (WebCore::PopupMenu::hide):
        (WebCore::PopupMenu::calculatePositionAndSize):
        (WebCore::PopupMenu::setFocusedIndex):
        (WebCore::PopupMenu::visibleItems):
        (WebCore::PopupMenu::listIndexAtPoint):
        (WebCore::PopupMenu::focusedIndex):
        (WebCore::PopupMenu::focusFirst):
        (WebCore::PopupMenu::focusLast):
        (WebCore::PopupMenu::down):
        (WebCore::PopupMenu::up):
        (WebCore::PopupMenu::invalidateItem):
        (WebCore::PopupMenu::clientRect):
        (WebCore::PopupMenu::incrementWheelDelta):
        (WebCore::PopupMenu::reduceWheelDelta):
        (WebCore::PopupMenu::scrollToRevealSelection):
        (WebCore::PopupMenu::updateFromElement):
        (WebCore::PopupMenu::itemWritingDirectionIsNatural):
        (WebCore::PopupMenu::paint):
        (WebCore::PopupMenu::valueChanged):
        (WebCore::PopupMenu::invalidateScrollbarRect):
        (WebCore::PopupMenu::registerClass):
        (WebCore::PopupMenu::PopupMenuWndProc):
        (WebCore::PopupMenu::wndProc):
        * platform/win/PopupMenuWin.h: Removed.
        * platform/win/SearchPopupMenuWin.cpp:
        (WebCore::SearchPopupMenu::SearchPopupMenu):
        (WebCore::SearchPopupMenu::enabled):
        (WebCore::SearchPopupMenu::saveRecentSearches):
        (WebCore::SearchPopupMenu::loadRecentSearches):
        * platform/win/SearchPopupMenuWin.h: Removed.
        * platform/wx/PopupMenuWx.cpp:
        (WebCore::PopupMenu::PopupMenu):
        (WebCore::PopupMenu::~PopupMenu):
        (WebCore::PopupMenu::show):
        (WebCore::PopupMenu::OnMenuItemSelected):
        (WebCore::PopupMenu::hide):
        (WebCore::PopupMenu::updateFromElement):
        (WebCore::PopupMenu::itemWritingDirectionIsNatural):
        * platform/wx/PopupMenuWx.h: Removed.
        * platform/wx/SearchPopupMenuWx.cpp:
        (WebCore::SearchPopupMenu::SearchPopupMenu):
        (WebCore::SearchPopupMenu::saveRecentSearches):
        (WebCore::SearchPopupMenu::loadRecentSearches):
        (WebCore::SearchPopupMenu::enabled):
        * platform/wx/SearchPopupMenuWx.h: Removed.
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::adjustInnerStyle):
        (WebCore::RenderMenuList::showPopup):
        * rendering/RenderMenuList.h:
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::~RenderTextControlSingleLine):
        (WebCore::RenderTextControlSingleLine::addSearchResult):
        (WebCore::RenderTextControlSingleLine::showPopup):
        (WebCore::RenderTextControlSingleLine::hidePopup):
        (WebCore::RenderTextControlSingleLine::updateFromElement):
        (WebCore::RenderTextControlSingleLine::valueChanged):
        * rendering/RenderTextControlSingleLine.h:

2010-08-02  Markus Goetz  <Markus.Goetz@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Do not link to SharedBufferCF.cpp
        The Qt port does not need this file.
        We plan to implement the platformData()
        for SharedBuffer at some point soon.
        https://bugs.webkit.org/show_bug.cgi?id=43242

        * WebCore.pro:
        * platform/SharedBuffer.cpp:

2010-08-02  Balazs Kelemen  <kb@inf.u-szeged.hu>

        Reviewed by Simon Hausmann.

        [Qt] Generate forwarding headers for WebKit2

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

        * WebCore.pri: Removed header copying logic.
        * WebCore.pro: Add include paths for WebKit2.

2010-08-02  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: adding experimental support for WebInspector extensions API.
        https://bugs.webkit.org/show_bug.cgi?id=40425

        Tests: inspector/extensions-api.html
               inspector/extensions.html

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::inspectedWindowScriptObjectCleared):
        (WebCore::InspectorController::didCommitLoad):
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::setExtensionAPI):
        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorFrontendHost.idl:
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.this.treeOutline.focusedNodeChanged):
        (WebInspector.ElementsPanel):
        * inspector/front-end/ExtensionAPI.js: Added. An API implementation that gets injected into the extension context.
        (injectedExtensionAPI):
        (injectedExtensionAPI.EventSinkImpl.prototype.addListener):
        (injectedExtensionAPI.EventSinkImpl.prototype.removeListener):
        (injectedExtensionAPI.EventSinkImpl.prototype._fire):
        (injectedExtensionAPI.EventSink):
        (injectedExtensionAPI.InspectorExtensionAPI):
        (injectedExtensionAPI.InspectorExtensionAPI.prototype.log):
        (injectedExtensionAPI.Resources.prototype.getAll):
        (injectedExtensionAPI.Resources.prototype.get return):
        (injectedExtensionAPI.Resources.prototype):
        (injectedExtensionAPI.Panels):
        (injectedExtensionAPI.Panels.prototype.create.callbackWrapper):
        (injectedExtensionAPI.Panels.prototype.create):
        (injectedExtensionAPI.PanelImpl):
        (injectedExtensionAPI.PanelImpl.prototype.createSidebarPane.callbackWrapper):
        (injectedExtensionAPI.PanelImpl.prototype.createSidebarPane):
        (injectedExtensionAPI.ExtensionPanel):
        (injectedExtensionAPI.ExtensionSidebarPaneImpl):
        (injectedExtensionAPI.ExtensionSidebarPaneImpl.prototype.setHeight):
        (injectedExtensionAPI.ExtensionSidebarPaneImpl.prototype.setExpanded):
        (injectedExtensionAPI.InspectedWindow):
        (injectedExtensionAPI.InspectedWindow.prototype.reload):
        (injectedExtensionAPI.InspectedWindow.prototype.evaluate):
        (injectedExtensionAPI.ExtensionServerClient.prototype.sendRequest):
        (injectedExtensionAPI.ExtensionServerClient.prototype.registerHandler):
        (injectedExtensionAPI.ExtensionServerClient.prototype.nextObjectId):
        (injectedExtensionAPI.ExtensionServerClient.prototype._registerCallback):
        (injectedExtensionAPI.ExtensionServerClient.prototype._onCallback):
        (injectedExtensionAPI.ExtensionServerClient.prototype._onMessage):
        (injectedExtensionAPI.expandURL):
        (injectedExtensionAPI.):
        * inspector/front-end/ExtensionPanel.js: Added. A class that provides WebInspector's Panel interface to the inspector, hosts extension panel within an IFrame and proxies Panel callbacks to the extension.
        (WebInspector.ExtensionPanel):
        (WebInspector.ExtensionPanel.prototype.get defaultFocusedElement):
        (WebInspector.ExtensionPanel.prototype.updateMainViewWidth):
        (WebInspector.ExtensionPanel.prototype.searchCanceled):
        (WebInspector.ExtensionPanel.prototype.performSearch):
        (WebInspector.ExtensionPanel.prototype.jumpToNextSearchResult):
        (WebInspector.ExtensionPanel.prototype.jumpToPreviousSearchResult):
        (WebInspector.ExtensionPanel.prototype._addStyleRule):
        * inspector/front-end/ExtensionRegistryStub.js: Added. A stub for ExtensionRegistry class that is meant to provide a list of extensions. Actual implementations may be browser-specfic.
        (.WebInspector.InspectorExtensionRegistryStub):
        (.WebInspector.InspectorExtensionRegistryStub.prototype.getExtensionsAsync):
        * inspector/front-end/ExtensionServer.js: Added. Communicates with ExtensionAPI via DOM messaging and proxies requests to WebInspector classes.
        (WebInspector.ExtensionServer):
        (WebInspector.ExtensionServer.prototype.notifyPanelShown):
        (WebInspector.ExtensionServer.prototype.notifyObjectSelected):
        (WebInspector.ExtensionServer.prototype.notifyResourceFinished):
        (WebInspector.ExtensionServer.prototype.notifySearchAction):
        (WebInspector.ExtensionServer.prototype.notifyInspectedPageLoaded):
        (WebInspector.ExtensionServer.prototype.notifyInspectedURLChanged):
        (WebInspector.ExtensionServer.prototype.notifyInspectorReset):
        (WebInspector.ExtensionServer.prototype._convertResource):
        (WebInspector.ExtensionServer.prototype._postNotification):
        (WebInspector.ExtensionServer.prototype._onSubscribe):
        (WebInspector.ExtensionServer.prototype._onUnsubscribe):
        (WebInspector.ExtensionServer.prototype._onCreatePanel):
        (WebInspector.ExtensionServer.prototype._onCreateSidebar):
        (WebInspector.ExtensionServer.prototype._createClientIframe):
        (WebInspector.ExtensionServer.prototype._onSetSidebarHeight):
        (WebInspector.ExtensionServer.prototype._onSetSidebarExpansion):
        (WebInspector.ExtensionServer.prototype._onLog):
        (WebInspector.ExtensionServer.prototype._onEvaluateOnInspectedPage):
        (WebInspector.ExtensionServer.prototype._onRevealAndSelect):
        (WebInspector.ExtensionServer.prototype._onRevealAndSelectResource):
        (WebInspector.ExtensionServer.prototype._dispatchCallback):
        (WebInspector.ExtensionServer.prototype._onGetResources):
        (WebInspector.ExtensionServer.prototype.initExtensions):
        (WebInspector.ExtensionServer.prototype._addExtensions):
        (WebInspector.ExtensionServer.prototype._onWindowMessage):
        (WebInspector.ExtensionServer.prototype._onmessage):
        (WebInspector.ExtensionServer.prototype._registerHandler):
        (WebInspector.ExtensionStatus):
        (WebInspector.addExtensions):
        * inspector/front-end/InjectedScript.js:
        (injectedScriptConstructor):
        * inspector/front-end/InjectedScriptAccess.js:
        * inspector/front-end/InspectorFrontendHostStub.js:
        (.WebInspector.InspectorFrontendHostStub.prototype.setExtensionAPI):
        (.WebInspector.InspectorFrontendHostStub.prototype.canAttachWindow):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        (WebInspector.loaded):
        (WebInspector.updateResource):
        (WebInspector.reset):
        (WebInspector.inspectedURLChanged):
        (WebInspector.didCommitLoad):

2010-08-02  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        WebInspector: Inspector is not working when it is loaded as html page.
        https://bugs.webkit.org/show_bug.cgi?id=43334

        * inspector/front-end/InspectorFrontendHostStub.js:
        (.WebInspector.InspectorFrontendHostStub.prototype.canAttachWindow):
        (.WebInspector.InspectorFrontendHostStub.prototype.sendMessageToBackend):

2010-08-01  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        SVG gradients do not update when scripted via xlink
        https://bugs.webkit.org/show_bug.cgi?id=42953

        Unify cycle detection logic for chainable (through xlink:href) and ordinary resources.
        All operate on the render tree now, instead of falling back to the DOM tree for xlink:href queries.

        When linking resources, register as regular client, so the regular update mechanisms work as expected.
        <linearGradient id="foo"><stop../> </linearGradient>
        <linearGradient id="bar" xlink:href="#foo"/>
        <rect fill="url(#bar)"/>

        Without that the rect won't receive invalidation notifications, as foo <-> bar had no connection.
        Fixes the last outstanding class of invalidations. Also speeds up the cycle detetion, when using chained resources,
        as no SVG DOM queries have to be executed anymore.

        Test: svg/custom/js-update-stop-linked-gradient.svg

        * rendering/RenderSVGResourceContainer.cpp:
        (WebCore::RenderSVGResourceContainer::markAllClientsForInvalidation):
        (WebCore::linkedResourceForContainer):
        * rendering/SVGResources.cpp:
        (WebCore::SVGResources::SVGResources):
        (WebCore::chainableResourceTags):
        (WebCore::targetReferenceFromResource):
        (WebCore::registerPendingResource):
        (WebCore::SVGResources::buildCachedResources):
        (WebCore::SVGResources::invalidateClient):
        (WebCore::SVGResources::resourceDestroyed):
        (WebCore::SVGResources::buildSetOfResources):
        (WebCore::SVGResources::setLinkedResource):
        (WebCore::SVGResources::resetLinkedResource):
        (WebCore::SVGResources::dump):
        * rendering/SVGResources.h:
        (WebCore::SVGResources::linkedResource):
        * rendering/SVGResourcesCycleSolver.cpp:
        (WebCore::SVGResourcesCycleSolver::resolveCycles):
        (WebCore::SVGResourcesCycleSolver::breakCycle):
        * rendering/SVGResourcesCycleSolver.h:
        * svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::SVGFilterElement):
        * svg/SVGFilterElement.h:
        * svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::SVGGradientElement):
        * svg/SVGGradientElement.h:
        * svg/SVGLinearGradientElement.cpp:
        (WebCore::SVGLinearGradientElement::collectGradientProperties):
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::SVGPatternElement):
        (WebCore::SVGPatternElement::collectPatternProperties):
        * svg/SVGPatternElement.h:
        * svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::collectGradientProperties):

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

        Try to fix the Windows build when zlib is not available.

        * platform/graphics/WOFFFileFormat.cpp:

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

        Try to fix the Windows build when zlib is not available.

        * platform/graphics/WOFFFileFormat.cpp:

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

        Try to fix the Windows build when zlib is not available.

        * platform/graphics/WOFFFileFormat.cpp:

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

        Fix typo in attempted build fix.

        * platform/graphics/WOFFFileFormat.cpp:

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

        Try to fix the Windows build when zlib is not available.

        * platform/graphics/WOFFFileFormat.cpp:

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

        Reviewed by Darin Adler.

        <rdar://problem/8234766> Add WOFF support for @font-face
        https://bugs.webkit.org/show_bug.cgi?id=31302

        * WebCore.vcproj/WebCore.vcproj: Added WOFFFileFormat.{cpp,h}.
        * WebCore.vcproj/WebCoreCommon.vsprops: Added $(WebKitLibraries)\include\zlib to the header search path.
        * WebCore.xcodeproj/project.pbxproj: Added WOFFFileFormat.{cpp,h} and linking against libz.
        * css/CSSFontFaceSrcValue.cpp:
        (WebCore::CSSFontFaceSrcValue::isSupportedFormat): Replaced hard-coded list of supported formats with
        call to FontCustomPlatformData::supportsFormat().
        * platform/graphics/WOFFFileFormat.cpp: Added.
        (WebCore::isWOFF): Checks if the buffer has the WOFF signature.
        (WebCore::convertWOFFToSfnt): Extracts the sfnt payload of a WOFF package.
        * platform/graphics/WOFFFileFormat.h: Added.
        * platform/graphics/cairo/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::supportsFormat): Added. Returns true for truetype and opentype.
        * platform/graphics/cairo/FontCustomPlatformData.h:
        * platform/graphics/chromium/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::supportsFormat): Added. Returns true for truetype and opentype,
        and also for woff if the OpenType sanitizer is enabled.
        * platform/graphics/chromium/FontCustomPlatformData.h:
        * platform/graphics/gtk/FontCustomPlatformDataPango.cpp:
        (WebCore::FontCustomPlatformData::supportsFormat): Added. Returns false.
        * platform/graphics/haiku/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::supportsFormat): Ditto.
        * platform/graphics/haiku/FontCustomPlatformData.h:
        * platform/graphics/mac/FontCustomPlatformData.cpp:
        (WebCore::freeSfntData):
        (WebCore::createFontCustomPlatformData): If the OpenType font sanitizer is not enabled, use convertWOFFToSfnt().
        (WebCore::FontCustomPlatformData::supportsFormat): Added. Returns true for truetype, opentype and woff.
        * platform/graphics/mac/FontCustomPlatformData.h:
        * platform/graphics/qt/FontCustomPlatformData.h:
        * platform/graphics/qt/FontCustomPlatformDataQt.cpp:
        (WebCore::FontCustomPlatformData::supportsFormat): Added. Returns true for truetype and opentype.
        * platform/graphics/win/FontCustomPlatformData.cpp:
        (WebCore::createFontCustomPlatformData): If the OpenType font sanitizer is not enabled, use convertWOFFToSfnt().
        (WebCore::FontCustomPlatformData::supportsFormat): Added. Returns true for truetype, opentype and woff.
        * platform/graphics/win/FontCustomPlatformData.h:
        * platform/graphics/win/FontCustomPlatformDataCairo.cpp:
        (WebCore::FontCustomPlatformData::supportsFormat): Added. Returns true for truetype and opentype.
        * platform/graphics/win/FontCustomPlatformDataCairo.h:
        * platform/graphics/wince/FontCustomPlatformData.cpp:
        (WebCore::FontCustomPlatformData::supportsFormat): Ditto.
        * platform/graphics/wince/FontCustomPlatformData.h:

2010-07-31  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Ojan Vafai.

        SplitElementCommand shouldn't be duplicating id attribute
        https://bugs.webkit.org/show_bug.cgi?id=27156

        Modified SplitElementCommand to delete the id attribute from the second element when splitting an element.
        Since this causes WebKit not to merge split elements, added shouldSplitElement to ApplyStyleCommand which
        determines the necessity of splitting the element.

        To share code between shouldSplitElement and removeInlineStyleFromElement (extracted from applyInlineStyle)
        dontRemove was added as the 3rd argument to removeHTMLFontStyle, removeHTMLBidiEmbeddingStyle, and removeCSSStyle.

        Test: editing/style/split-element-id-duplication.html

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyBlockStyle): Added 3rd argument for removeCSSStyle.
        (WebCore::ApplyStyleCommand::applyInlineStyle): Calls shouldSplitElement.
        (WebCore::ApplyStyleCommand::removeInlineStyleFromElement): Extracted from removeInlineStyle.
        (WebCore::ApplyStyleCommand::shouldRemoveInlineStyleFromElement): Inline helper for removeInlineStyleFromElement.
        (WebCore::ApplyStyleCommand::removeHTMLFontStyle): Added dontRemove.
        (WebCore::ApplyStyleCommand::removeHTMLBidiEmbeddingStyle): Added dontRemove.
        (WebCore::ApplyStyleCommand::removeCSSStyle): Added dontRemove.
        (WebCore::ApplyStyleCommand::removeInlineStyle): Calls removeInlineStyleFromElement.
        (WebCore::ApplyStyleCommand::splitTextElementAtStart): Removed the call to splitTextAtStart.
        Branching is now done in applyInlineStyle.
        (WebCore::ApplyStyleCommand::splitTextElementAtEnd): Ditto for splitTextAtEnd.
        (WebCore::ApplyStyleCommand::shouldSplitElement): Added.
        * editing/ApplyStyleCommand.h:
        * editing/SplitElementCommand.cpp:
        (WebCore::SplitElementCommand::executeApply): Deletes the id attribute from the second element.
        (WebCore::SplitElementCommand::doUnapply): Recovers the id attribute of the second element.

2010-07-31  Luiz Agostini  <luiz.agostini@openbossa.org>

        Build fix: Windows.

        * platform/win/PopupMenuWin.h:

2010-07-31  Luiz Agostini  <luiz.agostini@openbossa.org>

        Windows build fix.

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenuWin::PopupMenuWndProc):

2010-07-27  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Darin Fisher.

        PopupMenu refactoring in preparation to WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=42592

        Classes PopupMenu and SearchPopupMenu have been made pure virtual.

        * platform/PopupMenu.h:
        (WebCore::PopupMenu::~PopupMenu):
        * platform/SearchPopupMenu.h:
        (WebCore::SearchPopupMenu::~SearchPopupMenu):

        Classes RenderMenuList and RenderTexyControlSingleLine have been changed to use
        the new pure virtual PopupMenu and SearchPopupMenu.

        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::adjustInnerStyle):
        (WebCore::RenderMenuList::showPopup):
        * rendering/RenderMenuList.h:
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::~RenderTextControlSingleLine):
        (WebCore::RenderTextControlSingleLine::addSearchResult):
        (WebCore::RenderTextControlSingleLine::showPopup):
        (WebCore::RenderTextControlSingleLine::hidePopup):
        (WebCore::RenderTextControlSingleLine::updateFromElement):
        (WebCore::RenderTextControlSingleLine::valueChanged):
        * rendering/RenderTextControlSingleLine.h:

        Chrome and ChromeClient were made responsible for providing instances of classes
        PopupMenu and SearchPopupMenu to its users.

        * loader/EmptyClients.h:
        (WebCore::EmptyPopupMenu::show):
        (WebCore::EmptyPopupMenu::hide):
        (WebCore::EmptyPopupMenu::updateFromElement):
        (WebCore::EmptyPopupMenu::disconnectClient):
        (WebCore::EmptySearchPopupMenu::popupMenu):
        (WebCore::EmptySearchPopupMenu::saveRecentSearches):
        (WebCore::EmptySearchPopupMenu::loadRecentSearches):
        (WebCore::EmptySearchPopupMenu::enabled):
        (WebCore::EmptyChromeClient::selectItemWritingDirectionIsNatural):
        (WebCore::EmptyChromeClient::createPopupMenu):
        (WebCore::EmptyChromeClient::createSearchPopupMenu):
        * page/Chrome.cpp:
        (WebCore::Chrome::selectItemWritingDirectionIsNatural):
        (WebCore::Chrome::createPopupMenu):
        (WebCore::Chrome::createSearchPopupMenu):
        * page/Chrome.h:
        * page/ChromeClient.h:

        Original contents of files PopupMenu.h and SearchPopupMenu.h have been splited
        in several files, two for each platform (PopupMenuXXX.h and SearchPopupMenuXXX.h).
        Each of new the files contain the concrete classes that inherit form PopupMenu or
        SearchPopupMenu and are specific for the corresponding platform.

        brew:

        * platform/brew/PopupMenuBrew.cpp:
        (WebCore::PopupMenuBrew::PopupMenuBrew):
        (WebCore::PopupMenuBrew::~PopupMenuBrew):
        (WebCore::PopupMenuBrew::disconnectClient):
        (WebCore::PopupMenuBrew::show):
        (WebCore::PopupMenuBrew::hide):
        (WebCore::PopupMenuBrew::updateFromElement):
        * platform/brew/PopupMenuBrew.h: Added.
        (WebCore::PopupMenuBrew::client):
        * platform/brew/SearchPopupMenuBrew.cpp:
        (WebCore::SearchPopupMenuBrew::saveRecentSearches):
        (WebCore::SearchPopupMenuBrew::loadRecentSearches):
        (WebCore::SearchPopupMenuBrew::SearchPopupMenuBrew):
        (WebCore::SearchPopupMenuBrew::enabled):
        (WebCore::SearchPopupMenuBrew::popupMenu):
        * platform/brew/SearchPopupMenuBrew.h: Added.

        chromium:

        * WebCore.gypi:
        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupMenuChromium::PopupMenuChromium):
        (WebCore::PopupMenuChromium::~PopupMenuChromium):
        (WebCore::PopupMenuChromium::show):
        (WebCore::PopupMenuChromium::hide):
        (WebCore::PopupMenuChromium::updateFromElement):
        (WebCore::PopupMenuChromium::disconnectClient):
        * platform/chromium/PopupMenuChromium.h:
        (WebCore::PopupMenuChromium::client):
        * platform/chromium/SearchPopupMenuChromium.cpp:
        (WebCore::SearchPopupMenuChromium::SearchPopupMenuChromium):
        (WebCore::SearchPopupMenuChromium::popupMenu):
        (WebCore::SearchPopupMenuChromium::enabled):
        (WebCore::SearchPopupMenuChromium::saveRecentSearches):
        (WebCore::SearchPopupMenuChromium::loadRecentSearches):
        * platform/chromium/SearchPopupMenuChromium.h: Added.

        efl:

        * platform/efl/PopupMenuEfl.cpp:
        (WebCore::PopupMenuEfl::PopupMenuEfl):
        (WebCore::PopupMenuEfl::~PopupMenuEfl):
        (WebCore::PopupMenuEfl::show):
        (WebCore::PopupMenuEfl::hide):
        (WebCore::PopupMenuEfl::updateFromElement):
        (WebCore::PopupMenuEfl::disconnectClient):
        * platform/efl/PopupMenuEfl.h: Added.
        (WebCore::PopupMenuEfl::client):
        * platform/efl/SearchPopupMenuEfl.cpp:
        (WebCore::SearchPopupMenuEfl::SearchPopupMenuEfl):
        (WebCore::SearchPopupMenuEfl::popupMenu):
        (WebCore::SearchPopupMenuEfl::saveRecentSearches):
        (WebCore::SearchPopupMenuEfl::loadRecentSearches):
        (WebCore::SearchPopupMenuEfl::enabled):
        * platform/efl/SearchPopupMenuEfl.h: Added.

        gtk:

        * GNUmakefile.am:
        * platform/gtk/PopupMenuGtk.cpp:
        (WebCore::PopupMenuGtk::PopupMenuGtk):
        (WebCore::PopupMenuGtk::~PopupMenuGtk):
        (WebCore::PopupMenuGtk::show):
        (WebCore::PopupMenuGtk::hide):
        (WebCore::PopupMenuGtk::updateFromElement):
        (WebCore::PopupMenuGtk::disconnectClient):
        (WebCore::PopupMenuGtk::menuItemActivated):
        (WebCore::PopupMenuGtk::menuUnmapped):
        (WebCore::PopupMenuGtk::menuPositionFunction):
        (WebCore::PopupMenuGtk::menuRemoveItem):
        * platform/gtk/PopupMenuGtk.h: Added.
        (WebCore::PopupMenuGtk::client):
        * platform/gtk/SearchPopupMenuGtk.cpp:
        (WebCore::SearchPopupMenuGtk::SearchPopupMenuGtk):
        (WebCore::SearchPopupMenuGtk::popupMenu):
        (WebCore::SearchPopupMenuGtk::saveRecentSearches):
        (WebCore::SearchPopupMenuGtk::loadRecentSearches):
        (WebCore::SearchPopupMenuGtk::enabled):
        * platform/gtk/SearchPopupMenuGtk.h: Added.

        haiku:

        * platform/haiku/PopupMenuHaiku.cpp:
        (WebCore::HaikuPopup::HaikuPopup):
        (WebCore::HaikuPopup::~HaikuPopup):
        (WebCore::PopupMenuHaiku::PopupMenuHaiku):
        (WebCore::PopupMenuHaiku::~PopupMenuHaiku):
        (WebCore::PopupMenuHaiku::disconnectClient):
        (WebCore::PopupMenuHaiku::show):
        (WebCore::PopupMenuHaiku::hide):
        (WebCore::PopupMenuHaiku::updateFromElement):
        * platform/haiku/PopupMenuHaiku.h: Added.
        (WebCore::PopupMenuHaiku::disconnectClient):
        (WebCore::PopupMenuHaiku::client):
        * platform/haiku/SearchPopupMenuHaiku.cpp:
        (WebCore::SearchPopupMenuHaiku::SearchPopupMenuHaiku):
        (WebCore::SearchPopupMenuHaiku::saveRecentSearches):
        (WebCore::SearchPopupMenuHaiku::loadRecentSearches):
        (WebCore::SearchPopupMenuHaiku::enabled):
        (WebCore::SearchPopupMenuHaiku::popupMenu):
        * platform/haiku/SearchPopupMenuHaiku.h: Added.

        mac:

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mac/PopupMenuMac.h: Added.
        (WebCore::PopupMenuMac::disconnectClient):
        (WebCore::PopupMenuMac::client):
        * platform/mac/PopupMenuMac.mm:
        (WebCore::PopupMenuMac::PopupMenuMac):
        (WebCore::PopupMenuMac::~PopupMenuMac):
        (WebCore::PopupMenuMac::clear):
        (WebCore::PopupMenuMac::populate):
        (WebCore::PopupMenuMac::show):
        (WebCore::PopupMenuMac::hide):
        (WebCore::PopupMenuMac::updateFromElement):
        (WebCore::PopupMenuMac::itemWritingDirectionIsNatural):
        * platform/mac/SearchPopupMenuMac.h: Added.
        * platform/mac/SearchPopupMenuMac.mm:
        (WebCore::SearchPopupMenuMac::SearchPopupMenuMac):
        (WebCore::SearchPopupMenuMac::popupMenu):
        (WebCore::SearchPopupMenuMac::enabled):
        (WebCore::SearchPopupMenuMac::saveRecentSearches):
        (WebCore::SearchPopupMenuMac::loadRecentSearches):

        qt:

        * WebCore.pro:
        * platform/qt/PopupMenuQt.cpp:
        (WebCore::PopupMenuQt::PopupMenuQt):
        (WebCore::PopupMenuQt::~PopupMenuQt):
        (WebCore::PopupMenuQt::disconnectClient):
        (WebCore::PopupMenuQt::show):
        (WebCore::PopupMenuQt::hide):
        (WebCore::PopupMenuQt::updateFromElement):
        * platform/qt/PopupMenuQt.h: Added.
        * platform/qt/QtAbstractWebPopup.h:
        * platform/qt/SearchPopupMenuQt.cpp:
        (WebCore::SearchPopupMenuQt::SearchPopupMenuQt):
        (WebCore::SearchPopupMenuQt::popupMenu):
        (WebCore::SearchPopupMenuQt::saveRecentSearches):
        (WebCore::SearchPopupMenuQt::loadRecentSearches):
        (WebCore::SearchPopupMenuQt::enabled):
        * platform/qt/SearchPopupMenuQt.h: Added.

        win:

        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenuWin::PopupMenuWin):
        (WebCore::PopupMenuWin::~PopupMenuWin):
        (WebCore::PopupMenuWin::disconnectClient):
        (WebCore::PopupMenuWin::popupClassName):
        (WebCore::PopupMenuWin::show):
        (WebCore::PopupMenuWin::hide):
        (WebCore::PopupMenuWin::calculatePositionAndSize):
        (WebCore::PopupMenuWin::setFocusedIndex):
        (WebCore::PopupMenuWin::visibleItems):
        (WebCore::PopupMenuWin::listIndexAtPoint):
        (WebCore::PopupMenuWin::focusedIndex):
        (WebCore::PopupMenuWin::focusFirst):
        (WebCore::PopupMenuWin::focusLast):
        (WebCore::PopupMenuWin::down):
        (WebCore::PopupMenuWin::up):
        (WebCore::PopupMenuWin::invalidateItem):
        (WebCore::PopupMenuWin::clientRect):
        (WebCore::PopupMenuWin::incrementWheelDelta):
        (WebCore::PopupMenuWin::reduceWheelDelta):
        (WebCore::PopupMenuWin::scrollToRevealSelection):
        (WebCore::PopupMenuWin::updateFromElement):
        (WebCore::PopupMenuWin::paint):
        (WebCore::PopupMenuWin::valueChanged):
        (WebCore::PopupMenuWin::invalidateScrollbarRect):
        (WebCore::PopupMenuWin::registerClass):
        (WebCore::PopupMenuWin::PopupMenuWndProc):
        (WebCore::PopupMenuWin::wndProc):
        * platform/win/PopupMenuWin.h: Added.
        (WebCore::PopupMenuWin::client):
        (WebCore::PopupMenuWin::scrollbar):
        (WebCore::PopupMenuWin::itemHeight):
        (WebCore::PopupMenuWin::windowRect):
        (WebCore::PopupMenuWin::popupHandle):
        (WebCore::PopupMenuWin::setWasClicked):
        (WebCore::PopupMenuWin::wasClicked):
        (WebCore::PopupMenuWin::setScrollOffset):
        (WebCore::PopupMenuWin::scrollOffset):
        (WebCore::PopupMenuWin::wheelDelta):
        (WebCore::PopupMenuWin::scrollbarCapturingMouse):
        (WebCore::PopupMenuWin::setScrollbarCapturingMouse):
        * platform/win/SearchPopupMenuWin.cpp:
        (WebCore::SearchPopupMenuWin::SearchPopupMenuWin):
        (WebCore::SearchPopupMenuWin::popupMenu):
        (WebCore::SearchPopupMenuWin::enabled):
        (WebCore::SearchPopupMenuWin::saveRecentSearches):
        (WebCore::SearchPopupMenuWin::loadRecentSearches):
        * platform/win/SearchPopupMenuWin.h: Added.

        wx:

        * platform/wx/PopupMenuWx.cpp:
        (WebCore::PopupMenuWx::PopupMenuWx):
        (WebCore::PopupMenuWx::~PopupMenuWx):
        (WebCore::PopupMenuWx::disconnectClient):
        (WebCore::PopupMenuWx::show):
        (WebCore::PopupMenuWx::OnMenuItemSelected):
        (WebCore::PopupMenuWx::hide):
        (WebCore::PopupMenuWx::updateFromElement):
        * platform/wx/PopupMenuWx.h: Added.
        (WebCore::PopupMenuWx::client):
        * platform/wx/SearchPopupMenuWx.cpp:
        (WebCore::SearchPopupMenuWx::SearchPopupMenuWx):
        (WebCore::SearchPopupMenuWx::saveRecentSearches):
        (WebCore::SearchPopupMenuWx::loadRecentSearches):
        (WebCore::SearchPopupMenuWx::enabled):
        (WebCore::SearchPopupMenuWx::popupMenu):
        * platform/wx/SearchPopupMenuWx.h: Added.



2010-07-31  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r64422.
        http://trac.webkit.org/changeset/64422
        https://bugs.webkit.org/show_bug.cgi?id=43304

        Build fixes are needed for Snow Leopard and Windows.
        (Requested by lca on #webkit).

        * GNUmakefile.am:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/EmptyClients.h:
        * page/Chrome.cpp:
        * page/Chrome.h:
        * page/ChromeClient.h:
        * platform/PopupMenu.h:
        (WebCore::PopupMenu::create):
        (WebCore::PopupMenu::disconnectClient):
        (WebCore::PopupMenu::client):
        (WebCore::PopupMenu::scrollbar):
        (WebCore::PopupMenu::itemHeight):
        (WebCore::PopupMenu::windowRect):
        (WebCore::PopupMenu::popupHandle):
        (WebCore::PopupMenu::setWasClicked):
        (WebCore::PopupMenu::wasClicked):
        (WebCore::PopupMenu::setScrollOffset):
        (WebCore::PopupMenu::scrollOffset):
        (WebCore::PopupMenu::wheelDelta):
        (WebCore::PopupMenu::scrollbarCapturingMouse):
        (WebCore::PopupMenu::setScrollbarCapturingMouse):
        (WebCore::PopupMenu::isActive):
        (WebCore::PopupMenu::scrollbarCornerPresent):
        * platform/SearchPopupMenu.h:
        (WebCore::SearchPopupMenu::create):
        * platform/brew/PopupMenuBrew.cpp:
        (WebCore::PopupMenu::PopupMenu):
        (WebCore::PopupMenu::~PopupMenu):
        (WebCore::PopupMenu::show):
        (WebCore::PopupMenu::hide):
        (WebCore::PopupMenu::updateFromElement):
        (WebCore::PopupMenu::itemWritingDirectionIsNatural):
        * platform/brew/PopupMenuBrew.h: Removed.
        * platform/brew/SearchPopupMenuBrew.cpp:
        (WebCore::SearchPopupMenu::saveRecentSearches):
        (WebCore::SearchPopupMenu::loadRecentSearches):
        (WebCore::SearchPopupMenu::SearchPopupMenu):
        (WebCore::SearchPopupMenu::enabled):
        * platform/brew/SearchPopupMenuBrew.h: Removed.
        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupMenu::PopupMenu):
        (WebCore::PopupMenu::~PopupMenu):
        (WebCore::PopupMenu::show):
        (WebCore::PopupMenu::hide):
        (WebCore::PopupMenu::updateFromElement):
        (WebCore::PopupMenu::itemWritingDirectionIsNatural):
        * platform/chromium/PopupMenuChromium.h:
        * platform/chromium/SearchPopupMenuChromium.cpp:
        (WebCore::SearchPopupMenu::SearchPopupMenu):
        (WebCore::SearchPopupMenu::enabled):
        (WebCore::SearchPopupMenu::saveRecentSearches):
        (WebCore::SearchPopupMenu::loadRecentSearches):
        * platform/chromium/SearchPopupMenuChromium.h: Removed.
        * platform/efl/PopupMenuEfl.cpp:
        (WebCore::PopupMenu::PopupMenu):
        (WebCore::PopupMenu::~PopupMenu):
        (WebCore::PopupMenu::show):
        (WebCore::PopupMenu::hide):
        (WebCore::PopupMenu::updateFromElement):
        (WebCore::PopupMenu::itemWritingDirectionIsNatural):
        * platform/efl/PopupMenuEfl.h: Removed.
        * platform/efl/SearchPopupMenuEfl.cpp:
        (WebCore::SearchPopupMenu::SearchPopupMenu):
        (WebCore::SearchPopupMenu::saveRecentSearches):
        (WebCore::SearchPopupMenu::loadRecentSearches):
        (WebCore::SearchPopupMenu::enabled):
        * platform/efl/SearchPopupMenuEfl.h: Removed.
        * platform/gtk/PopupMenuGtk.cpp:
        (WebCore::PopupMenu::PopupMenu):
        (WebCore::PopupMenu::~PopupMenu):
        (WebCore::PopupMenu::show):
        (WebCore::PopupMenu::hide):
        (WebCore::PopupMenu::updateFromElement):
        (WebCore::PopupMenu::itemWritingDirectionIsNatural):
        (WebCore::PopupMenu::menuItemActivated):
        (WebCore::PopupMenu::menuUnmapped):
        (WebCore::PopupMenu::menuPositionFunction):
        (WebCore::PopupMenu::menuRemoveItem):
        * platform/gtk/PopupMenuGtk.h: Removed.
        * platform/gtk/SearchPopupMenuGtk.cpp:
        (WebCore::SearchPopupMenu::SearchPopupMenu):
        (WebCore::SearchPopupMenu::saveRecentSearches):
        (WebCore::SearchPopupMenu::loadRecentSearches):
        (WebCore::SearchPopupMenu::enabled):
        * platform/gtk/SearchPopupMenuGtk.h: Removed.
        * platform/haiku/PopupMenuHaiku.cpp:
        (WebCore::PopupMenuHaiku::PopupMenuHaiku):
        (WebCore::PopupMenuHaiku::~PopupMenuHaiku):
        (WebCore::PopupMenu::PopupMenu):
        (WebCore::PopupMenu::~PopupMenu):
        (WebCore::PopupMenu::show):
        (WebCore::PopupMenu::hide):
        (WebCore::PopupMenu::updateFromElement):
        (WebCore::PopupMenu::itemWritingDirectionIsNatural):
        * platform/haiku/PopupMenuHaiku.h: Removed.
        * platform/haiku/SearchPopupMenuHaiku.cpp:
        (WebCore::SearchPopupMenu::SearchPopupMenu):
        (WebCore::SearchPopupMenu::saveRecentSearches):
        (WebCore::SearchPopupMenu::loadRecentSearches):
        (WebCore::SearchPopupMenu::enabled):
        * platform/haiku/SearchPopupMenuHaiku.h: Removed.
        * platform/mac/PopupMenuMac.h: Removed.
        * platform/mac/PopupMenuMac.mm:
        (WebCore::PopupMenu::PopupMenu):
        (WebCore::PopupMenu::~PopupMenu):
        (WebCore::PopupMenu::clear):
        (WebCore::PopupMenu::populate):
        (WebCore::PopupMenu::show):
        (WebCore::PopupMenu::hide):
        (WebCore::PopupMenu::updateFromElement):
        (WebCore::PopupMenu::itemWritingDirectionIsNatural):
        * platform/mac/SearchPopupMenuMac.h: Removed.
        * platform/mac/SearchPopupMenuMac.mm:
        (WebCore::SearchPopupMenu::SearchPopupMenu):
        (WebCore::SearchPopupMenu::enabled):
        (WebCore::SearchPopupMenu::saveRecentSearches):
        (WebCore::SearchPopupMenu::loadRecentSearches):
        * platform/qt/PopupMenuQt.cpp:
        (WebCore::PopupMenu::PopupMenu):
        (WebCore::PopupMenu::~PopupMenu):
        (WebCore::PopupMenu::show):
        (WebCore::PopupMenu::hide):
        (WebCore::PopupMenu::updateFromElement):
        (WebCore::PopupMenu::itemWritingDirectionIsNatural):
        * platform/qt/PopupMenuQt.h: Removed.
        * platform/qt/QtAbstractWebPopup.h:
        * platform/qt/SearchPopupMenuQt.cpp:
        (WebCore::SearchPopupMenu::SearchPopupMenu):
        (WebCore::SearchPopupMenu::saveRecentSearches):
        (WebCore::SearchPopupMenu::loadRecentSearches):
        (WebCore::SearchPopupMenu::enabled):
        * platform/qt/SearchPopupMenuQt.h: Removed.
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::PopupMenu):
        (WebCore::PopupMenu::~PopupMenu):
        (WebCore::PopupMenu::popupClassName):
        (WebCore::PopupMenu::show):
        (WebCore::PopupMenu::hide):
        (WebCore::PopupMenu::calculatePositionAndSize):
        (WebCore::PopupMenu::setFocusedIndex):
        (WebCore::PopupMenu::visibleItems):
        (WebCore::PopupMenu::listIndexAtPoint):
        (WebCore::PopupMenu::focusedIndex):
        (WebCore::PopupMenu::focusFirst):
        (WebCore::PopupMenu::focusLast):
        (WebCore::PopupMenu::down):
        (WebCore::PopupMenu::up):
        (WebCore::PopupMenu::invalidateItem):
        (WebCore::PopupMenu::clientRect):
        (WebCore::PopupMenu::incrementWheelDelta):
        (WebCore::PopupMenu::reduceWheelDelta):
        (WebCore::PopupMenu::scrollToRevealSelection):
        (WebCore::PopupMenu::updateFromElement):
        (WebCore::PopupMenu::itemWritingDirectionIsNatural):
        (WebCore::PopupMenu::paint):
        (WebCore::PopupMenu::valueChanged):
        (WebCore::PopupMenu::invalidateScrollbarRect):
        (WebCore::PopupMenu::registerClass):
        (WebCore::PopupMenu::PopupMenuWndProc):
        (WebCore::PopupMenu::wndProc):
        * platform/win/PopupMenuWin.h: Removed.
        * platform/win/SearchPopupMenuWin.cpp:
        (WebCore::SearchPopupMenu::SearchPopupMenu):
        (WebCore::SearchPopupMenu::enabled):
        (WebCore::SearchPopupMenu::saveRecentSearches):
        (WebCore::SearchPopupMenu::loadRecentSearches):
        * platform/win/SearchPopupMenuWin.h: Removed.
        * platform/wx/PopupMenuWx.cpp:
        (WebCore::PopupMenu::PopupMenu):
        (WebCore::PopupMenu::~PopupMenu):
        (WebCore::PopupMenu::show):
        (WebCore::PopupMenu::OnMenuItemSelected):
        (WebCore::PopupMenu::hide):
        (WebCore::PopupMenu::updateFromElement):
        (WebCore::PopupMenu::itemWritingDirectionIsNatural):
        * platform/wx/PopupMenuWx.h: Removed.
        * platform/wx/SearchPopupMenuWx.cpp:
        (WebCore::SearchPopupMenu::SearchPopupMenu):
        (WebCore::SearchPopupMenu::saveRecentSearches):
        (WebCore::SearchPopupMenu::loadRecentSearches):
        (WebCore::SearchPopupMenu::enabled):
        * platform/wx/SearchPopupMenuWx.h: Removed.
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::adjustInnerStyle):
        (WebCore::RenderMenuList::showPopup):
        * rendering/RenderMenuList.h:
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::~RenderTextControlSingleLine):
        (WebCore::RenderTextControlSingleLine::addSearchResult):
        (WebCore::RenderTextControlSingleLine::showPopup):
        (WebCore::RenderTextControlSingleLine::hidePopup):
        (WebCore::RenderTextControlSingleLine::updateFromElement):
        (WebCore::RenderTextControlSingleLine::valueChanged):
        * rendering/RenderTextControlSingleLine.h:

2010-07-27  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Darin Fisher.

        PopupMenu refactoring in preparation to WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=42592

        Classes PopupMenu and SearchPopupMenu have been made pure virtual.

        * platform/PopupMenu.h:
        (WebCore::PopupMenu::~PopupMenu):
        * platform/SearchPopupMenu.h:
        (WebCore::SearchPopupMenu::~SearchPopupMenu):

        Classes RenderMenuList and RenderTexyControlSingleLine have been changed to use
        the new pure virtual PopupMenu and SearchPopupMenu.

        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::adjustInnerStyle):
        (WebCore::RenderMenuList::showPopup):
        * rendering/RenderMenuList.h:
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::~RenderTextControlSingleLine):
        (WebCore::RenderTextControlSingleLine::addSearchResult):
        (WebCore::RenderTextControlSingleLine::showPopup):
        (WebCore::RenderTextControlSingleLine::hidePopup):
        (WebCore::RenderTextControlSingleLine::updateFromElement):
        (WebCore::RenderTextControlSingleLine::valueChanged):
        * rendering/RenderTextControlSingleLine.h:

        Chrome and ChromeClient were made responsible for providing instances of classes
        PopupMenu and SearchPopupMenu to its users.

        * loader/EmptyClients.h:
        (WebCore::EmptyPopupMenu::show):
        (WebCore::EmptyPopupMenu::hide):
        (WebCore::EmptyPopupMenu::updateFromElement):
        (WebCore::EmptyPopupMenu::disconnectClient):
        (WebCore::EmptySearchPopupMenu::popupMenu):
        (WebCore::EmptySearchPopupMenu::saveRecentSearches):
        (WebCore::EmptySearchPopupMenu::loadRecentSearches):
        (WebCore::EmptySearchPopupMenu::enabled):
        (WebCore::EmptyChromeClient::selectItemWritingDirectionIsNatural):
        (WebCore::EmptyChromeClient::createPopupMenu):
        (WebCore::EmptyChromeClient::createSearchPopupMenu):
        * page/Chrome.cpp:
        (WebCore::Chrome::selectItemWritingDirectionIsNatural):
        (WebCore::Chrome::createPopupMenu):
        (WebCore::Chrome::createSearchPopupMenu):
        * page/Chrome.h:
        * page/ChromeClient.h:

        Original contents of files PopupMenu.h and SearchPopupMenu.h have been splited
        in several files, two for each platform (PopupMenuXXX.h and SearchPopupMenuXXX.h).
        Each of new the files contain the concrete classes that inherit form PopupMenu or
        SearchPopupMenu and are specific for the corresponding platform.

        brew:

        * platform/brew/PopupMenuBrew.cpp:
        (WebCore::PopupMenuBrew::PopupMenuBrew):
        (WebCore::PopupMenuBrew::~PopupMenuBrew):
        (WebCore::PopupMenuBrew::disconnectClient):
        (WebCore::PopupMenuBrew::show):
        (WebCore::PopupMenuBrew::hide):
        (WebCore::PopupMenuBrew::updateFromElement):
        * platform/brew/PopupMenuBrew.h: Added.
        (WebCore::PopupMenuBrew::client):
        * platform/brew/SearchPopupMenuBrew.cpp:
        (WebCore::SearchPopupMenuBrew::saveRecentSearches):
        (WebCore::SearchPopupMenuBrew::loadRecentSearches):
        (WebCore::SearchPopupMenuBrew::SearchPopupMenuBrew):
        (WebCore::SearchPopupMenuBrew::enabled):
        (WebCore::SearchPopupMenuBrew::popupMenu):
        * platform/brew/SearchPopupMenuBrew.h: Added.

        chromium:

        * WebCore.gypi:
        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupMenuChromium::PopupMenuChromium):
        (WebCore::PopupMenuChromium::~PopupMenuChromium):
        (WebCore::PopupMenuChromium::show):
        (WebCore::PopupMenuChromium::hide):
        (WebCore::PopupMenuChromium::updateFromElement):
        (WebCore::PopupMenuChromium::disconnectClient):
        * platform/chromium/PopupMenuChromium.h:
        (WebCore::PopupMenuChromium::client):
        * platform/chromium/SearchPopupMenuChromium.cpp:
        (WebCore::SearchPopupMenuChromium::SearchPopupMenuChromium):
        (WebCore::SearchPopupMenuChromium::popupMenu):
        (WebCore::SearchPopupMenuChromium::enabled):
        (WebCore::SearchPopupMenuChromium::saveRecentSearches):
        (WebCore::SearchPopupMenuChromium::loadRecentSearches):
        * platform/chromium/SearchPopupMenuChromium.h: Added.

        efl:

        * platform/efl/PopupMenuEfl.cpp:
        (WebCore::PopupMenuEfl::PopupMenuEfl):
        (WebCore::PopupMenuEfl::~PopupMenuEfl):
        (WebCore::PopupMenuEfl::show):
        (WebCore::PopupMenuEfl::hide):
        (WebCore::PopupMenuEfl::updateFromElement):
        (WebCore::PopupMenuEfl::disconnectClient):
        * platform/efl/PopupMenuEfl.h: Added.
        (WebCore::PopupMenuEfl::client):
        * platform/efl/SearchPopupMenuEfl.cpp:
        (WebCore::SearchPopupMenuEfl::SearchPopupMenuEfl):
        (WebCore::SearchPopupMenuEfl::popupMenu):
        (WebCore::SearchPopupMenuEfl::saveRecentSearches):
        (WebCore::SearchPopupMenuEfl::loadRecentSearches):
        (WebCore::SearchPopupMenuEfl::enabled):
        * platform/efl/SearchPopupMenuEfl.h: Added.

        gtk:

        * GNUmakefile.am:
        * platform/gtk/PopupMenuGtk.cpp:
        (WebCore::PopupMenuGtk::PopupMenuGtk):
        (WebCore::PopupMenuGtk::~PopupMenuGtk):
        (WebCore::PopupMenuGtk::show):
        (WebCore::PopupMenuGtk::hide):
        (WebCore::PopupMenuGtk::updateFromElement):
        (WebCore::PopupMenuGtk::disconnectClient):
        (WebCore::PopupMenuGtk::menuItemActivated):
        (WebCore::PopupMenuGtk::menuUnmapped):
        (WebCore::PopupMenuGtk::menuPositionFunction):
        (WebCore::PopupMenuGtk::menuRemoveItem):
        * platform/gtk/PopupMenuGtk.h: Added.
        (WebCore::PopupMenuGtk::client):
        * platform/gtk/SearchPopupMenuGtk.cpp:
        (WebCore::SearchPopupMenuGtk::SearchPopupMenuGtk):
        (WebCore::SearchPopupMenuGtk::popupMenu):
        (WebCore::SearchPopupMenuGtk::saveRecentSearches):
        (WebCore::SearchPopupMenuGtk::loadRecentSearches):
        (WebCore::SearchPopupMenuGtk::enabled):
        * platform/gtk/SearchPopupMenuGtk.h: Added.

        haiku:

        * platform/haiku/PopupMenuHaiku.cpp:
        (WebCore::HaikuPopup::HaikuPopup):
        (WebCore::HaikuPopup::~HaikuPopup):
        (WebCore::PopupMenuHaiku::PopupMenuHaiku):
        (WebCore::PopupMenuHaiku::~PopupMenuHaiku):
        (WebCore::PopupMenuHaiku::disconnectClient):
        (WebCore::PopupMenuHaiku::show):
        (WebCore::PopupMenuHaiku::hide):
        (WebCore::PopupMenuHaiku::updateFromElement):
        * platform/haiku/PopupMenuHaiku.h: Added.
        (WebCore::PopupMenuHaiku::disconnectClient):
        (WebCore::PopupMenuHaiku::client):
        * platform/haiku/SearchPopupMenuHaiku.cpp:
        (WebCore::SearchPopupMenuHaiku::SearchPopupMenuHaiku):
        (WebCore::SearchPopupMenuHaiku::saveRecentSearches):
        (WebCore::SearchPopupMenuHaiku::loadRecentSearches):
        (WebCore::SearchPopupMenuHaiku::enabled):
        (WebCore::SearchPopupMenuHaiku::popupMenu):
        * platform/haiku/SearchPopupMenuHaiku.h: Added.

        mac:

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mac/PopupMenuMac.h: Added.
        (WebCore::PopupMenuMac::disconnectClient):
        (WebCore::PopupMenuMac::client):
        * platform/mac/PopupMenuMac.mm:
        (WebCore::PopupMenuMac::PopupMenuMac):
        (WebCore::PopupMenuMac::~PopupMenuMac):
        (WebCore::PopupMenuMac::clear):
        (WebCore::PopupMenuMac::populate):
        (WebCore::PopupMenuMac::show):
        (WebCore::PopupMenuMac::hide):
        (WebCore::PopupMenuMac::updateFromElement):
        (WebCore::PopupMenuMac::itemWritingDirectionIsNatural):
        * platform/mac/SearchPopupMenuMac.h: Added.
        * platform/mac/SearchPopupMenuMac.mm:
        (WebCore::SearchPopupMenuMac::SearchPopupMenuMac):
        (WebCore::SearchPopupMenuMac::popupMenu):
        (WebCore::SearchPopupMenuMac::enabled):
        (WebCore::SearchPopupMenuMac::saveRecentSearches):
        (WebCore::SearchPopupMenuMac::loadRecentSearches):

        qt:

        * WebCore.pro:
        * platform/qt/PopupMenuQt.cpp:
        (WebCore::PopupMenuQt::PopupMenuQt):
        (WebCore::PopupMenuQt::~PopupMenuQt):
        (WebCore::PopupMenuQt::disconnectClient):
        (WebCore::PopupMenuQt::show):
        (WebCore::PopupMenuQt::hide):
        (WebCore::PopupMenuQt::updateFromElement):
        * platform/qt/PopupMenuQt.h: Added.
        * platform/qt/QtAbstractWebPopup.h:
        * platform/qt/SearchPopupMenuQt.cpp:
        (WebCore::SearchPopupMenuQt::SearchPopupMenuQt):
        (WebCore::SearchPopupMenuQt::popupMenu):
        (WebCore::SearchPopupMenuQt::saveRecentSearches):
        (WebCore::SearchPopupMenuQt::loadRecentSearches):
        (WebCore::SearchPopupMenuQt::enabled):
        * platform/qt/SearchPopupMenuQt.h: Added.

        win:

        * WebCore.vcproj/WebCore.vcproj:
        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenuWin::PopupMenuWin):
        (WebCore::PopupMenuWin::~PopupMenuWin):
        (WebCore::PopupMenuWin::disconnectClient):
        (WebCore::PopupMenuWin::popupClassName):
        (WebCore::PopupMenuWin::show):
        (WebCore::PopupMenuWin::hide):
        (WebCore::PopupMenuWin::calculatePositionAndSize):
        (WebCore::PopupMenuWin::setFocusedIndex):
        (WebCore::PopupMenuWin::visibleItems):
        (WebCore::PopupMenuWin::listIndexAtPoint):
        (WebCore::PopupMenuWin::focusedIndex):
        (WebCore::PopupMenuWin::focusFirst):
        (WebCore::PopupMenuWin::focusLast):
        (WebCore::PopupMenuWin::down):
        (WebCore::PopupMenuWin::up):
        (WebCore::PopupMenuWin::invalidateItem):
        (WebCore::PopupMenuWin::clientRect):
        (WebCore::PopupMenuWin::incrementWheelDelta):
        (WebCore::PopupMenuWin::reduceWheelDelta):
        (WebCore::PopupMenuWin::scrollToRevealSelection):
        (WebCore::PopupMenuWin::updateFromElement):
        (WebCore::PopupMenuWin::paint):
        (WebCore::PopupMenuWin::valueChanged):
        (WebCore::PopupMenuWin::invalidateScrollbarRect):
        (WebCore::PopupMenuWin::registerClass):
        (WebCore::PopupMenuWin::PopupMenuWndProc):
        (WebCore::PopupMenuWin::wndProc):
        * platform/win/PopupMenuWin.h: Added.
        (WebCore::PopupMenuWin::client):
        (WebCore::PopupMenuWin::scrollbar):
        (WebCore::PopupMenuWin::itemHeight):
        (WebCore::PopupMenuWin::windowRect):
        (WebCore::PopupMenuWin::popupHandle):
        (WebCore::PopupMenuWin::setWasClicked):
        (WebCore::PopupMenuWin::wasClicked):
        (WebCore::PopupMenuWin::setScrollOffset):
        (WebCore::PopupMenuWin::scrollOffset):
        (WebCore::PopupMenuWin::wheelDelta):
        (WebCore::PopupMenuWin::scrollbarCapturingMouse):
        (WebCore::PopupMenuWin::setScrollbarCapturingMouse):
        * platform/win/SearchPopupMenuWin.cpp:
        (WebCore::SearchPopupMenuWin::SearchPopupMenuWin):
        (WebCore::SearchPopupMenuWin::popupMenu):
        (WebCore::SearchPopupMenuWin::enabled):
        (WebCore::SearchPopupMenuWin::saveRecentSearches):
        (WebCore::SearchPopupMenuWin::loadRecentSearches):
        * platform/win/SearchPopupMenuWin.h: Added.

        wx:

        * platform/wx/PopupMenuWx.cpp:
        (WebCore::PopupMenuWx::PopupMenuWx):
        (WebCore::PopupMenuWx::~PopupMenuWx):
        (WebCore::PopupMenuWx::disconnectClient):
        (WebCore::PopupMenuWx::show):
        (WebCore::PopupMenuWx::OnMenuItemSelected):
        (WebCore::PopupMenuWx::hide):
        (WebCore::PopupMenuWx::updateFromElement):
        * platform/wx/PopupMenuWx.h: Added.
        (WebCore::PopupMenuWx::client):
        * platform/wx/SearchPopupMenuWx.cpp:
        (WebCore::SearchPopupMenuWx::SearchPopupMenuWx):
        (WebCore::SearchPopupMenuWx::saveRecentSearches):
        (WebCore::SearchPopupMenuWx::loadRecentSearches):
        (WebCore::SearchPopupMenuWx::enabled):
        (WebCore::SearchPopupMenuWx::popupMenu):
        * platform/wx/SearchPopupMenuWx.h: Added.



2010-07-31  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/43300> Simplify variables in *.xcconfig files after adding iOS support

        Reviewed by Darin Adler.

        * Configurations/WebCore.xcconfig: Extracted
        PRODUCTION_FRAMEWORKS_DIR variable.

2010-07-31  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        HTMLStyleElement/SVGStyleElement need to share more code
        https://bugs.webkit.org/show_bug.cgi?id=43293

        Simplify HTMLStyleElement/SVGStyleElement. They look identically now, as all code is shared in StyleElement.
        Doesn't affect any tests.

        * dom/StyleElement.cpp:
        (WebCore::StyleElement::StyleElement): Take createdByParser & Document arguments, to share the line number extraction logic. Store it in m_lineNumber.
        (WebCore::StyleElement::insertedIntoDocument): Moved addStyleSheetCandidateNode here, to share code between HTML/SVGStyleElement.
        (WebCore::StyleElement::removedFromDocument): Same for removeStyleSheetCandidateNode.
        (WebCore::StyleElement::childrenChanged): Introduced new helper function.
        (WebCore::StyleElement::finishParsingChildren): Ditto.
        (WebCore::StyleElement::process): Use stored m_lineNumber, avoids a parameter.
        (WebCore::StyleElement::createSheet): No need to call the virtual setLoading() function, just store m_loading in StyleElement, and set it from here.
        (WebCore::StyleElement::isLoading): Introduced new helper function.
        (WebCore::StyleElement::sheetLoaded): Ditto.
        * dom/StyleElement.h:
        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::HTMLStyleElement): Pass Document & createdByParser arguments to StyleElement.
        (WebCore::HTMLStyleElement::finishParsingChildren): Delegate work to StyleElement.
        (WebCore::HTMLStyleElement::insertedIntoDocument): Ditto.
        (WebCore::HTMLStyleElement::removedFromDocument): Ditto.
        (WebCore::HTMLStyleElement::childrenChanged): Ditto.
        * html/HTMLStyleElement.h:
        (WebCore::HTMLStyleElement::isLoading): Ditto.
        (WebCore::HTMLStyleElement::sheetLoaded): Ditto.
        * svg/SVGStyleElement.cpp:
        (WebCore::SVGStyleElement::SVGStyleElement): Pass Document & createdByParser arguments to StyleElement.
        (WebCore::SVGStyleElement::finishParsingChildren): Delegate work to StyleElement.
        (WebCore::SVGStyleElement::insertedIntoDocument): Ditto.
        (WebCore::SVGStyleElement::removedFromDocument): Ditto.
        (WebCore::SVGStyleElement::childrenChanged): Ditto.
        * svg/SVGStyleElement.h:
        (WebCore::SVGStyleElement::isLoading): Ditto.
        (WebCore::SVGStyleElement::sheetLoaded): Ditto.

2010-07-31  Kinuko Yasuda  <kinuko@chromium.org>

        Unreviewed.  Attempt to fix release build failure.

        Having 'fail:' label without goto statement generates a compiler
        warning that causes a build failure in release build.

        * bindings/scripts/CodeGeneratorV8.pm:

2010-07-31  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Nikolas Zimmermann.

        Fix 'bool' in bindings/scripts/test/TestObj.

        * bindings/scripts/test/CPP/WebDOMTestObj.cpp:
        (WebDOMTestObj::CREATE):
        (WebDOMTestObj::setCREATE):
        * bindings/scripts/test/CPP/WebDOMTestObj.h:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        (webkit_dom_test_obj_get_create):
        (webkit_dom_test_obj_set_create):
        (webkit_dom_test_obj_set_property):
        (webkit_dom_test_obj_get_property):
        (webkit_dom_test_obj_class_init):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjCreate):
        (WebCore::setJSTestObjCreate):
        * bindings/scripts/test/ObjC/DOMTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.mm:
        (-[DOMTestObj CREATE]):
        (-[DOMTestObj setCREATE:]):
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjInternal::CREATEAttrGetter):
        (WebCore::TestObjInternal::CREATEAttrSetter):

2010-07-30  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Dumitru Daniliuc.

        Add idl and mock implementation for HTML5 FileSystem API
        https://bugs.webkit.org/show_bug.cgi?id=43134

        Add idl for: FileSystem (as DOMFileSystem), Entry, Flags, Metadata,
        FileSystemCallback, EntryCallback and ErrorCallback.
        http://dev.w3.org/2009/dap/file-system/file-dir-sys.html

        They are added only for Mac and chromium.

        Tests will be added when we expose the entry point and add implementation.

        * DerivedSources.make:
        * WebCore.gypi:
        * WebCore.xcodeproj/project.pbxproj:

        * storage/DOMFileSystem.cpp: Added.
        * storage/DOMFileSystem.h: Added.
        * storage/DOMFileSystem.idl: Added.
        * storage/Entry.cpp: Added.
        * storage/Entry.h: Added.
        * storage/Entry.idl: Added.
        * storage/EntryCallback.h: Added.
        * storage/EntryCallback.idl: Added.
        * storage/ErrorCallback.h: Added.
        * storage/ErrorCallback.idl: Added.
        * storage/FileSystemCallback.h: Added.
        * storage/FileSystemCallback.idl: Added.
        * storage/Flags.h: Added.
        * storage/Flags.idl: Added.
        * storage/Metadata.h: Added.
        * storage/Metadata.idl: Added.
        * storage/MetadataCallback.h: Added.
        * storage/MetadataCallback.idl: Added.

        * bindings/scripts/CodeGenerator.pm: Added special case handlings for generating setter/getter names for CREATE/EXCLUSIVE attributes in Flags.idl.

        * bindings/scripts/test/TestObj.idl: Updated.
        * bindings/scripts/test/CPP/WebDOMTestObj.cpp: Updated.
        * bindings/scripts/test/CPP/WebDOMTestObj.cpp: Updated.
        * bindings/scripts/test/CPP/WebDOMTestObj.h: Updated.
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp: Updated.
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h: Updated.
        * bindings/scripts/test/JS/JSTestObj.cpp: Updated.
        * bindings/scripts/test/JS/JSTestObj.h: Updated.
        * bindings/scripts/test/ObjC/DOMTestObj.h: Updated.
        * bindings/scripts/test/ObjC/DOMTestObj.mm: Updated.

2010-07-30  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r64408.
        http://trac.webkit.org/changeset/64408
        https://bugs.webkit.org/show_bug.cgi?id=43292

        Causing failed tests on Chromium canaries due to wrong history
        item counts (Requested by atwilson on #webkit).

        * loader/RedirectScheduler.cpp:
        (WebCore::RedirectScheduler::scheduleRedirect):
        (WebCore::RedirectScheduler::mustLockBackForwardList):
        (WebCore::RedirectScheduler::scheduleLocationChange):
        (WebCore::RedirectScheduler::scheduleFormSubmission):
        * loader/RedirectScheduler.h:

2010-07-30  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/8257783> Short documents may print a second blank page
        https://bugs.webkit.org/show_bug.cgi?id=43271

        Test: printing/stretch-to-view-height.html

        * WebCore.exp.in: Export Frame::forceLayoutForPagination(), replacing forceLayoutWithPageWidthRange().
        * page/Frame.cpp:
        (WebCore::Frame::setPrinting): Now takes a page width and height and a maximum shrink factor and passes
        them down to forceLayoutForPagination().
        * page/Frame.h:
        (WebCore::Frame::):
        * page/FrameView.cpp:
        (WebCore::FrameView::reset): Initialize m_pageHeight.
        (WebCore::FrameView::forceLayoutForPagination): Renamed forceLayoutWithPageWidthRange() to this and
        changed it to take a page width and height and a maximum shrink factor. Sets m_pageHeight, which is
        queried by RenderBox::calcHeight() during layout. If the given pageHeight is 0, m_pageHeight is set
        to the visible height, retaining the behavior before this change.
        * page/FrameView.h:
        (WebCore::FrameView::pageHeight): Added this accessor.
        * page/PrintContext.cpp:
        (WebCore::PrintContext::begin): Added a height parameter, used when calling setPrinting().
        (WebCore::PrintContext::end): Updated for setPrinting() changes.
        (WebCore::PrintContext::pageNumberForElement): Account for shrink-to-fit.
        (WebCore::PrintContext::pageProperty): Pass 0 for the height, retaining current behavior.
        (WebCore::PrintContext::numberOfPages): Account for shrink-to-fit.
        (WebCore::PrintContext::spoolAllPagesWithBoundaries): Pass the page width to begin().
        * page/PrintContext.h:
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::calcHeight): When printing, use FrameView::pageHeight() as the basis for
        viewport-relative heights.

2010-07-30  Mihai Parparita  <mihaip@chromium.org>

        Reviewed by Darin Fisher.

        Session history should skip over JS redirects
        https://bugs.webkit.org/show_bug.cgi?id=42861
        
        Lock the back/forward list for location changes that happen before the 
        onload event fires that are not the result of user gestures.

        Test: fast/history/gesture-before-onload.html and updated expectations 
        for http/tests/history tests that used to fail.

        * loader/RedirectScheduler.cpp:
        (WebCore::RedirectScheduler::scheduleRedirect):
        (WebCore::RedirectScheduler::mustLockBackForwardList):
        (WebCore::RedirectScheduler::scheduleLocationChange):
        (WebCore::RedirectScheduler::scheduleFormSubmission):
        * loader/RedirectScheduler.h:

2010-07-30  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Darin Adler.

        ctx.clearRect improperly clears shadow
        https://bugs.webkit.org/show_bug.cgi?id=43213

        Tests: canvas/philip/tests/2d.clearRect+fillRect.alpha0.5.html
               canvas/philip/tests/2d.clearRect+fillRect.alpha0.html
               canvas/philip/tests/2d.clearRect+fillRect.basic.html

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setAllAttributesToDefault):
        Added a new method to wipe out all context attributes to their defaults.
        (WebCore::CanvasRenderingContext2D::clearRect):
        Updated clearRect to ignore shadow, alpha, and global composite attributes
        when clearing the input rect to match the canvas spec.
        * html/canvas/CanvasRenderingContext2D.h:

2010-07-30  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Jian Li.

        Decouple FileThread from FileStream to support generic file-related async tasks
        https://bugs.webkit.org/show_bug.cgi?id=43135

        No new tests as this doesn't change any functionality.

        * html/FileThread.cpp:
        (WebCore::FileThread::stop):
        (WebCore::SameInstancePredicate::SameFilePredicate):
        (WebCore::SameInstancePredicate::operator()):
        (WebCore::FileThread::unscheduleTasksInternal):
        * html/FileThread.h:
        (WebCore::FileThread::create):
        (WebCore::FileThread::Task::instance):
        (WebCore::FileThread::Task::Task):
        * html/FileThreadTask.h: Changed all templates to take any type as a callee instance.
        (WebCore::createFileThreadTask):

2010-07-30  Darin Fisher  <darin@chromium.org>

        Reviewed by Darin Adler.

        Eliminate BackForwardList::pushStateItem
        https://bugs.webkit.org/show_bug.cgi?id=43282

        The layout test was previously disabled because of the assertion being
        hit in BackForwardList::pushStateItem.  That assertion revealed the need
        for this patch.

        Test: fast/loader/stateobjects/pushstate-in-iframe.html

        * history/BackForwardList.h:
        * history/BackForwardListChromium.cpp:
        * history/BackForwardListImpl.cpp:
        * history/BackForwardListImpl.h:

        * loader/HistoryController.cpp: Move the logic, of adding a null state
        object to the HistoryItem that was previously the current HistoryItem, to
        HistoryController::pushState from BackForwardList::pushStateItem.  The
        BackForwardList was the wrong place for that logic since it lacked convenient
        access to the target HistoryItem.  It is just given the top-most HistoryItem
        corresponding to the new navigation.

        (WebCore::HistoryController::updateBackForwardListClippedAtTarget):
        (WebCore::HistoryController::pushState):

2010-07-30  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Simon Fraser.

        Enabling view modes to all platforms
        https://bugs.webkit.org/show_bug.cgi?id=37505

        View mode media feature implementation as specified in http://www.w3.org/TR/view-mode.

        The view mode media feature layout tests are stil skipped for all platforms except Qt
        because of the lack of support of LayoutTestController in those platforms.

        Test: fast/media/view-mode-media-feature.html

        * css/MediaFeatureNames.h:
        * css/MediaQueryEvaluator.cpp:
        (WebCore::view_modeMediaFeatureEval):
        * page/ChromeClient.h:
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::createViewModesSet):
        (WebCore::Page::setViewMode):
        * page/Page.h:
        (WebCore::Page::viewMode):

2010-07-30  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by David Kilzer.

        Limit ApplicationCache Total and Per-Origin Storage Capacity (Quotas)
        https://bugs.webkit.org/show_bug.cgi?id=40627

        Part 4 - Client Notification when the Quota is Reached

        Notify the WebKit client when the per-origin quota is reached
        via a delegate method reachedApplicationCacheOriginQuota.

          Call the delegate method when the quota is reached.

        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::ApplicationCacheGroup):
        (WebCore::ApplicationCacheGroup::didFinishLoading):
        (WebCore::ApplicationCacheGroup::didReachOriginQuota):
        (WebCore::ApplicationCacheGroup::cacheUpdateFailedDueToOriginQuota):
        (WebCore::ApplicationCacheGroup::checkIfLoadIsComplete):
        (WebCore::ApplicationCacheGroup::scheduleReachedOriginQuotaCallback):
        * loader/appcache/ApplicationCacheGroup.h:

          Some minor refactoring to access more quota information
          without repeating code. Such as origin usage, and creating
          an origin record.

        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::usageForOrigin):
        (WebCore::ApplicationCacheStorage::storeUpdatedQuotaForOrigin):
        (WebCore::ApplicationCacheStorage::store):
        (WebCore::ApplicationCacheStorage::ensureOriginRecord):
        * loader/appcache/ApplicationCacheStorage.h:

          Boilerplate. Exports and definition of the delegate method.

        * WebCore.OfflineWebApplications.exp:
        * loader/EmptyClients.h:
        (WebCore::EmptyChromeClient::reachedApplicationCacheOriginQuota):
        * page/ChromeClient.h:

2010-07-30  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by David Kilzer.

        Limit ApplicationCache Total and Per-Origin Storage Capacity (Quotas)
        https://bugs.webkit.org/show_bug.cgi?id=40627

        Part 3 - Refactor storeNewestCache to allow Failure Reason Output

        Storing can result in an error in a number of reasons. Previously
        the reasons were global and binary and could be determined by
        checking ApplicationCacheStorage state. Now, with per-origin quotas
        a per-origin quota can cause a failure that is not in global state.
        Current failure reasons are:

          OriginQuotaReached = per-origin quota reached, no storage is allowed.
          TotalQuotaReached  = database quota reached, no storage is allowed.
          DiskOrOperationFailure = SQL error such as failed prepare or query. Not expected to happen.

        This part provides an implementation of storeNewestCache for those
        that care about the failure reason, and not just if it succeeded
        or not. This moves the final origin quota check into the transaction.

        * loader/appcache/ApplicationCache.h: style fix for forwarding headers.
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::checkIfLoadIsComplete): move origin quota check into storeNewestCache's SQL transaction.
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::storeNewestCache): old implementation calls the new implementation ignoring failure reason.
        (WebCore::ApplicationCacheStorage::storeNewestCache): new implementation provides a failure reason in case of failure.
        * loader/appcache/ApplicationCacheStorage.h:
        (WebCore::ApplicationCacheStorage::): added FailureReason enum and storeNewestCache allowing it.

2010-07-30  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by David Kilzer.

        Limit ApplicationCache Total and Per-Origin Storage Capacity (Quotas)
        https://bugs.webkit.org/show_bug.cgi?id=40627

        Part 2 - Update Schema and enforce Per-Origin Quotas

        Added an "Origins" table to the application cache databases.
        This, like the Database's Origins table, is a list of origin
        and quota pairs. Origins records are added as soon as they are
        needed, and deleted only when the ApplicationCacheStorage is
        emptied. This means Origins records persist even after all
        caches for that origin may be deleted. The "CacheGroups" table
        now has a foreign key column "origin" which relates to the
        "Origins" table.

        To enforce the quotas, remaining quota space is checked at
        the start of update as an estimate and at the end before
        inserting. Currently, reaching the quota limit will simply
        cause an update error. A later part will provide a
        notification to the client to allow an action, and refactor
        the final quota limit check into a transaction.

          Respect the quota during the update process. And cause
          the update process to fail when the quota is reached.

        * loader/appcache/ApplicationCacheGroup.cpp: added loading counter, counts bytes as they load
        (WebCore::ApplicationCacheGroup::ApplicationCacheGroup):
        (WebCore::ApplicationCacheGroup::didReceiveData):
        (WebCore::ApplicationCacheGroup::didFinishLoading):
        (WebCore::ApplicationCacheGroup::checkIfLoadIsComplete):
        * loader/appcache/ApplicationCacheGroup.h: added security origin, based on the manifest URL
        (WebCore::ApplicationCacheGroup::origin): accessor

          Updates the schema of the database tables as described
          above. Handle other SQL operations such as checking the
          remaining space and inserting and deleting Origins records.

        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::quotaForOrigin): query for the quota of an origin, may return the default origin quota if it didn't exist.
        (WebCore::ApplicationCacheStorage::remainingSizeForOriginExcludingCache): calculate the remaining size in a quota for an origin, possibly excluding a cache.
        (WebCore::ApplicationCacheStorage::storeUpdatedQuotaForOrigin): persistent update.
        (WebCore::ApplicationCacheStorage::openDatabase): updated schema for CachesGroups, added new table Origins.
        (WebCore::ApplicationCacheStorage::empty): wipe Origins table as well.
        (WebCore::ApplicationCacheStorage::unknownQuota): constant to mean unknown quota

2010-07-30  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by David Kilzer.

        Limit ApplicationCache Total and Per-Origin Storage Capacity (Quotas)
        https://bugs.webkit.org/show_bug.cgi?id=40627

        Part 1 - Add Total and Per-Origin Quota Preferences.

        Allow the application cache total size to be a preference, and
        add a new preference for the default per-origin quota.

          Handle the per-origin quota in the global cacheStorage() object.
          The per-origin quota will be used in a later part, this just
          handles interaction with it from a client.

        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::setDefaultOriginQuota): setter
        (WebCore::ApplicationCacheStorage::ApplicationCacheStorage): default to "noQuota" on construction
        * loader/appcache/ApplicationCacheStorage.h: 
        (WebCore::ApplicationCacheStorage::noQuota): constant to mean unlimited storage
        (WebCore::ApplicationCacheStorage::defaultOriginQuota): accessor

          Move around some exports around for Offline Web Applications.

        * WebCore.exp.in: Added OFFLINE_WEB_APPLICATIONS exports.

2010-07-30  Andy Estes  <aestes@apple.com>

        Reviewed by David Kilzer.

        Add Xcode support for compiling WebKit against iOS SDKs.
        https://bugs.webkit.org/show_bug.cgi?id=42796
        
        * Configurations/Base.xcconfig:
        * Configurations/DebugRelease.xcconfig:
        * Configurations/FeatureDefines.xcconfig:
        * Configurations/Version.xcconfig:
        * Configurations/WebCore.xcconfig:

2010-07-30  James Robinson  <jamesr@chromium.org>

        Compile fix: fix a typo in forward declaration, add EmptyClients impl.

        * loader/EmptyClients.h:
        (WebCore::EmptyChromeClient::getOnscreenGLES2Context):
        (WebCore::EmptyChromeClient::getOffscreenGLES2Context):
        * page/ChromeClient.h:

2010-07-30  James Robinson  <jamesr@chromium.org>

        Reviewed by Darin Fisher.

        Move GLES2 context manipulation to ChromeClient.h and put it behind the right #if guard
        https://bugs.webkit.org/show_bug.cgi?id=43281

        These calls were initially put in ChromeClientChromium, but they aren't chromium specific.
        In theory any port that could create the proper OpenGL ES 2 contexts could implement
        these functions.  Also moves the calls to be behind the correct #if guard.

        * page/ChromeClient.h:
        * page/chromium/ChromeClientChromium.h:

2010-07-30  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by David Levin.

        Interrupt all DB operations when the worker is terminating.
        https://bugs.webkit.org/show_bug.cgi?id=42843

        Tests: fast/workers/storage/interrupt-database-sync.html
               fast/workers/storage/interrupt-database.html

        * bindings/js/JSCustomVoidCallback.cpp:
        (WebCore::JSCustomVoidCallback::~JSCustomVoidCallback): If the
        destructor is called on the context thread, delete m_data directly
        instead of posting a task to do that. We need to do that to make
        sure that all JS objects are destroyed before
        WorkerThreadShutdownFinishTask (in WorkerThread.cpp) calls
        WorkerContext::clearScript().

        * bindings/scripts/CodeGeneratorJS.pm: Same change as above, for
        all auto-generated callbacks.

        * bindings/scripts/test/JS/JSTestCallback.cpp:
        (WebCore::JSTestCallback::~JSTestCallback): Updated the
        expectations for run-bindings-tests.

        * platform/sql/SQLiteDatabase.cpp: Added the ability to interrupt
        all DB operations in progress, unless the database was closed or
        is being closed. Unlike sqlite3_interrupt(),
        SQLiteDatabase::interrupt() is sticky: once it's called, trying to
        run any statement on that database will fail with a
        SQLITE_INTERRUPT error code.
        (WebCore::SQLiteDatabase::SQLiteDatabase):
        (WebCore::SQLiteDatabase::close):
        (WebCore::SQLiteDatabase::interrupt):
        (WebCore::SQLiteDatabase::isInterrupted):

        * platform/sql/SQLiteDatabase.h: Added a mutex that can used by
        SQLiteStatement to check if the database was interrupted.
        (WebCore::SQLiteDatabase::databaseMutex):

        * platform/sql/SQLiteStatement.cpp: Changed prepare() and step()
        to check if the database was interrupted, before trying to prepare
        or run the statement. The other methods don't need to hold on to
        the DB lock while running, because they're fast, so we don't need
        to interrupt them.
        (WebCore::SQLiteStatement::prepare):
        (WebCore::SQLiteStatement::step):

        * storage/AbstractDatabase.cpp: Made SQLiteDatabase::interrupt()
        and isInterrupted() visible to WebSQLDatabases classes.
        (WebCore::AbstractDatabase::interrupt):
        (WebCore::AbstractDatabase::isInterrupted):
        * storage/AbstractDatabase.h:

        * storage/DatabaseTracker.cpp: Added a method to interrupt all
        databases in a given context.
        (WebCore::DatabaseTracker::interruptAllDatabasesForContext):
        * storage/DatabaseTracker.h:

        * storage/SQLStatement.cpp: Changed the exception/error reported
        when a statement is interrupted.
        (WebCore::SQLStatement::execute):
        * storage/SQLStatementSync.cpp:
        (WebCore::SQLStatementSync::execute):

        * storage/SQLTransaction.cpp: Changed the code to release the
        callback objects as soon as they're not needed.
        (WebCore::SQLTransaction::checkAndHandleClosedOrInterruptedDatabase):
        Changed this method to not schedule the next transaction step when
        the database is interrupted.
        (WebCore::SQLTransaction::performNextStep):
        (WebCore::SQLTransaction::performPendingCallback):
        (WebCore::SQLTransaction::deliverTransactionCallback):
        (WebCore::SQLTransaction::postflightAndCommit):
        (WebCore::SQLTransaction::deliverTransactionErrorCallback):
        (WebCore::SQLTransaction::cleanupAfterTransactionErrorCallback):
        * storage/SQLTransaction.h:

        * storage/chromium/DatabaseTrackerChromium.cpp: Added a method to
        interrupt all databases in a given context.
        (WebCore::DatabaseTracker::interruptAllDatabasesForContext):

        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::stop): Added a call to
        DatabaseTracker::interruptAllDatabasesForContext().

2010-07-30  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.

        connect-compositing-iframe2.html test sometimes shows blank iframe content
        https://bugs.webkit.org/show_bug.cgi?id=42046

        Hooking up compositing iframes requires setNeedsStyleRecalc(SyntheticStyleChange) to
        always result in a call to RenderLayer::styleChanged(). However, the semantics of 
        setNeedsStyleRecalc() was that each call would overwrite the existing styleChangeType,
        allowing a "lesser" style change to override a "greater" one. In the test content,
        SyntheticStyleChange was being replaced by FullStyleChange when the classname changed.
        This resulted in RenderLayer::styleChanged() not being called.
        
        Fix by changing the behavior of setNeedsStyleRecalc() to only touch the style change
        type if a "lesser" change is being replaced with a "greater" one. This required adding
        a new clearNeedsStyleRecalc() method to reset the style change type to NoStyleChange.
        
        In addition, in Node::setNeedsStyleRecalc(), only propagate the childNeedsStyleRecalc
        up the parent change if the node was not already needing recalc. In order to fix issues
        with attaching, this required new call to clearNeedsStyleRecalc() at the end of attach().

        * manual-tests/compositing/missing-iframe-contents.html: Added.
        * manual-tests/compositing/resources/composited-subframe.html: Copied from LayoutTests/compositing/iframes/resources/composited-subframe.html.

        * dom/Document.cpp:
        (WebCore::Document::recalcStyle): Call clearNeedsStyleRecalc().
        * dom/Element.cpp:
        (WebCore::Element::recalcStyle): Call clearNeedsStyleRecalc().

        * dom/Node.h:
        (WebCore::Node::clearNeedsStyleRecalc): New method.
        * dom/Node.cpp:
        (WebCore::Node::setNeedsStyleRecalc): Only call setStyleChange() if the change type
        is greater than the current change type.
        (WebCore::Node::attach): After attaching, we can call clearNeedsStyleRecalc().

        * dom/Text.cpp:
        (WebCore::Text::recalcStyle): Call clearNeedsStyleRecalc().
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::recalcStyle): Call clearNeedsStyleRecalc().

2010-07-30  W. James MacLean  <wjmaclean@google.com>

        Reviewed by Nikolas Zimmermann.

        SVG - numeric overflow for very large elements
        https://bugs.webkit.org/show_bug.cgi?id=25645

        Two of the expected test outputs were incorrect now that parsing of large values
        is handled correctly.
        - Revised FloatRect to remove bad float-to-int conversions in enclosingIntRect()
        - Revised _parseNumber to do right-to-left float-based parsing of input value

        Test: svg/custom/massive-coordinates.svg

        * platform/graphics/FloatRect.cpp:
        (WebCore::safeFloatToInt):
        (WebCore::enclosingIntRect):
        * svg/SVGParserUtilities.cpp:
        (WebCore::_parseNumber):

2010-07-30  James Robinson  <jamesr@chromium.org>

        Reviewed by Darin Fisher.

        [chromium] Make the GLES2 texture map generic and teach ImageSkia and ImageBufferSkia about GLES2
        https://bugs.webkit.org/show_bug.cgi?id=43218

        This makes the GLES2Canvas' TextureHashMap key on void* instead of NativeImagePtr
        to make it easier to use with other backends.  It also teaches ImageSkia how
        to draw to a GLES2Canvas instead of a skia buffer.

        No change in functionality (yet), no new tests.

        * platform/graphics/chromium/GLES2Canvas.cpp:
        (WebCore::GLES2Canvas::GLES2Canvas):
        (WebCore::GLES2Canvas::createTexture):
        (WebCore::GLES2Canvas::getTexture):
        * platform/graphics/chromium/GLES2Canvas.h:
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageBuffer::getUnmultipliedImageData):
        (WebCore::ImageBuffer::getPremultipliedImageData):
        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::drawBitmapGLES2):
        (WebCore::BitmapImage::draw):
        (WebCore::BitmapImageSingleFrameSkia::draw):

2010-07-30  Yong Li  <yoli@rim.com>

        Reviewed by Darin Adler.

        Implement SVGScriptElement::shouldExecuteAsJavaScript() otherwise
        SVGScriptElement cannot run when XHTMLMP is enabled.
        https://bugs.webkit.org/show_bug.cgi?id=43267

        No test needed, because it fails all SVG <script> tests when XHTMLMP is on.

        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::shouldExecuteAsJavaScript):
        * svg/SVGScriptElement.h:

2010-07-30  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        Style errors in Navigator.h
        https://bugs.webkit.org/show_bug.cgi?id=43262

        Fixing style changes. No new tests.

        * page/Navigator.h:
        (WebCore::Navigator::create):
        (WebCore::Navigator::frame):
        (WebCore::Navigator::optionalGeolocation):

2010-07-27  Darin Fisher  <darin@chromium.org>

        Reviewed by Brady Eidson.

        History.pushState() + navigation operates on top frame when called from
        nested context
        https://bugs.webkit.org/show_bug.cgi?id=43080

        Test: fast/loader/stateobjects/pushstate-in-iframe.html

        * loader/HistoryController.cpp:
        (WebCore::HistoryController::pushState): createTreeItem should be
        called on the top-most HistoryController so that we properly clone
        the HistoryItem tree starting at the root node.

2010-07-30  fsamuel@chromium.org  <fsamuel@chromium.org>

        Reviewed by Dimitri Glazkov.

        Expand SVG Attribute Macros
        https://bugs.webkit.org/show_bug.cgi?id=43254

        Expanded SVG Attribute Macros to reduce debugging headache.

        No change in behavior, so no new tests.

        * rendering/style/SVGRenderStyle.h: Expanded and removed references to SVG_RS_DEFINE_ATTRIBUTE* macros.
        * rendering/style/SVGRenderStyleDefs.h: Removed definitons for expanded macros.

2010-07-30  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Dumitru Daniliuc.

        Add callback arguments support to binding code generator scripts
        https://bugs.webkit.org/show_bug.cgi?id=43130

        Tests: bindings/scripts/test/TestObj.idl

        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorV8.pm:

        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionMethodWithCallbackArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonCallbackArgAndCallbackArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithCallbackAndOptionalArg):
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjInternal::methodWithCallbackArgCallback):
        (WebCore::TestObjInternal::methodWithNonCallbackArgAndCallbackArgCallback):
        (WebCore::TestObjInternal::methodWithCallbackAndOptionalArgCallback):
        (WebCore::ConfigureV8TestObjTemplate):

2010-07-30  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Implement NPN_InvokeDefault
        https://bugs.webkit.org/show_bug.cgi?id=43266

        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::isPluginElement):
        Add convenience function.

        (WebCore::pluginInstance):
        Call isPluginElement.

        (WebCore::pluginScriptObjectFromPluginViewBase):
        Given an JSHTMLElement, ask the PluginViewBase for the scriptable object.

        (WebCore::pluginScriptObject):
        Call isPluginElement. Call pluginScriptObjectFromPluginViewBase.

        (WebCore::callPlugin):
        Get the script object, assemble the arguments and call "call" directly.

        (WebCore::runtimeObjectGetCallData):
        Try to get the script object from the PluginViewBase first.

        * plugins/PluginViewBase.h:
        (WebCore::PluginViewBase::scriptObject):
        Remove ExecState parameter.

2010-07-30  Adam Roben  <aroben@apple.com>

        Roll our r64361 and r64363

        We can't make these changes until QuartzCore.lib is included in
        WebKitSupportLibrary.

2010-07-30  Adam Roben  <aroben@apple.com>

        Remove uses of CACFContextRef and CARender* from WebCore

        These types are now wrapped in a WKCACFContext type exported by
        WebKitSystemInterface.

        Fixes <http://webkit.org/b/43244>.

        Reviewed by Sam Weinig.

        * platform/graphics/win/WKCACFContextFlusher.cpp:
        (WebCore::WKCACFContextFlusher::addContext):
        (WebCore::WKCACFContextFlusher::removeContext):
        (WebCore::WKCACFContextFlusher::flushAllContexts):
        * platform/graphics/win/WKCACFContextFlusher.h:
        Changed to use WKCACFContext. We don't retain/release the context when
        putting it into/taking it out of the set. WKCACFContext is not a
        ref-counted type, so we can't retain/release it, but the
        retain/release was also unnecessary as WKCACFLayerRenderer calls
        removeContext before the context is destroyed.

        * platform/graphics/win/WKCACFLayer.cpp:
        (WebCore::WKCACFLayer::becomeRootLayerForContext):
        * platform/graphics/win/WKCACFLayer.h:
        Changed to use WKCACFContext.

        * platform/graphics/win/WKCACFLayerRenderer.cpp:
        (WebCore::WKCACFLayerRenderer::didFlushContext):
        (WebCore::WKCACFLayerRenderer::WKCACFLayerRenderer):
        (WebCore::WKCACFLayerRenderer::~WKCACFLayerRenderer):
        (WebCore::WKCACFLayerRenderer::layerTreeDidChange):
        (WebCore::WKCACFLayerRenderer::createRenderer):
        (WebCore::WKCACFLayerRenderer::destroyRenderer):
        (WebCore::WKCACFLayerRenderer::render): Also replaced uses of
        CGSRegion with WebKitSystemInterface functions/types.
        (WebCore::WKCACFLayerRenderer::resetDevice):
        * platform/graphics/win/WKCACFLayerRenderer.h:
        Replaced our CACFContextRef, CARenderContext, and CARenderOGLContext
        with a single WKCACFContext, which wraps all three. We hold a bare
        pointer to it and destroy it in our destructor.

2010-07-30  Adam Roben  <aroben@apple.com>

        Remove knowledge of WKCACFContextFlusher from WKCACFLayer

        Fixes <http://webkit.org/b/43248> WKCACFLayer shouldn't know about
        WKCACFContextFlusher

        Reviewed by Sam Weinig.

        * platform/graphics/win/WKCACFLayer.cpp:
        (WebCore::WKCACFLayer::setNeedsCommit): Don't bother calling to
        WKCACFContextFlusher. Our root layer will do this for us.

        * platform/graphics/win/WKCACFLayerRenderer.cpp:
        (WebCore::WKCACFRootLayer::setNeedsRender): Changed to call the new
        layerTreeDidChange function.
        (WebCore::WKCACFLayerRenderer::layerTreeDidChange): Added. Tells
        WKCACFContextFlusher that the context has changed, and schedules a
        render.

        * platform/graphics/win/WKCACFLayerRenderer.h: Added
        layerTreeDidChange.

2010-07-29  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Steve Block.

        Rename all the IDBIndex classses to match the latest conventions
        https://bugs.webkit.org/show_bug.cgi?id=43190

        No functionality has changed.

        IDBIndexRequest -> IDBIndex in the spec.  So that's the first change.
        IDBIndex was the name of our interface class though, so we need to rename
        it to get it out of the way.  While we're at it, we might as well clean
        up the naming in general to make things more clear.  In the future, we're
        going to need another layer (yes, yuck) which will be shared by the async
        and sync classes which will do caching and other optimizations.  That will
        then connect to the backend.  We also added "Interface" to make it more
        clear that's what the file/class is.

        Existing layout tests are enough since nothing should change as far as JavaScript can see.

        * Android.derived.jscbindings.mk:
        * Android.derived.v8bindings.mk:
        * Android.mk:
        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSIDBAnyCustom.cpp:
        (WebCore::toJS):
        * bindings/v8/custom/V8IDBAnyCustom.cpp:
        (WebCore::toV8):
        * storage/IDBAny.cpp:
        (WebCore::IDBAny::idbIndex):
        (WebCore::IDBAny::set):
        * storage/IDBAny.h:
        (WebCore::IDBAny::):
        * storage/IDBCallbacks.h:
        * storage/IDBIndex.cpp: Added.
        (WebCore::IDBIndex::IDBIndex):
        (WebCore::IDBIndex::~IDBIndex):
        * storage/IDBIndex.h:
        (WebCore::IDBIndex::create):
        (WebCore::IDBIndex::name):
        (WebCore::IDBIndex::keyPath):
        (WebCore::IDBIndex::unique):
        * storage/IDBIndex.idl: Added.
        * storage/IDBIndexBackendImpl.cpp: Added.
        (WebCore::IDBIndexBackendImpl::IDBIndexBackendImpl):
        (WebCore::IDBIndexBackendImpl::~IDBIndexBackendImpl):
        * storage/IDBIndexBackendImpl.h: Added.
        (WebCore::IDBIndexBackendImpl::create):
        (WebCore::IDBIndexBackendImpl::name):
        (WebCore::IDBIndexBackendImpl::keyPath):
        (WebCore::IDBIndexBackendImpl::unique):
        * storage/IDBIndexBackendInterface.h: Added.
        (WebCore::IDBIndexBackendInterface::~IDBIndexBackendInterface):
        * storage/IDBIndexImpl.cpp: Removed.
        * storage/IDBIndexImpl.h: Removed.
        * storage/IDBIndexRequest.cpp: Removed.
        * storage/IDBIndexRequest.h: Removed.
        * storage/IDBIndexRequest.idl: Removed.
        * storage/IDBObjectStore.h:
        * storage/IDBObjectStoreImpl.cpp:
        (WebCore::IDBObjectStoreImpl::createIndex):
        (WebCore::IDBObjectStoreImpl::index):
        * storage/IDBObjectStoreImpl.h:
        * storage/IDBObjectStoreRequest.cpp:
        (WebCore::IDBObjectStoreRequest::index):
        * storage/IDBObjectStoreRequest.h:
        * storage/IDBObjectStoreRequest.idl:
        * storage/IDBRequest.cpp:
        (WebCore::IDBRequest::onSuccess):
        * storage/IDBRequest.h:

2010-07-30  Rafael Antognolli  <antognolli@profusion.mobi>

        Reviewed by Antonio Gomes.

        [EFL] Add library version and soname to EFL generated libraries and binary.
        https://bugs.webkit.org/show_bug.cgi?id=43212

        Add version and soname to libwebcore.so in case of linking as shared
        library.

        No new feature, so no new tests.

        * CMakeLists.txt:

2010-07-30  Steve Block  <steveblock@google.com>

        Reviewed by Steve Block.

        Add LayoutTestController methods to test DeviceOrientation
        https://bugs.webkit.org/show_bug.cgi?id=39589

        This patch does not hook up the new LayoutTestController method to WebKit
        for any platform. This will be done in later patches.
        https://bugs.webkit.org/show_bug.cgi?id=43181 tracks this for Mac.

        Test: fast/dom/DeviceOrientation/basic-operation.html

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/DeviceOrientationClient.h:
        (WebCore::DeviceOrientationClient::~DeviceOrientationClient):
        * dom/DeviceOrientationController.cpp:
        (WebCore::DeviceOrientationController::DeviceOrientationController):
        * dom/DeviceOrientationEvent.cpp:
        * platform/mock/DeviceOrientationClientMock.cpp: Added.
        (WebCore::DeviceOrientationClientMock::DeviceOrientationClientMock):
        (WebCore::DeviceOrientationClientMock::setController):
        (WebCore::DeviceOrientationClientMock::startUpdating):
        (WebCore::DeviceOrientationClientMock::stopUpdating):
        (WebCore::DeviceOrientationClientMock::setOrientation):
        (WebCore::DeviceOrientationClientMock::timerFired):
        * platform/mock/DeviceOrientationClientMock.h: Added.
        (WebCore::DeviceOrientationClientMock::lastOrientation):

2010-07-30  Satish Sampath  <satish@chromium.org>

        Reviewed by Jeremy Orlow.

        Add a mock in WebCore for testing speech input
        https://bugs.webkit.org/show_bug.cgi?id=42603

        Layout tests will be added in a subsequent patch using this mock.

        * Android.mk:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/mock/SpeechInputClientMock.cpp: Added.
        (WebCore::SpeechInputClientMock::SpeechInputClientMock):
        (WebCore::SpeechInputClientMock::startRecognition):
        (WebCore::SpeechInputClientMock::stopRecording):
        (WebCore::SpeechInputClientMock::cancelRecognition):
        (WebCore::SpeechInputClientMock::setRecognitionResult):
        (WebCore::SpeechInputClientMock::timerFired):
        * platform/mock/SpeechInputClientMock.h: Added.

2010-07-30  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Optimize SVGResources memory usage
        https://bugs.webkit.org/show_bug.cgi?id=43236

        Instead of storing pointers to all possible resources that could be applied to an element, group them in three categories:
        clipper/filter/masker, marker-start/marker-mid/marker-end, and fill/stroke.

        Only build the cached resources data for elements where the properties can be applied to. Maintain a static list of tagnames
        for each of the three categories, to avoid doing unncessary work.

        Doesn't affect any tests.

        * rendering/SVGResources.cpp:
        (WebCore::SVGResources::SVGResources):
        (WebCore::clipperFilterMaskerTags):
        (WebCore::markerTags):
        (WebCore::fillAndStrokeTags):
        (WebCore::SVGResources::buildCachedResources):
        (WebCore::SVGResources::invalidateClient):
        (WebCore::SVGResources::resourceDestroyed):
        (WebCore::SVGResources::buildSetOfResources):
        (WebCore::SVGResources::setClipper):
        (WebCore::SVGResources::resetClipper):
        (WebCore::SVGResources::setFilter):
        (WebCore::SVGResources::resetFilter):
        (WebCore::SVGResources::setMarkerStart):
        (WebCore::SVGResources::resetMarkerStart):
        (WebCore::SVGResources::setMarkerMid):
        (WebCore::SVGResources::resetMarkerMid):
        (WebCore::SVGResources::setMarkerEnd):
        (WebCore::SVGResources::resetMarkerEnd):
        (WebCore::SVGResources::setMasker):
        (WebCore::SVGResources::resetMasker):
        (WebCore::SVGResources::setFill):
        (WebCore::SVGResources::resetFill):
        (WebCore::SVGResources::setStroke):
        (WebCore::SVGResources::resetStroke):
        (WebCore::SVGResources::dump):
        * rendering/SVGResources.h:
        (WebCore::SVGResources::clipper):
        (WebCore::SVGResources::filter):
        (WebCore::SVGResources::markerStart):
        (WebCore::SVGResources::markerMid):
        (WebCore::SVGResources::markerEnd):
        (WebCore::SVGResources::masker):
        (WebCore::SVGResources::fill):
        (WebCore::SVGResources::stroke):
        (WebCore::SVGResources::ClipperFilterMaskerData::ClipperFilterMaskerData):
        (WebCore::SVGResources::ClipperFilterMaskerData::create):
        (WebCore::SVGResources::MarkerData::MarkerData):
        (WebCore::SVGResources::MarkerData::create):
        (WebCore::SVGResources::FillStrokeData::FillStrokeData):
        (WebCore::SVGResources::FillStrokeData::create):

2010-07-26  Andrei Popescu  <andreip@google.com>

        Reviewed by Jeremy Orlow.

        [IndexedDB] IndexedDatabase should be called IDBFactory.
        https://bugs.webkit.org/show_bug.cgi?id=42967

        Rename IndexedDatabase to IDBFactory to match the specification.

        Also implement the following new naming convention:
        IDBFoo IDL interfaces are implemented using IDBFoo C++ classes.
        IDBFoo objects have pointers to IDBFooBackendInterface objects.
        IDBFooBackendInterface is implemented by IDBFooBackendImpl and
        IDBFooBackendProxy (for Chromium).

        No new tests needed, just renaming.

        * Android.derived.jscbindings.mk:
        * Android.derived.v8bindings.mk:
        * Android.mk:
        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSIDBAnyCustom.cpp:
        (WebCore::toJS):
        * bindings/v8/custom/V8IDBAnyCustom.cpp:
        (WebCore::toV8):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::clear):
        (WebCore::DOMWindow::indexedDB):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
        * page/PageGroup.cpp:
        (WebCore::PageGroup::idbFactory):
        * page/PageGroup.h:
        * platform/chromium/ChromiumBridge.h:
        * storage/IDBAny.cpp:
        (WebCore::IDBAny::idbFactory):
        (WebCore::IDBAny::set):
        * storage/IDBAny.h:
        (WebCore::IDBAny::):
        * storage/IDBDatabaseRequest.cpp:
        * storage/IDBFactory.cpp: Added.
        (WebCore::IDBFactory::IDBFactory):
        (WebCore::IDBFactory::~IDBFactory):
        (WebCore::IDBFactory::open):
        * storage/IDBFactory.h: Added.
        (WebCore::IDBFactory::create):
        * storage/IDBFactory.idl: Added.
        * storage/IDBFactoryBackendInterface.cpp: Added.
        (WebCore::IDBFactoryBackendInterface::create):
        * storage/IDBFactoryBackendInterface.h: Added.
        (WebCore::IDBFactoryBackendInterface::~IDBFactoryBackendInterface):
        * storage/IDBFactoryBackendImpl.cpp: Added.
        (WebCore::IDBFactoryBackendImpl::create):
        (WebCore::IDBFactoryBackendImpl::IDBFactoryBackendImpl):
        (WebCore::IDBFactoryBackendImpl::~IDBFactoryBackendImpl):
        (WebCore::IDBFactoryBackendImpl::open):
        * storage/IDBFactoryBackendImpl.h: Added.
        * storage/IDBKeyRange.cpp:
        (WebCore::IDBKeyRange::only):
        (WebCore::IDBKeyRange::leftBound):
        (WebCore::IDBKeyRange::rightBound):
        (WebCore::IDBKeyRange::bound):
        * storage/IDBKeyRange.h:
        * storage/IDBKeyRange.idl:
        * storage/IndexedDatabase.cpp: Removed.
        * storage/IndexedDatabase.h: Removed.
        * storage/IndexedDatabaseImpl.cpp: Removed.
        * storage/IndexedDatabaseImpl.h: Removed.
        * storage/IndexedDatabaseRequest.cpp: Removed.
        * storage/IndexedDatabaseRequest.h: Removed.
        * storage/IndexedDatabaseRequest.idl: Removed.
        * storage/chromium/IDBFactoryBackendInterface.cpp: Added.
        (WebCore::IDBFactoryBackendInterface::create):
        * storage/chromium/IndexedDatabase.cpp: Removed.

2010-07-29  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Crash on refresh with a comment selected in the Elements panel
        https://bugs.webkit.org/show_bug.cgi?id=43183

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::nodeForPath):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.reset):

2010-07-30  Renata Hodovan  <reni@inf.u-szeged.hu>

        Reviewed by Nikolas Zimmermann.

        feTurbulence is not implemented.
        https://bugs.webkit.org/show_bug.cgi?id=5864

        This code is based on the previous implementation of
        Dirk Schulze, extended with some modification and optimization.

        LayoutTests: Updating expected values for turbulence filter.
        svg/W3C-SVG-1.1/filters-turb-01-f.svg

        * svg/SVGFETurbulenceElement.cpp:
        (WebCore::SVGFETurbulenceElement::build):
        * svg/graphics/filters/SVGFETurbulence.cpp:
        (WebCore::FETurbulence::FETurbulence):
        (WebCore::FETurbulence::create):
        (WebCore::FETurbulence::PaintingData::PaintingData):
        (WebCore::FETurbulence::PaintingData::random):
        (WebCore::smoothCurve):
        (WebCore::linearInterpolation):
        (WebCore::FETurbulence::initPaint):
        (WebCore::checkNoise):
        (WebCore::FETurbulence::noise2D):
        (WebCore::Noise::if):
        (WebCore::FETurbulence::calculateTurbulenceValueForPoint):
        (WebCore::FETurbulence::apply):
        * svg/graphics/filters/SVGFETurbulence.h:
        (WebCore::):

2010-07-29  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Dirk Schulze.

        Cairo: Need to implement GraphicsContext::clipConvexPolygon()
        https://bugs.webkit.org/show_bug.cgi?id=41308

        Implement clipConvexPolygon for Cairo ports and enable new path based
        borders for that port as well.

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::addConvexPolygonToContext): Add this helper method.
        (WebCore::GraphicsContext::drawConvexPolygon): Use the new addConvexPolygonToContext helper.
        (WebCore::GraphicsContext::clipConvexPolygon): Implement this method.
        * rendering/RenderObject.h: Enable path based borders for Cairo.

2010-07-29  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        InsertOrderedList does not switch the list type properly when it has an inner list.
        https://bugs.webkit.org/show_bug.cgi?id=43166

        The bug was caused by forcedCreateList was not set to true when the start and the end
        of the selection lies in the same list. Added selectionHasListOfType to fix this problem.

        WebKit used not to convert the outer lists even when the list is fully selected.
        Corrected this behavior by converting the entire list at once when the list is fully selected.
        To decide whether or not a list is fully selected, added currentSelection argument to doApplyForSingleParagraph.

        Tests: editing/execCommand/switch-list-type-with-inner-list.html
               editing/execCommand/switch-list-type-with-orphaned-li.html

        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::mergeWithNeighboringLists): Extracted the code to merge lists.
        (WebCore::InsertListCommand::selectionHasListOfType): attachment.cgi
        (WebCore::InsertListCommand::doApply): Calls selectionHasListOfType.
        (WebCore::InsertListCommand::doApplyForSingleParagraph): See above.
        (WebCore::InsertListCommand::listifyParagraph): Calls mergeWithNeighboringLists.
        * editing/InsertListCommand.h:
        * editing/htmlediting.cpp:
        (WebCore::canMergeLists): Ensures lists being merged are instances of HTMLElement.
        (WebCore::isNodeVisiblyContainedWithin): Works properly when one end is inside the range.

2010-07-29  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Dirk Schulze.

        [Cairo] Bring behavior of paths on the Cairo GraphicsContext into line with the CoreGraphics port
        https://bugs.webkit.org/show_bug.cgi?id=41732

        Do not apply paths added to the Cairo GraphicsContext, until they are used.
        This prevents drawing routines such as fillRect from interacting with any
        path which callers are constructing on the GraphicsContext.

         This behavior is necessary to close bug https://bugs.webkit.org/show_bug.cgi?id=41308
         so tests for that issue will test this fix.

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::appendPathToCairoContext): Added. A helper method which adds a path
        to a native Cairo context.
        (WebCore::setPathOnCairoContext): Added. Like appendPathToCairoContext, but clears the
        existing path first.
        (WebCore::appendWebCorePathToCairoContext): Added. Like appendPathToCairoContext, but
        operates on a WebCore path.
        (WebCore::fillCurrentCairoPath): Added. Helper which fills the current cairo context path.
        (WebCore::strokeCurrentCairoPath): Added. Helper which strokes the current cairo context path.
        (WebCore::GraphicsContext::drawEllipse): Only clear the Cairo path if cairo_stroke
        was not called, because cairo_stroke implicitly clears the path.
        (WebCore::GraphicsContext::drawConvexPolygon): Ditto.
        (WebCore::GraphicsContext::fillPath): Copy the path from m_pendingPath to the context
        and clear m_pendingPath, instead of relying on the pre-existing context path. Do the
        actual fill via the new helper.
        (WebCore::GraphicsContext::strokePath): Ditto.
        (WebCore::GraphicsContext::drawPath): Ditto.
        (WebCore::GraphicsContext::fillRect): Use the new fillCurrentCairoPath helper.
        (WebCore::GraphicsContext::drawFocusRing): Use the new appendWebCorePathToCairoContext helper instead
        of addPath (which will blow away any path callers are building).
        (WebCore::GraphicsContext::addInnerRoundedRectClip): Use the new appendWebCorePathToCairoContext helper instead
        of addPath (which will blow away any path callers are building).
        (WebCore::GraphicsContext::strokeRect): Use the new strokeCurrentCairoPath helper.
        (WebCore::GraphicsContext::beginPath): Clear out m_pendingPath here instead of the main native context.
        (WebCore::GraphicsContext::addPath): Add the path to m_pendingPath instead of the main native context.
        Also ensure that the transformation matrix of the m_pendingPath is equal to that of the main
        cairo context.
        (WebCore::GraphicsContext::clipOut): Use the appendWebCorePathToCairoContext helper here.
        (WebCore::GraphicsContext::fillRoundedRect): Ditto and remove an unnecessary beginPath call.
        * platform/graphics/cairo/GraphicsContextPlatformPrivateCairo.h: Add a new m_pendingPath member.

2010-07-29  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r64313.
        http://trac.webkit.org/changeset/64313
        https://bugs.webkit.org/show_bug.cgi?id=43233

        Some Chromium bots are not happy with it for some unknown
        reason. (Requested by dumi on #webkit).

        * bindings/js/JSCustomVoidCallback.cpp:
        (WebCore::JSCustomVoidCallback::~JSCustomVoidCallback):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/test/JS/JSTestCallback.cpp:
        (WebCore::JSTestCallback::~JSTestCallback):
        * platform/sql/SQLiteDatabase.cpp:
        (WebCore::SQLiteDatabase::SQLiteDatabase):
        (WebCore::SQLiteDatabase::close):
        (WebCore::SQLiteDatabase::lock):
        (WebCore::SQLiteDatabase::unlock):
        * platform/sql/SQLiteDatabase.h:
        * platform/sql/SQLiteStatement.cpp:
        (WebCore::SQLiteStatement::prepare):
        (WebCore::SQLiteStatement::step):
        * storage/AbstractDatabase.cpp:
        * storage/AbstractDatabase.h:
        * storage/DatabaseTracker.cpp:
        * storage/DatabaseTracker.h:
        * storage/SQLStatement.cpp:
        (WebCore::SQLStatement::execute):
        * storage/SQLStatementSync.cpp:
        (WebCore::SQLStatementSync::execute):
        * storage/SQLTransaction.cpp:
        (WebCore::SQLTransaction::checkAndHandleClosedDatabase):
        (WebCore::SQLTransaction::performNextStep):
        (WebCore::SQLTransaction::performPendingCallback):
        (WebCore::SQLTransaction::deliverTransactionCallback):
        (WebCore::SQLTransaction::postflightAndCommit):
        (WebCore::SQLTransaction::deliverTransactionErrorCallback):
        (WebCore::SQLTransaction::cleanupAfterTransactionErrorCallback):
        * storage/SQLTransaction.h:
        * storage/chromium/DatabaseTrackerChromium.cpp:
        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::stop):

2010-07-29  Martin Robinson  <mrobinson@igalia.com>

        Unreviewed, rolling out r64318.
        http://trac.webkit.org/changeset/64318
        https://bugs.webkit.org/show_bug.cgi?id=41732

        This change broke many tests.

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawEllipse):
        (WebCore::GraphicsContext::drawConvexPolygon):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::drawPath):
        (WebCore::GraphicsContext::drawFocusRing):
        (WebCore::GraphicsContext::addInnerRoundedRectClip):
        (WebCore::GraphicsContext::beginPath):
        (WebCore::GraphicsContext::addPath):
        (WebCore::GraphicsContext::clipOut):
        (WebCore::GraphicsContext::fillRoundedRect):
        * platform/graphics/cairo/GraphicsContextPlatformPrivateCairo.h:

2010-07-29  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Dirk Schulze.

        [Cairo] Bring behavior of paths on the Cairo GraphicsContext into line with the CoreGraphics port
        https://bugs.webkit.org/show_bug.cgi?id=41732

        Do not apply paths added to the Cairo GraphicsContext, until they are used.
        This prevents drawing routines such as fillRect from interacting with any
        path which callers are constructing on the GraphicsContext.

         This behavior is necessary to close bug https://bugs.webkit.org/show_bug.cgi?id=41308
         so tests for that issue will test this fix.

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::appendPathToCairoContext): Added. A helper method which adds a path
        to a native Cairo context.
        (WebCore::setPathOnCairoContext): Added. Like appendPathToCairoContext, but clears the
        existing path first.
        (WebCore::appendWebCorePathToCairoContext): Added. Like appendPathToCairoContext, but
        operates on a WebCore path.
        (WebCore::GraphicsContext::drawEllipse): Only clear the Cairo path if cairo_stroke
        was not called, because cairo_stroke implicitly clears the path.
        (WebCore::GraphicsContext::drawConvexPolygon): Ditto.
        (WebCore::GraphicsContext::fillPath): Copy the path from m_pendingPath to the context
        and clear m_pendingPath, instead of relying on the pre-existing context path.
        (WebCore::GraphicsContext::strokePath): Ditto.
        (WebCore::GraphicsContext::drawPath): Ditto.
        (WebCore::GraphicsContext::drawFocusRing): Use the new appendWebCorePathToCairoContext helper instead
        of addPath (which will blow away any path callers are building).
        (WebCore::GraphicsContext::addInnerRoundedRectClip): Use the new appendWebCorePathToCairoContext helper instead
        of addPath (which will blow away any path callers are building).
        (WebCore::GraphicsContext::beginPath): Clear out m_pendingPath here instead of the main native context.
        (WebCore::GraphicsContext::addPath): Add the path to m_pendingPath instead of the main native context.
        Also ensure that the transformation matrix of the m_pendingPath is equal to that of the main
        cairo context.
        (WebCore::GraphicsContext::clipOut): Use the appendWebCorePathToCairoContext helper here.
        (WebCore::GraphicsContext::fillRoundedRect): Ditto and remove an unnecessary beginPath call.
        * platform/graphics/cairo/GraphicsContextPlatformPrivateCairo.h: Add a new m_pendingPath member.

2010-07-29  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Dirk Schulze.

        [Cairo] Remove setStrokeStyle workaround for InlineTextBoxes
        https://bugs.webkit.org/show_bug.cgi?id=43136

        Remove workaround added in https://bugs.webkit.org/show_bug.cgi?id=15659
        to fix stroke style for InlineTextBox underlines.

        No new tests as this should not change functionality.

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawLineForText): Remove old workaround.

2010-07-28  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by David Levin.

        Interrupt all DB operations when the worker is terminating.
        https://bugs.webkit.org/show_bug.cgi?id=42843

        Tests: fast/workers/storage/interrupt-database-sync.html
               fast/workers/storage/interrupt-database.html

        * bindings/js/JSCustomVoidCallback.cpp:
        (WebCore::JSCustomVoidCallback::~JSCustomVoidCallback): If the
        destructor is called on the context thread, delete m_data directly
        instead of posting a task to do that. We need to do that to make
        sure that all JS objects are destroyed before
        WorkerThreadShutdownFinishTask (in WorkerThread.cpp) calls
        WorkerContext::clearScript().

        * bindings/scripts/CodeGeneratorJS.pm: Same change as above, for
        all auto-generated callbacks.

        * bindings/scripts/test/JS/JSTestCallback.cpp:
        (WebCore::JSTestCallback::~JSTestCallback): Updated the
        expectations for run-bindings-tests.

        * platform/sql/SQLiteDatabase.cpp: Added the ability to interrupt
        all DB operations in progress, unless the database was closed or
        is being closed. Unlike sqlite3_interrupt(),
        SQLiteDatabase::interrupt() is sticky: once it's called, trying to
        run any statement on that database will fail with a
        SQLITE_INTERRUPT error code.
        (WebCore::SQLiteDatabase::SQLiteDatabase):
        (WebCore::SQLiteDatabase::close):
        (WebCore::SQLiteDatabase::interrupt):
        (WebCore::SQLiteDatabase::isInterrupted):

        * platform/sql/SQLiteDatabase.h: Added a mutex that can used by
        SQLiteStatement to check if the database was interrupted.
        (WebCore::SQLiteDatabase::databaseMutex):

        * platform/sql/SQLiteStatement.cpp: Changed prepare() and step()
        to check if the database was interrupted, before trying to prepare
        or run the statement. The other methods don't need to hold on to
        the DB lock while running, because they're fast, so we don't need
        to interrupt them.
        (WebCore::SQLiteStatement::prepare):
        (WebCore::SQLiteStatement::step):

        * storage/AbstractDatabase.cpp: Made SQLiteDatabase::interrupt()
        and isInterrupted() visible to WebSQLDatabases classes.
        (WebCore::AbstractDatabase::interrupt):
        (WebCore::AbstractDatabase::isInterrupted):
        * storage/AbstractDatabase.h:

        * storage/DatabaseTracker.cpp: Added a method to interrupt all
        databases in a given context.
        (WebCore::DatabaseTracker::interruptAllDatabasesForContext):
        * storage/DatabaseTracker.h:

        * storage/SQLStatement.cpp: Changed the exception/error reported
        when a statement is interrupted.
        (WebCore::SQLStatement::execute):
        * storage/SQLStatementSync.cpp:
        (WebCore::SQLStatementSync::execute):

        * storage/SQLTransaction.cpp: Changed the code to release the
        callback objects as soon as they're not needed.
        (WebCore::SQLTransaction::checkAndHandleClosedOrInterruptedDatabase):
        Changed this method to not schedule the next transaction step when
        the database is interrupted.
        (WebCore::SQLTransaction::performNextStep):
        (WebCore::SQLTransaction::performPendingCallback):
        (WebCore::SQLTransaction::deliverTransactionCallback):
        (WebCore::SQLTransaction::postflightAndCommit):
        (WebCore::SQLTransaction::deliverTransactionErrorCallback):
        (WebCore::SQLTransaction::cleanupAfterTransactionErrorCallback):
        * storage/SQLTransaction.h:

        * storage/chromium/DatabaseTrackerChromium.cpp: Added a method to
        interrupt all databases in a given context.
        (WebCore::DatabaseTracker::interruptAllDatabasesForContext):

        * workers/WorkerThread.cpp:
        (WebCore::WorkerThread::stop): Added a call to
        DatabaseTracker::interruptAllDatabasesForContext().

2010-07-29  Bernhard Bauer  <bauerb@chromium.org>

        Reviewed by Darin Fisher.

        Check if plugins are allowed before creating a Java applet.
        https://bugs.webkit.org/show_bug.cgi?id=43196

        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::createJavaAppletWidget):

2010-07-29  James Robinson  <jamesr@chromium.org>

        Reviewed by Simon Fraser.

        Ask a canvas' rendering context if it is accelerated instead tying it directly to webgl
        https://bugs.webkit.org/show_bug.cgi?id=43206

        This unifies the logic for whether a canvas is accelerated or not into one place
        and makes it easier to expand the logic in the future to, for example, cover some
        2d canvases.

        Just a refactoring, no change in behavior so no new tests.

        * html/canvas/CanvasRenderingContext.h:
        (WebCore::CanvasRenderingContext::isAccelerated):
        * html/canvas/WebGLRenderingContext.h:
        (WebCore::WebGLRenderingContext::isAccelerated):
        * rendering/RenderHTMLCanvas.cpp:
        (WebCore::RenderHTMLCanvas::requiresLayer):
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingForCanvas):

2010-07-29  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Implement NPN_Status
        https://bugs.webkit.org/show_bug.cgi?id=43205

        * WebCore.exp.in:
        Export Chrome::setStatusText.

2010-07-29  Victor Wang  <victorw@chromium.org>

        Unreviewed, rolling out r64270.
        http://trac.webkit.org/changeset/64270
        https://bugs.webkit.org/show_bug.cgi?id=39589

        The patch breaks chromium webkit unittest

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/DeviceOrientationClient.h:
        (WebCore::DeviceOrientationClient::~DeviceOrientationClient):
        * dom/DeviceOrientationController.cpp:
        (WebCore::DeviceOrientationController::DeviceOrientationController):
        * dom/DeviceOrientationEvent.cpp:
        * platform/mock/DeviceOrientationClientMock.cpp: Removed.
        * platform/mock/DeviceOrientationClientMock.h: Removed.

2010-07-29  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.

        Resizer control does not paint in otherwise empty compositing layer
        https://bugs.webkit.org/show_bug.cgi?id=42306
        
        Ensure that we create backing store for an empty element with resize: both,
        in order to render the resizer control.

        Test: compositing/overflow/resize-painting.html

        * rendering/RenderLayerBacking.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::isSimpleContainerCompositingLayer): Check for hasOverflowControls()
        earlier, before any child checks.
        (WebCore::RenderLayerBacking::hasNonCompositingDescendants): Renamed from hasNonCompositingContent()
        to clarify its purpose.

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

        Remove WKCACFLayer::Lanczos

        This member is also unused.

        Rubber-stamped in advance by John Sullivan.

        * platform/graphics/win/WKCACFLayer.cpp:
        (WebCore::toCACFFilterType):
        (WebCore::fromCACFFilterType):
        * platform/graphics/win/WKCACFLayer.h:
        (WebCore::WKCACFLayer::):

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

        Remove some unused WKCACFLayer members

        Fixes <http://webkit.org/b/43200> WKCACFLayer has some unused members

        Reviewed by John Sullivan.

        * platform/graphics/win/WKCACFLayer.h: Removed [set]ClearsContext,
        [set]Filters, and [set]SortsSublayers.

2010-07-28  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Nate Chapin.

        Clear PluginData's page pointer on Page destruction
        https://bugs.webkit.org/show_bug.cgi?id=43147

        Test: plugins/access-after-page-destroyed.html

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

2010-07-29  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.

        SHOULD NEVER BE REACHED assertion when switching tabs with composited content
        https://bugs.webkit.org/show_bug.cgi?id=43167

        When the root layer becomes unattached (e.g. when switching tabs), don't return
        'false' from paintingGoesToWindow() because that will cause a -setNeedsDispay, which
        both allocates wasteful backing store, and causes an assertion when we try to
        paint the layer.
        
        Test: manual-tests/compositing/assert-on-tab-switch.html: Added.
        
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintingGoesToWindow):

2010-07-29  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Pavel Feldman.

        Crash when computing pseudo-style of a vanished scrollbar in inspector
        https://bugs.webkit.org/show_bug.cgi?id=42561
        
        When a styled overflow:scroll scrollbar gets destroyed, we need to clear out the m_owner pointer,
        otherwise the event handling code (which keeps the Scrollbar alive) later causes the scrollbar
        to try to use m_owner to get pseudo style.

        Test: scrollbars/overflow-custom-scrollbar-crash.html

        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::destroyScrollbar): If this is a custom scrollbar, clear the owning renderer.
        * rendering/RenderScrollbar.cpp:
        (WebCore::RenderScrollbar::getScrollbarPseudoStyle): Bail if m_owner is 0.
        * rendering/RenderScrollbar.h:
        (WebCore::RenderScrollbar::clearOwningRenderer): New method.

2010-07-29  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed. Fix release builds, by removing unused variables, that only served for ASSERTs that are no longer needed.

        * rendering/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::prepareToRenderSVGContent):
        (WebCore::SVGRenderSupport::pointInClippingArea):

2010-07-29  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed. Fix build warning about unreachable code, seen on the windows slave.

        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::selfWillPaint):
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::selfWillPaint):

2010-07-29  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        WebKit shouldn't ignore resource cycles, but break them as Opera does
        https://bugs.webkit.org/show_bug.cgi?id=43031

        mask images are not updated when render objects' bounds change
        https://bugs.webkit.org/show_bug.cgi?id=15124

        SVG Gradients do not resize correctly
        https://bugs.webkit.org/show_bug.cgi?id=41902

        svg/dynamic-updates: SVGMarkerElement markerHeight/Width tests are broken
        https://bugs.webkit.org/show_bug.cgi?id=42616

        svg/dynamic-updates: SVGMaskElement tests are all broken
        https://bugs.webkit.org/show_bug.cgi?id=42617

        Don't ignore resources containing cyclic references, but break them, as discussed on SVG WG mailing lists - to be compatible with Opera which already does that.

        We used to lookup RenderSVGResourceContainers objects, by extracting the URI reference from the SVGRenderStyle, then utilizing getElementById() to lookup the
        node, and access its renderer. Opera ignores such references, if they point to resources that contain cyclic references. Ignoring them would mean we have
        to mutate the render style to empty the resource strings. That obviously doesn't work, as it would break expectations (getComputedStyle, etc.).

        Introduce a SVGResources class that stores pointers to all resources, that can be applied to a RenderObject (clipper/filter/markers/masker).
        Add a SVGResourcesCache class, which is basically a HashMap<RenderObject*, SVGResources*>. Whenever a RenderObject receives style, we extract the URI references
        from the SVGRenderStyle, look up the RenderSVGResourceContainer* objects, and store them in a SVGResources* class. Then we execute a cycle detection logic,
        which detects cyclic references and breaks them. Breaking them means just nulling the pointer to the resource in the SVGResources object. Those SVGResources
        objects are cached, and used throughout the render tree to access resources. This way it's guaranteed that all cyclic references are resolved until layout/paint
        phase begins.

        Add destroy/styleDidChange/updateFromElement methods to all SVG renderers, in order to keep track of resource/client changes in the SVGResourcesCache.
        As side-effect the SVGResourcesCache now knows which RenderObject references which resource, and thus can handle client registration for a RenderSVGResourceContainer.
        The RenderSVGResourceContainer now holds a HashSet of RenderObjects, that's always up2date, and not related to the fact wheter a resources has already been used
        for painting. The old logic missed to register clients for a resource, when the resource was in an invalid state. Fixing that fixes the svg/dynamic-updates/SVGMaskElement* tests.

        Rewrite all svg/custom/recursive-(filter|gradient|mask|pattern).svg tests to contain a reference image how it should be renderered. All 1:1 compatible with Opera now.

        * rendering/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::layout): Grab selfNeedsLayout() before calling RenderBlock::layout(), otherwhise it's always false.
        * rendering/RenderPath.cpp: Don't look up resources manually, use SVGResourcesCache.
        (WebCore::RenderPath::fillContains): Remove constness, to avoid the need to pass around const RenderObjects* to the SVGResourcesCache.
        (WebCore::RenderPath::strokeContains): Ditto.
        (WebCore::RenderPath::layout): s/RenderSVGResource::invalidateAllResourcesOfRenderer/SVGResourcesCache::clientLayoutChanged/.
        (WebCore::RenderPath::calculateMarkerBoundsIfNeeded): Remove special client handling for markers, it's all unified now.
        (WebCore::RenderPath::styleWillChange): Only call setNeedsBoundariesUpdate when handling StyleDifferenceRepaint/Layout.
        * rendering/RenderPath.h:
        * rendering/RenderSVGBlock.cpp:
        (WebCore::RenderSVGBlock::destroy): Forward to SVGResourcesCache::clientDestroyed.
        (WebCore::RenderSVGBlock::styleDidChange): Forward to SVGResourcesCache::clientStyleChanged.
        (WebCore::RenderSVGBlock::updateFromElement): Forward to SVGResourcesCache::clientUpdatedFromElement.
        * rendering/RenderSVGBlock.h:
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::layout): s/RenderSVGResource::invalidateAllResourcesOfRenderer/SVGResourcesCache::clientLayoutChanged/.
        (WebCore::RenderSVGContainer::selfWillPaint): Don't look up resources manually, use SVGResourcesCache.
        * rendering/RenderSVGContainer.h:
        * rendering/RenderSVGGradientStop.cpp:
        (WebCore::RenderSVGGradientStop::styleDidChange): Rewrite, as invalidateResourceClients() is gone.
        * rendering/RenderSVGHiddenContainer.h: Make layout() protected, as RenderSVGResourceContainer overrides it.
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::layout): s/RenderSVGResource::invalidateAllResourcesOfRenderer/SVGResourcesCache::clientLayoutChanged/.
        (WebCore::RenderSVGImage::destroy): Forward to SVGResourcesCache::clientDestroyed.
        (WebCore::RenderSVGImage::styleDidChange): Forward to SVGResourcesCache::clientStyleChanged.
        (WebCore::RenderSVGImage::updateFromElement): Forward to SVGResourcesCache::clientUpdatedFromElement.
        (WebCore::RenderSVGImage::imageChanged): Don't look up resources manually, use SVGResourcesCache.
        * rendering/RenderSVGImage.h:
        * rendering/RenderSVGInline.cpp:
        (WebCore::RenderSVGInline::destroy): Forward to SVGResourcesCache::clientDestroyed.
        (WebCore::RenderSVGInline::styleDidChange): Forward to SVGResourcesCache::clientStyleChanged.
        (WebCore::RenderSVGInline::updateFromElement): Forward to SVGResourcesCache::clientUpdatedFromElement.
        * rendering/RenderSVGInline.h:
        * rendering/RenderSVGModelObject.cpp:
        (WebCore::RenderSVGModelObject::destroy): Forward to SVGResourcesCache::clientDestroyed.
        (WebCore::RenderSVGModelObject::styleDidChange): Forward to SVGResourcesCache::clientStyleChanged.
        (WebCore::RenderSVGModelObject::updateFromElement): Forward to SVGResourcesCache::clientUpdatedFromElement.
        * rendering/RenderSVGModelObject.h:
        * rendering/RenderSVGResource.cpp:
        (WebCore::RenderSVGResource::fillPaintingResource): Remove const from RenderObject parameter.
        (WebCore::RenderSVGResource::strokePaintingResource): Ditto.
        (WebCore::RenderSVGResource::markForLayoutAndParentResourceInvalidation): Early exit if we found the first parent resource.
        * rendering/RenderSVGResource.h:
        * rendering/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::~RenderSVGResourceClipper): Early exit if m_clipper is empty.
        (WebCore::RenderSVGResourceClipper::invalidateClients): Use new helper functions to invalidate clients, shared between all resources in RenderSVGResourceContainer.
        (WebCore::RenderSVGResourceClipper::invalidateClient): Ditto.
        (WebCore::RenderSVGResourceClipper::applyResource): Remove containsCyclicReference() check, SVGResourcesCycleSolver breaks cyclic references, resources do not need to take care anymore.
        (WebCore::RenderSVGResourceClipper::createClipData): Don't look up resources manually, use SVGResourcesCache.
        (WebCore::RenderSVGResourceClipper::hitTestClipContent): Remove containsCyclicReference() check, SVGResourcesCycleSolver breaks cyclic references, resources do not need to take care anymore.
        * rendering/RenderSVGResourceClipper.h:
        * rendering/RenderSVGResourceContainer.cpp:
        (WebCore::svgExtensionsFromNode):
        (WebCore::RenderSVGResourceContainer::RenderSVGResourceContainer): Stop registering resource from the constructor, delegate to styleDidChange.
        (WebCore::RenderSVGResourceContainer::~RenderSVGResourceContainer): Only deregister resource if it was ever registered.
        (WebCore::RenderSVGResourceContainer::layout): invalidateClients() here, to avoid the need for invalidateResourceClients() in the SVG DOM. Just call setNeedsLayout() from the SVG DOM.
        (WebCore::RenderSVGResourceContainer::destroy): Forward to SVGResourcesCache::resourceDestroyed.
        (WebCore::RenderSVGResourceContainer::styleDidChange): Register resource not in the constructor but when it first receives style.
        (WebCore::RenderSVGResourceContainer::idChanged): Don't duplicate code, use existing methods from SVGResourcesCache.
        (WebCore::RenderSVGResourceContainer::markAllClientsForInvalidation): Add new helper function, to share code between all resources.
        (WebCore::RenderSVGResourceContainer::markClientForInvalidation): Ditto.
        (WebCore::RenderSVGResourceContainer::addClient): SVGResourcesCache now manages the list of clients. It calls addClient() for each RenderObject that uses this resource.
        (WebCore::RenderSVGResourceContainer::removeClient): SVGResourcesCache now manages the list of clients.
        (WebCore::RenderSVGResourceContainer::registerResource): New helper function sharing code between idChanged / styleDidChange.
        (WebCore::RenderSVGResourceContainer::transformOnNonScalingStroke): Add FIXME that the function is misplaced.
        * rendering/RenderSVGResourceContainer.h: Move most functions to the new RenderSVGResourceContainer.cpp file.
        * rendering/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::~RenderSVGResourceFilter): Early exit if m_filter is empty.
        (WebCore::RenderSVGResourceFilter::invalidateClients): Use new helper functions to invalidate clients, shared between all resources in RenderSVGResourceContainer.
        (WebCore::RenderSVGResourceFilter::invalidateClient): Ditto.
        * rendering/RenderSVGResourceGradient.cpp:
        (WebCore::RenderSVGResourceGradient::~RenderSVGResourceGradient): Early exit if m_gradient is empty.
        (WebCore::RenderSVGResourceGradient::invalidateClients): Use new helper functions to invalidate clients, shared between all resources in RenderSVGResourceContainer.
        (WebCore::RenderSVGResourceGradient::invalidateClient): Ditto.
        * rendering/RenderSVGResourceMarker.cpp:
        (WebCore::RenderSVGResourceMarker::~RenderSVGResourceMarker): Now a no-op, markers are unified within the new client handling concept, no more special code needed.
        (WebCore::RenderSVGResourceMarker::layout): As RenderSVGResourceMarker skips the RenderSVGResourceContainer::layout() method, we also need to call invalidateClients() here.
        (WebCore::RenderSVGResourceMarker::invalidateClients): Use new helper functions to invalidate clients, shared between all resources in RenderSVGResourceContainer.
        (WebCore::RenderSVGResourceMarker::invalidateClient): Ditto.
        (WebCore::RenderSVGResourceMarker::draw): Remove marker specific logic to catch circular references.
        * rendering/RenderSVGResourceMarker.h:
        * rendering/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::~RenderSVGResourceMasker): Early exit if m_masker is empty.
        (WebCore::RenderSVGResourceMasker::invalidateClients): Use new helper functions to invalidate clients, shared between all resources in RenderSVGResourceContainer.
        (WebCore::RenderSVGResourceMasker::invalidateClient): Ditto.
        (WebCore::RenderSVGResourceMasker::applyResource): Remove containsCyclicReference() check, SVGResourcesCycleSolver breaks cyclic references, resources do not need to take care anymore.
        * rendering/RenderSVGResourceMasker.h:
        * rendering/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::~RenderSVGResourcePattern): Early exit if m_pattern is empty.
        (WebCore::RenderSVGResourcePattern::invalidateClients): Use new helper functions to invalidate clients, shared between all resources in RenderSVGResourceContainer.
        (WebCore::RenderSVGResourcePattern::invalidateClient): Ditto.
        (WebCore::RenderSVGResourcePattern::createTileImage): Remove containsCyclicReference() check, SVGResourcesCycleSolver breaks cyclic references, resources do not need to take care anymore.
        * rendering/RenderSVGResourcePattern.h:
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::selfWillPaint): Don't look up resources manually, use SVGResourcesCache.
        (WebCore::RenderSVGRoot::destroy): Forward to SVGResourcesCache::clientDestroyed.
        (WebCore::RenderSVGRoot::styleDidChange): Forward to SVGResourcesCache::clientStyleChanged.
        (WebCore::RenderSVGRoot::updateFromElement): Forward to SVGResourcesCache::clientUpdatedFromElement.
        * rendering/RenderSVGRoot.h:
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::layout): s/RenderSVGResource::invalidateAllResourcesOfRenderer/SVGResourcesCache::clientLayoutChanged/.
        * rendering/RenderSVGText.h:
        * rendering/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::acquirePaintingResource): Add RenderObject* parameter, don't assume the style comes from the InlineTextBox parent renderer.
        (WebCore::SVGInlineTextBox::prepareGraphicsContextForTextPainting): Pass the parent()->renderer() to acquirePaintingResource.
        (WebCore::SVGInlineTextBox::paintDecoration): Pass the decoration renderer to acquirePaintingResource.
        (WebCore::SVGInlineTextBox::paintDecorationWithStyle): Ditto.
        (WebCore::SVGInlineTextBox::paintText): When a selection pseudo style is used to paint the selection, swap styles in the SVGResourcesCache, to take the right resources when painting.
        * rendering/SVGInlineTextBox.h:
        * rendering/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::prepareToRenderSVGContent): Don't look up resources manually, use SVGResourcesCache.
        (WebCore::SVGRenderSupport::finishRenderSVGContent): Ditto.
        (WebCore::SVGRenderSupport::intersectRepaintRectWithResources): Ditto.
        (WebCore::SVGRenderSupport::pointInClippingArea): Remove const from RenderObject parameter. 
        * rendering/SVGRenderSupport.h:
        * rendering/SVGRenderTreeAsText.cpp:
        (WebCore::writeStyle): Add two const_cast now that fill/strokePaintingResource take RenderObject* parameters. This was the less intrusive approach, otherwhise more const_casts would be needed.
        (WebCore::writeResources): Add FIXME that we should dump the resources present in the SVGResourcesCache instead of manually looking them up from the SVGRenderStyle, to avoid dumping cycles.
        * rendering/SVGResourcesCache.cpp:
        (WebCore::SVGResourcesCache::clientStyleChanged): Use markForLayoutAndParentResourceInvalidation() instead of duplicating code.
        * rendering/SVGResourcesCycleSolver.cpp:
        (WebCore::setFollowLinkForChainableResource): Implemented stub method.
        * rendering/style/SVGRenderStyle.cpp:
        (WebCore::SVGRenderStyle::diff): Return StyleDifferenceLayout, not Repaint for stroke paint changes, otherwhise the cached boundaries are not correctly updated.
        * svg/SVGClipPathElement.cpp:
        (WebCore::SVGClipPathElement::svgAttributeChanged): Don't use invalidateResourceClients(), it's not needed anymore, only call setNeedsLayout() on the renderer.
        (WebCore::SVGClipPathElement::childrenChanged): Ditto.
        * svg/SVGClipPathElement.h:
        (WebCore::SVGClipPathElement::needsPendingResourceHandling): Return false, buildPendingResource() logic not needed anymore for resources, handled by RenderSVGResourceContainer.
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::insertedIntoDocument): Only execute buildPendingResource() logic, if needsPendingResourceHandling() returns true. Cleaned up code a bit, to deploy early returns.
        * svg/SVGElement.h:
        (WebCore::SVGElement::needsPendingResourceHandling): Return true (default). Only needed by SVGTextPathElement/SVGUseElement, and should be removed in future.
        * svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::SVGFilterElement): Initialize m_followLink=true.
        (WebCore::SVGFilterElement::setFilterRes): Don't use invalidateResourceClients(), it's not needed anymore, only call setNeedsLayout() on the renderer.
        (WebCore::SVGFilterElement::svgAttributeChanged): Ditto.
        (WebCore::SVGFilterElement::childrenChanged): Ditto.
        * svg/SVGFilterElement.h:
        (WebCore::SVGFilterElement::needsPendingResourceHandling): Return false, buildPendingResource() logic not needed anymore for resources, handled by RenderSVGResourceContainer.
        (WebCore::SVGFilterElement::setFollowLink): Used by SVGResourcesCycleSolver, to stop following xlink:href links, if that leads to cyclic references.
        * svg/SVGFilterPrimitiveStandardAttributes.cpp:
        (WebCore::SVGFilterPrimitiveStandardAttributes::childrenChanged): Don't use invalidateResourceClients(), it's a no-op as effects don't have a renderer -> use invalidateFilter().
        * svg/SVGFilterPrimitiveStandardAttributes.h:
        (WebCore::SVGFilterPrimitiveStandardAttributes::invalidateFilter): Don't use invalidateResourceClients(), it's not needed anymore, only call setNeedsLayout() on the renderer.
        * svg/SVGGradientElement.cpp:
        (WebCore::SVGGradientElement::SVGGradientElement): Initialize m_followLink=true.
        (WebCore::SVGGradientElement::svgAttributeChanged): Don't use invalidateResourceClients(), it's not needed anymore, only call setNeedsLayout() on the renderer.
        (WebCore::SVGGradientElement::childrenChanged): Ditto.
        * svg/SVGGradientElement.h:
        (WebCore::SVGGradientElement::needsPendingResourceHandling): Return false, buildPendingResource() logic not needed anymore for resources, handled by RenderSVGResourceContainer.
        (WebCore::SVGGradientElement::setFollowLink): Used by SVGResourcesCycleSolver, to stop following xlink:href links, if that leads to cyclic references.
        * svg/SVGLinearGradientElement.cpp:
        (WebCore::SVGLinearGradientElement::svgAttributeChanged): Don't use invalidateResourceClients(), it's not needed anymore, only call setNeedsLayout() on the renderer.
        (WebCore::SVGLinearGradientElement::collectGradientProperties): Only follow xlink:href links if m_followLinks == true.
        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::svgAttributeChanged): Don't use invalidateResourceClients(), it's not needed anymore, only call setNeedsLayout() on the renderer.
        (WebCore::SVGMarkerElement::childrenChanged): Ditto.
        (WebCore::SVGMarkerElement::setOrientToAuto): Ditto.
        (WebCore::SVGMarkerElement::setOrientToAngle): Ditto.
        * svg/SVGMarkerElement.h:
        (WebCore::SVGMarkerElement::needsPendingResourceHandling): Return false, buildPendingResource() logic not needed anymore for resources, handled by RenderSVGResourceContainer.
        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::svgAttributeChanged): Don't use invalidateResourceClients(), it's not needed anymore, only call setNeedsLayout() on the renderer.
        (WebCore::SVGMaskElement::childrenChanged): Ditto.
        * svg/SVGMaskElement.h:
        (WebCore::SVGMaskElement::needsPendingResourceHandling): Return false, buildPendingResource() logic not needed anymore for resources, handled by RenderSVGResourceContainer.
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::SVGPatternElement): Initialize m_followLink=true.
        (WebCore::SVGPatternElement::svgAttributeChanged): Don't use invalidateResourceClients(), it's not needed anymore, only call setNeedsLayout() on the renderer.
        (WebCore::SVGPatternElement::childrenChanged): Ditto.
        (WebCore::SVGPatternElement::collectPatternProperties): Only follow xlink:href links if m_followLinks == true.
        * svg/SVGPatternElement.h:
        (WebCore::SVGPatternElement::needsPendingResourceHandling): Return false, buildPendingResource() logic not needed anymore for resources, handled by RenderSVGResourceContainer.
        (WebCore::SVGPatternElement::setFollowLink): Used by SVGResourcesCycleSolver, to stop following xlink:href links, if that leads to cyclic references.
        * svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::svgAttributeChanged): Don't use invalidateResourceClients(), it's not needed anymore, only call setNeedsLayout() on the renderer.
        (WebCore::SVGRadialGradientElement::collectGradientProperties): Only follow xlink:href links if m_followLinks == true.
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::attach): Call updateFromElement upon attach(), needed by all resource renderers. Defaults to a no-op in RenderObject.h
        * svg/SVGStyledElement.h: Remove invalidateResourceClients(), it's not needed anymore.

2010-07-29  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Reviewed by Kenneth Rohde Christiansen.

        [EFL] Support to enable WML in WebKit EFL
        https://bugs.webkit.org/show_bug.cgi?id=43178

        WebKit EFL cannot enable WML. WML files are added to CMakeLists.txt
        to enable WML in WebKit EFL.

        * CMakeLists.txt: Support to enable WML.

2010-07-21 Grace Kloba  <klobag@gmail.com> , Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by David Hyatt.

        Enhance the hit testing to take a rectangle instead of a point
        https://bugs.webkit.org/show_bug.cgi?id=40197

        The primary goal of this change is to provide mechanisms for more precise tap
        actions by the users on mobile devices.

        Patch extends the hit testing system to work considering a rectangular area
        as input instead of a point, when applicable. For that, the HitTestResult class
        was modified to take a padding (IntSize). The padding specifies a fuzzy range for
        accepting input events in pixels coordinates for both vertical and horizontal
        orientations. In other words, it tells how much to expand the search rect
        around a supposed touch point.

        If it is non-positive padding (e.g. (-1, -1), (5, -1), (0, 0)), hit testing will behavior
        as the current point based hit testing: methods are no-op'ed to not regress it performance-wise
        since it is the common behavior. When positive padding is provided, the HitTestResult class will
        keep record of all nodes that intersect the built up test area. The logic will continue searching
        when it finds a candidate until the hit test area is fully enclosed by the boundaries of a candidate.
        The result will be a list of nodes in the z-order they are hit-tested. Caller will decide how
        to process them.

        In order to expose the functionality, the patch:

        - Adds a nodesFromRect method to the Document class, exposing the funcionality
        to the DOM. Method returns a NodeList with all nodes that intersect the given
        hit-tested area.
        - Extends hitTestResultAtPoint method of the EventHandler with an extra 'padding'
        parameter, defaulting to IntSize(-1, -1). The rect-based hit test is performed when a
        non-negative padding is passed in.

        Test: fast/dom/nodesFromRect-basic.html

        * WebCore.base.exp:
        * dom/Document.cpp:
        (WebCore::Document::nodesFromRect): This method exposes the rect based funcionality to
        the DOM. It works similarly to elementFromPoint, however receiving a rectangular area
        as input instead of a point, and returning a z-index ordered list of nodes (not elements)
        whose area intersect the hit test rect.
        * dom/Document.h: Ditto.
        * dom/Document.idl: Ditto.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::hitTestResultAtPoint): The funcionality is also exposed through this
        method. Patch adds a additional IntSize parameter to work as the padding area, building up
        the hit test rect.
        * page/EventHandler.h: Ditto.
        * rendering/HitTestResult.cpp:
        (WebCore::HitTestResult::HitTestResult): Rect based hit test constructor. Receives a
        padding IntSize as parameter. It can be (0,0).
        (WebCore::HitTestResult::operator=): Modified to assign the m_rectBasedTestResult as well.
        (WebCore::HitTestResult::append): Merge to HitTestResult objects in a way that the
        list node's of both objects get amended.
        (WebCore::HitTestResult::addNodeToRectBasedTestResult): Adds a given Node to the list of
        hit nodes.
        * rendering/HitTestResult.h:
        (WebCore::HitTestResult::padding): Returns the padding as an IntSize.
        (WebCore::HitTestResult::isRectBasedTest): Returns if the HitTestResult is rect based or not.
        (WebCore::HitTestResult::.rectBasedTestResult): Returns the list nodes hit.
        (WebCore::HitTestResult::rectFromPoint): Returns the hit test rect given the hit test point
        and padding.
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::hitTestLayer):
        (WebCore::RenderLayer::hitTestList):
        (WebCore::RenderLayer::hitTestChildLayerColumns):
        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::nodeAtPoint): Method is modified to support rect based hit test extension.
        Now it not just checks if the boundary of the node being hit-tested contains a hit test point, but
        instead it checks if the boundary of the node intersects a hit test rect. It is implemented so
        that the common case (point based hit test) works as previously.
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::nodeAtPoint): Ditto.
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::nodeAtPoint): Ditto.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::nodeAtPoint): Ditto.
        (WebCore::RenderBlock::hitTestColumns): Ditto.
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::nodeAtPoint): Ditto.
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::nodeAtPoint): Ditto.
        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::hitTest):
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::nodeAtPoint): Ditto.
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::nodeAtPoint): Ditto.
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::nodeAtPoint): Ditto.
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::nodeAtPoint): Ditto.

2010-07-29  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        Add LayoutTestController methods to test DeviceOrientation
        https://bugs.webkit.org/show_bug.cgi?id=39589

        This patch does not hook up the new LayoutTestController method to WebKit
        for any platform. This will be done in later patches.
        https://bugs.webkit.org/show_bug.cgi?id=43181 tracks this for Mac.

        Test: fast/dom/DeviceOrientation/basic-operation.html

        * WebCore/WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/DeviceOrientationClient.h:
        (WebCore::DeviceOrientationClient::~DeviceOrientationClient):
        * dom/DeviceOrientationController.cpp:
        (WebCore::DeviceOrientationController::DeviceOrientationController):
        * dom/DeviceOrientationEvent.cpp:
        * platform/mock/DeviceOrientationClientMock.cpp: Added.
        (WebCore::DeviceOrientationClientMock::DeviceOrientationClientMock):
        (WebCore::DeviceOrientationClientMock::setController):
        (WebCore::DeviceOrientationClientMock::startUpdating):
        (WebCore::DeviceOrientationClientMock::stopUpdating):
        (WebCore::DeviceOrientationClientMock::setOrientation):
        (WebCore::DeviceOrientationClientMock::timerFired):
        * platform/mock/DeviceOrientationClientMock.h: Added.
        (WebCore::DeviceOrientationClientMock::lastOrientation):

2010-07-29  Satish Sampath  <satish@chromium.org>

        Reviewed by Steve Block.

        Runtime feature switch for speech input.
        https://bugs.webkit.org/show_bug.cgi?id=43146

        Add a runtime feature switch that decides whether speech input attributes are available or not.
        Defaults to true.

        * bindings/generic/RuntimeEnabledFeatures.cpp:
        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setSpeechInputEnabled):
        (WebCore::RuntimeEnabledFeatures::speechInputEnabled):
        (WebCore::RuntimeEnabledFeatures::speechEnabled):
        * html/HTMLInputElement.idl:

2010-07-27  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Inspector should display CDATA section data
        https://bugs.webkit.org/show_bug.cgi?id=16259

        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForNode):
        * inspector/front-end/ElementsTreeOutline.js:
        ():

2010-07-28  Kavita Kanetkar  <kkanetkar@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Enable UI for chromium's appcache inspection.
        https://bugs.webkit.org/show_bug.cgi?id=43098

        * inspector/front-end/Settings.js: Removed appCacheEnabled.
        * inspector/front-end/StoragePanel.js: Removed appCacheEnabled condition.
        (WebInspector.StoragePanel):
        (WebInspector.StoragePanel.prototype.reset):
        (WebInspector.StoragePanel.prototype.addApplicationCache):

2010-07-28  Bryan Gislason  <bgislason@rim.com>

        Reviewed by Nate Chapin.

        Minor compile errors in loadMediaPlayerProxyPlugin
        https://bugs.webkit.org/show_bug.cgi?id=43141

        * WebCore/loader/SubframeLoader.cpp:

2010-07-28  Dominic Mazzoni  <dmazzoni@google.com>

        Reviewed by Dimitri Glazkov.

        Add a missing dependency.
        https://bugs.webkit.org/show_bug.cgi?id=43044

        * css/CSSPrimitiveValueMappings.h:

2010-07-28  Alex Nicolaou  <anicolao@chromium.org>

        Reviewed by Ojan Vafai.

        Set incorrect but close expectations for mask-colorspace.svg on mac
        https://bugs.webkit.org/show_bug.cgi?id=43102

        Blocks:
          [chromium] r63450 caused some svg mask tests to fail pixel tests
          https://bugs.webkit.org/show_bug.cgi?id=42403

        ImageBufferCG.cpp uses CoreGraphics to do the transform of SVG masks
        into LinearRGB, but only for MAC which means not for CHROMIUM, so I
        have changed the #if to account for both platforms. I am assuming this
        isn't in for windows because it's missing in CG itself, but I didn't
        verify that.

        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::ImageBuffer):

2010-07-28  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Fisher.

        [Chromium] Improve read-only arrow button appearance
        https://bugs.webkit.org/show_bug.cgi?id=43108

        No new tests. This is a fix for fast/forms/
        input-appearance-spinbutton-disabled-readonly.html

        * platform/chromium/PlatformThemeChromiumGtk.cpp:
        (WebCore::PlatformThemeChromiumGtk::paintArrowButton):
        If the button has ReadOnlyState, paint the button as same as it is disabled.

2010-07-28  Tony Chang  <tony@chromium.org>

        Reviewed by Ojan Vafai.

        implement getData('text/html') for webkit win
        https://bugs.webkit.org/show_bug.cgi?id=37981

        * platform/win/ClipboardUtilitiesWin.cpp:
        (WebCore::extractMarkupFromCFHTML):
        (WebCore::getCFHTML):
        (WebCore::fragmentFromCFHTML):
        (WebCore::fragmentFromHTML):
        * platform/win/ClipboardUtilitiesWin.h:
        * platform/win/ClipboardWin.cpp:
        (WebCore::):
        (WebCore::clipboardTypeFromMIMEType):
        (WebCore::ClipboardWin::getData):

2010-07-28  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Update numbered header element closing to match recent spec change
        https://bugs.webkit.org/show_bug.cgi?id=43072

        Pretty straightforward transcription of the spec change.

        * html/HTMLElementStack.cpp:
        (WebCore::HTMLNames::isNumberedHeaderElement):
        (WebCore::HTMLElementStack::popUntilNumberedHeaderElementPopped):
        (WebCore::HTMLElementStack::hasOnlyHTMLElementsInScope):
        (WebCore::HTMLElementStack::hasNumberedHeaderElementInScope):
        * html/HTMLElementStack.h:
        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::HTMLTreeBuilder):
        (WebCore::HTMLTreeBuilder::processEndTagForInBody):

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

        Reviewed by Sam Weinig.

        Add support for calling NPObject methods
        https://bugs.webkit.org/show_bug.cgi?id=43145

        * WebCore.exp.in:
        Export JSHTMLElement::s_info and pluginScriptObject.

        * WebCore.xcodeproj/project.pbxproj:
        Make JSHTMLElement.h and JSPluginElementFunctions.h private headers.

        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::pluginScriptObject):
        * bindings/js/JSPluginElementFunctions.h:
        Make pluginScriptObject a public function.

2010-07-28  James Robinson  <jamesr@chromium.org>

        Reviewed by Darin Fisher.

        [chromium] Add a bool to Settings to control accelerated 2d canvas
        https://bugs.webkit.org/show_bug.cgi?id=43094

        Currently this doesn't control anything, but it will soon.

        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        (WebCore::Settings::setAccelerated2dCanvasEnabled):
        * page/Settings.h:
        (WebCore::Settings::accelerated2dCanvasEnabled):

2010-07-28  Robin Dunn  <robin@alldunn.com>

        Reviewed by Kevin Ollivier.

        Add DOM bindings support for wx port.

        * DerivedSources.make:
        * bindings/scripts/CodeGeneratorCPP.pm:
        * platform/graphics/wx/FontPlatformDataWx.cpp:
        (WebCore::FontPlatformData::FontPlatformData):
        * platform/wx/MouseEventWx.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):
        * wscript:

2010-07-28  Stephen White  <senorblanco@chromium.org>

        Reviewed by Darin Fisher.

        Hook the GLES2 rendering path up to GraphicsContextSkia.
        https://bugs.webkit.org/show_bug.cgi?id=43119
        
        This connects the state-setting and drawing calls implemented in
        so far in GLES2Canvas, and calls PlatformContextSkia's
        prepareForSoftwareDraw() for all the non-accelerated paths.

        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::addInnerRoundedRectClip):
        (WebCore::GraphicsContext::addPath):
        (WebCore::GraphicsContext::beginPath):
        (WebCore::GraphicsContext::clip):
        (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::fillRoundedRect):
        (WebCore::GraphicsContext::strokeArc):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::strokeRect):
        These calls are software-only; call preSoftwareDraw() for these.
        (WebCore::GraphicsContext::savePlatformState):
        (WebCore::GraphicsContext::restorePlatformState):
        (WebCore::GraphicsContext::setAlpha):
        (WebCore::GraphicsContext::setCompositeOperation):
        (WebCore::GraphicsContext::setPlatformFillColor):
        (WebCore::GraphicsContext::scale):
        (WebCore::GraphicsContext::rotate):
        (WebCore::GraphicsContext::translate):
        (WebCore::GraphicsContext::concatCTM):
        These ones set state on both Skia and GLES2Canvas.
        (WebCore::GraphicsContext::clearRect):
        (WebCore::GraphicsContext::fillRect):
        These ones have a GLES2 implementation; call through to it if PlatformContextSkia's useGPU() flag is set and the state permits.
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (PlatformContextSkia::prepareForSoftwareDraw):
        (PlatformContextSkia::prepareForHardwareDraw):
        Rename preXXXDraw() -> prepareForXXXDraw().
        * platform/graphics/skia/PlatformContextSkia.h:
        (PlatformContextSkia::prepareForSoftwareDraw):
        (PlatformContextSkia::prepareForHardwareDraw):
        Rename preXXXDraw() -> prepareForXXXDraw().

2010-07-28  fsamuel@chromium.org  <fsamuel@chromium.org>

        Reviewed by David Hyatt.

        REGRESSION (r63994): Bank of America's home page is horribly mis-rendered
        https://bugs.webkit.org/show_bug.cgi?id=42993

        Fixed bug introduced by patch for bug 40775.

        The new table rendering code did not take into account table layouts starting
        during a partial construction of the table render tree. As such,
        multiple layouts on the same table resulted in more columns being generated.
        This patch solves this issue.

        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::recalcColumn):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::cellAbove):
        (WebCore::RenderTable::cellBelow):
        (WebCore::RenderTable::cellBefore):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::ensureRows):
        (WebCore::RenderTableSection::addCell):
        (WebCore::RenderTableSection::setCellWidths):
        (WebCore::RenderTableSection::calcRowHeight):
        (WebCore::RenderTableSection::layoutRows):
        (WebCore::RenderTableSection::paintObject):
        (WebCore::RenderTableSection::appendColumn):
        (WebCore::RenderTableSection::splitColumn):
        * rendering/RenderTableSection.h:
        (WebCore::RenderTableSection::CellStruct::CellStruct):

2010-07-28  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Pavel Feldman.

        Exclude DNS and SSL time from connect time
        https://bugs.webkit.org/show_bug.cgi?id=43083

        The ResourceLoadTiming API's definition of the connect phase includes
        DNS and SSL time. However, the Web Timing spec wants just the TCP time.
        So this patch subtracts those phases out.

        No new tests because ResourceLoadTiming fields are not populated by
        TestShell yet.

        * page/Timing.cpp:
        (WebCore::Timing::connectStart):
        (WebCore::Timing::connectEnd):

2010-07-26  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        Page clients should be passed to Page constructor via structure of pointers
        https://bugs.webkit.org/show_bug.cgi?id=42834

        No new tests, refactoring only.

        * WebCore.exp.in:
        * page/Page.cpp:
        (WebCore::Page::Page):
        * page/Page.h:
        (WebCore::Page::PageClients::PageClients):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged):

2010-07-28  Xianzhu Wang  <phnixwxz@gmail.com>

        Reviewed by Dan Bernstein.

        Line not wrapped at certain punctuations
        https://bugs.webkit.org/show_bug.cgi?id=37698
        Added a line breaking table for all printable ASCII chars to replace
        the original line breaking table for only '?'.

        Test: fast/text/line-breaks-after-closing-punctuations.html

        * rendering/break_lines.cpp:
        (WebCore::isBreakableSpace):
        (WebCore::):
        (WebCore::shouldBreakAfter):
        (WebCore::needsLineBreakIterator):

2010-07-28  Lucas De Marchi  <lucas.demarchi@profusion.mobi>

        Unreviewed build fix.

        Fix EFL build with SHARED_CORE=ON after r64124.

        * CMakeLists.txt:

2010-07-28  Jay Civelli  <jcivelli@chromium.org>

        Reviewed by Kent Tamura.

        [Chromium] The popup now layouts properly its rows by
        taking into account the label width.
        https://bugs.webkit.org/show_bug.cgi?id=42910

        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupListBox::layout):

2010-07-28  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: chromium tests fix.
        Chromium Dev Tools: [REGRESSION] Pause is not working.

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

        * inspector/front-end/InspectorBackendStub.js:

2010-07-28  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        WebInspector: Navigating to anchor prior to opening WebInspector
        makes resource have 'other' type.
        https://bugs.webkit.org/show_bug.cgi?id=43110

        * inspector/InspectorResource.cpp:
        (WebCore::InspectorResource::type):
        (WebCore::InspectorResource::resourceData):
        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceView.prototype._innerSelectContentTab):

2010-07-28  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] putImageData(): Combine premultiplication and BGR->RGB
        https://bugs.webkit.org/show_bug.cgi?id=43114

        Further optimized putImageData() by doing BGR->RGB inside the
        premultiplication routine.

        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::premultiplyABGRtoARGB): Renamed from premultiply.
        (WebCore::putImageData):

2010-07-28  Andrei Popescu  <andreip@google.com>

        Reviewed by Jeremy Orlow.

        [IndexedDB] IDBKeyRange should be a runtime-enabled feature.
        https://bugs.webkit.org/show_bug.cgi?id=43116

        IDBKeyRange should be enabled at runtime only when IndexedDB is also
        enabled.

        No new tests needed, functionality not changed.

        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::iDBKeyRangeEnabled):
        * page/DOMWindow.idl:

2010-07-28  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed. Forgot to land GNUmakefile.am changes, broke build in r64196.

        * GNUmakefile.am: Add SVGResources.* / SVGResourcesCache.* / SVGResourcesCycleSolver.* to build.

2010-07-28  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        SVGMaskElement/SVGForeignObjectElement should not inherit from SVGURIReference
        https://bugs.webkit.org/show_bug.cgi?id=43113

        Remove wrong SVGURIReference inheritance for SVGMaskElement/SVGForeignObjectElement. Old copy/paste bug.

        * svg/SVGForeignObjectElement.cpp:
        (WebCore::SVGForeignObjectElement::synchronizeProperty):
        * svg/SVGForeignObjectElement.h:
        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::SVGMaskElement):
        (WebCore::SVGMaskElement::parseMappedAttribute):
        (WebCore::SVGMaskElement::svgAttributeChanged):
        (WebCore::SVGMaskElement::synchronizeProperty):
        * svg/SVGMaskElement.h:

2010-07-28  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        WebKit shouldn't ignore resource cycles, but break them as Opera does
        https://bugs.webkit.org/show_bug.cgi?id=43031

        Don't ignore resources containing cyclic references, but break them, as discussed on SVG WG mailing lists - to be compatible with Opera which already does that.

        We used to lookup RenderSVGResourceContainers objects, by extracting the URI reference from the SVGRenderStyle, then utilizing getElementById() to lookup the
        node, and access its renderer. Opera ignores such references, if they point to resources that contain cyclic references. Ignoring them would mean we have
        to mutate the render style to empty the resource strings. That obviously doesn't work, as it would break expectations (getComputedStyle, etc.).

        Introduce a SVGResources class that stores pointers to all resources, that can be applied to a RenderObject (clipper/filter/markers/masker).
        Add a SVGResourcesCache class, which is basically a HashMap<RenderObject*, SVGResources*>. Whenever a RenderObject receives style, we extract the URI references
        from the SVGRenderStyle, look up the RenderSVGResourceContainer* objects, and store them in a SVGResources* class. Then we execute a cycle detection logic,
        which detects cyclic references and breaks them. Breaking them means just nulling the pointer to the resource in the SVGResources object. Those SVGResources
        objects are cached, and used throughout the render tree to access resources. This way it's guaranteed that all cyclic references are resolved until layout/paint
        phase begins.

        This is the first chunk, which just adds the new SVGResources/SVGResourcesCache/SVGResourcesCycleSolver files, and does minor cleanups.
        It's not yet glued in and doesn't affect any tests.

        * Android.mk: Add SVGResources.* / SVGResourcesCache.* / SVGResourcesCycleSolver.* to build.
        * CMakeLists.txt: Ditto.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto. 
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * rendering/RenderInline.h: Make styleDidChange protected, RenderSVGInline wants to override it.
        * rendering/RenderSVGAllInOne.cpp: Add SVGResources.* / SVGResourcesCache.* / SVGResourcesCycleSolver.* to build.
        * rendering/RenderSVGHiddenContainer.h:
        (WebCore::RenderSVGHiddenContainer::isSVGHiddenContainer): Make isSVGHiddenContainer() private and renderName() public.
        * rendering/RenderSVGResourceContainer.cpp: Added. Moved most methods from the header in the implementation file.
        (WebCore::RenderSVGResourceContainer::RenderSVGResourceContainer):
        (WebCore::RenderSVGResourceContainer::~RenderSVGResourceContainer):
        (WebCore::RenderSVGResourceContainer::idChanged):
        (WebCore::RenderSVGResourceContainer::transformOnNonScalingStroke):
        (WebCore::RenderSVGResourceContainer::containsCyclicReference):
        * rendering/RenderSVGResourceContainer.h: Add stubs, that SVGResourcesCache uses - a follow-up patch will add the logic.
        (WebCore::RenderSVGResourceContainer::addClient):
        (WebCore::RenderSVGResourceContainer::removeClient):
        * rendering/SVGResources.cpp: Added. Holds a list of resources applyable to a RenderObject (fill/stroke, mask/markers/clipper/filter)
        (WebCore::paintingResourceFromSVGPaint): Helper function looking up a RenderSVGResource for a SVGPaint object.
        (WebCore::registerPendingResource): Helper function that register a RenderSVGResource as pending in the SVGDocumentExtensions. 
        (WebCore::SVGResources::buildCachedResources): Build a list of resources for a RenderObject/RenderStyle pair, handles pending resources, if needed.
        (WebCore::SVGResources::invalidateClient): Helper function that calls invalidateClient() on all resources.
        (WebCore::SVGResources::resourceDestroyed): Helper function that calls invalidateClients() on a certain resource, and nulls it.
        (WebCore::SVGResources::buildSetOfResources): Helper function that stashes all resources present in the SVGResources members in a HashSet, used in SVGResourcesCycleSolver.
        (WebCore::SVGResources::resetClipper): Helper methods nulling a resource.
        (WebCore::SVGResources::resetFilter): Ditto.
        (WebCore::SVGResources::resetMarkerStart): Ditto.
        (WebCore::SVGResources::resetMarkerMid): Ditto.
        (WebCore::SVGResources::resetMarkerEnd): Ditto.
        (WebCore::SVGResources::resetMasker): Ditto.
        (WebCore::SVGResources::resetFill): Ditto.
        (WebCore::SVGResources::resetStroke): Ditto.
        (WebCore::SVGResources::dump):
        * rendering/SVGResources.h: Added.
        (WebCore::SVGResources::clipper): Accesor of the cached m_foo variable.
        (WebCore::SVGResources::filter): Ditto.
        (WebCore::SVGResources::markerStart): Ditto.
        (WebCore::SVGResources::markerMid): Ditto.
        (WebCore::SVGResources::markerEnd): Ditto.
        (WebCore::SVGResources::masker): Ditto.
        (WebCore::SVGResources::fill): Ditto.
        (WebCore::SVGResources::stroke): Ditto.
        * rendering/SVGResourcesCache.cpp: Added. Holds a HashMap<RenderObject*, SVGResources*> and utility functions that update/invalidate the cache.
        (WebCore::SVGResourcesCache::SVGResourcesCache):
        (WebCore::SVGResourcesCache::~SVGResourcesCache):
        (WebCore::SVGResourcesCache::addResourcesFromRenderObject): Build a SVGResources object for a RenderObject and adds it to the cache, then detects & breaks cycles using SVGResourcesCycleSolver.
        (WebCore::SVGResourcesCache::removeResourcesFromRenderObject): Remove a SVGResources object from the cache.
        (WebCore::resourcesCacheFromRenderObject): Helper function, retrieving a SVGResourcesCache method from a RenderObject.
        (WebCore::SVGResourcesCache::cachedResourcesForRenderObject): Returns a SVGResources object from the cache.
        (WebCore::SVGResourcesCache::clientLayoutChanged): (static) Calls invalidateClient() on all resources that are used by the passed RenderObject.
        (WebCore::SVGResourcesCache::clientStyleChanged): (static) Updates the cache (calling removeResourceFromRenderObject/addResourcesFrom...) and invalidates resources in the ancestor chain.
        (WebCore::SVGResourcesCache::clientUpdatedFromElement): (static) Does the same, without invalidating the ancestor chain.
        (WebCore::SVGResourcesCache::clientDestroyed): (static) Calls removeResourcesFromRenderObject() on the SVGResourcesCache, for the given renderer.
        (WebCore::SVGResourcesCache::resourceDestroyed): (static) Updates all SVGResources objects in the cache, that refer to the given resource.
        * rendering/SVGResourcesCache.h: Added.
        * rendering/SVGResourcesCycleSolver.cpp: Added. Detects and breaks cyclic references, just the way Opera handles it. Break cycles as they are detected.
        (WebCore::SVGResourcesCycleSolver::SVGResourcesCycleSolver):
        (WebCore::SVGResourcesCycleSolver::~SVGResourcesCycleSolver):
        (WebCore::SVGResourcesCycleSolver::resourceContainsCycles): Operates only on the render tree
        (WebCore::targetReferenceFromResource): Helper method for chainableResourceContainsCycles().
        (WebCore::setFollowLinkForChainableResource): Ditto.
        (WebCore::SVGResourcesCycleSolver::chainableResourceContainsCycles): Handles cycles for resources that are chainable through xlink:href (filter/gradient/pattern).
        (WebCore::SVGResourcesCycleSolver::resolveCycles): Main method executing the cycle breaking logic, utilizing (chainableResource)resourceContainsCycles.
        (WebCore::SVGResourcesCycleSolver::breakCycle): Nulls a resource in the given SVGResources* object, to avoid using an invalid resource while rendering/layouting.
        * rendering/SVGResourcesCycleSolver.h: Added.
        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::SVGDocumentExtensions): Create SVGResourcesCache object once per SVGDocumentExtensions.
        * svg/SVGDocumentExtensions.h:
        (WebCore::SVGDocumentExtensions::resourcesCache): Expose accesor method for the SVGResourcesCache.

2010-07-28  Zoltan Herczeg  <zherczeg@webkit.org>

        Reviewed by Nikolas Zimmermann.

        SVGFilterElement & SVGFE*Element don't support dynamic invalidation, when attributes change
        https://bugs.webkit.org/show_bug.cgi?id=42244

        Implementing svgAttributeChanged for SVGFEOffsetElement object.

        Tests: svg/dynamic-updates/SVGFEOffsetElement-dom-dx-attr.html
               svg/dynamic-updates/SVGFEOffsetElement-dom-dy-attr.html
               svg/dynamic-updates/SVGFEOffsetElement-dom-in-attr.html
               svg/dynamic-updates/SVGFEOffsetElement-svgdom-dx-prop.html
               svg/dynamic-updates/SVGFEOffsetElement-svgdom-dy-prop.html
               svg/dynamic-updates/SVGFEOffsetElement-svgdom-in-prop.html

        * svg/SVGFEOffsetElement.cpp:
        (WebCore::SVGFEOffsetElement::svgAttributeChanged):
        * svg/SVGFEOffsetElement.h:

2010-07-28  Zoltan Herczeg  <zherczeg@webkit.org>

        Reviewed by Nikolas Zimmermann.

        SVGFilterElement & SVGFE*Element don't support dynamic invalidation, when attributes change
        https://bugs.webkit.org/show_bug.cgi?id=42244

        Implementing svgAttributeChanged for SVGFEDiffuseLightingElement object.

        Tests: svg/dynamic-updates/SVGFEDiffuseLightingElement-dom-diffuseConstant-attr.html
               svg/dynamic-updates/SVGFEDiffuseLightingElement-dom-in-attr.html
               svg/dynamic-updates/SVGFEDiffuseLightingElement-dom-lighting-color-attr.html
               svg/dynamic-updates/SVGFEDiffuseLightingElement-dom-surfaceScale-attr.html
               svg/dynamic-updates/SVGFEDiffuseLightingElement-lighting-color-css-prop.html
               svg/dynamic-updates/SVGFEDiffuseLightingElement-svgdom-diffuseConstant-prop.html
               svg/dynamic-updates/SVGFEDiffuseLightingElement-svgdom-in-prop.html
               svg/dynamic-updates/SVGFEDiffuseLightingElement-svgdom-surfaceScale-prop.html

        * svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::svgAttributeChanged):
        * svg/SVGFEDiffuseLightingElement.h:

2010-07-27  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Ojan Vafai.

        Add FILE_SYSTEM build flag for FileSystem API
        https://bugs.webkit.org/show_bug.cgi?id=42915

        * Configurations/FeatureDefines.xcconfig:
        * GNUmakefile.am:
        * WebCore.pri:

2010-07-26  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Shinichiro Hamaji.

        @page rules in media queries should be tested.
        https://bugs.webkit.org/show_bug.cgi?id=42971

        * page/PrintContext.cpp:
        (WebCore::PrintContext::pageProperty): Fixed to properly begin
        printing. Added support for size property.

2010-07-27  James Hawkins  <jhawkins@chromium.org>

        Reviewed by Darin Fisher.

        Add itemIcon() method to the PopupMenuClient, used by Chrome AutoFill
        to display right-aligned credit card icons in the suggestions popup.
        https://bugs.webkit.org/show_bug.cgi?id=43076

        No new tests as this is only used by the Chromium WebKit API.

        * platform/PopupMenuClient.h:
        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupListBox::paintRow):
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::itemIcon):
        * rendering/RenderMenuList.h:
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::itemIcon):
        * rendering/RenderTextControlSingleLine.h:

2010-07-27  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] putImageData(): Fast premultiply() if alpha == 255

        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::premultiply): Do nothing for opaque pixels.

2010-07-27  Jian Li  <jianli@chromium.org>

        Reviewed by David Levin.

        Enhance FileThreadTask to support return type.
        https://bugs.webkit.org/show_bug.cgi?id=43078

        This is needed to support synchronous calls of FileStream methods in
        addition to asynchronous calls via FileThreadTask.

        * html/FileThreadTask.h:
        (WebCore::createFileThreadTask):

2010-07-27  James Robinson  <jamesr@chromium.org>

        Reviewed by Darin Fisher.

        [chromium] Let PlatformContextSkia draw to a GLES2Canvas in addition to an SkCanvas
        https://bugs.webkit.org/show_bug.cgi?id=43070

        This adds a GLES2Canvas as drawing surface to PlatformContextSkia and lets callers
        issue draw commands to either.  The PlatformContextSkia keeps track of where
        rendering results are being accumulated and can blend the hardware and software
        backing stores into each other when necessary.

        Still just plumbing, no functionality change.

        * platform/graphics/chromium/GLES2Canvas.cpp:
        (WebCore::GLES2Canvas::GLES2Canvas):
        * platform/graphics/chromium/GLES2Canvas.h:
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (PlatformContextSkia::PlatformContextSkia):
        (PlatformContextSkia::setGLES2Context):
        (PlatformContextSkia::preSoftwareDraw):
        (PlatformContextSkia::preHardwareDraw):
        (PlatformContextSkia::forceToSoftware):
        (PlatformContextSkia::uploadSoftwareToHardware):
        (PlatformContextSkia::readbackHardwareToSoftware):
        * platform/graphics/skia/PlatformContextSkia.h:
        (PlatformContextSkia::useGPU):
        (PlatformContextSkia::gpuCanvas):
        (PlatformContextSkia::preSoftwareDraw):
        (PlatformContextSkia::preHardwareDraw):
        (PlatformContextSkia::forceToSoftware):
        (PlatformContextSkia::):

2010-07-27  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.

        Incomplete repaint of some Safari extension content which falls into a composited iframe
        <rdar://problem/8235044>
        
        syncCompositingStateRecursive() bails if it thinks that a layout is pending, because
        the layout may update layers and make this sync obsolete. However, it only checked for an
        active layout timer. This ignores other sources of pending style changes and layouts, like
        the document's style recalc timer. So use needsLayout(), which does check this.

        Unable to create a test because it depends on Safari extension behavior.

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

2010-07-27  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] putImageData() optimizations
        https://bugs.webkit.org/show_bug.cgi?id=43059

        - Single-pass premultiplication and BGR->RGB conversion
        - Use ARGB32PM for the temporary image so Qt calls the
          fast Source composition function

        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::premultiply): Added (static inline)
        (WebCore::putImageData):

2010-07-27  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Expose interface for returning the plug-in script JSObject
        https://bugs.webkit.org/show_bug.cgi?id=43074

        PluginViewBase::scriptObject should be a virtual function.

        * plugins/PluginViewBase.h:
        (WebCore::PluginViewBase::scriptObject):

2010-07-27  Jian Li  <jianli@chromium.org>

        Reviewed by David Levin.

        Add ScriptExecutionContext argument to File/Blob constructors.
        https://bugs.webkit.org/show_bug.cgi?id=40587

        Remove DragData::createClipboard and add Clipboard::create for it to be
        called directly in DragController. This is because we need to pass
        Frame pointer to Clipboard class and use it to get ScriptExecutionContext
        in order to construct File objects in Clipboard::files().

        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::DeserializingTreeWalker::convertIfTerminal):
        * bindings/v8/SerializedScriptValue.cpp:
        (WebCore::ZigZag::Reader::readBlob):
        (WebCore::ZigZag::Reader::readFile):
        (WebCore::ZigZag::Reader::readFileList):
        * dom/Clipboard.h:
        * editing/Editor.cpp:
        (WebCore::Editor::dispatchCPPEvent):
        * editing/Editor.h:
        * editing/android/EditorAndroid.cpp:
        (WebCore::Editor::newGeneralClipboard):
        * editing/brew/EditorBrew.cpp:
        (WebCore::Editor::newGeneralClipboard):
        * editing/chromium/EditorChromium.cpp:
        (WebCore::Editor::newGeneralClipboard):
        * editing/haiku/EditorHaiku.cpp:
        (WebCore::Editor::newGeneralClipboard):
        * editing/mac/EditorMac.mm:
        (WebCore::Editor::newGeneralClipboard):
        * editing/qt/EditorQt.cpp:
        (WebCore::Editor::newGeneralClipboard):
        * editing/wx/EditorWx.cpp:
        (WebCore::Editor::newGeneralClipboard):
        * html/Blob.cpp:
        (WebCore::Blob::Blob):
        (WebCore::Blob::slice):
        * html/Blob.h:
        (WebCore::Blob::create):
        * html/Blob.idl:
        * html/BlobBuilder.cpp:
        (WebCore::BlobBuilder::getBlob):
        * html/BlobBuilder.h:
        * html/BlobBuilder.idl:
        * html/File.cpp:
        (WebCore::File::File):
        * html/File.h:
        (WebCore::File::create):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::appendFormData):
        (WebCore::HTMLInputElement::setFileListFromRenderer):
        * page/DragController.cpp:
        (WebCore::DragController::dragExited):
        (WebCore::DragController::performDrag):
        (WebCore::DragController::tryDHTMLDrag):
        * page/chromium/EventHandlerChromium.cpp:
        (WebCore::EventHandler::createDraggingClipboard):
        * page/gtk/EventHandlerGtk.cpp:
        (WebCore::EventHandler::createDraggingClipboard):
        * page/win/EventHandlerWin.cpp:
        (WebCore::EventHandler::createDraggingClipboard):
        * platform/DragData.h:
        * platform/android/ClipboardAndroid.cpp:
        (WebCore::Clipboard::create):
        * platform/android/DragDataAndroid.cpp:
        * platform/brew/ClipboardBrew.cpp:
        (WebCore::Clipboard::create):
        * platform/brew/DragDataBrew.cpp:
        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::Clipboard::create):
        (WebCore::ClipboardChromium::ClipboardChromium):
        (WebCore::ClipboardChromium::create):
        (WebCore::ClipboardChromium::files):
        * platform/chromium/ClipboardChromium.h:
        * platform/chromium/DragDataChromium.cpp:
        * platform/efl/ClipboardEfl.cpp:
        (WebCore::Editor::newGeneralClipboard):
        (WebCore::Clipboard::create):
        * platform/efl/DragDataEfl.cpp:
        * platform/gtk/ClipboardGtk.cpp:
        (WebCore::Editor::newGeneralClipboard):
        (WebCore::Clipboard::create):
        (WebCore::ClipboardGtk::ClipboardGtk):
        (WebCore::ClipboardGtk::files):
        * platform/gtk/ClipboardGtk.h:
        (WebCore::ClipboardGtk::create):
        * platform/gtk/DragDataGtk.cpp:
        * platform/haiku/ClipboardHaiku.cpp:
        (WebCore::Clipboard::create):
        * platform/haiku/DragDataHaiku.cpp:
        * platform/mac/ClipboardMac.mm:
        (WebCore::Clipboard::create):
        (WebCore::ClipboardMac::files):
        * platform/mac/DragDataMac.mm:
        * platform/qt/ClipboardQt.cpp:
        (WebCore::Clipboard::create):
        * platform/qt/DragDataQt.cpp:
        * platform/win/ClipboardWin.cpp:
        (WebCore::Clipboard::create):
        (WebCore::ClipboardWin::ClipboardWin):
        (WebCore::ClipboardWin::files):
        * platform/win/ClipboardWin.h:
        (WebCore::ClipboardWin::create):
        * platform/win/DragDataWin.cpp:
        * platform/win/EditorWin.cpp:
        (WebCore::Editor::newGeneralClipboard):
        * platform/wince/DragDataWince.cpp:
        * platform/wince/EditorWince.cpp:
        (WebCore::Editor::newGeneralClipboard):
        * platform/wx/ClipboardWx.cpp:
        (WebCore::Clipboard::create):
        * platform/wx/DragDataWx.cpp:

2010-07-27  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by David Levin.

        Move all WebSQLDatabases-specific code behind #if ENABLE(DATABASE).
        https://bugs.webkit.org/show_bug.cgi?id=43035

        Make Chromium compile with ENABLE_DATABASE=0. The #ifdefs in
        DatabaseAuthorizer and ChromiumBridge are removed, because they're
        used by non-HTML5 DBs too (the classes in WebCore/platform/sql/),
        which are used by other features too. So they need to be compiled
        in even if HTML5 DBs are disabled.

        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        * page/DOMWindow.idl:
        * platform/chromium/ChromiumBridge.h:
        * storage/DatabaseAuthorizer.cpp:
        * storage/chromium/DatabaseObserver.h:
        * storage/chromium/DatabaseTrackerChromium.cpp:
        * storage/chromium/QuotaTracker.cpp:
        * storage/chromium/QuotaTracker.h:
        * storage/chromium/SQLTransactionClientChromium.cpp:

2010-07-27  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by David Kilzer.

        AX: Misspellings not shown in AXAttributedStringForTextMarkerRange when selection is on word
        https://bugs.webkit.org/show_bug.cgi?id=41817

        Change how misspelled words are identified for accessibility. No longer rely on the 
        cached markers in Document. Calculate on the fly, which is more accurate in a variety of 
        circumstances (like when selection has not moved across words, of if the cursor is in the middle
        of a misspelled word). 

        Test: platform/mac/accessibility/attributed-string-includes-misspelled-with-selection.html

        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (AXAttributeStringSetSpelling):
        (AXAttributedStringAppendText):
        (-[AccessibilityObjectWrapper doAXAttributedStringForTextMarkerRange:]):

2010-07-27  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Bug 42621 - Add a bump allocator for the YARR interpreter

        The regex engine requires lifo allocation, however currently uses the general purpose
        malloc/free memory allocation.  A simple bump pointer allocator should provide a lower
        overhead allocation solution.

        * ForwardingHeaders/wtf/BumpPointerAllocator.h: Added.

2010-07-27  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Joseph Pecoraro.

        Web Inspector: render network timing as gant chart in popover.

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

        * inspector/InspectorResource.cpp:
        (WebCore::InspectorResource::buildObjectForTiming):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype._showPopover):
        * inspector/front-end/inspector.css:
        (.resource-timing-row):
        (.resource-timing-bar):
        (.resource-timing-bar-title):
        * inspector/front-end/utilities.js:

2010-07-27  Victor Wang  <victorw@chromium.org>

        Unreviewed, rolling out r64104.
        http://trac.webkit.org/changeset/64104
        https://bugs.webkit.org/show_bug.cgi?id=40768

        The patch causes chromium webkit socket laytest crashes on
        windows randomly

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::addResource):
        (WebCore::InspectorController::removeResource):
        * inspector/InspectorController.h:
        * inspector/InspectorResource.cpp:
        (WebCore::InspectorResource::InspectorResource):
        (WebCore::InspectorResource::updateScriptObject):
        (WebCore::InspectorResource::cachedResource):
        (WebCore::InspectorResource::type):
        (WebCore::InspectorResource::resourceData):
        * inspector/InspectorResource.h:
        (WebCore::InspectorResource::):
        (WebCore::InspectorResource::create):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.Type.toString):
        (WebInspector.Resource.prototype.set type):
        (WebInspector.Resource.prototype._mimeTypeIsConsistentWithType):
        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceView.prototype._refreshRequestHeaders):
        (WebInspector.ResourceView.prototype._refreshResponseHeaders):
        (WebInspector.ResourceView.prototype._refreshHeaders):
        * inspector/front-end/inspector.css:
        (.resources-category-scripts, .resources-category-xhr, .resources-category-fonts, .resources-category-other):
        * inspector/front-end/inspector.js:
        (WebInspector.loaded):
        (WebInspector.updateResource):
        * websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::WebSocketChannel):
        (WebCore::WebSocketChannel::disconnect):
        (WebCore::WebSocketChannel::didOpen):
        (WebCore::WebSocketChannel::didClose):
        (WebCore::WebSocketChannel::processBuffer):
        * websockets/WebSocketChannel.h:

2010-07-27  Andrei Popescu  <andreip@google.com>

        Reviewed by Jeremy Orlow.

        [IndexedDB] Key range methods belong to the IDBKeyRange interface
        https://bugs.webkit.org/show_bug.cgi?id=43052

        Move the key range methods from the IndexedDatabaseRequest interface
        to the IDBKeyRange interface. Also add a global IDBKeyRange object
        that can be used to access the IDBKeyRange constants and factory methods. 

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::clear):
        (WebCore::DOMWindow::iDBKeyRange):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:
        * storage/IDBKeyRange.cpp:
        (WebCore::IDBKeyRange::only):
        (WebCore::IDBKeyRange::leftBound):
        (WebCore::IDBKeyRange::rightBound):
        (WebCore::IDBKeyRange::bound):
        * storage/IDBKeyRange.h:
        * storage/IDBKeyRange.idl:
        * storage/IndexedDatabaseRequest.cpp:
        * storage/IndexedDatabaseRequest.h:
        * storage/IndexedDatabaseRequest.idl:

2010-07-27  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        AX: consolidate parentObjectIfExists() and parentObject() code
        https://bugs.webkit.org/show_bug.cgi?id=42981

        Consolidate duplicate code in parentObject and parentObjectIfExists

        No tests. No functionality changed.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::renderParentObject):
        (WebCore::AccessibilityRenderObject::parentObjectIfExists):
        (WebCore::AccessibilityRenderObject::parentObject):
        * accessibility/AccessibilityRenderObject.h:

2010-07-27  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Adam Barth.

        AX: replace m_renderer->document->axObjectCache() with just axObjectCache()
        https://bugs.webkit.org/show_bug.cgi?id=42979

        No new tests. Code cleanup only.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::firstChild):
        (WebCore::AccessibilityRenderObject::lastChild):
        (WebCore::AccessibilityRenderObject::previousSibling):
        (WebCore::AccessibilityRenderObject::nextSibling):
        (WebCore::AccessibilityRenderObject::parentObjectIfExists):
        (WebCore::AccessibilityRenderObject::parentObject):
        (WebCore::AccessibilityRenderObject::menuForMenuButton):
        (WebCore::AccessibilityRenderObject::menuButtonForMenu):
        (WebCore::AccessibilityRenderObject::addRadioButtonGroupMembers):
        (WebCore::AccessibilityRenderObject::axObjectCache):
        (WebCore::AccessibilityRenderObject::contentChanged):
        (WebCore::AccessibilityRenderObject::addChildren):

2010-07-27  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: do not activate all breakpoints on page reload
        https://bugs.webkit.org/show_bug.cgi?id=41461

        Test: inspector/debugger-breakpoints-not-activated-on-reload.html

        * inspector/front-end/ScriptView.js:
        (WebInspector.ScriptView.prototype._addBreakpoint):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype._breakpointAdded):
        (WebInspector.ScriptsPanel.prototype.toggleBreakpointsClicked):
        * inspector/front-end/SourceView.js:
        (WebInspector.SourceView.prototype._addBreakpoint):

2010-07-27  Pranav Kedia  <pranavk@chromium.org>

        Reviewed by Adam Barth.

        Chrome browser Bug: Pause button stays when <audio> hits end
        https://bugs.webkit.org/show_bug.cgi?id=42677

        The change is just in chromium media. Tested using media part of
        WebKit layout tests. The following test that was failing is passing.
        media/video-duration-known-after-eos.html -> unexpected pass

        * rendering/RenderMediaControlsChromium.cpp:
        (WebCore::paintMediaPlayButton):
        Using mediaElement->canPlay() instead of mediaElement->paused() to
        paint the play/pause button.

2010-07-27  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        Client-based Geolocation does not pass enableHighAccuracy option to controller and client
        https://bugs.webkit.org/show_bug.cgi?id=40374

        This change passes the enableHighAccuracy request option to the GeolocationController.
        The GeolocationController tracks whether this should be used by the client.

        No new tests possible as the mock provider doesn't support this feature.

        * page/Geolocation.cpp:
        (WebCore::Geolocation::setIsAllowed):
        (WebCore::Geolocation::startUpdating):
        * page/GeolocationController.cpp:
        (WebCore::GeolocationController::addObserver):
        (WebCore::GeolocationController::removeObserver):
        * page/GeolocationController.h:
        * page/GeolocationControllerClient.h:

2010-07-27  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        WebInspector: Current implementation of message based inspector
        transport generated by CodeGeneratorInspector should be upstreamed
        from WebKit/chromium to WebCore.
        https://bugs.webkit.org/show_bug.cgi?id=42983

        * Android.derived.v8bindings.mk:
        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/ScriptObject.cpp:
        * bindings/js/ScriptObject.h:
        * bindings/v8/ScriptObject.cpp:
        * bindings/v8/ScriptObject.h:
        * inspector/CodeGeneratorInspector.pm:
        * inspector/InspectorBackend.idl: Removed.
        * inspector/InspectorFrontendClient.h:
        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::windowObjectCleared):
        (WebCore::InspectorFrontendClientLocal::sendMessageToBackend):
        * inspector/InspectorFrontendClientLocal.h:
        * inspector/InspectorFrontendHost.cpp:
        (WebCore::InspectorFrontendHost::sendMessageToBackend):
        * inspector/InspectorFrontendHost.h:
        * inspector/InspectorFrontendHost.idl:
        * inspector/front-end/InspectorBackendStub.js:
        (.WebInspector.InspectorBackendStub):
        (.WebInspector.InspectorBackendStub.prototype._registerDelegate):
        (.WebInspector.InspectorBackendStub.prototype.sendMessageToBackend):

2010-07-27  Satish Sampath  <satish@chromium.org>

        Reviewed by Kent Tamura.

        Simplify speech input plumbing in webcore and webkit
        https://bugs.webkit.org/show_bug.cgi?id=43008

        No new tests as functionality is not changed.

        * GNUmakefile.am: Removed a header file.
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * page/Page.cpp:
        (WebCore::Page::speechInput): Creates and returns SpeechInput when needed.
        * page/Page.h:
        * page/SpeechInput.cpp: Added methods to proxy and callbacks between input elements and WebKit
        (WebCore::SpeechInput::SpeechInput):
        (WebCore::SpeechInput::didCompleteRecording):
        (WebCore::SpeechInput::didCompleteRecognition):
        (WebCore::SpeechInput::setRecognitionResult):
        (WebCore::SpeechInput::startRecognition):
        (WebCore::SpeechInput::stopRecording):
        * page/SpeechInput.h:
        * page/SpeechInputClient.h:
        * page/SpeechInputClientListener.h: Removed.
        * page/SpeechInputListener.h:
        * rendering/TextControlInnerElements.cpp: Added one more callback.
        (WebCore::InputFieldSpeechButtonElement::defaultEventHandler):
        (WebCore::InputFieldSpeechButtonElement::speechInput):
        (WebCore::InputFieldSpeechButtonElement::didCompleteRecognition):
        * rendering/TextControlInnerElements.h:

2010-07-27  Kent Tamura  <tkent@chromium.org>

        Reviewed by Ojan Vafai.

        Add a runtime setting for interactive form validation.
        https://bugs.webkit.org/show_bug.cgi?id=40520

        The interactive validation feature was disabled for non-strict
        modes by r61059 to avoid a compatibility issue. This removes the
        mode checking and introduce a runtime setting to enable/disable
        the feature instead.
        The default value is 'disable' and we'll remove the setting when
        the compatibility issue is resolved and interactive validation
        implementation is completed.

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::validateInteractively):
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h:
        (WebCore::Settings::setInteractiveFormValidationEnabled):
        (WebCore::Settings::interactiveFormValidationEnabled):

2010-07-26  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Bug 43009 - Abstract out page allocation from executable allocators

        * ForwardingHeaders/wtf/PageAllocation.h: Added.

2010-07-26  Yuta Kitamura  <yutak@chromium.org>

        Reviewed by Pavel Feldman.

        Add WebSocket resource type to Web Inspector.

        When a new WebSocket connection is established, a line for that connection
        will appear in Web Inspector's Resources tab. If the resource name is
        clicked, the details of handshake request and response will be shown.

        Web Inspector: WebSocket in Resources tab
        https://bugs.webkit.org/show_bug.cgi?id=40768

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::addResource): WebSocket resource does not
        have an associated loader, thus frame might be null. Need to check it.
        (WebCore::InspectorController::removeResource): Ditto.
        (WebCore::InspectorController::didCreateWebSocket):
        (WebCore::InspectorController::willSendWebSocketHandshakeRequest):
        (WebCore::InspectorController::didReceiveWebSocketHandshakeResponse):
        (WebCore::InspectorController::didCloseWebSocket):
        * inspector/InspectorController.h:
        * inspector/InspectorResource.cpp: Add null checks of m_loader and m_frame,
        because WebSocket does not have a loader and we need to allow null for
        these variables.
        (WebCore::createReadableStringFromBinary):
        (WebCore::InspectorResource::InspectorResource):
        (WebCore::InspectorResource::create): Factory function of
        regular (non-WebSocket) resources.
        (WebCore::InspectorResource::createWebSocket): Factory function of
        WebSocket resources.
        (WebCore::InspectorResource::updateWebSocketRequest):
        (WebCore::InspectorResource::updateWebSocketResponse):
        (WebCore::InspectorResource::updateScriptObject): m_frame->document() becomes
        available when Frame::setDocument() is called. We cannot obtain documentURL
        during the constructor or updateRequest() function, because m_frame->document()
        is not available yet at that point and documentURL will contain a wrong URL.
        As far as I know, updateScriptObject() is the only place where we can safely
        obtain documentURL.
        (WebCore::InspectorResource::cachedResource):
        (WebCore::InspectorResource::type):
        (WebCore::InspectorResource::resourceData):
        * inspector/InspectorResource.h:
        (WebCore::InspectorResource::):
        (WebCore::InspectorResource::markWebSocket):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.Type.toString):
        (WebInspector.Resource.prototype.set type):
        (WebInspector.Resource.prototype._mimeTypeIsConsistentWithType):
        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceView.prototype._refreshRequestHeaders):
        (WebInspector.ResourceView.prototype._refreshResponseHeaders):
        (WebInspector.ResourceView.prototype._refreshHeaders):
        * inspector/front-end/inspector.css:
        (.resources-category-websockets, .resources-category-other):
        (.resources-category-websockets .resources-graph-bar):
        (.resources-category-websockets.resource-cached .resources-graph-bar):
        * inspector/front-end/inspector.js:
        (WebInspector.loaded):
        (WebInspector.updateResource):
        * websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::WebSocketChannel):
        (WebCore::WebSocketChannel::disconnect):
        (WebCore::WebSocketChannel::didOpen):
        (WebCore::WebSocketChannel::didClose):
        (WebCore::WebSocketChannel::processBuffer):
        (WebCore::WebSocketChannel::identifier):
        * websockets/WebSocketChannel.h:

2010-07-26  Cosmin Truta  <ctruta@chromium.org>

        Reviewed by Eric Seidel.

        Some SVGs with empty <g> elements crash Chromium on Linux
        https://bugs.webkit.org/show_bug.cgi?id=41175

        Redo the old fix using a different approach, to avoid regressing
        svg/batik/filters/filterRegions.svg with Chromium on Linux.
        Specifically, handle empty SkBitmap objects by exiting early upon
        encountering unconfigured (i.e. empty) bitmaps.

        No new tests. This bug's old test (svg/filters/filter-empty-g.svg)
        and the above-mentioned regressed test are expected to pass.

        * WebCore/platform/graphics/skia/ImageBufferSkia.cpp:
        (ImageBuffer::ImageBuffer): Undo the old fix.
        (getImageData): The new fix.

2010-07-26  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Google image search results broken on pages with Flash
        https://bugs.webkit.org/show_bug.cgi?id=43014

        The test for overflow added in r63452 is wrong in that it ignores the effects
        of positioning on overflow.
        
        The correct approach is to start by using RenderView's layoutOverflowRect as the largest bounds,
        then getting the oveflow rect via backgroundClipRect() relative to the root layer.
        
        Test: compositing/geometry/limit-layer-bounds-overflow-root.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::layerOrAncestorIsTransformed):
        (WebCore::RenderLayerBacking::updateCompositedBounds):

2010-07-26  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Plug-in views should be able to return JSObjects directly
        https://bugs.webkit.org/show_bug.cgi?id=43019

        * bindings/js/JSHTMLAppletElementCustom.cpp:
        (WebCore::JSHTMLAppletElement::putDelegate):
        (WebCore::JSHTMLAppletElement::getCallData):
        * bindings/js/JSHTMLEmbedElementCustom.cpp:
        (WebCore::JSHTMLEmbedElement::putDelegate):
        (WebCore::JSHTMLEmbedElement::getCallData):
        * bindings/js/JSHTMLObjectElementCustom.cpp:
        (WebCore::JSHTMLObjectElement::putDelegate):
        (WebCore::JSHTMLObjectElement::getCallData):
        runtimeObjectCustomPut and runtimeObjectGetCallData now take a JSHTMLElement instead of a HTMLElement.

        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::pluginScriptObject):
        First, ask the PluginViewBase for a JSObject and fall back to getting the JSObject from the instance.

        (WebCore::runtimeObjectPropertyGetter):
        (WebCore::runtimeObjectCustomGetOwnPropertySlot):
        (WebCore::runtimeObjectCustomGetOwnPropertyDescriptor):
        Call pluginScriptObject.
        
        (WebCore::runtimeObjectCustomPut):
        Change to take a JSHTMLElement. Call pluginScriptObject.
        
        (WebCore::runtimeObjectGetCallData):
        Change to take a JSHTMLElement.

        * bridge/jsc/BridgeJSC.cpp:
        * bridge/jsc/BridgeJSC.h:
        (JSC::Bindings::Instance::createRuntimeObject):
        Change this to return a JSObject.
        
        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::getInstance):
        Call pluginWidget.

        (WebCore::HTMLPlugInElement::pluginWidget):
        Return the plug-in widget for this element.

        * html/HTMLPlugInElement.h:
        * plugins/PluginViewBase.h:
        (WebCore::PluginViewBase::scriptObject):
        Add default implementation of scriptObject.

2010-07-26  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        AX: Safari does not support ARIA mixed checkboxes
        https://bugs.webkit.org/show_bug.cgi?id=43016

        Test: platform/mac/accessibility/mixed-checkbox.html

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::checkboxOrRadioValue):
        * accessibility/AccessibilityObject.h:
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isNativeCheckboxOrRadio):
        (WebCore::AccessibilityRenderObject::checkboxOrRadioValue):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):

2010-07-26  Shimeng (Simon) Wang  <swang@google.com>

        Reviewed by Darin Adler.

        Add auto hyphenation support for Android.
        https://bugs.webkit.org/show_bug.cgi?id=42800

        * platform/text/android/HyphenationAndroid.cpp: Added.
        (WebCore::loadHyphenationDictionary):
        (WebCore::lastHyphenLocation):

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

        Reviewed by Anders Carlsson.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=43013
        Part of <rdar://problem/8152434>
        Add support for scrolling using the keyboard in WebKit2

        Add a new export and make WindowsKeyboardCodes private.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:

2010-07-26  Darin Adler  <darin@apple.com>

        Reviewed by Eric Carlson.

        Don't handle empty URL attributes specially in reflection, even in cases such as <img src="">
        https://bugs.webkit.org/show_bug.cgi?id=42087

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::insertedIntoDocument): Check if the src attribute is empty
        by calling getAttribute instead of calling the src function. This keeps the behavior
        correct with the reflection change, and has a side benefit of being more efficient as
        well since there is no reason to resolve the URL.
        (WebCore::HTMLMediaElement::loadResource): Call getNonEmptyURLAttribute directly here
        instead of using the poster function.
        (WebCore::HTMLMediaElement::getPluginProxyParams): Ditto.

        * html/HTMLMediaElement.h: Removed the poster virtual function. The code that gets the
        poster attribute is already video-specific and uses generic attribute fetching code, so
        we no longer need a virtual function. Removed the src function. Since this would give
        a different result from the JavaScript reflected src attribute, it's safer not to have
        it, and it was easy to convert all the callers.

        * html/HTMLMediaElement.idl: Removed the NonEmpty extended attribute from the src
        attribute.

        * html/HTMLSourceElement.cpp: Removed the src function for the same reason as above.
        * html/HTMLSourceElement.h: Ditto.

        * html/HTMLSourceElement.idl: Removed the NonEmpty extended attribute from the src
        attribute.

        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::parseMappedAttribute): Removed code to update m_posterURL,
        which is no longer needed. Changed call site that used the poster() function to instead
        use getNonEmptyURLAttribute.
        (WebCore::HTMLVideoElement::updatePosterImage): Check if the poster attribute is empty
        by calling getAttribute instead of calling the poster function. This keeps the behavior
        correct with the reflection change, and has a side benefit of being more efficient as
        well since there is no reason to resolve the URL.

        * html/HTMLVideoElement.h: Removed the poster function for the same reason we removed
        the src function above. Also removed now-unneeded m_posterURL data member.

        * html/HTMLVideoElement.idl: Removed the NonEmpty extended attribute from the poster
        attribute.

2010-07-26  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        AX: remove intValue() hasIntValue() from AccessibilityObject
        https://bugs.webkit.org/show_bug.cgi?id=43006

        These methods are very Mac centric. The mac centric code should be moved into the Mac wrapper.

        No new tests, existing tests cover changes to logic.

        * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::checkboxOrRadioValue):
        * accessibility/AccessibilityObject.h:
        (WebCore::):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::selectedRadioButton):
        (WebCore::AccessibilityRenderObject::selectedTabItem):
        (WebCore::AccessibilityRenderObject::checkboxOrRadioValue):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):

2010-07-26  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        Applying inline style to a text node whose parent is an inline editable root causes crash
        https://bugs.webkit.org/show_bug.cgi?id=39989

        The crash was caused by splitTextElementAtStart and splitTextElementAtEnd assuming that the parent
        and the grandparent of the specified text node is editable.

        Modified splitTextElementAtStart and splitTextElementAtEnd so that they call splitTextAtStart
        and splitTextAtEnd respectively when the grandparent is not editable.

        Also modified SplitTextNodeContainingElement to exit early if the grandparent of m_text is not editable.

        Test: editing/style/style-text-node-without-editable-parent.html

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::splitTextElementAtStart):
        (WebCore::ApplyStyleCommand::splitTextElementAtEnd):
        * editing/SplitTextNodeContainingElementCommand.cpp:
        (WebCore::SplitTextNodeContainingElementCommand::doApply):

2010-07-26  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Anders Carlsson.

        Gmail compose is upside-down after r64054
        https://bugs.webkit.org/show_bug.cgi?id=43000
        
        We need to call setGeometryOrientation() whenever the iframe compositing layer attachment changes,
        not just when requiresScrollLayer() returns false. This ensures that the orientation is updated
        correctly.

        Test: compositing/iframes/iframe-content-flipping.html

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::ensureRootPlatformLayer):

2010-07-26  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Darin Fisher.

        Check history state against origin before setting
        https://bugs.webkit.org/show_bug.cgi?id=42858

        Tests: fast/loader/stateobjects/replacestate-base-illegal.html
               fast/loader/stateobjects/replacestate-base-legal.html

        * page/History.cpp:
        (WebCore::History::urlForState):
        (WebCore::History::stateObjectAdded):

2010-07-26  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Get rid of libgdom
        https://bugs.webkit.org/show_bug.cgi?id=42378

        Remove all build steps for building GObject DOM bindings.

        * GNUmakefile.am: Remove GObject DOM bindings build.

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

        Reviewed by Dan Bernstein.

        <http://webkit.org/b/42990> REGRESSION (r63854): Safari RSS layout is broken due to changes in vendor prefix handling

        In r63854 support for properties with the -khtml vendor prefix was removed. This breaks the layout of
        Safari's RSS interface, several Dashboard widgets that are included with Mac OS X, and at least one
        popular third-party Mac OS X application. This change will need to be revisited in a manner that has
        a clearer backwards-compatibility strategy. <http://webkit.org/b/42093> will be reopened to track that.

        * css/CSSParser.cpp:
        (WebCore::cssPropertyID): Revert the WebCore change from r63854.

2010-07-26  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        Add ability for WK2 to register a scheme to always be displayed as an empty document
        https://bugs.webkit.org/show_bug.cgi?id=42995

        No new tests. (Currently not possible to test in WebKit1 DRT, can be testing in future WK2 tester)

        * WebCore.exp.in:
        
        * loader/MainResourceLoader.cpp:
        (WebCore::shouldLoadAsEmptyDocument):
        
        * platform/SchemeRegistry.cpp:
        (WebCore::emptyDocumentSchemes):
        (WebCore::SchemeRegistry::registerURLSchemeAsEmptyDocument):
        (WebCore::SchemeRegistry::shouldLoadURLSchemeAsEmptyDocument):
        * platform/SchemeRegistry.h:

2010-07-26  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Kent Tamura.

        [WINCE] Port ClipboardUtilities to WinCE
        https://bugs.webkit.org/show_bug.cgi?id=42929

        Make ClipboardUtilitiesWin more portable and remove the global namespace prefix
        from GlobalLock/GlobalUnlock, since they are only macros on WinCE.

        * platform/win/ClipboardUtilitiesWin.cpp:
        (WebCore::urlFromPath):
        (WebCore::getWebLocData):
        (WebCore::createGlobalData):
        (WebCore::getURL):
        (WebCore::getPlainText):
        (WebCore::fragmentFromHTML):

2010-07-26  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Adam Roben.

        [WINCE] Buildfix for BitmapImage.h
        https://bugs.webkit.org/show_bug.cgi?id=42931

        Use AffineTransform insted of TransformationMatrix.

        * platform/graphics/BitmapImage.h:

2010-07-26  Dirk Schulze  <krit@webkit.org>

        Unreviewed sort of Xcode project file.

        * WebCore.xcodeproj/project.pbxproj:

2010-07-26  David Kilzer  <ddkilzer@apple.com>

        <http://webkit.org/b/42982> Streamline Inspector Source build phase script should use CONFIGURATION not BUILD_STYLE
        <rdar://problem/6341764>

        Reviewed by Mark Rowe.

        * WebCore.xcodeproj/project.pbxproj: Switched Streamline
        Inspector Source build phase script to use CONFIGURATION instead
        of BUILD_STYLE.

2010-07-23  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Darin Adler.

        crash in insertParagraph in a contentEditable list
        https://bugs.webkit.org/show_bug.cgi?id=42919

        Don't try to break out of a list item if the list it's in
        is the rootEditableElement.

        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::breakOutOfEmptyListItem):

2010-07-26  Marcus Bulach  <bulach@chromium.org>

        Reviewed by Jeremy Orlow.

        Moves IDBKeyRange to use IDBKey rather than SerializedScriptValue / IDBAny.
        https://bugs.webkit.org/show_bug.cgi?id=42583

        Tests: existing storage/indexeddb/idb-keyrange.html must pass.

        * storage/IDBKeyRange.cpp:
        (WebCore::IDBKeyRange::IDBKeyRange):
        * storage/IDBKeyRange.h:
        (WebCore::IDBKeyRange::create):
        (WebCore::IDBKeyRange::left):
        (WebCore::IDBKeyRange::right):
        * storage/IDBKeyRange.idl:
        * storage/IndexedDatabaseRequest.cpp:
        (WebCore::IndexedDatabaseRequest::makeSingleKeyRange):
        (WebCore::IndexedDatabaseRequest::makeLeftBoundKeyRange):
        (WebCore::IndexedDatabaseRequest::makeRightBoundKeyRange):
        (WebCore::IndexedDatabaseRequest::makeBoundKeyRange):
        * storage/IndexedDatabaseRequest.h:
        * storage/IndexedDatabaseRequest.idl:

2010-07-26  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Anders Carlsson.

        Composited layers don't scroll in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=42771

        Rename two methods on RenderLayerCompositor to make their use more clear, and call them
        when the FrameView gets resized and scrolled.

        * page/FrameView.h:
        * page/FrameView.cpp:
        (WebCore::FrameView::setFrameRect): override so we know when the size of the FrameView changes, so that the
        RenderLayerCompositor can update its clipping layer.
        (WebCore::FrameView::scrollPositionChanged): Call compositor()->frameViewDidScroll().

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateAfterWidgetResize): updateContentLayerOffset() was renamed.

        * rendering/RenderLayerCompositor.h:
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::frameViewDidChangeSize): Renamed from updateContentLayerOffset().
        (WebCore::RenderLayerCompositor::frameViewDidScroll): Renamed from updateContentLayerScrollPosition().
        (WebCore::RenderLayerCompositor::shouldPropagateCompositingToEnclosingIFrame): Propagate compositing on Mac
        for any FrameView that doesn't have a native widget, which is the case with WebKit2.
        (WebCore::RenderLayerCompositor::requiresScrollLayer): New method to tell us whether we need to handle
        scrolling (and clipping) ourselves.
        (WebCore::RenderLayerCompositor::ensureRootPlatformLayer): Do geometry flipping on the root platform
        layer only if we're not doing our own scrolling, and use the new requiresScrollLayer() method.
        (WebCore::RenderLayerCompositor::attachRootPlatformLayer): Send out the rootPlatformLayer(),
        so that it returns the clipping layer if we have one.

2010-07-26  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Darin Fisher.

        Move DocumentLoadTiming struct to a new file
        https://bugs.webkit.org/show_bug.cgi?id=42917

        Also makes DocumentLoadTiming Noncopyable.

        No new tests because no new functionality.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/DocumentLoadTiming.h: Added.
        (WebCore::DocumentLoadTiming::DocumentLoadTiming):
        * loader/DocumentLoader.h:
        * loader/FrameLoader.cpp:
        * loader/FrameLoaderTypes.h:
        * loader/MainResourceLoader.cpp:
        * page/Timing.cpp:

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

        Fix an #if in WebCore.exp.in to correctly detect whether SVG filters are enabled.

        * WebCore.exp.in:

2010-07-26  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        DeviceOrientation event listeners should never be called synchronously from addEventListener()
        https://bugs.webkit.org/show_bug.cgi?id=42304

        No new tests as there are currently no implementations to test. Tests will be
        added once LayoutTestController methods for providing a mock implementation are
        in place, see Bug 39589.

        * dom/DeviceOrientationController.cpp:
        (WebCore::DeviceOrientationController::DeviceOrientationController):
        (WebCore::DeviceOrientationController::timerFired):
        (WebCore::DeviceOrientationController::addListener):
        (WebCore::DeviceOrientationController::removeListener):
        (WebCore::DeviceOrientationController::removeAllListeners):
        * dom/DeviceOrientationController.h:

2010-07-26  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Canvas: Optimize GraphicsContext::addPath()

        Avoid "deep concatenating" the canvas path onto the GC path
        if the GC path has no elements.

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

2010-07-23  Stephen White  <senorblanco@chromium.org>

        Reviewed by Darin Fisher.

        Implement OpenGLES2 helper classes.
        https://bugs.webkit.org/show_bug.cgi?id=42905

        GLES2Canvas and GLES2Texture are some simple OpenGLES2 helper classes
        for managing state, samplers and textures.

        When this is hooked up, it will be covered by many layout tests.

        * WebCore.gypi:
        Add new files to chromium build (contents are protected by #if's for now).
        * platform/graphics/chromium/GLES2Canvas.cpp: Added.
        (WebCore::affineTo3x3):
        (WebCore::GLES2Canvas::State::State):
        (WebCore::GLES2Canvas::GLES2Canvas):
        (WebCore::GLES2Canvas::~GLES2Canvas):
        (WebCore::GLES2Canvas::clearRect):
        (WebCore::GLES2Canvas::fillRect):
        (WebCore::GLES2Canvas::setFillColor):
        (WebCore::GLES2Canvas::setAlpha):
        (WebCore::GLES2Canvas::translate):
        (WebCore::GLES2Canvas::rotate):
        (WebCore::GLES2Canvas::scale):
        (WebCore::GLES2Canvas::concatCTM):
        (WebCore::GLES2Canvas::save):
        (WebCore::GLES2Canvas::restore):
        (WebCore::GLES2Canvas::drawTexturedRect):
        (WebCore::GLES2Canvas::setCompositeOperation):
        (WebCore::GLES2Canvas::applyCompositeOperator):
        (WebCore::GLES2Canvas::getQuadVertices):
        (WebCore::GLES2Canvas::getQuadIndices):
        (WebCore::loadShader):
        (WebCore::GLES2Canvas::getSimpleProgram):
        (WebCore::GLES2Canvas::getTexProgram):
        (WebCore::GLES2Canvas::createTexture):
        (WebCore::GLES2Canvas::getTexture):
        (WebCore::GLES2Canvas::checkGLError):
        * platform/graphics/chromium/GLES2Canvas.h: Added.
        (WebCore::GLES2Canvas::gles2Context):
        * platform/graphics/chromium/GLES2Texture.cpp: Added.
        (WebCore::GLES2Texture::GLES2Texture):
        (WebCore::GLES2Texture::~GLES2Texture):
        (WebCore::GLES2Texture::create):
        (WebCore::convertFormat):
        (WebCore::GLES2Texture::load):
        (WebCore::GLES2Texture::bind):
        * platform/graphics/chromium/GLES2Texture.h: Added.
        (WebCore::GLES2Texture::):
        (WebCore::GLES2Texture::format):
        (WebCore::GLES2Texture::width):
        (WebCore::GLES2Texture::height):


2010-07-26  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Steve Block.

        Fix IndexedDB release build on mac
        https://bugs.webkit.org/show_bug.cgi?id=42377

        * storage/IDBDatabaseImpl.cpp:
        (WebCore::IDBDatabaseImpl::objectStore):

2010-07-26  Satish Sampath  <satish@chromium.org>

        Reviewed by Steve Block.

        Add WebKit plumbing to connect speech requests and callbacks between WebCore and the embedder.
        https://bugs.webkit.org/show_bug.cgi?id=42367

        No new tests, the relevant LayoutTestController bindings will be added in the next patch.

        * page/SpeechInput.cpp: renamed a method.
        * page/SpeechInput.h: renamed a method.
        * page/SpeechInputClient.h: added an extra method to optionally let users stop recording once they have spoken.
        * page/SpeechInputClientListener.h: renamed a method.
        * page/SpeechInputListener.h: renamed a method.

2010-07-26  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] getImageData(): Single-pass RGB->BGR and un-premultiplication
        https://bugs.webkit.org/show_bug.cgi?id=42945

        Combine the two operations into a single loop over the pixel data.
        Yields a considerable FPS gain on http://www.semantix.gr/statue.html

        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::getImageData):

2010-07-26  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Shinichiro Hamaji.

        Web Inspector: make sure proxy objects are JSON-stringifiable.

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

        * inspector/front-end/InjectedScript.js:
        (injectedScriptConstructor):

2010-07-26  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Joseph Pecoraro.

        Inspector should remember resources sorting set by the user
        https://bugs.webkit.org/show_bug.cgi?id=19208

        Sorting options both for time and size graphs are memorized in a single property,
        which makes them possible to retrieve in a single message (e.g. useful for remote debugging).

        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.populateSidebar):
        (WebInspector.ResourcesPanel.prototype._settingsLoaded):
        (WebInspector.ResourcesPanel.prototype._loadSortOptions):
        (WebInspector.ResourcesPanel.prototype._loadSortOptionForGraph):
        (WebInspector.ResourcesPanel.prototype._graphSelected):
        (WebInspector.ResourcesPanel.prototype._changeSortingFunction):
        (WebInspector.ResourcesPanel.prototype._selectedOptionNameForGraph):
        (WebInspector.ResourcesPanel.prototype._doChangeSortingFunction):
        * inspector/front-end/Settings.js:
        (WebInspector.populateApplicationSettings):

2010-07-25  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Darin Adler.

        Redo fails after text node is split by SplitTextNodeCommand
        https://bugs.webkit.org/show_bug.cgi?id=42941

        The bug was caused by SplitTextNodeCommand not implementing doReapply.
        Implemented doReapply and added insertText1AndTrimText2 to share the code between doApply and doReapply.

        Test: editing/undo/redo-split-text-node.html
              editing/undo/redo-split-text-node-with-removal.html

        * editing/SplitTextNodeCommand.cpp:
        (WebCore::SplitTextNodeCommand::doApply): Calls executeApply.
        (WebCore::SplitTextNodeCommand::doUnapply): Don't delete m_text1, which is later used in doReapply.
        (WebCore::SplitTextNodeCommand::doReapply): Added.
        (WebCore::SplitTextNodeCommand::insertText1AndTrimText2): Added.
        * editing/SplitTextNodeCommand.h:

2010-07-23  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Eric Carlson.

        [GTK] media/media-can-play-mpeg-audio.html fails
        https://bugs.webkit.org/show_bug.cgi?id=42895

        Fixed advertizing of mp3, mpeg and mp4 mime-types in the player.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mimeTypeCache):

2010-07-23  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Eric Carlson.

        LayoutTests/media/media-document-audio-size.html failure
        https://bugs.webkit.org/show_bug.cgi?id=38376

        Advertize audio/x-wav along with audio/wav when appropriate,
        otherwise WebKit attempts to use a plugin to play the media.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::mimeTypeCache):

2010-07-25  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Kent Tamura.

        splitTextAt*IfNeed and splitTextElementAt*IfNeed need to be cleaned up
        https://bugs.webkit.org/show_bug.cgi?id=42937

        Isolated the code to decide whether or not text node should be split into isValidCaretPositionInTextNode.
        Moved the condition check out of *IfNeeded methods to applyRelativeFontStyleChange and applyInlineStyle.

        No new tests added since this is a clean up.

        * editing/ApplyStyleCommand.cpp:
        (WebCore::ApplyStyleCommand::applyRelativeFontStyleChange): Uses isValidCaretPositionInTextNode.
        (WebCore::ApplyStyleCommand::applyInlineStyle): Uses isValidCaretPositionInTextNode.
        (WebCore::ApplyStyleCommand::splitTextAtStart): Renamed from splitTextAtStartIfNeeded.
        (WebCore::ApplyStyleCommand::splitTextAtEnd): Renamed from splitTextAtEndIfNeeded.
        (WebCore::ApplyStyleCommand::splitTextElementAtStart): Renamed from splitTextElementAtStartIfNeeded.
        (WebCore::ApplyStyleCommand::splitTextElementAtEnd): Renamed from splitTextElementAtEndIfNeeded.
        (WebCore::ApplyStyleCommand::isValidCaretPositionInTextNode): Returns true if the position lies within a text node.
        * editing/ApplyStyleCommand.h:

2010-07-25  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Kent Tamura.

        [WINCE] Buildfix for ImageBufferWince
        https://bugs.webkit.org/show_bug.cgi?id=42928

        * platform/graphics/wince/ImageBufferWince.cpp:
        (WebCore::):
        (WebCore::BufferedImage::draw): Pass through ColorSpace parameter.
        (WebCore::BufferedImage::drawPattern): Ditto.
        (WebCore::ImageBuffer::platformTransformColorSpace): Added.

2010-07-25  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Kent Tamura.

        [WINCE] Buildfix for PopupMenuWin.cpp
        https://bugs.webkit.org/show_bug.cgi?id=42932

        Add #if !OS(WINCE) around unsupported window messages.

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::show):
        (WebCore::PopupMenu::wndProc):

2010-07-25  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Implement adjustMathMLAttributes
        https://bugs.webkit.org/show_bug.cgi?id=42952

        This is kind of mechanical overkill for adjusting one attribute name,
        but it's nice to use the same machinery as SVG.

        * html/HTMLTreeBuilder.cpp:
        * mathml/mathattrs.in:

2010-07-25  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Functions supporting the legacy tree builder are confusing
        https://bugs.webkit.org/show_bug.cgi?id=42951

        This patch just inlines these functions into their one call site and
        removes the notImplemented() calls.  We thought we were going to grow
        these to support the new tree builder, but we took a different path.
        Previous to this patch, these functions were confusing because they
        looked like part of the new tree builder.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::passTokenToLegacyParser):
        * html/HTMLTreeBuilder.h:

2010-07-25  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Recent HTML5 TreeBuilder Regression?  All canvas tests ASSERT
        https://bugs.webkit.org/show_bug.cgi?id=42948

        Remove ASSERT and replace with correct branch.  I put this ASSERT in
        to make sure we had test coverage for this branch.  I guess we do.  :)

        * html/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::attach):

2010-07-25  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: check of jQuery object type prior to treating it as an array.

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

        * inspector/front-end/InjectedScript.js:
        (injectedScriptConstructor):

2010-07-24  Daniel Bates  <dbates@rim.com>

        Unreviewed, build fix when building with WML support.

        PageCache.cpp compile error when WML is enabled
        https://bugs.webkit.org/show_bug.cgi?id=40765

        Remove extraneous semicolon.

        Note, building with WML support enabled is broken
        even with this fix. See Bug #42943 for more details.

        * history/PageCache.cpp:
        (WebCore::PageCache::canCachePageContainingThisFrame):

2010-07-24  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Atomize strings used by the HTML5 tree builder
        https://bugs.webkit.org/show_bug.cgi?id=42875

        This is about a 1% improvement to the parsing benchmark.

        * html/HTMLTagNames.in:
        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTagForInBody):
        (WebCore::HTMLTreeBuilder::processStartTag):
        (WebCore::HTMLTreeBuilder::processEndTagForInBody):
        (WebCore::HTMLTreeBuilder::processStartTagForInHead):

2010-07-24  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Darin Adler.

        Buildfix for !ENABLE(INSPECTOR) after r63891.
        https://bugs.webkit.org/show_bug.cgi?id=42925

        * bindings/js/ScriptValue.cpp: Added property svn:eol-style.
        * bindings/js/ScriptValue.h: Added property svn:eol-style.
        * inspector/ConsoleMessage.cpp: Added property svn:eol-style.
        * inspector/ConsoleMessage.h: Added property svn:eol-style.

2010-07-24  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Re-order whitespace checks in the tokenizer
        https://bugs.webkit.org/show_bug.cgi?id=42923

        This saves about 0.5% on the parsing benchmark.

        * html/HTMLTokenizer.cpp:

2010-07-24  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] tst_QWebFrame::callQtInvokable() fails
        https://bugs.webkit.org/show_bug.cgi?id=41065

        Converting JS objects to QVariantMaps was broken.
        This is a partial revert of <http://trac.webkit.org/changeset/61478>

        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::convertValueToQVariant): Remove erroneous crash guard
        around JSObject::getPropertyNames()

2010-07-24  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Save a per-character branch in the HTML parser
        https://bugs.webkit.org/show_bug.cgi?id=42921

        The parsing benchmark claims this is a wash, but it makes me feel
        better.

        * html/HTMLToken.h:
        (WebCore::HTMLToken::clear):
        (WebCore::HTMLToken::beginStartTag):
        (WebCore::HTMLToken::beginEndTag):
        (WebCore::HTMLToken::ensureIsCharacterToken):
        (WebCore::HTMLToken::beginComment):
        (WebCore::HTMLToken::beginDOCTYPE):
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::bufferCharacter):

2010-07-23  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Darin Adler.

        Buildfix for !ENABLE(FILTERS) after r63531.
        https://bugs.webkit.org/show_bug.cgi?id=42914

        * rendering/RenderSVGContainer.cpp: Add missing header.

2010-07-23  Kavita Kanetkar  <kkanetkar@chromium.org>

        Reviewed by Joseph Pecoraro.

        Implement remaining Inspector support for chrome's appcache
        https://bugs.webkit.org/show_bug.cgi?id=42426

        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::getApplicationCaches):
        (WebCore::InspectorApplicationCacheAgent::buildObjectForApplicationCache):
        (WebCore::InspectorApplicationCacheAgent::buildArrayForApplicationCacheResources):
        (WebCore::InspectorApplicationCacheAgent::buildObjectForApplicationCacheResource):
        * inspector/InspectorApplicationCacheAgent.h:
        (WebCore::InspectorController::connectFrontend):
        * loader/appcache/ApplicationCacheHost.cpp:
        (WebCore::ApplicationCacheHost::fillResourceList):
        (WebCore::ApplicationCacheHost::applicationCacheInfo):
        * loader/appcache/ApplicationCacheHost.h: Changed creation + update times to double and moved appcache info here from InspectorApplicationCacheAgent.h
        (WebCore::ApplicationCacheHost::CacheInfo::CacheInfo):
        (WebCore::ApplicationCacheHost::ResourceInfo::ResourceInfo):

2010-07-23  Rafael Antognolli  <antognolli@profusion.mobi>

        Reviewed by Antonio Gomes.

        [EFL] Cleanup glib support (make it optional)
        https://bugs.webkit.org/show_bug.cgi?id=42480

        No new tests, no new features added.
        Just add flags and directories for glib if necessary.
        Put some ifdefs on glib calls.

        * CMakeListsEfl.txt:
        * platform/graphics/cairo/FontPlatformDataCairo.cpp:
        (WebCore::FontPlatformData::FontPlatformData):

2010-07-23  James Robinson  <jamesr@chromium.org>

        Reviewed by Dimitri Glazkov.

        CanvasRenderingContext2D has lots of style errors
        https://bugs.webkit.org/show_bug.cgi?id=42918

        CanvasRenderingContext2D.h and .cpp have lots of style errors.  I'm planning to post patches
        to both of these files soon, so to minimize merge conflicts and additional style violations
        it seems best to fix all of these errors in bulk before posting any functional changes.  In
        particular the header file is incorrectly indented so any correctly formatted addition will
        be out of place.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::CanvasRenderingContext2D):
        (WebCore::CanvasRenderingContext2D::setFillStyle):
        (WebCore::CanvasRenderingContext2D::transform):
        (WebCore::CanvasRenderingContext2D::setTransform):
        (WebCore::CanvasRenderingContext2D::arcTo):
        (WebCore::CanvasRenderingContext2D::arc):
        (WebCore::validateRectForCanvas):
        (WebCore::CanvasRenderingContext2D::strokeRect):
        (WebCore::CanvasRenderingContext2D::drawImage):
        (WebCore::CanvasRenderingContext2D::createRadialGradient):
        (WebCore::CanvasRenderingContext2D::createPattern):
        (WebCore::CanvasRenderingContext2D::willDraw):
        (WebCore::CanvasRenderingContext2D::createImageData):
        (WebCore::CanvasRenderingContext2D::putImageData):
        (WebCore::CanvasRenderingContext2D::setFont):
        (WebCore::CanvasRenderingContext2D::drawTextInternal):
        * html/canvas/CanvasRenderingContext2D.h:
        (WebCore::CanvasRenderingContext2D::is2d):
        (WebCore::CanvasRenderingContext2D::getLineCap):
        (WebCore::CanvasRenderingContext2D::getLineJoin):
        (WebCore::CanvasRenderingContext2D::state):
        (WebCore::CanvasRenderingContext2D::):

2010-07-23  Adam Barth  <abarth@webkit.org>

        Remove FIXME that we already fixed.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processCharacter):

2010-06-24  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Kent Tamura.

        Move more form submission logic into FormSubmission.
        https://bugs.webkit.org/show_bug.cgi?id=41110

        Two major moves:
        * Fold HTMLFormElement::prepareFormSubmission into FormSubmission::create
        * Move non-static (non-FormData-building) methods of FormDataBuilder
            to FormSubmission::Attributes.

        Mechanical moving, no change in behavior, so no new tests.

        * WebCore.xcodeproj/project.pbxproj: Gave FormDataBuilder.h "project" and
            FormSubmission.h "private" visibility.
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::submit): Changed to use FormSubmission::create.
        (WebCore::HTMLFormElement::parseMappedAttribute): Changed to use m_attributes.
        * html/HTMLFormElement.h:
        (WebCore::HTMLFormElement::enctype): Ditto.
        (WebCore::HTMLFormElement::encoding): Ditto.
        (WebCore::HTMLFormElement::acceptCharset): Ditto.
        * loader/FormSubmission.cpp:
        (WebCore::generateFormDataIdentifier): Moved from HTMLFormElement.
        (WebCore::appendMailtoPostFormDataToURL): Ditto.
        (WebCore::FormSubmission::Attributes::parseAction): Moved from FormDataBuilder.
        (WebCore::FormSubmission::Attributes::parseEncodingType): Ditto.
        (WebCore::FormSubmission::Attributes::parseMethodType): Ditto.
        (WebCore::FormSubmission::FormSubmission): Made inline.
        (WebCore::FormSubmission::create): Added logic that used to be in
            HTMLFormElement::prepareFormSubmission.
        * loader/FormSubmission.h:
        (WebCore::FormSubmission::):
        (WebCore::FormSubmission::Attributes::Attributes): Added new class.
        (WebCore::FormSubmission::Attributes::method): Moved from FormDataBuilder.
        (WebCore::FormSubmission::Attributes::isMultiPartForm): Ditto.
        (WebCore::FormSubmission::Attributes::action): Ditto.
        (WebCore::FormSubmission::Attributes::target): Ditto.
        (WebCore::FormSubmission::Attributes::setTarget): Ditto.
        (WebCore::FormSubmission::Attributes::encodingType): Ditto.
        (WebCore::FormSubmission::Attributes::acceptCharset): Ditto.
        (WebCore::FormSubmission::Attributes::setAcceptCharset): Ditto.
        (WebCore::FormSubmission::target): Ditto.
        (WebCore::FormSubmission::contentType): Const-ified return type.
        (WebCore::FormSubmission::boundary): Ditto.
        * platform/network/FormDataBuilder.cpp:
        (WebCore::FormDataBuilder::encodingFromAcceptCharset): Renamed method for clarity,
            made it use param instead of a class member.
        * platform/network/FormDataBuilder.h:
        (WebCore::FormDataBuilder::FormDataBuilder): Made constructor private.
        * wml/WMLGoElement.cpp: Changed to use FormSubmision::Attributes.
        * wml/WMLGoElement.h: Ditto.

2010-07-23  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        HTML5 Parser: document.write in a asynchronous script which is specified to load before page finish blows away document
        https://bugs.webkit.org/show_bug.cgi?id=42365

        This patch implements the changes Ian made to HTML5 to address these
        issues.  Let's try it and see how well it works.

        Test: http/tests/misc/write-from-dom-script.html

        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::write):
        * dom/Document.h:
        (WebCore::Document::writeDisabled):
        (WebCore::Document::setWriteDisabled):
        * dom/DocumentParser.h:
        (WebCore::DocumentParser::hasInsertionPoint):
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::insertedIntoDocument):
        (WebCore::ScriptElementData::ScriptElementData):
        (WebCore::ScriptElementData::evaluateScript):
        * dom/ScriptElement.h:
        (WebCore::ScriptElementData::writeDisabled):
        (WebCore::ScriptElementData::setWriteDisabled):
        * html/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::hasInsertionPoint):
        (WebCore::HTMLDocumentParser::insert):
        * html/HTMLDocumentParser.h:

2010-07-23  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Adam Roben.

        [WINCE] Buildfix for PopupMenuWin.cpp
        https://bugs.webkit.org/show_bug.cgi?id=42906

        Use correct API for BitmapInfo landed in r63944.

        * platform/win/PopupMenuWin.cpp:
        (WebCore::PopupMenu::paint):

2010-07-23  fsamuel@chromium.org  <fsamuel@chromium.org>

        Reviewed by David Hyatt.

        Updated table painting to draw cell layers in the correct order.

        Table Cell Layering
        https://bugs.webkit.org/show_bug.cgi?id=40775

        Tests: tables/layering/paint-test-layering-1.html
               tables/layering/paint-test-layering-2.html

        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::isTableExposableThroughAccessibility):
        (WebCore::AccessibilityTable::addChildren):
        (WebCore::AccessibilityTable::cellForColumnAndRow):
        * accessibility/AccessibilityTableCell.cpp:
        (WebCore::AccessibilityTableCell::titleUIElement):
        * accessibility/AccessibilityTableColumn.cpp:
        (WebCore::AccessibilityTableColumn::headerObjectForSection):
        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::recalcColumn):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::splitColumn):
        (WebCore::RenderTable::calcBorderLeft):
        (WebCore::RenderTable::calcBorderRight):
        (WebCore::RenderTable::cellAbove):
        (WebCore::RenderTable::cellBelow):
        (WebCore::RenderTable::cellBefore):
        (WebCore::RenderTable::cellAfter):
        * rendering/RenderTableSection.cpp:
        (WebCore::RenderTableSection::RenderTableSection):
        (WebCore::RenderTableSection::ensureRows):
        (WebCore::RenderTableSection::addCell):
        (WebCore::RenderTableSection::setCellWidths):
        (WebCore::RenderTableSection::calcRowHeight):
        (WebCore::RenderTableSection::layoutRows):
        (WebCore::RenderTableSection::calcOuterBorderTop):
        (WebCore::RenderTableSection::calcOuterBorderBottom):
        (WebCore::RenderTableSection::calcOuterBorderLeft):
        (WebCore::RenderTableSection::calcOuterBorderRight):
        (WebCore::RenderTableSection::firstLineBoxBaseline):
        (WebCore::compareCellPositions):
        (WebCore::RenderTableSection::paintCell):
        (WebCore::RenderTableSection::paintObject):
        (WebCore::RenderTableSection::numColumns):
        (WebCore::RenderTableSection::appendColumn):
        (WebCore::RenderTableSection::splitColumn):
        (WebCore::RenderTableSection::nodeAtPoint):
        * rendering/RenderTableSection.h:
        (WebCore::RenderTableSection::CellStruct::CellStruct):
        (WebCore::RenderTableSection::CellStruct::primaryCell):
        (WebCore::RenderTableSection::CellStruct::hasCells):
        (WebCore::RenderTableSection::primaryCellAt):

2010-07-23  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Adam Roben.

        [WINCE] Buildfix for Path.h
        https://bugs.webkit.org/show_bug.cgi?id=42904

        * platform/graphics/Path.h: Add missing typedef PlatformPath.

2010-07-23  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Reserve capacity for attributes
        https://bugs.webkit.org/show_bug.cgi?id=42877

        This is about a 1.7% improvement to the parsing benchmark.

        * html/HTMLToken.h:
        (WebCore::AtomicHTMLToken::AtomicHTMLToken):

2010-07-23  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Inline HTMLElementStack::top
        https://bugs.webkit.org/show_bug.cgi?id=42879

        According to sampling, HTMLElementStack::top is the hotest function in
        the treebuilder.  Inlining it is about a 0.3% improvement to the
        parsing benchmark.  This squares with how often it occurs in samples.

        * html/HTMLElementStack.cpp:
        * html/HTMLElementStack.h:
        (WebCore::HTMLElementStack::top):

2010-07-23  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Adam Roben.

        [WINCE] Buildfix for GraphicsContext
        https://bugs.webkit.org/show_bug.cgi?id=42888

        Use AffineTransform insted of TransformationMatrix and
        add ColorSpace parameter to the drawBitmap methods.

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/wince/GraphicsContextWince.cpp:
        (WebCore::GraphicsContext::affineTransform):
        (WebCore::GraphicsContext::fillRoundedRect):
        (WebCore::GraphicsContext::drawBitmap):
        (WebCore::GraphicsContext::drawBitmapPattern):

2010-07-23  Rafael Antognolli  <antognolli@profusion.mobi>

        Reviewed by Antonio Gomes.

        [EFL] Add support for using libcurl network backend.
        https://bugs.webkit.org/show_bug.cgi?id=42286

        Add files and flags for soup/curl specific backend being
        used.
        Put some ifdefs around soup/glib calls.

        No new tests, no new features implemented.

        * CMakeListsEfl.txt:
        * platform/efl/FileSystemEfl.cpp:
        (WebCore::fileSystemRepresentation):

2010-07-23  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add fast-reject path for InputStreamPreprocessor::peek
        https://bugs.webkit.org/show_bug.cgi?id=42881

        This is about a 2.5% speedup on the parsing benchmark.

        * html/HTMLTokenizer.h:
        (WebCore::HTMLTokenizer::InputStreamPreprocessor::peek):

2010-07-23  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Adam Roben.

        [WINCE] Merge PasteboardWince.cpp into PasteboardWin.cpp
        https://bugs.webkit.org/show_bug.cgi?id=42885

        Make PasteboardWin more portable and remove the global namespace prefix
        from GlobalLock/GlobalUnlock, since they are only macros on WinCE.

        * platform/win/PasteboardWin.cpp:
        (WebCore::PasteboardOwnerWndProc):
        (WebCore::Pasteboard::Pasteboard):
        (WebCore::Pasteboard::plainText):
        (WebCore::Pasteboard::documentFragment):

2010-07-23  Justin Schuh  <jschuh@chromium.org>

        Unreviewed, rolling out r63925.
        http://trac.webkit.org/changeset/63925
        https://bugs.webkit.org/show_bug.cgi?id=42858

        Introduced a regression in history state.

        * page/History.cpp:
        (WebCore::History::urlForState):

2010-07-23  Martin Robinson  <mrobinson@igalia.com>

        Unreviewed build fix.

        Fix make dist by aligning the source list with currently used headers.

        * GNUmakefile.am:

2010-07-23  Alex Milowski  <alex@milowski.com>

        Reviewed by Darin Adler.

        Moved the 'mathml' group back to where it belongs as
        siblings of the other major folders.

        * WebCore.xcodeproj/project.pbxproj:

2010-07-23  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Adam Roben.

        Buildfix for WinCE graphics after r56015.
        https://bugs.webkit.org/show_bug.cgi?id=41354

        Use fabs() insetead of abs().

        * platform/graphics/wince/GraphicsContextWince.cpp:
        (WebCore::GraphicsContext::fillRect):
        * platform/graphics/wince/PlatformPathWince.cpp:
        (WebCore::PlatformPath::addArcTo):

2010-07-23  ryuan choi  <ryuan.choi@samsung.com>

        Reviewed by Antonio Gomes.

        [EFL]build break because of r63927
        https://bugs.webkit.org/show_bug.cgi?id=42864

        * CMakeLists.txt:

2010-07-23  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Inline HTMLTokenizer::InputStreamPreprocessor::peek
        https://bugs.webkit.org/show_bug.cgi?id=42880

        According to sampling HTMLTokenizer::InputStreamPreprocessor::peek is
        the hotest function in the tokenizer.  Inlining this function is about
        a 2.2% speedup on the parser benchmark.  Turns out the tokenizer is
        much hotter than the tree builder.  :)

        * html/HTMLTokenizer.h:
        (WebCore::HTMLTokenizer::InputStreamPreprocessor::peek):

2010-07-23  Andras Becsi  <abecsi@webkit.org>

        Unreviewed build fix.

        [Qt] Fix WebKit2 linkage.

        No new tests needed.

        * WebCore.pro: add InjectedBundlePageEditorClient.cpp to WK2 sources

2010-07-23  Balazs Kelemen  <kb@inf.u-szeged.hu>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Setup the QtWebProcess

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

        * WebCore.pro: Added WebProcessMainQt.cpp to SOURCES.

2010-07-23  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: Chromium tests fix.

        * inspector/CodeGeneratorInspector.pm:

2010-07-23  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Adam Roben.

        [WINCE] Buildfix for PluginDatabaseWin.cpp
        https://bugs.webkit.org/show_bug.cgi?id=41887

        Define KEY_ENUMERATE_SUB_KEYS only if not defined.

        * plugins/win/PluginDatabaseWin.cpp:

2010-07-23  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Chromium DevTools: migrate from utility context-based injected
        script dispatch to upstream schema.

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

        * bindings/v8/ScriptProfile.cpp:
        (WebCore::ScriptProfile::title):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::getProfile):
        * inspector/front-end/InjectedScriptAccess.js:

2010-07-23  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: rolling out r63963.

        * bindings/v8/ScriptProfile.cpp:
        (WebCore::ScriptProfile::title):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::getProfile):
        * inspector/front-end/InjectedScriptAccess.js:

2010-07-23  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Chromium DevTools: migrate from utility context-based injected
        script dispatch to upstream schema.

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

        * bindings/v8/ScriptProfile.cpp:
        (WebCore::ScriptProfile::title):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::getProfile):
        * inspector/front-end/InjectedScriptAccess.js:
        (InjectedScriptAccess.get if):
        (InjectedScriptAccess):

2010-07-23  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: error info propagation in InspectorBackendDispatch should be improved
        https://bugs.webkit.org/show_bug.cgi?id=42873

        * inspector/CodeGeneratorInspector.pm: report wrong parameter count and wrong
        parametere type errror to the dispatch method caller

2010-07-23  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: injectedScriptId is missing in the stack frame wrappers.

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

        * inspector/front-end/InjectedScript.js:
        (injectedScriptConstructor):

2010-07-23  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Kent Tamura.

        Backslash isn't transcoded in <input>
        https://bugs.webkit.org/show_bug.cgi?id=42878

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

2010-07-22  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        WebInspector: CodeGeneratorInspector was extended and now it can
        generate InspectorBackedDispatcher's code. This dispatcher will
        validate and dispatch incoming inspector commands only by native
        code without using javaScript. That is necessary step for
        RemoteDebugging support.
        https://bugs.webkit.org/show_bug.cgi?id=42588

        * GNUmakefile.am:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/CodeGeneratorInspector.pm:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        * inspector/InspectorController.h:
        (WebCore::InspectorController::inspectorBackendDispatcher):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.setDocument):

2010-07-22  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Kent Tamura.

        Backslash is transcoded into yen sign even when non japanese font is specified
        https://bugs.webkit.org/show_bug.cgi?id=39654

        Test: fast/text/backslash-to-yen-sign-euc.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty): Call FontDescriptor::setIsSpecifiedFont.
        * platform/graphics/Font.cpp:
        (WebCore::Font::Font):
        * platform/graphics/FontDescription.h: Added m_isSpecifiedFont and its accessors.
        (WebCore::FontDescription::FontDescription):
        (WebCore::FontDescription::isSpecifiedFont):
        (WebCore::FontDescription::setIsSpecifiedFont):
        (WebCore::FontDescription::operator==):
        * platform/text/transcoder/FontTranscoder.cpp:
        (WebCore::FontTranscoder::converterType): Don't transcode backslashes if a font family is explicitly specified.
        (WebCore::FontTranscoder::convert):
        (WebCore::FontTranscoder::needsTranscoding):
        * platform/text/transcoder/FontTranscoder.h: Change the arguments from AtomicString fontFamily to Font.
        * rendering/RenderText.cpp:
        (WebCore::RenderText::updateNeedsTranscoding):
        (WebCore::RenderText::setTextInternal):

2010-07-22  Jon Honeycutt  <jhoneycutt@apple.com>

        Windows build fix.

        Commit some changes missed by the commit-queue in r63944.

        * platform/win/BitmapInfo.h:
        (WebCore::BitmapInfo::is16bit):
        (WebCore::BitmapInfo::is32bit):
        (WebCore::BitmapInfo::width):
        (WebCore::BitmapInfo::height):
        (WebCore::BitmapInfo::size):
        (WebCore::BitmapInfo::paddedWidth):
        (WebCore::BitmapInfo::numPixels):
        (WebCore::BitmapInfo::paddedBytesPerLine):
        (WebCore::BitmapInfo::bytesPerLine):

2010-07-22  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Adam Roben.

        [WINCE] Add additonal methods to BitmapInfo.
        https://bugs.webkit.org/show_bug.cgi?id=42071

        Added a parameter to create 16bit BitmapInfo and
        some additional accessors for the WinCE port.

        Set bmiHeader.biSize only at constructor.

        * platform/win/BitmapInfo.cpp:
        (WebCore::bitmapInfoForSize):
        (WebCore::BitmapInfo::create):
        (WebCore::BitmapInfo::createBottomUp):
        * platform/win/BitmapInfo.h:
        (WebCore::BitmapInfo::is16bit):
        (WebCore::BitmapInfo::is32bit):
        (WebCore::BitmapInfo::width):
        (WebCore::BitmapInfo::height):
        (WebCore::BitmapInfo::size):
        (WebCore::BitmapInfo::paddedWidth):
        (WebCore::BitmapInfo::numPixels):
        (WebCore::BitmapInfo::paddedBytesPerLine):
        (WebCore::BitmapInfo::bytesPerLine):

2010-07-22  MORITA Hajime  <morrita@google.com>

        Reviewed by Ojan Vafai.

        Autoscroll on selection should take scrollbars into account as outside of the content.
        https://bugs.webkit.org/show_bug.cgi?id=40403

        ScrollView's scroll-bar was considered as a part of content rect,
        that prevents autoscroll to happen when the pointer is over the
        scroll-bar.  This change excluded scroll-bar region from scrolling
        delta calculation.
        
        Test: WebCore/manual-tests/autoscroll-over-scrollbar.html

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

2010-07-22  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        maxLength should not be applied to non-text types
        https://bugs.webkit.org/show_bug.cgi?id=42814

        According to the HTML5 specification, maxLength attribute should
        be applied to text, search, url, tel, email, and password types.

        Test: fast/forms/input-maxlength-unsupported.html

        * dom/InputElement.cpp:
        (WebCore::InputElement::handleBeforeTextInsertedEvent):
         Apply maxLength() only if supportsMaxLength() is true.
        * dom/InputElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::patternMismatch):
         Code cleanup by isTextType().
        (WebCore::HTMLInputElement::tooLong):
         ditto.
        (WebCore::HTMLInputElement::isTextType):
         Added. This returns true for types with maxLength/pattern/placeholder.
        * html/HTMLInputElement.h:
        (WebCore::HTMLInputElement::supportsMaxLength):
         Added. Just calls isTextType().
        (WebCore::HTMLInputElement::supportsPlaceholder):
         Code cleanup by isTextType().
        * wml/WMLInputElement.h:
        (WebCore::WMLInputElement::supportsMaxLength):
         Added. Always returns true.

2010-07-22  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Kent Tamura.

        [cleanup] logic to extract adjacent lists and list children in listifyParagraph and unlistifyParagraph should be isolated
        https://bugs.webkit.org/show_bug.cgi?id=42841

        Added enclosingListChild that takes the list node containing the node for the second argument
        to ensure that it only returns the enclosing list child of the specified list node.

        Added adjacentEnclosingList that finds adjacent lists of the specified position.
        It takes the current position, the adjacent position that may or may not have a list, and the list type,
        and avoids a list that belongs to a different table cell or an outer list that contains the current position.

        No new tests needed.

        * editing/InsertListCommand.cpp:
        (WebCore::enclosingListChild): Added. See above.
        (WebCore::InsertListCommand::unlistifyParagraph): Uses enclosingListChild.
        (WebCore::adjacentEnclosingList): Added. See above.
        (WebCore::InsertListCommand::listifyParagraph): Uses adjacentEnclosingList.

2010-07-22  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Adam Roben.

        [WIN] Correct DeleteObject usage in PasteboardWin
        https://bugs.webkit.org/show_bug.cgi?id=41956

        Call DeleteObject() if OpenClipboard() fails and don't
        call DeleteObject() on objects returned from SelectObject().

        * platform/win/PasteboardWin.cpp:
        (WebCore::Pasteboard::writeImage):

2010-07-22  Lucas De Marchi  <lucas.demarchi@profusion.mobi>

        Reviewed by Antonio Gomes.

        [EFL] Log function is incorrectly used.
        r63804 used LOG function, but it should receive one more parameter.
        Used LOG_ERROR instead, since this is an error message.
        https://bugs.webkit.org/show_bug.cgi?id=42842

        * platform/efl/WidgetEfl.cpp:
        (WebCore::Widget::applyFallbackCursor): use LOG_ERROR in place of LOG

2010-07-22  Kent Tamura  <tkent@chromium.org>

        Reviewed by Ojan Vafai.

        Cancel button of search input field should fire input/change events
        https://bugs.webkit.org/show_bug.cgi?id=34393

        Test: fast/forms/search-cancel-button-events.html

        * rendering/TextControlInnerElements.cpp:
        (WebCore::SearchFieldCancelButtonElement::defaultEventHandler):

2010-07-22  Sam Weinig  <sam@webkit.org>

        Reviewed by Maciej Stachowiak.

        Fix for <rdar://problem/8222626>
        Send textDidChangeInTextField delegate callback only in response to typing or other forms of user text input.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        Update project files.
        
        * dom/UserTypingGestureIndicator.cpp: Copied from dom/UserGestureIndicator.cpp.
        (WebCore::UserTypingGestureIndicator::processingUserTypingGesture):
        (WebCore::focusedNode):
        (WebCore::UserTypingGestureIndicator::focusedElementAtGestureStart):
        (WebCore::UserTypingGestureIndicator::UserTypingGestureIndicator):
        (WebCore::UserTypingGestureIndicator::~UserTypingGestureIndicator):
        * dom/UserTypingGestureIndicator.h: Copied from dom/UserGestureIndicator.h.
        Version of UserGestureIndicator that just tracks keyboard gestures and the focused
        node they were targeting.
        
        * editing/Editor.cpp:
        (WebCore::Editor::confirmComposition):
        (WebCore::Editor::setComposition):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::keyEvent):
        Put UserTypingGestureIndicator on the stack for user generated keyboard events.

2010-07-22  Kent Tamura  <tkent@chromium.org>

        Reviewed by Ojan Vafai.

        <input type=number> stepper buttons should dispatch input/change events
        https://bugs.webkit.org/show_bug.cgi?id=42440

        Test: fast/forms/input-number-events.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::stepUpFromRenderer):
         Sets a flag to dispatch 'change' event and dispatches 'input' event
         if the value is changed.

2010-07-22  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Adam Barth.

        Make history state methods validate against document URL
        https://bugs.webkit.org/show_bug.cgi?id=42858

        Test: fast/history/history-replace-illegal.html

        * page/History.cpp:
        (WebCore::History::urlForState):

2010-07-22  Andy Estes  <aestes@apple.com>

        Reviewed by Maciej Stachowiak.

        When there are no beforeload listeners on a document,
        HTMLLinkElement::process() should be called immediately when the node is
        inserted into the document, rather than waiting until after attach is
        performed.
        <https://bugs.webkit.org/show_bug.cgi?id=42859>
        <rdar://problem/8194528>

        No new tests.

        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::insertedIntoDocument): If there are no
        beforeload listeners, call process() immediately.  Otherwise, add it as
        a post-attach callback.

2010-07-22  James Robinson  <jamesr@chromium.org>

        Reviewed by Simon Fraser.

        REGRESSION: box shadows on WebGL canvas elements repainted every frame
        https://bugs.webkit.org/show_bug.cgi?id=42852

        Avoid calling HTMLCanvasElement::willDraw() every time a WebGL canvas'
        contents update.  This call is only needed in the non-compositing
        rendering path.

        Covered by fast/canvas/webgl/canvas-test.html

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::markContextChanged):
        (WebCore::WebGLRenderingContext::paintRenderingResultsToCanvas):

2010-07-22  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Ojan Vafai.

        Remove useless PlatformScrollBar
        https://bugs.webkit.org/show_bug.cgi?id=41911

        * WebCore.gypi:
        * platform/win/PlatformScrollBar.h: Removed.
        * platform/win/PlatformScrollBarWin.cpp: Removed.

2010-07-22  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Ojan Vafai.

        [Windows] Home hey doesn't work in first DIV inside a TABLE
        https://bugs.webkit.org/show_bug.cgi?id=42767

        The bug was caused by positionAvoidingFirstPositionInTable moving outside of the editing region.
        Added a check so that it avoids the first position in the table only if the table is editable.

        Test: editing/selection/home-inside-noneditable-table.html

        * editing/visible_units.cpp:
        (WebCore::positionAvoidingFirstPositionInTable):

2010-07-22  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Laszlo Gombos.

        Fix build warning for missing parentheses.

        WebCore/html/HTMLInputElement.cpp:113: warning: suggest parentheses around '&&' within '||'

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

2010-07-22  John Gregg  <johnnyg@google.com>

        Reviewed by Kent Tamura.

        [chromium] fast/forms/input-file-directory-upload.html fails on win after r63454
        https://bugs.webkit.org/show_bug.cgi?id=42768

        Normalize path separators for the script API by converting \'s to /'s.

        Covered by input-file-directory-upload.html

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

2010-07-22  Dmitry Titov  <dimich@chromium.org>

        Rubberstamped by Simon Fraser.

        * platform/PlatformStrategies.h:
        (WebCore::PlatformStrategies::PlatformStrategies): Add initialization of m_localizationStrategy.

2010-07-22  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Ojan Vafai.

        Make db.changeVersion()'s third parameter optional, as required by the spec.
        https://bugs.webkit.org/show_bug.cgi?id=42787

        * bindings/js/JSDatabaseCustom.cpp:
        (WebCore::JSDatabase::changeVersion):
        * bindings/js/JSDatabaseSyncCustom.cpp:
        (WebCore::JSDatabaseSync::changeVersion):
        * bindings/v8/custom/V8DatabaseCustom.cpp:
        (WebCore::V8Database::changeVersionCallback):
        * bindings/v8/custom/V8DatabaseSyncCustom.cpp:
        (WebCore::V8DatabaseSync::changeVersionCallback):
        * storage/SQLTransaction.cpp:
        (WebCore::SQLTransaction::deliverTransactionCallback):
        * storage/SQLTransactionSync.cpp:
        (WebCore::SQLTransactionSync::execute):

2010-07-20  Jessie Berlin  <jberlin@apple.com>

        Reviewed by Darin Adler.

        Code Generator: Allow negative and string constants.
        Also add tests for hexadecimal numbers.

        * bindings/scripts/CodeGeneratorJS.pm:
        If it is a string, do not try to cast it to an int.

        * bindings/scripts/IDLStructure.pm:
        Add a regex just for constant values that allows strings, hexadecimal numbers, and integral numbers.

        * bindings/scripts/test/CPP/WebDOMTestObj.h:
        Update the tests.

        * bindings/scripts/test/JS/JSTestObj.cpp:
        Ditto.

        * bindings/scripts/test/JS/JSTestObj.h:
        Ditto.

        * bindings/scripts/test/ObjC/DOMTestObj.h:
        Ditto.

        * bindings/scripts/test/TestObj.idl:
        Add tests for negative numbers, strings, and hexadecimal numbers.

        * bindings/scripts/test/V8/V8TestObj.cpp:
        Update the tests.

2010-07-22  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.

        Composited layers don't scroll in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=42771

        More prep work: make a single scrollPositionChanged() bottleneck method, and use it to 
        send the scroll event, repaint fixed elements, and update compositing layers.

        * page/FrameView.cpp:
        (WebCore::FrameView::scrollPositionChangedViaPlatformWidget):
        (WebCore::FrameView::scrollPositionChanged):
        (WebCore::FrameView::repaintFixedElementsAfterScrolling):
        (WebCore::FrameView::valueChanged):
        * page/FrameView.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::valueChanged):

2010-07-22  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=42836
        Add localized strings stubs for WebKit2.

        - Convert WebKit (mac) to use a LocalizationStrategy rather than the WebCoreViewFactory
          for localized strings.

        Gets us below 200 tests failing in WebKitTestRunner.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * page/mac/WebCoreViewFactory.h:
        * platform/LocalizationStrategy.h: Added.
        (WebCore::LocalizationStrategy::~LocalizationStrategy):
        * platform/PlatformStrategies.h:
        (WebCore::PlatformStrategies::pluginStrategy):
        (WebCore::PlatformStrategies::localizationStrategy):
        (WebCore::PlatformStrategies::PlatformStrategies):
        (WebCore::PlatformStrategies::~PlatformStrategies):
        * platform/mac/LocalizedStringsMac.mm:

2010-07-22  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Antonio Gomes.

        [Qt] Implement WebContext::applicationCacheDirectory() for the Qt port of WebKit2.
        https://bugs.webkit.org/show_bug.cgi?id=42830

        No new tests needed.

        * WebCore.pri: add ApplicationCacheStorage.h to wk2 headers
        * WebCore.pro: add WebContextQt.cpp to sources

2010-07-22  Joone Hur  <joone.hur@samsung.com>

        Reviewed by Antonio Gomes.

        [EFL] add support for logging
        https://bugs.webkit.org/show_bug.cgi?id=40807

        Enable to turn log channels on for EFL port

        * platform/efl/LoggingEfl.cpp:
        (WebCore::InitializeLoggingChannelsIfNecessary):

2010-07-22  Balazs Kelemen  <kb@inf.u-szeged.hu>

        Ureviewed build fix.

        [Qt] Fix WebKit2 build

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

        * WebCore.pri:
        * WebCore.pro:

2010-07-22  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Stop granting universal access to inspector front-end page.
        https://bugs.webkit.org/show_bug.cgi?id=42817

        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::windowObjectCleared):

2010-07-22  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Fix inspector console tests crashes.

        * bindings/v8/ScriptValue.cpp:
        (WebCore::v8ToInspectorValue):
        (WebCore::ScriptValue::toInspectorValue): enter v8 context before calling GetPropertyNames

2010-07-22  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed build fix.

        [EFL] Build break for SVN r63881
        https://bugs.webkit.org/show_bug.cgi?id=42813

        * CMakeLists.txt: Add platform/SchemeRegistry.cpp

2010-07-22  Hayato Ito  <hayato@chromium.org>

        Reviewed by Darin Adler.

        Refactor CSSSelector's destructor and make it inline.

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

        Refactor with no behavior change, thus no new tests.

        * css/CSSSelector.cpp:
        (WebCore::CSSSelectorBag::~CSSSelectorBag): Make sure the bag is empty.
        (WebCore::CSSSelectorBag::add): Renamed from append().
        (WebCore::CSSSelector::releaseOwnedSelectorsToBag):
        (WebCore::CSSSelector::deleteReachableSelectors):
        * css/CSSSelector.h:
        (WebCore::CSSSelector::~CSSSelector):

2010-07-22  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: should be possible to convert console message arguments to InspectorValues
        https://bugs.webkit.org/show_bug.cgi?id=42457

        Now it is possible to convert simple JavaScript objects to
        InspectorValues.

        * bindings/js/ScriptValue.cpp:
        (WebCore::jsToInspectorValue):
        (WebCore::ScriptValue::toInspectorValue):
        * bindings/js/ScriptValue.h:
        * bindings/v8/ScriptValue.cpp:
        (WebCore::v8ToInspectorValue):
        (WebCore::ScriptValue::toInspectorValue):
        * bindings/v8/ScriptValue.h:
        * inspector/ConsoleMessage.cpp: console notifications are pushed to RemoteInspectorFrontend instead of InspectorFrontend.
        (WebCore::ConsoleMessage::CallFrame::buildInspectorObject):
        (WebCore::ConsoleMessage::addToFrontend):
        (WebCore::ConsoleMessage::updateRepeatCountInConsole):
        * inspector/ConsoleMessage.h:
        * inspector/InjectedScript.cpp:
        (WebCore::InjectedScript::wrapForConsole): return InspectorValue instead of SerializedScriptValue
        * inspector/InjectedScript.h:
        * inspector/Inspector.idl:
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::clearConsoleMessages): send response directly from the backend
        (WebCore::InspectorBackend::remoteFrontend):
        * inspector/InspectorBackend.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::addConsoleMessage):
        (WebCore::InspectorController::clearConsoleMessages): don't send notification to the front end,
        it will be send either from InspectorBackend.cpp if it was a user request or reset message will
        be send to the front end if the messages are cleared due to page navigation.
        (WebCore::InspectorController::populateScriptObjects):
        * inspector/front-end/ConsoleView.js:
        * inspector/front-end/inspector.js:

2010-07-22  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Modifying settings actually modifies defaultValues
        https://bugs.webkit.org/show_bug.cgi?id=42816

        Avoid using live modifiable objects as property default values.

        * inspector/front-end/Settings.js:
        (WebInspector.Settings):
        (WebInspector.Settings.prototype.reset):
        (WebInspector.Settings.prototype._load):
        (WebInspector.Settings.prototype.installSetting):
        (WebInspector.Settings.prototype._get):

2010-07-22  Ben Murdoch  <benm@google.com>

        Reviewed by Simon Fraser.

        Touch events do not affect the :active CSS state
        https://bugs.webkit.org/show_bug.cgi?id=39493

        Clean the code up by using a typedef based on comments
        post landing of the original patch.

        No change in functionality so no new tests.

        * rendering/HitTestRequest.h: Typedef the HitTestRequestType to unsigned.
        * WebCore.exp.in: Update export signature.
        * WebCore.order: Ditto.
        * page/EventHandler.cpp: use the new typedef.
        * page/EventHandler.h: ditto.


2010-07-22  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Rename method for CSS rule source range retrieval and fix return object format
        https://bugs.webkit.org/show_bug.cgi?id=42379

        * inspector/Inspector.idl:
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::getRuleRanges):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorCSSStore.cpp:
        (WebCore::InspectorCSSStore::getRuleRanges):
        * inspector/InspectorCSSStore.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::getRuleRanges):
        * inspector/InspectorDOMAgent.h:
        * inspector/front-end/DOMAgent.js:

2010-07-21  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Chromium Dev Tools: Separators are missing in the context menu.

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

        * bindings/js/JSInspectorFrontendHostCustom.cpp:
        (WebCore::JSInspectorFrontendHost::showContextMenu):
        * bindings/v8/custom/V8InspectorFrontendHostCustom.cpp:
        (WebCore::V8InspectorFrontendHost::showContextMenuCallback):
        * platform/ContextMenuItem.h:
        (WebCore::):

2010-07-22  Zoltan Herczeg  <zherczeg@webkit.org>

        Reviewed by Nikolas Zimmermann.

        SVGFilterElement & SVGFE*Element don't support dynamic invalidation, when attributes change
        https://bugs.webkit.org/show_bug.cgi?id=42244

        Implementing svgAttributeChanged and childrenChanged for the base class of all filters,
        called SVGFilterPrimitiveStandardAttributes.

        Tests: svg/dynamic-updates/SVGFilterPrimitiveStandardAttributes-dom-height-attr.html
               svg/dynamic-updates/SVGFilterPrimitiveStandardAttributes-dom-result-attr.html
               svg/dynamic-updates/SVGFilterPrimitiveStandardAttributes-dom-width-attr.html
               svg/dynamic-updates/SVGFilterPrimitiveStandardAttributes-dom-x-attr.html
               svg/dynamic-updates/SVGFilterPrimitiveStandardAttributes-dom-y-attr.html
               svg/dynamic-updates/SVGFilterPrimitiveStandardAttributes-svgdom-height-prop.html
               svg/dynamic-updates/SVGFilterPrimitiveStandardAttributes-svgdom-result-prop.html
               svg/dynamic-updates/SVGFilterPrimitiveStandardAttributes-svgdom-width-prop.html
               svg/dynamic-updates/SVGFilterPrimitiveStandardAttributes-svgdom-x-prop.html
               svg/dynamic-updates/SVGFilterPrimitiveStandardAttributes-svgdom-y-prop.html

        * svg/SVGFilterPrimitiveStandardAttributes.cpp:
        (WebCore::SVGFilterPrimitiveStandardAttributes::svgAttributeChanged):
        (WebCore::SVGFilterPrimitiveStandardAttributes::childrenChanged):
        * svg/SVGFilterPrimitiveStandardAttributes.h:
        (WebCore::SVGFilterPrimitiveStandardAttributes::invalidateFilter):

2010-07-22  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Small refactoring for input value sanitization
        https://bugs.webkit.org/show_bug.cgi?id=42807

        Rename some functions to clarify their roles.

        * dom/InputElement.cpp:
        (WebCore::replaceEOLAndLimitLength):
          Renamed from sanitizeUserInputValue().
        (WebCore::InputElement::sanitizeValueForTextField):
          Renamed from sanitizeValue(), and call replaceEOLAndLimitLength()
          instead of sanitizeUserInputValue().
        (WebCore::InputElement::sanitizeUserInputValue):
          Just call replaceEOLAndLimitLength().
        (WebCore::InputElement::updateValueIfNeeded):
          Use non-static sanitizeValue() for consistency.
        * dom/InputElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setInputType):
          Revert the change of r63876. It is not needed because of the
          updateValueIfNeeded() change.
        (WebCore::HTMLInputElement::sanitizeValue):
          Apply the sanitizeValue() renaming.

2010-07-22  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Darin Fisher.

        webkitPerformance.timing.responseEnd should not include document parse time
        https://bugs.webkit.org/show_bug.cgi?id=42797

        No new tests because timing based test would be flaky.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::finishedLoading): finishedLoading() is called by the platform at the right time, but didReceiveData() synchronously invokes parsing without returning to the event loop prior to this. So by the time the didFinishLoading() method is executed, parsing is finished. The solution is to move this time to didReceiveData() prior to parsing.
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::didReceiveData): Update the time each time didReceiveData() is called.
        (WebCore::MainResourceLoader::didFinishLoading): When finished, and after parsing, set responseEnd appropriately.
        * loader/MainResourceLoader.h:
        * page/Timing.cpp:
        (WebCore::Timing::resourceLoadTimeRelativeToAbsolute): Now that responseEnd is set correctly, it can be much shorter for very fast loads (like local files). This exposed the fact that this skew check was not tight enough. We need to make sure that the whole range of values from the ResourceLoadTiming API fit within fetchStart-responseEnd, not just that requestTime fits in this range.

2010-07-21  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        Assertion failure by changing the type of an input element with a
        non-number value to 'range'.
        https://bugs.webkit.org/show_bug.cgi?id=42643

        Test: fast/forms/input-value-sanitization.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setInputType):
        Update the value by HTMLInputElement::sanitizeValue() in a case that
        storesValueSeparateFromAttribute() state is not changed.

2010-07-21  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Implement spec changes for basefont and bgsound
        https://bugs.webkit.org/show_bug.cgi?id=42792

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTagForInBody):
        (WebCore::HTMLTreeBuilder::processStartTag):
        (WebCore::HTMLTreeBuilder::processStartTagForInHead):

2010-07-21  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Update a list of tags to match changes in the HTML5 spec
        https://bugs.webkit.org/show_bug.cgi?id=42791

        We need to atomize these strings at some point.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTagForInBody):

2010-07-21  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        HTMLTreeBuilder needs to update to match new spec behavior for <button>
        https://bugs.webkit.org/show_bug.cgi?id=42233

        The spec has some typos in this area, but this is my best guess for
        what Ian means.  I've filed bugs against the spec for each typo.

        * html/HTMLElementStack.cpp:
        (WebCore::HTMLNames::isScopeMarker):
        (WebCore::HTMLNames::isButtonScopeMarker):
        (WebCore::HTMLElementStack::inButtonScope):
        * html/HTMLElementStack.h:
        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processFakePEndTagIfPInButtonScope):
        (WebCore::HTMLTreeBuilder::processCloseWhenNestedTag):
        (WebCore::HTMLTreeBuilder::processStartTagForInBody):
        (WebCore::HTMLTreeBuilder::processEndTagForInBody):
        * html/HTMLTreeBuilder.h:

2010-07-21  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Oliver Hunt.

        Prevent DeleteButtonController enable state from changing when not editing
        https://bugs.webkit.org/show_bug.cgi?id=42659

        Test: svg/custom/use-invalid-html.xhtml

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

2010-07-21  Beth Dakin  <bdakin@apple.com>

        Reviewed by Dan Bernstein.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=42605 New border-
        radius path-based drawing code has some issues with corner-joins

        GraphicsContext::clipConvexPolygon() now takes a boolean parameter 
        indicating whether or not the clip should be antialiased.
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::clipConvexPolygon):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::clipConvexPolygon):
        * platform/graphics/haiku/GraphicsContextHaiku.cpp:
        (WebCore::GraphicsContext::clipConvexPolygon):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::clipConvexPolygon):
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::clipConvexPolygon):
        * platform/graphics/wince/GraphicsContextWince.cpp:
        (WebCore::GraphicsContext::clipConvexPolygon):
        * platform/graphics/wx/GraphicsContextWx.cpp:
        (WebCore::GraphicsContext::clipConvexPolygon):

        Compute 4 booleans determining if each edge is a "matching" edge of 
        not. Send the two appropriate values to clipBorderSidePolygon() so 
        we can decide there whether or not to antialias the clip based on 
        matchy-ness.
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintBorder):

        If both edges are matching, don't antialias. If neither edge 
        matches, never antialias. If one edge matches and one does not, 
        apply two clips to get the appropriate antialiasing in each corner.
        (WebCore::RenderBoxModelObject::clipBorderSidePolygon):
        * rendering/RenderBoxModelObject.h:

2010-07-21  Brady Eidson  <beidson@apple.com>

        Reviewed by Geoffrey Garen.

        Break out "scheme registration" functionality from SecurityOrigin to a SchemeRegistry
        https://bugs.webkit.org/show_bug.cgi?id=42783

        No new tests. (No change in behavior)

        * GNUmakefile.am:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::isMixedContent):
        (WebCore::FrameLoader::loadFrameRequest):
        
        * page/SecurityOrigin.cpp:
        (WebCore::SecurityOrigin::SecurityOrigin):
        (WebCore::SecurityOrigin::canLoad):
        (WebCore::SecurityOrigin::isLocal):
        * page/SecurityOrigin.h:
        
        * platform/SchemeRegistry.cpp: Added.
        (WebCore::localSchemes):
        (WebCore::secureSchemes):
        (WebCore::schemesWithUniqueOrigins):
        (WebCore::SchemeRegistry::registerURLSchemeAsLocal):
        (WebCore::SchemeRegistry::removeURLSchemeRegisteredAsLocal):
        (WebCore::SchemeRegistry::localURLSchemes):
        (WebCore::SchemeRegistry::shouldTreatURLAsLocal):
        (WebCore::SchemeRegistry::shouldTreatURLSchemeAsLocal):
        (WebCore::SchemeRegistry::registerURLSchemeAsNoAccess):
        (WebCore::SchemeRegistry::shouldTreatURLSchemeAsNoAccess):
        (WebCore::SchemeRegistry::registerURLSchemeAsSecure):
        (WebCore::SchemeRegistry::shouldTreatURLSchemeAsSecure):
        * platform/SchemeRegistry.h: Added.

2010-07-21  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        Assertion failure in AnimationBase::updateStateMachine() coming out of paused state
        https://bugs.webkit.org/show_bug.cgi?id=37993
        
        Added logic to properly handle pausing and resuming when in the 
        AnimationStateStartWaitStyleAvailable state. This was causing an
        assert when going out of the pause state because the paused flag
        was not set.
        
        The fix is a straightforward implementation, going into a new
        AnimationStatePausedWaitStyleAvailable state and setting the paused
        flag (actually setting the m_pauseTime variable to something other
        than -1). Also added handling of the new state, both when the 
        "style available" callback comes in while in this state and when
        unpausing while in this state. 
        
        For now a LayoutTest is not possible since there's no way to go in
        and out of the pause state. I've opened https://bugs.webkit.org/show_bug.cgi?id=42790
        to track this.

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::updateStateMachine):
        * page/animation/AnimationBase.h:
        (WebCore::AnimationBase::):

2010-07-21  Bo Liu  <boliu@chromium.org>

        Reviewed by Darin Fisher.

        [Chromium] Add chromium WebMediaPlayer to PlatformMedia
        https://bugs.webkit.org/show_bug.cgi?id=41295

        * platform/graphics/MediaPlayer.h:
        (WebCore::PlatformMedia::):

2010-07-21  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Anders Carlsson.

        Composited layers don't scroll in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=42771

        Prep work: FrameView::scrollPositionChanged() sounds like a generic "did scroll" bottleneck,
        but this is deceiving. It's only every called on one platform (Mac) when the NSScrollView gets
        scrolled, so rename it to FrameView::scrollPositionChangedViaPlatformWidget().

        * WebCore.exp.in:
        * page/FrameView.cpp:
        (WebCore::FrameView::scrollPositionChangedViaPlatformWidget):
        * page/FrameView.h:

2010-07-21  Peter Beverloo  <peter@lvp-media.com>

        Reviewed by Eric Carlson.

        Removed support for the -khtml CSS vendor prefix and limit the
        -apple prefix to two properties (dashboard-region and line-clamp).

        Test: fast/css/limited-vendor-prefix-behavior.html

        * css/CSSParser.cpp:
        (WebCore::cssPropertyID):

2010-07-21  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Fix the last tree HTML5 tree builder crashes
        https://bugs.webkit.org/show_bug.cgi?id=42773

        This patch changes the internal representation of a bookmark to handle
        the case where one of the adjecent entries in the list of active
        formatting elements is actually a marker.

        After this patch, the bookmarking mechanism isn't as general, but it
        works for the cases we need in the adoption agency.

        Also, after this patch, there aren't any more known crashers in the
        HTML5 tree builder.  :)

        * html/HTMLFormattingElementList.cpp:
        (WebCore::HTMLFormattingElementList::bookmarkFor):
        (WebCore::HTMLFormattingElementList::swapTo):
        * html/HTMLFormattingElementList.h:
        (WebCore::HTMLFormattingElementList::Bookmark::Bookmark):
        (WebCore::HTMLFormattingElementList::Bookmark::moveToAfter):
        (WebCore::HTMLFormattingElementList::Bookmark::hasBeenMoved):
        (WebCore::HTMLFormattingElementList::Bookmark::mark):
        (WebCore::HTMLFormattingElementList::first):
        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::callTheAdoptionAgency):

2010-07-21  Tony Gentilcore  <tonyg@chromium.org>

        Unreviewed build fix.

        Disable overzealous ASSERT
        https://bugs.webkit.org/show_bug.cgi?id=42775

        No new tests because no changed functionality.

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

2010-07-21  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Darin Adler.

        Crash in Notification::disconnectFrame() triggered by Frame::lifeSupportTimerFired()
        https://bugs.webkit.org/show_bug.cgi?id=42534

        Call NotificationsCenter::disconnectFrame() when the frame is disconnected from the page.
        Calling it from the destructor of Frame is too late and sometimes causes access violation.
        I was not able to reproduce this crash, so did not add new tests.
        This patch is based on the error reported in 
        http://code.google.com/p/chromium/issues/detail?id=49323.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::pageDestroyed):
        * page/DOMWindow.h:
        * page/Frame.cpp:
        (WebCore::Frame::pageDestroyed):

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

        Reviewed by Sam Weinig.

        Don't assert when clicking on a plug-in in WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=42762

        Remove a now invalid assert and return false instead.

        * page/mac/EventHandlerMac.mm:
        (WebCore::EventHandler::passMouseDownEventToWidget):

2010-07-21  Anton Muhin  <antonm@chromium.org>

        Reviewed by Adam Barth.

        [v8] Revert r60670 as it introduced a regression: in some cases named children couldn't be retrieved.
        https://bugs.webkit.org/show_bug.cgi?id=42766

        See http://code.google.com/p/chromium/issues/detail?id=48804 for more details.

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::namedItemAdded):
        (WebCore::ScriptController::namedItemRemoved):
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::updateDocumentWrapperCache):
        * bindings/v8/V8DOMWindowShell.h:
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::instantiateV8Object):
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        (WebCore::V8HTMLDocument::namedPropertyDeleter):
        (WebCore::V8HTMLDocument::namedPropertyGetter):
        (WebCore::V8HTMLDocument::indexedPropertyGetter):
        (WebCore::V8HTMLDocument::allAccessorSetter):
        (WebCore::toV8):

2010-07-21  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Simon Fraser.

        Update plug-in proxy backed <video> and <audio> elements.
        https://bugs.webkit.org/show_bug.cgi?id=42770
        <rdar://problem/7963467>

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::attributeChanged): Only call m_player->setControls when
        the 'controls' attribute changes.
        (WebCore::HTMLMediaElement::createRenderer): 
        (WebCore::HTMLMediaElement::attach): If we have a proxy widget, call the WebFrameLoaderClient's 
        'hide' and 'show' methods for the media proxy plug-in to make sure we remove and re-add the 
        plug-in's view to the global list of plugin views.
        (WebCore::HTMLMediaElement::createMediaPlayerProxy): Bail if m_proxyWidget is non-NULL

        * loader/EmptyClients.h:
        (WebCore::EmptyFrameLoaderClient::hideMediaPlayerProxyPlugin): Empty stub method.
        (WebCore::EmptyFrameLoaderClient::showMediaPlayerProxyPlugin): Ditto.

        * loader/FrameLoader.cpp:
        * loader/FrameLoaderClient.h:
        * loader/SubframeLoader.cpp:
        (WebCore::FrameLoader::loadMediaPlayerProxyPlugin): Always set m_containsPlugIns in loadMediaPlayerProxyPlugin(),
         even when we don't have a renderer.
        (WebCore::FrameLoader::hideMediaPlayerProxyPlugin): New, call hideMediaPlayerProxyPlugin.
        (WebCore::FrameLoader::showMediaPlayerProxyPlugin): New, call showMediaPlayerProxyPlugin.

        * platform/graphics/MediaPlayer.cpp:
        (WebCore::NullMediaPlayerPrivate::setControls):
        (WebCore::MediaPlayer::setControls): New, pass through to media engine.
        (WebCore::MediaPlayer::enterFullscreen): Ditto.
        (WebCore::MediaPlayer::exitFullscreen): Ditto.
        * platform/graphics/MediaPlayer.h:
        * platform/graphics/MediaPlayerPrivate.h:
        (WebCore::MediaPlayerPrivateInterface::setControls):
        (WebCore::MediaPlayerPrivateInterface::enterFullscreen):
        (WebCore::MediaPlayerPrivateInterface::exitFullscreen):

2010-07-21  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Make more members of CSSStyleSelector private.
        https://bugs.webkit.org/show_bug.cgi?id=42757

        No change in behavior, so no new tests.

        * css/CSSStyleSelector.h: Made a publicly-unused methods private.

2010-07-21  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: consider jQuery object to be of array nature.

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

        * inspector/front-end/InjectedScript.js:
        (injectedScriptConstructor):

2010-07-21  Alexey Proskuryakov  <ap@apple.com>

        Unreviewed Windows build fix.

        https://bugs.webkit.org/show_bug.cgi?id=42717
        <rdar://problem/7062824> A wrong password entered for site or proxy auth remains in WebCore
        credential storage, and is sent with subsequent requests

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge): Don't use that direct a
        copy/paste, oops!

2010-07-21  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.

        When GraphicsLayer::contentsOrientation() is CompositingCoordinatesBottomUp, need to flip repaint rects
        https://bugs.webkit.org/show_bug.cgi?id=42662
        
        If the contentsOrientation() on a GraphicsLayer is CompositingCoordinatesBottomUp, then we
        need to flip the rects passed to setNeedsDisplayInRect:.
        
        Avoid writing this code twice by making a bare function to share code
        between WebLayer and WebTiledLayer. Convert the existing +drawContents:ofLayer:intoContext:
        class method into a bare function, because the Obj-C calling overhead doesn't buy us anything.
        
        Take out an assertion in GraphicsLayerCA::updateContentsTransform() that is not
        correct.
        
        No new tests because no layers use bottom-up contents at present.

        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::GraphicsLayerCA::updateContentsTransform):
        * platform/graphics/mac/WebLayer.h:
        * platform/graphics/mac/WebLayer.mm:
        (drawLayerContents):
        (setLayerNeedsDisplayInRect):
        (-[WebLayer setNeedsDisplayInRect:]):
        (-[WebLayer drawInContext:]):
        * platform/graphics/mac/WebTiledLayer.mm:
        (-[WebTiledLayer setNeedsDisplayInRect:]):
        (-[WebTiledLayer drawInContext:]):

2010-07-20  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=42717
        <rdar://problem/7062824> A wrong password entered for site or proxy auth remains in WebCore
        credential storage, and is sent with subsequent requests

        Tests: http/tests/security/401-logout/401-logout.php
               http/tests/xmlhttprequest/remember-bad-password.html

        * platform/network/CredentialStorage.cpp: (WebCore::CredentialStorage::remove):
        * platform/network/CredentialStorage.h:
        Added a way to remove stored credentials for a given protection space.

        * platform/network/cf/ResourceHandleCFNet.cpp: (WebCore::ResourceHandle::didReceiveAuthenticationChallenge):
        * platform/network/mac/ResourceHandleMac.mm: (WebCore::ResourceHandle::didReceiveAuthenticationChallenge):
        Remove stored credentials if they didn't work the first time.

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

        Reviewed by Adam Roben.

        WebKit on Windows should build optionally with an unversioned ICU DLL
        https://bugs.webkit.org/show_bug.cgi?id=42722
        <rdar://problem/8211767> WebKit needs to link against unversioned ICU

        To get the proper value for U_DISABLE_RENAMING into all source files, we force
        the include of ICUVersion.h (our generated header) via the compiler options.
        
        * WebCore.vcproj/WebCore.vcproj:
        Add forced include of ICUVersion.h.
        * WebCore.vcproj/WebCoreCommon.vsprops: Add forced include of ICUVersion.h.

2010-07-21  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        WebInspector: Serialization to JSON in InspectorValue works incorrect
        if comma is assigned as decimal separator. Windows with Russian locale.
        https://bugs.webkit.org/show_bug.cgi?id=42755

        * inspector/InspectorValues.cpp:
        (WebCore::InspectorBasicValue::writeJSON):

2010-07-20  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        CSS rotation transform can cause elements with certain styles to vanish during rotation.
        https://bugs.webkit.org/show_bug.cgi?id=42579
        
        Remove some untested, broken code that, as far as I can tell, could never get hit.
        Use the correct rect for the PaintInfo so that zero-sized elements with overflow:hidden
        but a border paint correctly.

        Test: compositing/overflow/zero-size-overflow.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintIntoLayer):

2010-07-21  Mahesh Kulkarni  <mahesh.kulkarni@nokia.com>

        Reviewed by Laszlo Gombos.

        [QT] Leak and few more fixes to qt port of geolocation
        https://bugs.webkit.org/show_bug.cgi?id=42753

        Fixes memory leak and default values set to attributes. 
        
        Memory leak fix no new test case added. 

        * platform/qt/GeolocationServiceQt.cpp: Added.
        (WebCore::GeolocationServiceQt::~GeolocationServiceQt):
        (WebCore::GeolocationServiceQt::positionUpdated):

2010-07-21  Kristian Amlie <kristian.amlie@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Added automatic sqlite extraction for Symbian to QtWebKit.

        Also added sqlite detection in case sqlite is not present in the SDK.
        This is possible if WebKit is compiled standalone.

        The inclusion part is a consequence of commit c578c6c1d6d in the Qt
        repository. It will not work on Qt versions < 4.7.1, but that is ok,
        since the only build system it will affect is marked as experimental
        in the whole 4.7 series.

        * WebCore.pro:

2010-07-21  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Associate elements with the active form
        https://bugs.webkit.org/show_bug.cgi?id=42728

        This patch fixes fast/forms/formmove3.html.  The test still doesn't
        pass due to some render tree differences, but it works as intended now.

        To fix this test, I needed to deviate from the spec slight.  Minefield
        seems to have the same deviation:
          - http://www.w3.org/Bugs/Public/show_bug.cgi?id=10216

        * html/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::takeForm):
        (WebCore::HTMLConstructionSite::setForm):
        (WebCore::HTMLConstructionSite::createHTMLElement):
        * html/HTMLConstructionSite.h:
        (WebCore::HTMLConstructionSite::form):
        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTagForInBody):

2010-07-21  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        The adoption agency doesn't properly attach()
        https://bugs.webkit.org/show_bug.cgi?id=42727

        The adoption agency is transliterated rather directly from the spec,
        but it misses some of the WebKit-specific machinations, such as
        attaching to the render tree.

        The algorithm, as written, is a minor layer violation.  I've added to
        the problem by calling attach() from HTMLTreeBuilder (even though
        that's the job of the HTMLConstructionSite).  We'll need to clean up
        the layering a bit at some point.

        This patch half fixes fast/forms/formmove3.html.  Hopefully I'll finish
        fixing it in the next patch.

        * html/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::createHTMLElementFromSavedElement):
        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::callTheAdoptionAgency):

2010-07-21  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        <input> elements with no type attribute should be foster parented
        https://bugs.webkit.org/show_bug.cgi?id=42725

        Fix spec transcription error.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTagForInTable):

2010-07-21  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Fix fast/css/last-child-style-sharing.html
        https://bugs.webkit.org/show_bug.cgi?id=42731

        Prior to this patch, we weren't calling finishParsingChildren on the
        body element.  We need a more systematic way of catching these bugs.

        * html/HTMLElementStack.cpp:
        (WebCore::HTMLElementStack::popAll):
        * html/HTMLElementStack.h:
        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processEndOfFile):

2010-07-21  Hans Wennborg  <hans@chromium.org>

        Reviewed by Steve Block.

        Runtime feature switch for device orientation
        https://bugs.webkit.org/show_bug.cgi?id=42265

        Add a runtime feature switch that decides whether device orientation
        events are available or not. Defaults to true.

        * WebCore.vcproj/WebCoreCommon.vsprops: Add bindings/generic to include path.
        * bindings/generic/RuntimeEnabledFeatures.cpp:
        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setDeviceOrientationEnabled):
        (WebCore::RuntimeEnabledFeatures::deviceOrientationEnabled):
        (WebCore::RuntimeEnabledFeatures::deviceOrientationEventEnabled):
        (WebCore::RuntimeEnabledFeatures::ondeviceorientationEnabled):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::addEventListener):
        (WebCore::DOMWindow::removeEventListener):
        (WebCore::DOMWindow::removeAllEventListeners):
        * page/DOMWindow.idl:
        * page/Page.cpp:
        (WebCore::Page::Page):

2010-07-21  Zoltan Herczeg  <zherczeg@webkit.org>

        Reviewed Nikolas Zimmermann.

        SVGFilterElement & SVGFE*Element don't support dynamic invalidation, when attributes change
        https://bugs.webkit.org/show_bug.cgi?id=42244

        The implementation was done by Nikolas Zimmermann before, but
        there was no tests for it. The patch also implements the simple
        setFilterRes method.

        Tests: svg/dynamic-updates/SVGFilterElement-dom-filterRes-attr.html
               svg/dynamic-updates/SVGFilterElement-dom-filterUnits-attr.html
               svg/dynamic-updates/SVGFilterElement-dom-height-attr.html
               svg/dynamic-updates/SVGFilterElement-dom-primitiveUnits-attr.html
               svg/dynamic-updates/SVGFilterElement-dom-width-attr.html
               svg/dynamic-updates/SVGFilterElement-dom-x-attr.html
               svg/dynamic-updates/SVGFilterElement-dom-y-attr.html
               svg/dynamic-updates/SVGFilterElement-svgdom-filterRes-call.html
               svg/dynamic-updates/SVGFilterElement-svgdom-filterResX-prop.html
               svg/dynamic-updates/SVGFilterElement-svgdom-filterResY-prop.html
               svg/dynamic-updates/SVGFilterElement-svgdom-filterUnits-prop.html
               svg/dynamic-updates/SVGFilterElement-svgdom-height-prop.html
               svg/dynamic-updates/SVGFilterElement-svgdom-primitiveUnits-prop.html
               svg/dynamic-updates/SVGFilterElement-svgdom-width-prop.html
               svg/dynamic-updates/SVGFilterElement-svgdom-x-prop.html
               svg/dynamic-updates/SVGFilterElement-svgdom-y-prop.html

        * svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::setFilterRes):
        (WebCore::SVGFilterElement::svgAttributeChanged):
        (WebCore::SVGFilterElement::childrenChanged):
        * svg/SVGFilterElement.h:

2010-07-21  Ben Murdoch  <benm@google.com>

        Unreviewed, build fix.

        Forgot to update the role of HitTestRequest.h in
        the Xcode project after landing patch from
        https://bugs.webkit.org/show_bug.cgi?id=39493

        * WebCore.xcodeproj/project.pbxproj: Make HitTestRequest.h
            private so it can be included in WebKit by EventHandler.h
            which is already private..

2010-07-20  Ben Murdoch  <benm@google.com>

        Reviewed by Steve Block.

        Touch events do not affect the :active CSS state
        https://bugs.webkit.org/show_bug.cgi?id=39493

        Test: fast/events/touch/touch-active-state.html

        * WebCore.exp.in: Update exports for new signature of
            hitTestResultAtPoint.
        * WebCore.order: ditto.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::EventHandler):
        (WebCore::EventHandler::hitTestResultAtPoint): Pass the type
            of the hit test to perform as a parameter with a default
            value rather than harcoding it in the function body.
        (WebCore::EventHandler::handleMouseMoveEvent): Do not modiify
            the active element during a mouse move if the user is
            touching the screen.
        (WebCore::EventHandler::handleTouchEvent): Set the correct
            type of hit test to perform depending on the type of the
            touch event we are handling.
        * page/EventHandler.h: Update the signature of hitTestResultAtPoint.

2010-07-20  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        console.assert should include stack trace with line numbers.
        https://bugs.webkit.org/show_bug.cgi?id=22556

        Test: inspector/console-assert.html

        * bindings/v8/ScriptCallStack.cpp:
        (WebCore::getTopFrameLocation):
        (WebCore::toScriptCallFramesVector):
        (WebCore::ScriptCallStack::create):
        (WebCore::ScriptCallStack::ScriptCallStack):
        * bindings/v8/ScriptCallStack.h:
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::setCaptureCallStackForUncaughtExceptions):
        * bindings/v8/custom/V8ConsoleCustom.cpp:
        (WebCore::V8Console::traceCallback):
        (WebCore::V8Console::assertCallback):
        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::ConsoleMessage):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::addMessageToConsole):
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleMessage.prototype._formatMessage):
        (WebInspector.ConsoleMessage.prototype.toMessageElement):
        * page/Console.cpp:
        (WebCore::Console::lastWMLErrorMessage):
        * page/Console.idl:

2010-07-20  Rafael Antognolli  <antognolli@profusion.mobi>

        Reviewed by Kent Tamura.

        [EFL] Use log functions instead of fprintf
        https://bugs.webkit.org/show_bug.cgi?id=42576

        Use LOG and LOG_ERROR instead of fprintf.

        No new tests, no new functionality.

        * platform/efl/WidgetEfl.cpp:
        (WebCore::Widget::applyFallbackCursor):

2010-07-20  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        WebInspector: the bindings generation helper script can be
        simplified a bit. Chromium.
        https://bugs.webkit.org/show_bug.cgi?id=42523

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gyp/scripts/rule_binding.py:
        * bindings/scripts/CodeGenerator.pm:
        * bindings/scripts/CodeGeneratorCPP.pm:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorObjC.pm:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/scripts/generate-bindings.pl:
        * inspector/CodeGeneratorInspector.pm:

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

        Re-save vsprops file after no-op edit in Visual Studio
        to fix manual edit issues.

        * WebCore.vcproj/WebCoreCommon.vsprops:

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

        Re-save vcproj file after no-op edit in Visual Studio
        to fix manual edit issues.

        * WebCore.vcproj/WebCore.vcproj:

2010-07-20  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Include attributes when reconstructing elements in HTML5 tree builder
        https://bugs.webkit.org/show_bug.cgi?id=42594

        Remove FIXME now that we have a test.

        * html/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::createHTMLElementFromElementRecord):

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

        Reviewed by Brady Eidson.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=42719
        Make Acid2 pass in WebKit2

        * WebCore.exp.in: Update exported functions.

2010-07-20  Gavin Peters  <gavinp@chromium.org>

        Reviewed by Adam Barth.

        prefetch categorization is exactly wrong
        https://bugs.webkit.org/show_bug.cgi?id=42651

        While I was in the area, I saw that CachedResource::schedule() was dead, so I have removed it.

        Test: fast/dom/HTMLLinkElement/onload-completion-test.html

        * loader/CachedCSSStyleSheet.h:
        * loader/CachedFont.h:
        * loader/CachedImage.h:
        * loader/CachedResource.cpp:
        * loader/CachedResource.h:
        (WebCore::CachedResource::isPrefetch):
        * loader/CachedScript.h:
        * loader/CachedXBLDocument.h:
        * loader/CachedXSLStyleSheet.h:

2010-07-20  James Hawkins  <jhawkins@chromium.org>

        Reviewed by Darin Fisher.

        Expose the form submission trigger on the HTMLFormElement object. This
        is used to verify that the user submitted the form instead of JS when
        saving form data in Chrome AutoFill.
        https://bugs.webkit.org/show_bug.cgi?id=42479

        No new tests as this is only used by the Chromium WebKit API.

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::HTMLFormElement):
        (WebCore::HTMLFormElement::submit):
        (WebCore::HTMLFormElement::reset):
        (WebCore::HTMLFormElement::submissionTrigger):
        * html/HTMLFormElement.h:

2010-07-20  Adam Barth  <abarth@webkit.org>

        Unreviewed.

        Fix fast/dom/title-content-write-set.html for HTML5 tree builder
        https://bugs.webkit.org/show_bug.cgi?id=42668

        Address some late-breaking review comments.

        * dom/CharacterData.cpp:
        (WebCore::CharacterData::appendDataCommon):
        (WebCore::CharacterData::parserAppendData):
        (WebCore::CharacterData::appendData):
        (WebCore::CharacterData::insertData):
        (WebCore::CharacterData::replaceData):
        * dom/CharacterData.h:

2010-07-20  Daniel Erat  <derat@chromium.org>

        Reviewed by Ojan Vafai.

        Subpixel rendering always disabled for Chromium Linux
        https://bugs.webkit.org/show_bug.cgi?id=42220

        Explicitly initialize global Chromium Linux isSkiaSubpixelGlyphs
        flag to false for clarity.

        * platform/graphics/chromium/FontPlatformDataLinux.cpp:

2010-07-20  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Fix fast/dom/title-content-write-set.html for HTML5 tree builder
        https://bugs.webkit.org/show_bug.cgi?id=42668

        When I split parserAppendData from appendData, it was tempting to cut
        the function at dispatchModifiedEvent, but that's not quite right.  We
        still need to notify the parent that it's children have changed.

        * dom/CharacterData.cpp:
        (WebCore::CharacterData::appendDataCommon):
        (WebCore::CharacterData::parserAppendData):
        (WebCore::CharacterData::appendData):
        * dom/CharacterData.h:

2010-07-20  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        CrashTracer: [USER] 300 crashes in Safari at com.apple.WebCore: WebCore::AccessibilityTable::isTableExposableThroughAccessibility + 573
        https://bugs.webkit.org/show_bug.cgi?id=42652

        When a table cell accesses its parent table, we should not use getOrCreate, because creating an AXTable inspects its render tree state
        which may be out of date, leading to a crash.
        By using only get(), it implies that the AXTable must be created before AXTableCells. This should
        always be the case when AT clients access a table.

        Test: accessibility/updating-attribute-in-table-causes-crash.html

        * accessibility/AccessibilityTableCell.cpp:
        (WebCore::AccessibilityTableCell::parentTable):

2010-07-20  Abhishek Arya  <inferno@chromium.org>

        Reviewed by David Hyatt.

        Check the node is a text node before doing the static cast
        for editing commands.
        https://bugs.webkit.org/show_bug.cgi?id=42655

        Test: editing/execCommand/editing-nontext-node-crash.xhtml

        * editing/DeleteSelectionCommand.cpp:
        (WebCore::DeleteSelectionCommand::fixupWhitespace):
        * editing/InsertLineBreakCommand.cpp:
        (WebCore::InsertLineBreakCommand::doApply):
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply):

2010-07-20  Leo Yang  <leo.yang@torchmobile.com.cn>

        Reviewed by David Hyatt.

        Don't merge Anonymous block whose first child is inline run-in.
        Make run-in recalculate its style after its renderer is destroyed.
        https://bugs.webkit.org/show_bug.cgi?id=41375.

        Test: fast/runin/crash-when-reparent-sibling.html

        * rendering/RenderBlock.cpp:
        (WebCore::canMergeContiguousAnonymousBlocks):
        * rendering/RenderObjectChildList.cpp:
        (WebCore::RenderObjectChildList::destroyLeftoverChildren):

2010-07-20  Steve Block  <steveblock@google.com>

        Unreviewed Qt test fix.

        Qt should not use PREEMPT_GEOLOCATION_PERMISSION until Bug 42027 is fixed.
        https://bugs.webkit.org/show_bug.cgi?id=42068

        No new tests, test fix only.

        * WebCore.pro:

2010-07-20  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r63764.
        http://trac.webkit.org/changeset/63764
        https://bugs.webkit.org/show_bug.cgi?id=42658

        have broken Chromium linux build (Requested by loislo on
        #webkit).

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gyp/scripts/rule_binding.py:
        * bindings/scripts/CodeGenerator.pm:
        * bindings/scripts/CodeGeneratorCPP.pm:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorObjC.pm:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/scripts/generate-bindings.pl:
        * inspector/CodeGeneratorInspector.pm:

2010-07-20  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Brady Eidson.

        https://bugs.webkit.org/show_bug.cgi?id=41531
        Asynchronous cross origin XMLHttpRequest doesn't expose 401 response when withCredentials is false

        This doesn't match Firefox, but it matches our sync case, XHR2 spec and common sense.

        Test: http/tests/xmlhttprequest/cross-origin-no-authorization.html (updated results).

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::didReceiveAuthenticationChallenge): Instead of canceling
        the request, continue without credentials - if the platform has a necessary method on
        ResourceHandle.

        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::didReceiveAuthenticationChallenge): Don't ask resource loader
        client for credentials if subresource loader client already took care of those.

        * platform/network/ResourceHandle.cpp: (WebCore::ResourceHandle::hasAuthenticationChallenge):
        * platform/network/ResourceHandle.h:
        Added an accessor to check whether ResourceHandle is currently waiting for credentials.

2010-07-20  Leandro Pereira  <leandro@profusion.mobi>

        [EFL] Unreviewed build fix.

        Build SVGPathBuilder, SVGPathParser and SVGPathSegListBuilder.
        Add websockets include directory.

        The EFL port doesn't yet support automated tests.

        * CMakeLists.txt:

2010-07-20  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        WebInspector: the bindings generation helper script can be
        simplified a bit. Chromium.
        https://bugs.webkit.org/show_bug.cgi?id=42523

        * WebCore.gyp/WebCore.gyp:
        * WebCore.gyp/scripts/rule_binding.py:
        * bindings/scripts/CodeGenerator.pm:
        * bindings/scripts/CodeGeneratorCPP.pm:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorObjC.pm:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/scripts/generate-bindings.pl:
        * inspector/CodeGeneratorInspector.pm:

2010-07-20  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Geoffrey Garen.

        WebScriptObject Should Allow Safely Checking For Key Existence
        https://bugs.webkit.org/show_bug.cgi?id=42613

        Test: platform/mac/fast/objc/webScriptObject-hasWebScriptKey.html

        Add private API "hasWebScriptKey" to check for key existence in
        a WebScriptObject. Like JavaScript's `in` syntax. This is intended
        to be made public eventually.

        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject hasWebScriptKey:]):
        * bindings/objc/WebScriptObjectPrivate.h:

2010-07-20  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        HTML5 tree builder needs to call dispatchDocumentElementAvailable
        https://bugs.webkit.org/show_bug.cgi?id=42654

        This patch fixes the follout LayoutTests with --html5-treebuilder:
          - userscripts/script-not-run-for-fragments.html
          - userscripts/script-run-at-start.html

        * html/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::HTMLConstructionSite):
        (WebCore::HTMLConstructionSite::dispatchDocumentElementAvailableIfNeeded):
        (WebCore::HTMLConstructionSite::insertHTMLHtmlStartTagBeforeHTML):
        (WebCore::HTMLConstructionSite::insertHTMLHtmlElement):
        * html/HTMLConstructionSite.h:
        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::HTMLTreeBuilder):

2010-07-20  Mahesh Kulkarni  <mahesh.kulkarni@nokia.com>

        Reviewed by Steve Block.

        Need to be able to configure Geolocation policy regarding user permissions
        https://bugs.webkit.org/show_bug.cgi?id=42068

        Introducing new USE() flag PREEMPT_GEOLOCATION_PREMISSION using which
        acquires user permission first before starting location service

        This change does not introduce any change in behavior for any platform. So there are no new tests
        added.

        * WebCore.pro:
        * page/Geolocation.cpp:
        (WebCore::Geolocation::startRequest):
        (WebCore::Geolocation::setIsAllowed):
        (WebCore::Geolocation::startUpdating):
        * page/Geolocation.h:

2010-07-20  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        HTML5 tree builder should restore form state
        https://bugs.webkit.org/show_bug.cgi?id=42644

        We need to tell self-closing tags that we're done parsing their
        children.  This patch fixes the following LayoutTests when run with
        --html5-treebuilder:

          fast/forms/button-state-restore.html
          fast/forms/state-restore-to-non-autocomplete-form.html
          fast/forms/state-restore-to-non-edited-controls.html
          fast/history/saves-state-after-fragment-nav.html
          http/tests/navigation/restore-form-state-https.html

        * html/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::insertSelfClosingHTMLElement):

2010-07-20  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r63750.
        http://trac.webkit.org/changeset/63750
        https://bugs.webkit.org/show_bug.cgi?id=42648

        This revision breaks the windows builds (Requested by
        hwennborg on #webkit).

        * bindings/generic/RuntimeEnabledFeatures.cpp:
        * bindings/generic/RuntimeEnabledFeatures.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::addEventListener):
        (WebCore::DOMWindow::removeEventListener):
        (WebCore::DOMWindow::removeAllEventListeners):
        * page/DOMWindow.idl:
        * page/Page.cpp:
        (WebCore::Page::Page):

2010-07-20  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        WebInspector: It is possible to show full call stack instead of top frame for Caller
        and Call Site properties in Timeline panel.
        https://bugs.webkit.org/show_bug.cgi?id=42620

        * English.lproj/localizedStrings.js:
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.FormattedRecord):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._generatePopupContent):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._getRecordDetails):
        (WebInspector.TimelinePanel.PopupContentHelper.prototype._appendElementRow):
        (WebInspector.TimelinePanel.PopupContentHelper.prototype._appendLinkRow):
        (WebInspector.TimelinePanel.PopupContentHelper.prototype._appendStackTrace):
        * inspector/front-end/inspector.css:
        (.timeline-details):
        (.timeline-function-name):
        (.timeline-stacktrace-title):

2010-07-20  Leon Clarke  <leonclarke@google.com>

        Reviewed by Pavel Feldman.

        Make things compile again when the inspector is disabled, following
        recent inspector improvements.
        https://bugs.webkit.org/show_bug.cgi?id=42632

        No new tests. Fixing a build break.


        * bindings/v8/ScriptCallStack.cpp:
        (WebCore::ScriptCallStack::stackTrace):
        * inspector/InspectorController.h:
        (WebCore::InspectorController::didInsertDOMNode):
        (WebCore::InspectorController::didRemoveDOMNode):
        (WebCore::InspectorController::didModifyDOMAttr):
        * inspector/InspectorDOMAgent.h:
        * loader/appcache/ApplicationCacheGroup.cpp:

2010-07-20  Anton Muhin  <antonm@chromium.org>

        Reviewed by Adam Barth.

        [v8] Allow handles to be disposed and WebKit objects to be dereferenced even if their map is already destroyed.
        https://bugs.webkit.org/show_bug.cgi?id=42634

        Currently DOMDataStore could be destroyed even if it has some mappings (it gets destroyed
        when its isolated context gets GCed).  However in this case, handles allocated for
        such objects would never be disposed as we require presence of mapping from wrapped
        WebKit object to handle being collected in the map and now map is gone.  That leads to
        zombie objects in both WebKit (wrapped WebKit object doesn't get dereferenced) and V8
        (both handle and V8 wrapper object could not be destroyed).

        See http://code.google.com/p/chromium/issues/detail?id=47125 for further discussion.

        * bindings/v8/DOMData.h:
        (WebCore::DOMData::handleWeakObject):
        * bindings/v8/DOMDataStore.cpp:
        (WebCore::DOMDataStore::weakNodeCallback):
        * bindings/v8/V8DOMMap.h:
        (WebCore::WeakReferenceMap::~WeakReferenceMap):

2010-07-20  Hans Wennborg  <hans@chromium.org>

        Reviewed by Steve Block.

        Runtime feature switch for device orientation
        https://bugs.webkit.org/show_bug.cgi?id=42265

        Add a runtime feature switch that decides whether device orientation
        events are available or not. Defaults to true.

        * bindings/generic/RuntimeEnabledFeatures.cpp:
        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::setDeviceOrientationEnabled):
        (WebCore::RuntimeEnabledFeatures::deviceOrientationEnabled):
        (WebCore::RuntimeEnabledFeatures::deviceOrientationEventEnabled):
        (WebCore::RuntimeEnabledFeatures::ondeviceorientationEnabled):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::addEventListener):
        (WebCore::DOMWindow::removeEventListener):
        (WebCore::DOMWindow::removeAllEventListeners):
        * page/DOMWindow.idl:
        * page/Page.cpp:
        (WebCore::Page::Page):

2010-07-20  Hayato Ito  <hayato@chromium.org>

        Reviewed by Darin Adler.

        Fixed a crash when deeply nested CSS selector is used.
        https://bugs.webkit.org/show_bug.cgi?id=41129

        This patch deletes CSSSelectors iteratively so that it doesn't cause stack overflow.

        Test: fast/css/css-selector-deeply-nested.html

        * css/CSSSelector.cpp:
        (WebCore::CSSSelectorBag::~CSSSelectorBag):
        (WebCore::CSSSelectorBag::isEmpty):
        (WebCore::CSSSelectorBag::append):
        (WebCore::CSSSelectorBag::takeAny):
        (WebCore::CSSSelector::~CSSSelector):
        (WebCore::CSSSelector::specificity):
        * css/CSSSelector.h:

2010-07-20  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        [v8] Web Inspector: inspected page renderer crashes when inspected page has JS syntax error
        https://bugs.webkit.org/show_bug.cgi?id=42642

        * bindings/v8/V8ConsoleMessage.cpp:
        (WebCore::V8ConsoleMessage::handler):

2010-07-20  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r63742.
        http://trac.webkit.org/changeset/63742
        https://bugs.webkit.org/show_bug.cgi?id=42641

        Broke Leopard Intel build. (Requested by bbandix on #webkit).

        * WebCore.pro:
        * page/Geolocation.cpp:
        (WebCore::Geolocation::startRequest):
        (WebCore::Geolocation::setIsAllowed):
        (WebCore::Geolocation::startUpdating):
        * page/Geolocation.h:

2010-07-20  Adam Roben  <aroben@apple.com>

        Windows build fix

        * WebCore.vcproj/WebCore.vcproj: Fixed case of "Name" attribute.

2010-07-20  Mahesh Kulkarni  <mahesh.kulkarni@nokia.com>

        Reviewed by Steve Block.

        Need to be able to configure Geolocation policy regarding user permissions
        https://bugs.webkit.org/show_bug.cgi?id=42068

        Introducing new USE() flag PREEMPT_GEOLOCATION_PREMISSION using which
        acquires user permission first before starting location service

        This change does not introduce any change in behavior for any platform. So there are no new tests
        added.

        * WebCore.pro:
        * page/Geolocation.cpp:
        (WebCore::Geolocation::startRequest):
        (WebCore::Geolocation::setIsAllowed):
        (WebCore::Geolocation::startUpdating):
        * page/Geolocation.h:

2010-07-20  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Inspector: Resources Search Should Search Only Filtered Resources
        https://bugs.webkit.org/show_bug.cgi?id=28290

        * inspector/front-end/AbstractTimelinePanel.js:
        (WebInspector.AbstractTimelinePanel.prototype._updateFilter):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype.get searchableViews):
        * inspector/front-end/inspector.js:
        (WebInspector.performSearch):
        (WebInspector.doPerformSearch):

2010-07-20  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Incorrect absolute URLs in tooltips of links in the ElementsTreeOutline
        https://bugs.webkit.org/show_bug.cgi?id=42626

        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype._attributeHTML):

2010-07-20  Shinichiro Hamaji  <hamaji@chromium.org>

        Unreviewed comment fix. The comment in IDL should be //, not # .

        Code generator: ensure generated constants match their corresponding enums.
        https://bugs.webkit.org/show_bug.cgi?id=42250

        * dom/OverflowEvent.idl:

2010-07-20  Hans Wennborg  <hans@chromium.org>

        Reviewed by Steve Block.

        Add WebCore/bindings/generic/RuntimeEnabledFeatures.cpp to build files
        https://bugs.webkit.org/show_bug.cgi?id=42380

        RuntimeEnabledFeatures.cpp and .h were moved from bindings/v8 to
        bindings/generic a while a go (in r54593), but need to
        be added to the build in order to be used.

        No new functionality so no new tests.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * websockets/WebSocket.cpp: Remove #if USE(V8), as RuntimeEnabledFeatures.cpp is no longer V8-only.
        * websockets/WebSocket.h: Ditto.

2010-07-20  Tony Chang  <tony@chromium.org>

        Reviewed by Kent Tamura.

        clean up style in ClipboardWin and PasteboardWin
        https://bugs.webkit.org/show_bug.cgi?id=42609

        No new tests since this is just a style cleanup.

        * platform/win/ClipboardUtilitiesWin.cpp:
        (WebCore::createGlobalData):
        (WebCore::markupToCFHTML):
        (WebCore::getURL):
        (WebCore::getPlainText):
        (WebCore::getTextHTML):
        (WebCore::fragmentFromFilenames):
        (WebCore::containsFilenames):
        (WebCore::fragmentFromCFHTML):
        (WebCore::fragmentFromHTML):
        * platform/win/ClipboardUtilitiesWin.h:
        * platform/win/ClipboardWin.cpp:
        (WebCore::pathRemoveBadFSCharacters):
        (WebCore::createGlobalHDropContent):
        (WebCore::createGlobalUrlFileDescriptor):
        (WebCore::writeURL):
        (WebCore::ClipboardWin::clearData):
        (WebCore::ClipboardWin::clearAllData):
        (WebCore::ClipboardWin::getData):
        (WebCore::ClipboardWin::types):
        (WebCore::ClipboardWin::declareAndWriteDragImage):
        (WebCore::ClipboardWin::writeRange):
        * platform/win/ClipboardWin.h:
        (WebCore::ClipboardWin::create):
        (WebCore::ClipboardWin::dataObject):
        * platform/win/PasteboardWin.cpp:
        (WebCore::PasteboardOwnerWndProc):
        (WebCore::Pasteboard::writeSelection):
        (WebCore::Pasteboard::writeURL):
        (WebCore::Pasteboard::plainText):
        (WebCore::Pasteboard::documentFragment):

2010-07-20  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: jump to source is broken for call frames logged by console.trace
        https://bugs.webkit.org/show_bug.cgi?id=42619

        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleMessage.prototype._populateStackTraceTreeElement):
        * inspector/front-end/treeoutline.js: allow passing HTML element as a title.
        (TreeElement.prototype.set title):
        (TreeElement.prototype.set shouldRefreshChildren):
        (TreeElement.prototype._setListItemNodeContent):
        (TreeElement.prototype._attach):

2010-07-20  Tony Chang  <tony@chromium.org>

        Reviewed by Dan Bernstein.

        [chromium] crash in Position::getInlineBoxAndOffset
        https://bugs.webkit.org/show_bug.cgi?id=42202

        Test: editing/selection/firstRect-crash.html
        Manual test: win/contextmenu-key2.html

        * page/EventHandler.cpp: Code no longer needed
        * page/Frame.cpp:
        (WebCore::Frame::firstRectForRange): Normalize Positions to VisiblePositions because
            Positions may be pointing to nodes that have no renderer.  If there's no renderer,
            getInlineBoxAndOffset will crash.

2010-07-20  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Foster parenting depends on the current element at insertion time
        https://bugs.webkit.org/show_bug.cgi?id=42599

        We need to consider the current element at insertion-time when deciding
        whether to redirect insertion to the foster parent.  Previously, we
        were considering the current element *both* at insertion-time and at
        the time we created the guard.

        * html/HTMLConstructionSite.h:
        (WebCore::HTMLConstructionSite::RedirectToFosterParentGuard::RedirectToFosterParentGuard):
        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTagForInTable):
        (WebCore::HTMLTreeBuilder::processEndTagForInTable):
        (WebCore::HTMLTreeBuilder::defaultForInTableText):

2010-07-20  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Kenneth Rohde Christiansen.

        Failing 2d.path.stroke.prune.curve philip canvas test
        https://bugs.webkit.org/show_bug.cgi?id=42190

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::closePath): Added check to make sure there's a non-trivial path to close. Since there is currently no way to check if the current point is the start point, or similarly if there is only 1 point in the current subpath (since these are both sufficient conditions for a trivial subpath), then checking that the bounding rectangle has both zero width and height proves also to be a sufficient condition for a trivial path.
        (WebCore::CanvasRenderingContext2D::quadraticCurveTo): Added in simple bounds as per the spec.
        (WebCore::CanvasRenderingContext2D::bezierCurveTo): Added in simple bounds as per the spec.
        * platform/graphics/cg/PathCG.cpp:
        (WebCore::Path::closeSubpath): Moved the check for an empty path up on level to make it platform independent and remove redundancy.

2010-07-19  Victoria Kirst  <vrk@google.com>

        Reviewed by David Levin.

        Added a simple implementation of VideoLayerChromium. Uses the
        LayerChromium::updateTextureRect() to send video frames to the
        GPU.
        https://bugs.webkit.org/show_bug.cgi?id=42234

        * WebCore.gypi: Added include for VideoLayerChromium.
        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::setContentsToMedia): Implemented
        setContentsToMedia, though it does not seem to trigger a repaint
        correctly.
        * platform/graphics/chromium/GraphicsLayerChromium.h:
        * platform/graphics/chromium/VideoLayerChromium.cpp: Added.
        (WebCore::VideoLayerChromium::create):
        (WebCore::VideoLayerChromium::VideoLayerChromium):
        (WebCore::VideoLayerChromium::updateTextureContents):
        * platform/graphics/chromium/VideoLayerChromium.h: Added.
        (WebCore::VideoLayerChromium::drawsContent):

2010-07-19  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        SVG CleanUp of SVGPathData parsing
        https://bugs.webkit.org/show_bug.cgi?id=41410

        Cleanup the parsing code for SVG Paths. Move classes out of the convoluted SVGParserUtilities.cpp
        in their own files. Make use of WebCore specific objects in parsing code like FloatPoint, AffineTransform,
        etc. instead of using home-brewn solutions.
        The SVGPathParser parses a path data string and delivers the parsed segments and values to the SVGPathConsumer.
        SVGPathConsumer is the base class for SVGPathBuilder and SVGPathSegListBuilder, that either build the platform
        Path object or a SVGPathSegList out of the segments.
        We're now directly parsing floats instead of truncating precision to float afterwards.

        SVG Path with an arc with radius of 0 does not render
        https://bugs.webkit.org/show_bug.cgi?id=40448

        If one of the radii on the elliptic arc are zero, we should draw a line from the starting point to
        the end point according to the spec. Fixed this bug with this patch, because an is zero check and 
        an DRT check was neccessary with the current clean-up.
        Extended svg/dom/path-parser.xhml to check the correct behavior.

        * Android.mk:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/FloatPoint.h:
        (WebCore::FloatPoint::move): Follow WebKit style and use multiple lines for the function.
        (WebCore::FloatPoint::scale): Scale FloatPoint.
        (WebCore::operator+=):
        (WebCore::operator+): Add two FloatPoints and give back the sum as FloatPoint.
        * svg/SVGAllInOne.cpp: Added new created files.
        * svg/SVGAnimateElement.cpp:
        (WebCore::SVGAnimateElement::calculateFromAndToValues): Use new PathParser to create a PathSegList.
        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::parseMappedAttribute): Use new PathParser to create a Path.
        * svg/SVGGlyphElement.cpp:
        (WebCore::parsePathData): Use new PathParser to create a Path.
        * svg/SVGParserUtilities.cpp:
        (WebCore::parseArcFlag): Removed parseArcFlag(double&), we parse in float now.
        * svg/SVGParserUtilities.h: Removed path parsing code and a lot of unneccessary includes.
        * svg/SVGPathBuilder.cpp: Added.
        (WebCore::SVGPathBuilder::SVGPathBuilder):
        (WebCore::SVGPathBuilder::build): Builds a normalized Path.
        (WebCore::SVGPathBuilder::moveTo):
        (WebCore::SVGPathBuilder::lineTo):
        (WebCore::SVGPathBuilder::curveToCubic):
        (WebCore::SVGPathBuilder::closePath):
        * svg/SVGPathBuilder.h: Added. We just create normalized Paths, so this functions should never be reached.
        (WebCore::SVGPathBuilder::lineToHorizontal):
        (WebCore::SVGPathBuilder::lineToVertical):
        (WebCore::SVGPathBuilder::curveToCubicSmooth):
        (WebCore::SVGPathBuilder::curveToQuadratic):
        (WebCore::SVGPathBuilder::curveToQuadraticSmooth):
        (WebCore::SVGPathBuilder::arcTo):
        * svg/SVGPathConsumer.h: Added. Base class of SVGPathBuilder and SVGPathSegListBuilder.
        (WebCore::):
        (WebCore::SVGPathConsumer::SVGPathConsumer):
        (WebCore::SVGPathConsumer::~SVGPathConsumer):
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::parseMappedAttribute): Use new PathParser to create a PathSegList.
        * svg/SVGPathParser.cpp: Added.
        (WebCore::SVGPathParser::SVGPathParser):
        (WebCore::SVGPathParser::~SVGPathParser):
        (WebCore::SVGPathParser::parseClosePathSegment):
        (WebCore::SVGPathParser::parseMoveToSegment):
        (WebCore::SVGPathParser::parseLineToSegment):
        (WebCore::SVGPathParser::parseLineToHorizontalSegment):
        (WebCore::SVGPathParser::parseLineToVerticalSegment):
        (WebCore::SVGPathParser::parseCurveToCubicSegment):
        (WebCore::SVGPathParser::parseCurveToCubicSmoothSegment):
        (WebCore::SVGPathParser::parseCurveToQuadraticSegment):
        (WebCore::SVGPathParser::parseCurveToQuadraticSmoothSegment):
        (WebCore::SVGPathParser::parseArcToSegment):
        (WebCore::SVGPathParser::parsePathDataString):
        (WebCore::SVGPathParser::decomposeArcToCubic): Normalizes an arc to multiple cubic curves.
        * svg/SVGPathParser.h: Added.
        * svg/SVGPathSegListBuilder.cpp: Added.
        (WebCore::SVGPathSegListBuilder::SVGPathSegListBuilder):
        (WebCore::SVGPathSegListBuilder::build):
        (WebCore::SVGPathSegListBuilder::moveTo):
        (WebCore::SVGPathSegListBuilder::lineTo):
        (WebCore::SVGPathSegListBuilder::lineToHorizontal):
        (WebCore::SVGPathSegListBuilder::lineToVertical):
        (WebCore::SVGPathSegListBuilder::curveToCubic):
        (WebCore::SVGPathSegListBuilder::curveToCubicSmooth):
        (WebCore::SVGPathSegListBuilder::curveToQuadratic):
        (WebCore::SVGPathSegListBuilder::curveToQuadraticSmooth):
        (WebCore::SVGPathSegListBuilder::arcTo):
        (WebCore::SVGPathSegListBuilder::closePath):
        * svg/SVGPathSegListBuilder.h: Added.

2010-07-15  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Dan Bernstein.

        Fix for Bug 42342 - Font download error for an @font-face rule invalidates other @font-face rules for the same font-family
        https://bugs.webkit.org/show_bug.cgi?id=42342

        Test: fast/css/font-face-download-error.html

        * css/CSSSegmentedFontFace.cpp:
        (WebCore::CSSSegmentedFontFace::isValid): Valid if at least one font
        face is valid.
        (WebCore::CSSSegmentedFontFace::getFontData): Check validity for each
        font face.
        * css/CSSSegmentedFontFace.h: Make isValid private.

2010-07-19  Kent Tamura  <tkent@chromium.org>

        Reviewed by Shinichiro Hamaji.

        [Chromium] Fix style errors of RenderThemeChromiumWin.cpp
        https://bugs.webkit.org/show_bug.cgi?id=42568

        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore::):
        (WebCore::getNonClientMetrics):
        (WebCore::systemFontSize):
        (WebCore::pointsToPixels):
        (WebCore::querySystemBlinkInterval):
        (WebCore::RenderThemeChromiumWin::platformActiveSelectionBackgroundColor):
        (WebCore::RenderThemeChromiumWin::platformInactiveSelectionBackgroundColor):
        (WebCore::RenderThemeChromiumWin::platformActiveSelectionForegroundColor):
        (WebCore::RenderThemeChromiumWin::platformActiveTextSearchHighlightColor):
        (WebCore::RenderThemeChromiumWin::paintButton):
        (WebCore::RenderThemeChromiumWin::paintSliderTrack):
        (WebCore::RenderThemeChromiumWin::paintMenuList):
        (WebCore::RenderThemeChromiumWin::paintTextFieldInternal):
        (WebCore::RenderThemeChromiumWin::paintInnerSpinButton):

2010-07-19  Steve Falkenburg  <sfalken@apple.com>

        (Hopefully the last) Windows build fix.
        
        Version of CoreServices.h in WebKit Support Libraries uses
        pragma once, unlike the version I have locally. Switch based
        on __COLORSYNCDEPRECATED__ instead.

        * WebCorePrefix.h:

2010-07-19  Steve Falkenburg  <sfalken@apple.com>

        Windows build fix.

        * WebCorePrefix.h:

2010-07-19  Steve Falkenburg  <sfalken@apple.com>

        Build fix.

        * WebCorePrefix.h:

2010-07-19  Steve Falkenburg  <sfalken@apple.com>

        Build fix.

        * WebCorePrefix.h:

2010-07-19  Steve Falkenburg  <sfalken@apple.com>

        Windows Build fixes for new ColorSync API.
        We support both new and old APIs, since the newer headers aren't in the tree yet.

        * WebCorePrefix.h: Removed include of CoreServices.h. Included via ColorSyncPriv.h instead, since header may not be present.
        * platform/graphics/cg/ColorCG.cpp:
        (WebCore::createCGColor): Conditionally use new ColorSync API.
        * platform/graphics/opentype/OpenTypeUtilities.cpp: Define Fixed if CoreServices.h doesn't.
        * platform/graphics/win/GraphicsLayerCACF.cpp:
        (WebCore::GraphicsLayerCACF::updateLayerDrawsContent): Use 0 instead of nil, since nil is no longer present via CoreServices.h.
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp: Include AssertMacros.h.
        * platform/network/cf/ResourceErrorCF.cpp:
        (WebCore::ResourceError::operator CFErrorRef): Use 0 instead of nil, since nil is no longer present via CoreServices.h.

2010-07-19  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Dimitri Glazkov.

        Only set unloadEventEnd when the unload event is actually fired
        https://bugs.webkit.org/show_bug.cgi?id=42607

        r63689 introduced this ASSERT and it began failing on Qt and Mac debug.
        For some reason, it did not fail on Windows (which is where I was
        testing). The ASSERT was disabled in r63699.

        Test: page-cache related layout tests don't crash in debug mode on Mac.

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

2010-07-19  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Don't unnecessarily copy QPainterPath in fillPath() and strokePath()
        https://bugs.webkit.org/show_bug.cgi?id=42513

        Avoid making unnecessary deep-copies of QPainterPaths that will
        be discarded after use.

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

2010-07-19  Kenneth Russell  <kbr@google.com>

        Reviewed by Nate Chapin.

        WebGL rendering results must be made available to Canvas.toDataURL and 2D drawImage
        https://bugs.webkit.org/show_bug.cgi?id=34719

        Fixed compiler warning introduced by original patch. No new tests;
        covered by existing tests.

        * platform/graphics/mac/GraphicsContext3DMac.mm:
        (WebCore::GraphicsContext3D::paintRenderingResultsToCanvas):

2010-07-19  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler, Adam Roben, Dan Bernstein and Sam Weinig.

        Handle NP_ASFILE and NP_ASFILEONLY transfer modes
        https://bugs.webkit.org/show_bug.cgi?id=42587

        * WebCore.exp.in:
        Export functions from FileSystem.h
        
        * platform/mac/FileSystemMac.mm:
        (WebCore::openTemporaryFile):
        Try to create a temporary file using mkstemp.

2010-07-19  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Implement NPN_PostURLNotify
        https://bugs.webkit.org/show_bug.cgi?id=42602

        Export symbols needed by WebKit2.

        * WebCore.exp.in:

2010-07-19  Tony Gentilcore  <tonyg@chromium.org>

        Unreviewed build fix.

        Remove overzealous ASSERT from r63689
        https://bugs.webkit.org/show_bug.cgi?id=42606

        No new tests because no new functionality.

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

2010-07-19  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Mark Rowe.

        Web Inspector: Do Not Copy *.re2js Inspector Resources in Xcode Build Phase
        https://bugs.webkit.org/show_bug.cgi?id=42601

        Remove *.re2js files after copying them over in the Build Phase. We do
        the same to remove the WebKit.qrc file.

        * WebCore.xcodeproj/project.pbxproj:

2010-07-17  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Darin Fisher.

        [Web Timing] Move times to DocumentLoader and fix bugs in mark points
        https://bugs.webkit.org/show_bug.cgi?id=42512

        Test: fast/dom/webtiming-navigate-within-document.html

        * loader/DocumentLoader.h: Move the FrameLoadTimeline (now call DocumentLoadTiming) to the DocumentLoader.
        (WebCore::DocumentLoader::documentLoadTiming):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopLoading): Set unloadEventEnd on the provisional DocumentLoader. Add some ASSERTs to tighten things up.
        (WebCore::FrameLoader::loadWithDocumentLoader): This was not the right place to set navigationStart. Setting it here caused it to be set before the unload form prompt and caused it to be reset when navigating within the document.
        (WebCore::FrameLoader::finishedLoading): Set responseEnd on the active DocumentLoader.
        (WebCore::FrameLoader::continueLoadAfterWillSubmitForm): This is the right place for navigationStart as defined by the spec.
        * loader/FrameLoader.h: Get rid of FrameLoadTimeline.
        * loader/FrameLoaderTypes.h: Rename FrameLoadTimeline to DocumentLoadTiming. It is even more apparent this doesn't belong in this file now. I am planning to submit a patch moving it out ASAP, but didn't want to muddy this patch with all those build files.
        (WebCore::DocumentLoadTiming::DocumentLoadTiming):
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::willSendRequest): Move fetchStart out of this method to load(), and rewrite setting of redirectStart, redirectEnd, and redirectCount to be more readable.
        (WebCore::MainResourceLoader::load): Set fetchStart slightly earlier here and tighten it up with some ASSERTs.
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::dispatchLoadEvent): Set loadEventStart and loadEventEnd on the DocumentLoader.
        * page/Navigation.cpp:
        (WebCore::Navigation::redirectCount): Retrieve redirectCount from the DocumentLoader.
        * page/Timing.cpp:
        (WebCore::getPossiblySkewedTimeInKnownRange): The skew problem turned out to be due to the fact that chromium's currentTime() implementation only syncs to the system time every 60 seconds. So absolute times across threads may be skewed slightly. I resolved this temporarily by clipping the time from another thread into a known bound. A better long term solution is probably to add a currentTimeFromSystemTime() method and call that for web timing marks.
        (WebCore::Timing::navigationStart):
        (WebCore::Timing::unloadEventEnd):
        (WebCore::Timing::redirectStart):
        (WebCore::Timing::redirectEnd):
        (WebCore::Timing::fetchStart):
        (WebCore::Timing::domainLookupStart):
        (WebCore::Timing::domainLookupEnd):
        (WebCore::Timing::connectStart):
        (WebCore::Timing::connectEnd):
        (WebCore::Timing::requestStart):
        (WebCore::Timing::requestEnd):
        (WebCore::Timing::responseStart):
        (WebCore::Timing::responseEnd):
        (WebCore::Timing::loadEventStart):
        (WebCore::Timing::loadEventEnd):
        (WebCore::Timing::documentLoader):
        (WebCore::Timing::documentLoadTiming):
        (WebCore::Timing::resourceLoadTiming):
        (WebCore::Timing::resourceLoadTimeRelativeToAbsolute): Ensure requestTime is in the range of fetchStart to responseEnd.
        * page/Timing.h:

2010-07-19  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=42118
        Disable WebGL on Leopard for now. 

        LayoutTests fail on some graphics hardware on Leopard because one of the features we use,
        GL_ARB_framebuffer_object, is not universally available in Leopard like it is in
        SnowLeopard. This will allow LayoutTests to pass on Leopard until we add logic to use a
        software OpenGL driver on machines without this support.

        * Configurations/FeatureDefines.xcconfig:

2010-07-19  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Sam Weinig.

        Remove HTML5 media element 'load' event
        https://bugs.webkit.org/show_bug.cgi?id=30464
        <rdar://problem/5650561>

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::HTMLMediaElement): Initialize m_completelyLoaded.
        (WebCore::HTMLMediaElement::parseMappedAttribute): Don't deal with 'load' event.
        (WebCore::HTMLMediaElement::prepareForLoad): Set m_completelyLoaded to false.
        (WebCore::HTMLMediaElement::setNetworkState): Don't post 'load' event.
        (WebCore::HTMLMediaElement::progressEventTimerFired): Bail if m_networkState != NETWORK_LOADING.
        (WebCore::HTMLMediaElement::userCancelledLoad): No more NETWORK_LOADED state.
        * html/HTMLMediaElement.h:
        (WebCore::HTMLMediaElement::):
        * html/HTMLMediaElement.idl: Remove NETWORK_LOADING.

2010-07-19  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=40996
        Progress event should not be fired during synchronous XMLHttpRequest

        https://bugs.webkit.org/show_bug.cgi?id=17502
        Assertion failure when trying to restart a sync XMLHttpRequest as an async one from onreadystatechange

        Tests: http/tests/xmlhttprequest/xmlhttprequest-sync-no-progress-events.html
               http/tests/xmlhttprequest/xmlhttprequest-sync-vs-async-assertion-failure.html

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::callReadyStateChangeListener): We now only dispatch readystatechange
        event for synchronous requests in states UNSENT, OPENED and DONE. I'm not sure what exactly
        the spec draft says about readystatechange for sync requests, but this seems to be the most
        logical and backwards compatible behavior.
        (WebCore::XMLHttpRequest::didReceiveData): Don't dispatch progress events for sync requests.
        Note that we already don't dispatch upload progress events for those.

2010-07-19  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/7232109> Unpainted white area appears at the edge of the page when body has bg color
        https://bugs.webkit.org/show_bug.cgi?id=34913

        Tests: fast/repaint/view-background-from-body-1.html
               fast/repaint/view-background-from-body-2.html

        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::styleWillChange): If this is the body renderer and its current style is
        null, repaint the view, similarly to how the view is repainted for any repaint-or-higher
        style changes.
        * rendering/RenderObjectChildList.cpp:
        (WebCore::RenderObjectChildList::removeChildNode): If the removed child is the body renderer,
        repaint the view, in case the body’s background was propagated to the view.

2010-07-19  Adam Roben  <aroben@apple.com>

        Fix an assertion when a plugin returns -1 from NPP_Write

        We were forgetting to call setDefersLoading(false) before destroying
        the PluginStream. In the process of destroying the stream, someone
        would call setDefersLoading(true), and we would assert because we were
        already deferring loads.

        Fixes <http://webkit.org/b/42563> Assertion failure in
        ResourceHandle::setDefersLoading when running
        plugins/return-negative-one-from-write.html on Windows

        Reviewed by Anders Carlsson.

        * plugins/PluginStream.cpp:
        (WebCore::PluginStream::deliverData): Call setDefersLoading(false)
        before destroying the stream, to match the setDefersLoading(true) call
        earlier in this function. (We already call setDefersLoading(false) in
        the non-error case later on.)

2010-07-19  Rafael Antognolli  <antognolli@profusion.mobi>

        Reviewed by Antonio Gomes.

        [EFL] Fix some EFL theme issues
        https://bugs.webkit.org/show_bug.cgi?id=42569

        Keep a pointer to theme filename and check for it correctly.
        Reduce the scope of some variables.
        Don't test for platformWidget() since we are not using it.

        No new tests, no new functionality.

        * platform/efl/WidgetEfl.cpp:
        (WebCore::Widget::applyCursor):
        (WebCore::Widget::setCursor):

2010-07-19  Rafael Antognolli  <antognolli@profusion.mobi>

        Reviewed by Antonio Gomes.

        [EFL] Add ifdef to compile code just on presence of Ecore_X
        https://bugs.webkit.org/show_bug.cgi?id=42567

        No new tests since there's no new functionality.

        * platform/efl/WidgetEfl.cpp:
        (WebCore::Widget::setEvasObject):
        Add #ifdef HAVE_ECORE_X to it.

2010-07-19  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: add/removeStyleClass shouldn't increase number of spaces between class names.
        https://bugs.webkit.org/show_bug.cgi?id=42485

        * inspector/front-end/utilities.js:
        (Element.prototype.removeStyleClass):

2010-07-19  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: show stack trace for uncaught exceptions when Web Inspector is open.
        https://bugs.webkit.org/show_bug.cgi?id=42560

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::setCaptureCallStackForUncaughtExceptions):
        * bindings/js/ScriptController.h:
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::setCaptureCallStackForUncaughtExceptions):
        * bindings/v8/ScriptController.h:
        * bindings/v8/V8ConsoleMessage.cpp:
        (WebCore::V8ConsoleMessage::dispatchNow):
        (WebCore::V8ConsoleMessage::handler):
        * bindings/v8/V8ConsoleMessage.h:
        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::ConsoleMessage):
        * inspector/ConsoleMessage.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::addMessageToConsole):
        (WebCore::InspectorController::startGroup):
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::disconnectFrontend):
        * inspector/InspectorController.h:
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleMessage.prototype._formatMessage):
        (WebInspector.ConsoleMessage.prototype.toMessageElement):
        (WebInspector.ConsoleMessage.prototype._populateStackTraceTreeElement):
        (WebInspector.ConsoleMessage.prototype._addMessageHeader):
        (WebInspector.ConsoleMessage.prototype.toString):
        * inspector/front-end/inspector.css:
        (.console-message.repeated-message > ol.stack-trace):
        (.section .properties ol, .event-properties ol, .stack-trace ol, ol.stack-trace):
        (ol.stack-trace):
        (.section .properties ol.expanded, .event-properties ol.expanded, .stack-trace ol, ol.stack-trace):
        * page/Console.cpp:
        (WebCore::Console::addMessage):
        * page/Console.h:
        (WebCore::):

2010-07-19  Robin Burchell  <robin.burchell@collabora.co.uk>

        Reviewed by Antonio Gomes

        [Qt] Use memcpy() instead of qMemCopy()
        This is supposed to be more efficient, as the compiler is able to
        optimise more.

        Additionally,  qMemCopy() is only strictly supposed to be used in
        headers (see Qt's src/corelib/qglobal.h for reference)
        See: https://bugs.webkit.org/show_bug.cgi?id=42392

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

2010-07-14  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Canvas: Rename operator==(CanvasStyle,CanvasStyle) since it isn't a proper equality check
        https://bugs.webkit.org/show_bug.cgi?id=42284

        New name is isEquivalentColor(CanvasStyle).

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setStrokeStyle):
        (WebCore::CanvasRenderingContext2D::setFillStyle):
        * html/canvas/CanvasStyle.cpp:
        (WebCore::CanvasStyle::isEquivalentColor):
        * html/canvas/CanvasStyle.h:

2010-07-19  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Canvas: Wrong internal positioning of drawImage() shadows
        https://bugs.webkit.org/show_bug.cgi?id=42510

        * platform/graphics/qt/ImageQt.cpp:
        (WebCore::BitmapImage::draw):
        * platform/graphics/qt/StillImageQt.cpp:
        (WebCore::StillImage::draw):

2010-07-19  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Render shadow when drawing one canvas onto another
        https://bugs.webkit.org/show_bug.cgi?id=42508

        * platform/graphics/qt/StillImageQt.cpp:
        (WebCore::StillImage::draw):

2010-07-19  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Some composition modes fail when color has alpha zero
        https://bugs.webkit.org/show_bug.cgi?id=36973

        Remove erroneous optimization that ignored painting calls when
        the stroke/fill color had an alpha value of zero.

        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::drawLine):
        (WebCore::GraphicsContext::strokeArc):
        (WebCore::GraphicsContext::fillPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::fillRect):
        (WebCore::GraphicsContext::fillRoundedRect):

2010-07-19  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        CSS3 background: Number of layers should be determined by background-image element count
        https://bugs.webkit.org/show_bug.cgi?id=41201

        Manual test: css3-background-layer-count.html

        Spec link:
        http://www.w3.org/TR/css3-background/#layering

        * manual-tests/css3-background-layer-count.html: Added.
        * rendering/style/FillLayer.cpp:
        (WebCore::FillLayer::fillUnsetProperties): Don't repeat
        image properties, they determine the total number of layers.
        (WebCore::FillLayer::cullEmptyLayers): Change culling logic
        to discard all layers after the first one without an image set.
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::adjustBackgroundLayers): Call
        fillUnsetProperties() before cullEmptyLayers()
        (WebCore::InheritedFlags::adjustMaskLayers): Ditto.

2010-07-19  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Avoid QImage::pixel() in getImageData()
        https://bugs.webkit.org/show_bug.cgi?id=42463

        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::getImageData): Use QImage::scanLine() instead
        of fetching data pixel-by-pixel.

2010-07-19  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: hide "toggle debugger" button when debugger is always enabled
        https://bugs.webkit.org/show_bug.cgi?id=42558

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

2010-07-19  Hans Wennborg  <hans@chromium.org>

        Reviewed by Steve Block.

        Explicitly declare DeviceOrientationEvent destructor and define it in the .cpp file
        https://bugs.webkit.org/show_bug.cgi?id=42466

        (Original problem at https://bugs.webkit.org/show_bug.cgi?id=42447)

        No new functionality so no new tests.

        * dom/DeviceOrientationEvent.cpp:
        (WebCore::DeviceOrientationEvent::~DeviceOrientationEvent):
        Move here to avoid needing to have the full declaration of
        DeviceOrientation in DeviceOrientationEvent.h.
        * dom/DeviceOrientationEvent.h:

2010-07-18  Anders Carlsson  <andersca@apple.com>

        Fix Build.

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintSearchFieldResultsDecoration):

2010-07-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Always set the current NSGraphicsContext before calling drawWithFrame
        https://bugs.webkit.org/show_bug.cgi?id=42542

        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintMeter):
        (WebCore::RenderThemeMac::paintSearchField):
        (WebCore::RenderThemeMac::paintSearchFieldCancelButton):
        (WebCore::RenderThemeMac::paintSearchFieldResultsDecoration):
        (WebCore::RenderThemeMac::paintSearchFieldResultsButton):

2010-07-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Move PluginWidget to WebKit
        https://bugs.webkit.org/show_bug.cgi?id=42530

        Rename the PluginWidget class to PluginViewBase and make it an abstract base class.
        
        This is a stopgap measure until we have a single PluginView class that we can use everywhere.

        * WebCore.exp.in:
        Remove PluginWidget symbols.

        * WebCore.xcodeproj/project.pbxproj:
        Update.

        * platform/Widget.h:
        (WebCore::Widget::isPluginViewBase):
        Return false.

        * plugins/PluginViewBase.h: Added.
        (WebCore::PluginViewBase::platformLayer):
        Always return 0 here now.

        (WebCore::PluginViewBase::isPluginViewBase):
        Return true.

        * plugins/PluginWidget.h: Removed.
        * plugins/mac/PluginWidgetMac.mm: Removed.
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::allowsAcceleratedCompositing):
        Cast to PluginWidgetBase instead.
        
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerConfiguration):
        Cast to PluginWidgetBase instead.

2010-07-18  Dean Jackson  <dino@apple.com>

        Unreviewed.

        Remove the unwanted extra line that Xcode
        added in my last commit.

        * WebCore.xcodeproj/project.pbxproj:

2010-07-18  Dean Jackson  <dino@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=41259
        Interacting with a <select> element within a transformed and clipped
        container scrolls the container

        The Node::getRect and ContainerNode::getRect functions were not
        transform-aware. This fixes both, and has a test to make sure
        we're not breaking any existing scrollToView code. This means
        that a <select> popup will appear in the correct place if it
        is within a transformed and scrolled container.

        Test: fast/transforms/scrollIntoView-transformed.html

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::getUpperLeftCorner):
        (WebCore::ContainerNode::getLowerRightCorner):
        - make sure we call localToAbsolute in the right order
        (after we've done a local move) and pass in the flags to
        indicate it should look for transforms.
        * dom/Node.cpp:
        (WebCore::Node::getRect):
        - make sure localToAbsolute gets told to look for transforms.

2010-07-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add NPJSObjectMap class
        https://bugs.webkit.org/show_bug.cgi?id=42524

        Export ScriptController functions.

        * WebCore.exp.in:

2010-07-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Implement some NPRuntime related NPN_ functions
        https://bugs.webkit.org/show_bug.cgi?id=42518

        * WebCore.exp.in:
        Export IdentifierRep functions.

2010-07-17  TJ Lee  <tjlee0909@gmail.com>

        Reviewed by Timothy Hatcher.

        HTMLLinkElement ignores dnsPrefetchingEnabled setting
        https://bugs.webkit.org/show_bug.cgi?id=42500

        Changed the HTML Link tag to check that the browser
        has DNS-prefetching enabled before calling ResourceHandle::prepareForURL.

        There are no test cases for this patch because it was unclear how to test
        this using a layout test. A possible test case would be to
        clear the DNS cache on the client's machine before loading a page with
        <link rel="dns-prefetch" href="SomeSiteThatsNotTheCurrentOne.com"> and
        then check the number of DNS cache entries.

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

2010-07-16  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Sam Weinig.

        Asynchronous policy checks make FrameLoader think it is done loading prematurely
        https://bugs.webkit.org/show_bug.cgi?id=42489

        This caused many (~100) layout tsts to fail under WebKit2.

        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::loadSubframe): Right after loading a new subframe,
        if m_complete is true, do not consider it done if it has a provisional loader.
        This will happen in the case where the policy check is asynchronous.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::subframeIsLoading): For similar reasons,
        consider a subframe to be loading if it has a policy decision pending.

2010-07-15  Qi Zhang  <qi.2.zhang@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Failure on http://philip.html5.org/tests/canvas/suite/tests/2d.shadow.alpha.5.html
        https://bugs.webkit.org/show_bug.cgi?id=38400

        FillRect with shadow need take alpha information from fillstyle

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

2010-07-17  Nikita Vasilyev  <me@elv1s.ru>

        Reviewed by Pavel Feldman.

        Web Inspector: [REGRESSION] Edit long CSS attributes works incorrect
        https://bugs.webkit.org/show_bug.cgi?id=42476

        * inspector/front-end/inspector.css:
        (.editing):

2010-07-16  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Sam Weinig.

        Failing 2d.path.arcTo.ensuresubpath.* philip canvas tests
        https://bugs.webkit.org/show_bug.cgi?id=42186

        Move code from Qt's Path::addArcTo() up to CanvasRenderingContext2D.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::arcTo): Behave as moveTo(x1,y1)
        if the current path is empty.
        * platform/graphics/qt/PathQt.cpp:
        (WebCore::Path::addArcTo): Remove now-redundant code.

2010-07-16  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Oliver Hunt.

        QtWebkit creates an unnecessary deep copy of images when canvas drawing is done
        A https://bugs.webkit.org/show_bug.cgi?id=32530

        Solve this by adding ImageBuffer::imageForRendering() which returns an image
        that can be used for rendering now, but isn't a copy to be kept around.

        * platform/graphics/ImageBuffer.h:
        (WebCore::ImageBuffer::imageForRendering):
        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::ImageBuffer::imageForRendering): Added to provide an image that can
        be used for rendering now, but may change in the future.
        * platform/graphics/qt/StillImageQt.cpp:
        (WebCore::StillImage::StillImage):
        (WebCore::StillImage::~StillImage):
        (WebCore::StillImage::size):
        (WebCore::StillImage::nativeImageForCurrentFrame):
        (WebCore::StillImage::draw):
        * platform/graphics/qt/StillImageQt.h:
        (WebCore::StillImage::createForRendering): Added for use in
        ImageBuffer::imageForRendering(), provides a thin wrapper around a QPixmap*.
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::paint): Paint with ImageBuffer::imageForRendering()

2010-07-16  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Oliver Hunt.

        [Qt] Remove redundant logic in Path::addArcTo()
        https://bugs.webkit.org/show_bug.cgi?id=42494

        Bounds checking for arcTo() is now done in cross-platform code
        thanks to <http://trac.webkit.org/changeset/63599>

        * platform/graphics/qt/PathQt.cpp:
        (WebCore::Path::addArcTo):

2010-07-16  Zhe Su  <suzhe@chromium.org>

        Reviewed by Darin Adler.

        REGRESSION(r61484): Broke focus behaviour on Qt and probably other platforms
        https://bugs.webkit.org/show_bug.cgi?id=42253

        This patch just reverts the change to WebCore/page/FocusController.cpp
        made in changeset 61484, and add a new method named
        willSetInputMethodState in EditorClient interface, which gets called
        in FocusController just before changing the focused node.

        No new tests, because no new functionality.

        * loader/EmptyClients.h:
        (WebCore::EmptyEditorClient::willSetInputMethodState):
        * page/EditorClient.h:
        * page/FocusController.cpp:
        (WebCore::FocusController::setFocusedNode):

2010-07-16  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Sam Weinig.

        Failing 2d.path.stroke.prune.arc philip canvas test
        https://bugs.webkit.org/show_bug.cgi?id=42188

        * html/canvas/CanvasRenderingContext2D.cpp: 
        Note, updated parameter names to match spec.
        (WebCore::CanvasRenderingContext2D::lineTo): Pulled bound checking code out of lower code to have checks for all platforms.
        (WebCore::CanvasRenderingContext2D::arcTo): Bound checking per the spec for arcTo parameters. Updated parameter names to match spec.
        * platform/graphics/Path.h: Added in new method to expose the current position.
        * platform/graphics/cairo/PathCairo.cpp:
        (WebCore::Path::currentPoint): Added in likely correct implementation for this call with a FIXME just in case.
        * platform/graphics/cg/PathCG.cpp:
        (WebCore::Path::currentPoint): Added in support for this call.
        * platform/graphics/haiku/PathHaiku.cpp:
        (WebCore::Path::currentPoint): Added in stub for this call.
        * platform/graphics/openvg/PathOpenVG.cpp:
        (WebCore::Path::currentPoint): Added in likely implementation for this call with a FIXME just in case.
        * platform/graphics/qt/PathQt.cpp:
        (WebCore::Path::currentPoint): Added in implementation for this call courtesy of Andrea Kling.
        * platform/graphics/skia/PathSkia.cpp:
        (WebCore::Path::currentPoint): Added in stub for this call.
        * platform/graphics/wince/PathWince.cpp:
        (WebCore::Path::currentPoint): Added in stub for this call.
        * platform/graphics/wx/PathWx.cpp:
        (WebCore::Path::currentPoint): Added in stub for this call.

2010-07-16  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r63593.
        http://trac.webkit.org/changeset/63593
        https://bugs.webkit.org/show_bug.cgi?id=42487

        Broke a few chromium pixel tests (Requested by tony^work on
        #webkit).

        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::drawConvexPolygon):
        (WebCore::GraphicsContext::drawEllipse):
        (WebCore::GraphicsContext::drawLine):
        (WebCore::GraphicsContext::strokeArc):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::strokeRect):

2010-07-16  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        Part of <rdar://problem/7233974> Deprecate +[WebView _setShouldUseFontSmoothing:]
        https://bugs.webkit.org/show_bug.cgi?id=29355

        * WebCore.exp.in: Updated.
        * platform/graphics/Font.cpp:
        (WebCore::Font::Font): Added a font smoothing mode parameter to the constructor.
        Set the font smoothing mode in the font description.
        * platform/graphics/Font.h:

2010-07-16  Satish Sampath  <satish@chromium.org>

        Reviewed by Anders Carlsson.

        Add speech attribute to IDL for enabling access from JS.
        https://bugs.webkit.org/show_bug.cgi?id=42483

        No tests added, this change is a pre-requisite for future layout tests.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::parseMappedAttribute): Update the renderer when speech attribute changes.
        * html/HTMLInputElement.idl: Added the speech attribute to IDL.

2010-07-16  Fady Samuel  <fsamuel@chromium.org>

        Reviewed by David Levin.
        
        Avoids adding stroke when stroke-width is zero.

        SVG - stroke-width:0 bug with stroke other than "none"
        https://bugs.webkit.org/show_bug.cgi?id=42387

        Test: svg/stroke/path-zero-strokewidth-test.svg

        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::drawConvexPolygon):
        (WebCore::GraphicsContext::drawEllipse):
        (WebCore::GraphicsContext::drawLine):
        (WebCore::GraphicsContext::strokeArc):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::GraphicsContext::strokeRect):

2010-07-16  Kent Tamura  <tkent@chromium.org>

        Unreviewed, build fix.

        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore::RenderThemeChromiumWin::getThemeData): Fix a typo.

2010-07-16  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Fisher.

        [Chromium] <input type=number> UI implementation for Windows
        https://bugs.webkit.org/show_bug.cgi?id=42259

        No additional tests.  Existing tests cover this change and we'll
        update expectations.

        * platform/chromium/ChromiumBridge.h: Add paintSpinButton().
        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore::RenderThemeChromiumWin::determineState):
         Add ControlSubPart parameter and add support for spin buttons.
        (WebCore::RenderThemeChromiumWin::determineClassicState): ditto.
        (WebCore::RenderThemeChromiumWin::getThemeData): ditto.
        (WebCore::RenderThemeChromiumWin::adjustInnerSpinButtonStyle): Added.
        (WebCore::RenderThemeChromiumWin::paintInnerSpinButton): Added.
        * rendering/RenderThemeChromiumWin.h:
          Declare ControlSubpart, and add it to some functions.

2010-07-16  Lucas De Marchi  <lucas.demarchi@profusion.mobi>

        Reviewed by Antonio Gomes.

        [EFL] Use function provided by EFL for system beep
        https://bugs.webkit.org/show_bug.cgi?id=42481

        EFL port does not support automated tests, yet.

        * platform/efl/SoundEfl.cpp:
        (WebCore::systemBeep):

2010-07-16  Sarah Strong  <sarah.e.strong@gmail.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] Clipboard data is lost on exit
        https://bugs.webkit.org/show_bug.cgi?id=27411

        No new tests. To manually test the bug fixed by this patch:
        1) Open an application that uses a webkit webview on a GNOME-based system
        2) Copy some text from that application
        3) Optional: paste it to another application. This should work properly with and without this patch.
        4) Exit the application completely.
        5) Paste:
                  Without this patch, you cannot because your clipboard is empty.
                  With this patch, pasting succeeds.
        I have not included an automated test because of the difficulty of testing behaviour after application exit.

2010-07-16  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Fisher.

        Keyboard operations for <input type=number>
        https://bugs.webkit.org/show_bug.cgi?id=42076

        - The up arrow key works as stepUp().
        - The down arrow key works as stepDown().
        - Reject characters other than + - 0-9 . e E

        Test: fast/forms/input-number-keyoperation.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::defaultEventHandler):
         Add up/down arrow keys support, and call handleBeforeTextInsertedEvent().
        (WebCore::isNumberCharacter):
        (WebCore::HTMLInputElement::handleBeforeTextInsertedEvent):
         For type=number, remove unacceptable characters.
        * html/HTMLInputElement.h:

2010-07-16  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Fisher.

        Improve hover state handling for spin buttons
        https://bugs.webkit.org/show_bug.cgi?id=42260

        Background:
        When we move the mouse cursor to a node from the outside of the node,
        the following steps are executed.
         1. setHovered(true) is called.
         2. The node is repainted for the hover state.
         3. 'mousemove' event is dispatched for the node.
        For a spin-button, RenderTheme::paint{Inner,Outer}SpinButton() is
        called before the event handler of the spin-button. So we can't
        detect which of the up part or the down part is hovered correctly.

        Solution:
        The hover state of a spin-button is one of three states;
        Indeterminate, Up, and Down. The state is Indeterminate since
        setHovered(true) is called and until 'mousemove' event is
        dispatched.

        No new tests because there are no implementation of spin-buttons
        with hovered state yet.

        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::isSpinUpButtonPartPressed):
        (WebCore::RenderTheme::isHovered):
         Return false if the node is a spin-button and the state is Indeterminate.
        (WebCore::RenderTheme::isSpinUpButtonPartHovered):
        * rendering/TextControlInnerElements.cpp:
        (WebCore::SpinButtonElement::SpinButtonElement):
         Initialize m_upDownState.
        (WebCore::SpinButtonElement::defaultEventHandler):
        (WebCore::SpinButtonElement::setHovered):
         Set the state to Indeterminate.
        * rendering/TextControlInnerElements.h:
        (WebCore::SpinButtonElement::upDownState):

2010-07-16  Dan Bernstein  <mitz@apple.com>

        Reviewed by Simon Fraser.

        <rdar://problem/7527532> Crash beneath setSelection() during detach()
        https://bugs.webkit.org/show_bug.cgi?id=42020

        No test because I am unable to reproduce the crash.

        * rendering/RenderView.cpp:
        (WebCore::RenderView::setSelection): In the clearSelection() case, where the repaint mode is
        RepaintNewMinusOld, avoid making RenderBlockSelectionInfo instances, and thereby avoid calling
        localToAbsolute() during detach().

2010-07-16  Anders Carlsson  <andersca@apple.com>

        Fix release build.

        * storage/Database.cpp:
        (WebCore::DerefContextTask::performTask):

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

        Reviewed by Sam Weinig.

        Safari pegs CPU and drops frames on http://neography.com/experiment/circles/solarsystem/ (CSS animations)
        https://bugs.webkit.org/show_bug.cgi?id=41409
        
        AnimationController::isAnimatingPropertyOnRenderer() really asked whether an accelerated animation
        or transition was running. This prevented us from falling into compositing layers for animation
        on platforms, like Windows, that don't have accelerated animations.
        
        Fix by making things more explicit: we now have two methods, isRunningAnimationOnRenderer()
        and isRunningAcceleratedAnimationOnRenderer().
        
        Changes are more extensive because I flipped the sense of 'm_fallbackAnimating', which is
        now 'm_isAccelerated', for clarity.

        Test: compositing/animation/animation-compositing.html

        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::AnimationBase): m_fallbackAnimating -> m_isAccelerated
        (WebCore::AnimationBase::blendProperties): Ditto.
        (WebCore::AnimationBase::updateStateMachine): Ditto.
        * page/animation/AnimationBase.h:
        (WebCore::AnimationBase::isAnimatingProperty): Takes new acceleratedOnly parameter
        which causes the method to only return true if the animation is accelerated.
        (WebCore::AnimationBase::isAccelerated): Changed from isFallbackAnimating.

        * page/animation/AnimationController.cpp:
        (WebCore::AnimationControllerPrivate::isRunningAnimationOnRenderer):
        (WebCore::AnimationControllerPrivate::isRunningAcceleratedAnimationOnRenderer):
        (WebCore::AnimationController::isRunningAnimationOnRenderer):
        (WebCore::AnimationController::isRunningAcceleratedAnimationOnRenderer):

        * page/animation/CompositeAnimation.h:
        * page/animation/AnimationController.h: Rename isAnimatingPropertyOnRenderer(), add
        isRunningAcceleratedAnimationOnRenderer().
        * page/animation/AnimationControllerPrivate.h: Ditto.
        * page/animation/CompositeAnimation.cpp:
        (WebCore::CompositeAnimation::updateTransitions): !isFallbackAnimating() -> isAccelerated().
        (WebCore::CompositeAnimation::isAnimatingProperty): Pass acceleratedOnly down.

        * page/animation/ImplicitAnimation.cpp:
        (WebCore::ImplicitAnimation::timeToNextService): !isFallbackAnimating() -> isAccelerated().

        * page/animation/KeyframeAnimation.cpp:
        (WebCore::KeyframeAnimation::timeToNextService): isFallbackAnimating() -> !isAccelerated().

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry): Avoid touching the transform or
        opacity if an accelerated animation is running.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::requiresCompositingForAnimation): Make compositing layers
        if an animation of transform or opacity is running.

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

        Reviewed by Sam Weinig.

        Assertion when turning Accelerated Compositing off on a composited page
        https://bugs.webkit.org/show_bug.cgi?id=42408

        When accelerated compositing is turned off, check m_hasAcceleratedCompositing
        before saying that the root layer will be composited. Fixes an assertion.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):

2010-07-16  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Simon Fraser.

        Spatial navigation: do not consider outline for focusable element boundaries
        https://bugs.webkit.org/show_bug.cgi?id=42474

        Test: fast/events/spatial-navigation/snav-zero-margin-content.html

        Currently in WebCore::renderRectRelativeToRootDocument function, we are calling
        RenderObject::absoluteClippedOverflowRect to obtain the rect boundary of a given
        renderer/element. This method deals with outline, which is out of elements boundary.
        It makes spatial navigation to fail on common sites like google.gom: "Web, Images, Map, etc"
        are inaccessible.

        Patch replaces RenderObject::absoluteClippedOverflowRect by Node::getRect,
        which returns only the absolute bounding box rect of the Element.

        * page/SpatialNavigation.cpp:
        (WebCore::renderRectRelativeToRootDocument):
        (WebCore::checkNegativeCoordsForNode):

2010-07-15  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Gustavo Noronha.

        [Qt] Remove unnecessary WebKit headers inclusion from WebCore files
        https://bugs.webkit.org/show_bug.cgi?id=42416

        There are some places in WebCore unnecessarily including WebKit headers.

        Cleaning up only, no testing needed.

        * platform/network/qt/ResourceHandleQt.cpp:
        * platform/qt/RenderThemeQt.cpp:
        * platform/qt/WidgetQt.cpp:

2010-07-16  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        Refinement of r63556: moved the tab width computation back to Font, but added a
        SimpleFontData parameter.

        * platform/graphics/Font.h:
        (WebCore::Font::tabWidth):
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::advance):
        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::ComplexTextController::adjustGlyphsAndAdvances):

2010-07-16  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Pavel Feldman.

        Fix unit error in calculating timings from ResourceLoadTiming API
        https://bugs.webkit.org/show_bug.cgi?id=42473

        The start and end offsets are already in milliseconds so they should not be multiplied by 1000.0 like requestTime.

        No new tests because, for a yet unknown reason, the ResourceLoadTiming API is not populated in the chromium test shell like it is in full chromium. This means the test that would have caught this bug (fast/dom/webtiming.html) currently has its expectation set to FAIL.

        * page/Timing.cpp:
        (WebCore::Timing::domainLookupStart):
        (WebCore::Timing::domainLookupEnd):
        (WebCore::Timing::connectStart):
        (WebCore::Timing::connectEnd):
        (WebCore::Timing::requestStart):
        (WebCore::Timing::requestEnd):
        (WebCore::Timing::responseStart):

2010-07-16  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        clang++ build fixes for JavaScriptCore and WebCore
        https://bugs.webkit.org/show_bug.cgi?id=42478

        * platform/network/Credential.cpp:
        (WebCore::Credential::type):
        * platform/network/Credential.h:
        Remove const qualifier on Credential::type since it doesn't have an effect on the type.

2010-07-16  Anders Carlsson  <andersca@apple.com>

        Reviewed by David Levin.

        Really add WARN_UNUSED_RESULT to leakRef
        https://bugs.webkit.org/show_bug.cgi?id=42464

        Get rid of a call to releaseRef here by passing the ScriptExecutionContext
        reference through to the DerefContextTask.

        * storage/Database.cpp:
        (WebCore::DerefContextTask::create):
        (WebCore::DerefContextTask::performTask):
        (WebCore::DerefContextTask::DerefContextTask):
        (WebCore::Database::~Database):

2010-07-16  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        WebInspector: The current implementation of generator is not ready
        for generation Backend part of Inspector interface. The full patch
        with Backend is quite big and I've split it.
        https://bugs.webkit.org/show_bug.cgi?id=42462

        * inspector/CodeGeneratorInspector.pm:
        * inspector/Inspector.idl:
        * inspector/InspectorValues.cpp:
        (WebCore::InspectorArray::get):
        * inspector/InspectorValues.h:
        (WebCore::InspectorArray::length):

2010-07-15  Rob Buis  <rwlbuis@gmail.com>

        Reviewed by Darin Adler.

        An empty value for xml:lang isn't considered
        https://bugs.webkit.org/show_bug.cgi?id=42042

        Allow :lang selector to match empty values for xml:lang and
        lang attributes.

        Test: fast/css/lang-selector-empty-attribute.xhtml

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

2010-07-16  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Shift-Enter does not do a reverse search. It searches forward.
        https://bugs.webkit.org/show_bug.cgi?id=42459

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

2010-07-16  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: do not include SSL time into Waiting time.

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

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

2010-07-16  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        <rdar://problem/8198266> white-space: pre text containing tabs is not laid out correctly when the font lacks a space glyph
        https://bugs.webkit.org/show_bug.cgi?id=42437

        No test because none of the fonts available to DumpRenderTree are missing a space glyph.

        Changed the tab width computation to use the width of the space glyph from the font that has
        a space glyph, which may be a fallback font if the primary font lacks a space glyph.

        * platform/graphics/Font.h: Removed Font::tabWidth().
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::advance):
        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::ComplexTextController::adjustGlyphsAndAdvances):

2010-07-16  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Chromium build fix. Add missing include.

        * inspector/ConsoleMessage.h:

2010-07-16  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Antonio Gomes.

        [Qt] Path: Avoid creating a new GraphicsContext in strokeContains() and strokeBoundingRect()
        https://bugs.webkit.org/show_bug.cgi?id=42456

        * platform/graphics/qt/PathQt.cpp:
        (WebCore::scratchContext): Added, provides a scratch GraphicsContext.
        (WebCore::Path::strokeContains): Use the scratch context instead
        of creating a new GraphicsContext.
        (WebCore::Path::strokeBoundingRect): Ditto.

2010-07-16  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        [V8] V8Proxy::retrieve may return null if javascript is disabled. Add a check
        to avoid crashes in inspected page.
        https://bugs.webkit.org/show_bug.cgi?id=42065

        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::addListener):

2010-07-16  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: add SSL time label into the resources popover.

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

        * English.lproj/localizedStrings.js:
        * inspector/InspectorResource.cpp:
        (WebCore::InspectorResource::buildObjectForTiming):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype._showPopover):

2010-07-16  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: disable AppCache in chromium.

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

        * inspector/front-end/Settings.js:
        * inspector/front-end/StoragePanel.js:
        (WebInspector.StoragePanel):
        (WebInspector.StoragePanel.prototype.reset):
        (WebInspector.StoragePanel.prototype.addApplicationCache):

2010-07-16  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        console.trace should show file and line number for each function in the stack
        https://bugs.webkit.org/show_bug.cgi?id=21180

        Test: inspector/console-trace.html

        * bindings/js/ScriptCallStack.cpp:
        (WebCore::ScriptCallStack::initialize):
        * bindings/v8/ScriptCallFrame.cpp:
        (WebCore::ScriptCallFrame::ScriptCallFrame):
        * bindings/v8/ScriptCallFrame.h:
        * bindings/v8/ScriptCallStack.cpp:
        (WebCore::getFrameLocation):
        (WebCore::toScriptCallFrame):
        (WebCore::ScriptCallStack::create):
        (WebCore::ScriptCallStack::ScriptCallStack):
        (WebCore::ScriptCallStack::at):
        (WebCore::ScriptCallStack::size):
        * bindings/v8/ScriptCallStack.h:
        * bindings/v8/custom/V8ConsoleCustom.cpp:
        (WebCore::V8Console::traceCallback):
        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::CallFrame::CallFrame):
        (WebCore::ConsoleMessage::CallFrame::isEqual):
        (WebCore::ConsoleMessage::CallFrame::createFrontendObject):
        (WebCore::ConsoleMessage::ConsoleMessage):
        (WebCore::ConsoleMessage::addToFrontend):
        (WebCore::ConsoleMessage::isEqual):
        * inspector/ConsoleMessage.h:
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleMessage.prototype._formatMessage):
        (WebInspector.ConsoleMessage.prototype._createStackTraceElement):
        (WebInspector.ConsoleMessage.prototype._createSourceUrlLink):
        * inspector/front-end/inspector.css:
        (.console-message.expandable > .console-message-text::before):
        (.console-message.expandable.collapsed > .console-message-text::before):
        (.console-message.expandable.collapsed > ol.stack-trace):
        (.console-message > ol.stack-trace):
        (.console-message.repeated-message > ol.stack-trace):
        (.console-message.repeated-message > ol.stack-trace.trace-message):
        * page/Console.idl:

2010-07-16  Lucas De Marchi  <lucas.demarchi@profusion.mobi>

        Reviewed by Antonio Gomes.

        [EFL] Build with MathML enabled. Fix build when MathML is enabled and
        make it the default.
        https://bugs.webkit.org/show_bug.cgi?id=42453

        EFL port does not support automated tests, yet.

        * CMakeLists.txt: add missing source file and sort.

2010-07-16  Hans Wennborg  <hans@chromium.org>

        Reviewed by Steve Block.

        DeviceOrientationEvent.h should not forward-declare DeviceOrientation
        https://bugs.webkit.org/show_bug.cgi?id=42447

        When destructing m_orientation, DeviceOrientation cannot be an incomplete type.

        * dom/DeviceOrientationEvent.h:

2010-07-16  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        gradientTransform + objectBoundingBox is wrong
        https://bugs.webkit.org/show_bug.cgi?id=42446

        gradientTransform + gradientUnits="objectBoundingBox" is wrong. Reverse multiplication order of both transforms.

        * rendering/RenderSVGResourceGradient.cpp: s/multiply/multLeft/

2010-07-16  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Make JS memory stats available via 'Performance' object (Web Timing).
        This statistics is populated only if 'WebKitMemoryInfoEnabled'
        preference is set.

        'console.memory' is kept until Web Timing object becomes visible by
        default (currently it is hidden under compile-time flag).  These stats
        are guarded with the same preference.

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

        * bindings/js/JSConsoleCustom.cpp:
        * bindings/v8/custom/V8ConsoleCustom.cpp:
        * page/Console.cpp:
        (WebCore::Console::disconnectFrame):
        (WebCore::Console::memory):
        * page/Console.h:
        * page/Console.idl:
        * page/MemoryInfo.cpp:
        (WebCore::MemoryInfo::MemoryInfo):
        * page/MemoryInfo.h:
        (WebCore::MemoryInfo::create):
        * page/Performance.cpp:
        (WebCore::Performance::disconnectFrame):
        (WebCore::Performance::memory):
        * page/Performance.h:
        * page/Performance.idl:
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h:
        (WebCore::Settings::setMemoryInfoEnabled):
        (WebCore::Settings::memoryInfoEnabled):

2010-07-16  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Convolution computation causes bad alpha channel values
        https://bugs.webkit.org/show_bug.cgi?id=42273

        Unbreak the convolve matrix filter, fixing svg/W3C-SVG-1.1/filters-conv-01-f.svg.

        1) Fix clamping the rgb values:
        "image->set(pixel++, clampRGBAValue(totals[0], maxAlpha));" totals[0] -> totals[i].

        2) Don't apply the divisior divison and bias addition multiple times, accumulated!
    
        * svg/graphics/filters/SVGFEConvolveMatrix.cpp:
        (WebCore::setDestinationPixels): Fix two evil bugs, breaking feConvolveMatrix.

2010-07-16  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        relative positioning does not work for radialGradient after window resize
        https://bugs.webkit.org/show_bug.cgi?id=41249

        Redesign the way resources are invalidated. No longer utilize the DOM tree, specifically SVGStyledElement::svgAttributeChanged(), to invalidate
        all resources in the ancestor chain (including itself) when any attribute changes. rect.setAttribute("foo", "bar") should never invalidate the
        resources. Also the old approach didn't work correctly if the root layout changed (eg. window size change) - we failed to invalidate the resources,
        thus leading to wrong renderings.

        Instead of calling setNeedsLayout(true) from the SVG*Element classes, call RenderSVGResource::markForLayoutAndParentResourceInvalidation(), which
        does the same thing and invalidates all resources in the ancestor chain (removing the cached results from the HashMaps). This only happens from
        the various svgAttributeChanged() methods, if we know which attribute changed, and what action has to be taken.

        All SVG renderers now invalidate their own resources on layout() if the layout changed (selfNeedsLayout()=true). The resources will be recreated
        and cached during the following paint() call.

        Tests: svg/custom/marker-child-changes-css.svg
               svg/custom/relative-sized-content-with-resources.xhtml

        * rendering/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::layout): If our layout changed, invalidate our resources, by calling RenderSVGResource::invalidateAllResourcesOfRenderer().
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::layout): Ditto.
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::layout): Ditto.
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::layout): Ditto.
        * rendering/RenderSVGModelObject.cpp:
        (WebCore::RenderSVGModelObject::styleDidChange): Added, to invalidate resources on CSS changes, covered by new svg/custom/marker-child-changes-css.svg test.
        * rendering/RenderSVGModelObject.h:
        * rendering/RenderSVGResource.cpp:
        (WebCore::RenderSVGResource::markForLayoutAndResourceInvalidation): Add new "needsBoundaries" parameter, calling setNeedsBoundaries() on the target render object,
                                                                            simplifying all RenderSVGResource* code.
        (WebCore::RenderSVGResource::markForLayoutAndParentResourceInvalidation): New static method used from DOM tree to invalidate all cached resources in the ancestor chain
                                                                                  for a render object. Also marks the renderer for layout, if needed. 
        * rendering/RenderSVGResource.h:
        * rendering/RenderSVGResourceClipper.cpp: Simplify code, remove no longer needed hacks, as invalidation is now carried out by render tree.
        (WebCore::RenderSVGResourceClipper::RenderSVGResourceClipper): Add m_invalidationBlocked hack, to avoid invalidations, while we're mutating the render styles (which is a hack!).
        (WebCore::RenderSVGResourceClipper::invalidateClients): Don't do anything if m_invalidationBlocked=true.
        (WebCore::RenderSVGResourceClipper::invalidateClient): Ditto.
        (WebCore::RenderSVGResourceClipper::createClipData): Set m_invalidationBlocked before mutating render styles, as they are restored immediately after creating the clip image.
        (WebCore::RenderSVGResourceClipper::resourceBoundingBox): Remove no longer needed hack to initialize ClipperData earlier than applyResource() would do.
        * rendering/RenderSVGResourceClipper.h:
        * rendering/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::invalidateClients): Simplify code using markForLayoutAndResourceInvalidation.
        (WebCore::RenderSVGResourceFilter::invalidateClient): Remove wrong assertion.
        * rendering/RenderSVGResourceGradient.cpp:
        (WebCore::RenderSVGResourceGradient::invalidateClients): Simplify code using markForLayoutAndResourceInvalidation.
        (WebCore::RenderSVGResourceGradient::invalidateClient): Remove wrong assertion.
        * rendering/RenderSVGResourceMarker.cpp:
        (WebCore::RenderSVGResourceMarker::invalidateClients): Simplify code using markForLayoutAndResourceInvalidation.
        (WebCore::RenderSVGResourceMarker::invalidateClient): Remove wrong assertion.
        * rendering/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::invalidateClients): Simplify code using markForLayoutAndResourceInvalidation.
        (WebCore::RenderSVGResourceMasker::invalidateClient): Remove wrong assertion.
        (WebCore::RenderSVGResourceMasker::resourceBoundingBox): Remove no longer needed hack to initializer MaskerData earlier than applyResource() would do.
        * rendering/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::invalidateClients): Simplify code using markForLayoutAndResourceInvalidation.
        (WebCore::RenderSVGResourcePattern::invalidateClient): Remove wrong assertion.
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::layout): If our layout changed, invalidate our resources, by calling RenderSVGResource::invalidateAllResourcesOfRenderer().
        * svg/SVGAnimateMotionElement.cpp:
        (WebCore::SVGAnimateMotionElement::applyResultsToTarget): Call RenderSVGResource::markForLayoutAndParentResourceInvalidation(renderer) instead of renderer->setNeedsLayout(true).
        * svg/SVGAnimateTransformElement.cpp:
        (WebCore::SVGAnimateTransformElement::applyResultsToTarget): Ditto.
        * svg/SVGCircleElement.cpp:
        (WebCore::SVGCircleElement::svgAttributeChanged): Ditto.
        * svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::svgAttributeChanged): Ditto.
        * svg/SVGFEImageElement.cpp:
        (WebCore::SVGFEImageElement::notifyFinished): Ditto.
        * svg/SVGForeignObjectElement.cpp:
        (WebCore::SVGForeignObjectElement::svgAttributeChanged): Ditto.
        * svg/SVGGElement.cpp:
        (WebCore::SVGGElement::svgAttributeChanged): Ditto.
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::svgAttributeChanged): Ditto.
        * svg/SVGLineElement.cpp:
        (WebCore::SVGLineElement::svgAttributeChanged): Ditto.
        * svg/SVGPathElement.cpp:
        (WebCore::SVGPathElement::svgAttributeChanged): Ditto.
        * svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::svgAttributeChanged): Ditto.
        * svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::svgAttributeChanged): Ditto.
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::setCurrentScale): Ditto.
        (WebCore::SVGSVGElement::svgAttributeChanged): Ditto.
        (WebCore::SVGSVGElement::inheritViewAttributes): Ditto.
        * svg/SVGStopElement.cpp:
        (WebCore::SVGStopElement::SVGStopElement): Changed m_offset initialization from 0.0f to 0.
        (WebCore::SVGStopElement::svgAttributeChanged): Add missing implementation, calling RenderSVGResource::markForLayoutAndParentResourceInvalidation(renderer) on offsetAttr changes.
        * svg/SVGStopElement.h:
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::svgAttributeChanged): Don't call invalidateResourceInAncestorChain() on every attribute change, do it in all classes inheriting from us,
                                                          for specific attributes. Also stop calling RenderSVGResource::invalidateAllResourcesOfRenderer(), all handled in the render tree now.
        (WebCore::SVGStyledElement::invalidateResourceClients): Early exit, if document is still parsing.
        * svg/SVGStyledElement.h:
        * svg/SVGTRefElement.cpp:
        (WebCore::SVGTRefElement::svgAttributeChanged): Call RenderSVGResource::markForLayoutAndParentResourceInvalidation(renderer) instead of renderer->setNeedsLayout(true).
        * svg/SVGTextElement.cpp:
        (WebCore::SVGTextElement::svgAttributeChanged): Ditto.
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::svgAttributeChanged): Ditto.
        * svg/SVGTextPositioningElement.cpp:
        (WebCore::SVGTextPositioningElement::svgAttributeChanged): Ditto.
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::svgAttributeChanged): Ditto.
        (WebCore::SVGUseElement::updateContainerSizes): Ditto.
        (WebCore::SVGUseElement::updateContainerOffsets): Ditto.

2010-07-16  Cosmin Truta  <ctruta@chromium.org>

        Reviewed by Eric Seidel.

        Some SVGs with empty <g> elements crash Chromium on Linux
        https://bugs.webkit.org/show_bug.cgi?id=41175

        Avoid painting of zero-sized image buffers. Skia can't handle it.

        Test: svg/filters/filter-empty-g.svg

        * WebCore/platform/graphics/skia/ImageBufferSkia.cpp:
        (ImageBuffer::ImageBuffer):

2010-07-16  Nate Chapin  <japhet@chromium.org>

        Reviewed by Darin Fisher.

        Regression in r63100: Don't clear m_loadType in
        FrameLoader::handledOnloadEvents, as it is used
        to make some decisions after the load has actually
        completed.

        Tickling this bug requires manipulation
        via the API (layout tests don't appear to traverse
        the correct codepath), so no layout test.

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

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::handledOnloadEvents): Don't reset m_loadType.
        (WebCore::FrameLoader::addExtraFieldsToRequest): Set subresource cache
           policy in one place and don't depend on m_loadType.

2010-07-15  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Darin Adler.

        Printing test results differ between machines, we should use ImageDiff instead
        https://bugs.webkit.org/show_bug.cgi?id=20011

        Added spoolAllPagesWithBoundaries into PrintContext.

        Test: printing/setPrinting.html

        * WebCore.base.exp:
        * page/PrintContext.cpp:
        (WebCore::PrintContext::spoolAllPagesWithBoundaries):
        * page/PrintContext.h:

2010-07-15  Kent Tamura  <tkent@chromium.org>

        Unreviewed, small style fixes.

        * platform/chromium/ThemeChromiumMac.mm:
        (WebCore::ThemeChromiumMac::inflateControlPaintRect):
        * platform/mac/ThemeMac.mm:
        (WebCore::ThemeMac::inflateControlPaintRect):

2010-07-15  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Update LegacyHTMLTreeBuilder to insert whitespace between </head> and <body>
        https://bugs.webkit.org/show_bug.cgi?id=42431

        Insert these whitespace text nodes into the HTML element between <head>
        and <body>, as required by HTML5.  Previously, we just dropped them on
        the floor.

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

2010-07-15  Victor Wang  <victorw@chromium.org>

        Reviewed by David Levin.

        [chromium] update KURLGoogle decodeURLEscapeSequences to
        use googleurl public api so it does not access functions in
        url_canon_internal. This is for chromium multi-dll build.

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

        Test: (unittest) WebKit\chromium\tests\KURLTest.cpp

        * platform/KURLGoogle.cpp:
        (WebCore::decodeURLEscapeSequences):

2010-07-15  Kent Tamura  <tkent@chromium.org>

        Reviewed by Eric Seidel.

        [Chromium] Update ThemeChromiumMac.mm for the recent changes of ThemeMac.mm
        https://bugs.webkit.org/show_bug.cgi?id=41932

        Sync with ThemeMac.mm r61760.
        This change doesn't contain r54299, r57603, r57734, r57741, and
        r58533 because they conflict with Chromium change for
        FlippedView().

        * platform/chromium/ThemeChromiumMac.mm:
        (WebCore::sizeFromNSControlSize):
        (WebCore::sizeFromFont):
        (WebCore::controlSizeFromPixelSize):
        (WebCore::setControlSize):
        (WebCore::convertControlStatesToThemeDrawState):
        (WebCore::stepperSizes):
        (WebCore::stepperControlSizeForFont):
        (WebCore::paintStepper):
        (WebCore::ThemeChromiumMac::controlSize):
        (WebCore::ThemeChromiumMac::minimumControlSize):
        (WebCore::ThemeChromiumMac::inflateControlPaintRect):
        (WebCore::ThemeChromiumMac::paint):

2010-07-15  MORITA Hajime  <morrita@google.com>

        Reviewed by David Levin.

        [Chromium][Win] Crashes with <keygen> with huge padding.
        https://bugs.webkit.org/show_bug.cgi?id=41737

        When we try to draw a large region, TransparencyWin can fail to
        allocate a temporal buffer for composition.  This change adds a
        fallback path to ThemePainter to handle the buffer allocation
        failure.

        ThemePainter is no longer a subclass of TransparencyWin.  It has
        a TransparencyWin as a member.

        Test: fast/forms/large-parts.html

        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore::ThemePainter): Added a fallback path.

2010-07-15  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Darin Adler.

        Fix for Bug 42362 - CSSSegmentedFontFace::isLoaded() const is not used anywhere
        Remove the method.
        https://bugs.webkit.org/show_bug.cgi?id=42362

        No new tests because of no behavior changes.

        * css/CSSSegmentedFontFace.cpp:
        * css/CSSSegmentedFontFace.h:

2010-07-15  Erik Arvidsson  <arv@chromium.org>

        Reviewed by David Levin.

        Add directional property enums to the switch in applyProperty
        https://bugs.webkit.org/show_bug.cgi?id=42438

        Build fix for chromium mac.

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

2010-07-13  Zhenyao Mo  <zmo@google.com>

        Reviewed by Nate Chapin.

        bufferData and bufferSubData generate wrong error when null buffer is bound
        https://bugs.webkit.org/show_bug.cgi?id=42125

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::bufferData): Call validateBufferDataParameters().
        (WebCore::WebGLRenderingContext::bufferSubData): Ditto.
        (WebCore::WebGLRenderingContext::validateBufferDataParameters): Parameters validation for buffer{Sub}Data().
        * html/canvas/WebGLRenderingContext.h: Declare validateBufferDataParameters().

2010-07-15  Jay Civelli  <jcivelli@chromium.org>

        Reviewed by David Levin.

        [chromium] Making the popup label color visible when the item is
        selected.
        https://bugs.webkit.org/show_bug.cgi?id=42271

        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupListBox::paintRow): paint the label text with a
        different color when it is selected. 

2010-07-13  Zhenyao Mo  <zmo@google.com>

        Reviewed by Nate Chapin.

        WebGL rendering results must be made available to Canvas.toDataURL and 2D drawImage
        https://bugs.webkit.org/show_bug.cgi?id=34719

        Tests: fast/canvas/webgl/canvas-test.html
               fast/canvas/webgl/gl-pixelstorei.html

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::makeRenderingResultsAvailable): Paint the WebGL rendering results to canvas if it's 3d.
        (WebCore::HTMLCanvasElement::toDataURL): Paint the WebGL rendering results to canvas if it's 3d.
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawImage): Paint the WebGL rendering results to canvas if it's 3d before drawing.
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::markContextChanged): Mark it always for canvas2d.drawImage purpose.
        (WebCore::WebGLRenderingContext::paintRenderingResultsToCanvas): Paint the WebGL rendering results to canvas if it's dirty.
        * html/canvas/WebGLRenderingContext.h: Declare paintRenderingResultsToCanvas().
        * platform/graphics/GraphicsContext3D.h: Declare paintRenderingResultsToCanvas() & paintToCanvas().
        * platform/graphics/cg/GraphicsContext3DCG.cpp:
        (WebCore::GraphicsContext3D::paintToCanvas): Paint the rendered image pixels to the canvas.
        * platform/graphics/mac/GraphicsContext3DMac.mm:
        (WebCore::GraphicsContext3D::paintRenderingResultsToCanvas): Implement paintRenderingResultsToCanvas().
        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3D::beginPaint): Just call paintRenderingResultsToCanvas().
        (WebCore::GraphicsContext3D::endPaint):
        (WebCore::GraphicsContext3D::paintRenderingResultsToCanvas): Implement paintRenderingResultsToCanvas().

2010-07-15  Nico Weber  <thakis@chromium.org>

        Reviewed by Ojan Vafai.

        chromium/skia: Fix canvas.toDataURL in the presence of transparency
        https://bugs.webkit.org/show_bug.cgi?id=42214

        The problem was that SkBitmaps contain premultiplied data, but pnglib
        doesn't expect premultiplied data. Now, the encoder unpremultiplies
        data before sending it to pnglib.

        Patch partially by deanm.

        Covered by fast/canvas/toDataURL-alpha.html.

        * platform/image-encoders/skia/PNGImageEncoder.cpp:
        (WebCore::preMultipliedBGRAtoRGBA):
        (WebCore::encodeImpl):
        (WebCore::PNGImageEncoder::encode):

2010-07-15  Alex Nicolaou  <anicolao@chromium.org>

        Reviewed by Eric Seidel.

        Convolution computation causes bad alpha channel values
        https://bugs.webkit.org/show_bug.cgi?id=42273

        Fixed by clamping colour channel values to the alpha value so that 
        r <= a, g <= a, and b <= a after the convolution is applied. See
        the bug for why I believe the SVG specification needs to be updated. 
        Test must be drawn to crash. 100x100 green rectangle is used to 
        indicate pass to minimize the chance of regression.

        Test: svg/custom/convolution-crash.svg

        * platform/graphics/skia/SkiaUtils.cpp:
        (WebCore::SkPMColorToColor):
        * svg/graphics/filters/SVGFEConvolveMatrix.cpp:
        (WebCore::clampRGBAValue):
        (WebCore::setDestinationPixels):
        (WebCore::FEConvolveMatrix::fastSetInteriorPixels):
        (WebCore::FEConvolveMatrix::fastSetOuterPixels):

2010-07-15  Dumitru Daniliuc  <dumi@chromium.org>

        Unreviewed, Chromium-specific changes that I forgot to make in r63278.

        1. DatabaseTrackerChromium::getMaxSizeForDatabase() is called on
        the context thread by sync DBs.
        2. Forgot to change V8SQLTransactionSyncCustom to return the
        result set when executeSql() is called.

        * bindings/v8/custom/V8SQLTransactionSyncCustom.cpp:
        (WebCore::V8SQLTransactionSync::executeSqlCallback):
        * storage/chromium/DatabaseTrackerChromium.cpp:
        (WebCore::DatabaseTracker::getMaxSizeForDatabase):

2010-07-15  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Oliver Hunt.

        [GTK] Simplify the distribution step
        https://bugs.webkit.org/show_bug.cgi?id=42414

        No new tests as this is just a build change.

        * GNUmakefile.am: Modify EXTRA_DIST directly and make sure the list
        of files is sorted. Also handle distributing the IDL files from the
        WebCore source tree.

2010-07-15  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        LegacyHTMLTreeBuilder should insert an implicit <colgroup> before inserting <col> to match HTML5
        https://bugs.webkit.org/show_bug.cgi?id=42346

        This turned out to be an easy fix.

        This is covered by lots of layout tests.  I believe
        all of the changed results to be progressions.

        This change had no measurable effect on the parser benchmark.

        * html/LegacyHTMLTreeBuilder.cpp:
        (WebCore::LegacyHTMLTreeBuilder::colCreateErrorCheck):
        (WebCore::LegacyHTMLTreeBuilder::getNode):
        * html/LegacyHTMLTreeBuilder.h:

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

        Reviewed by Oliver Hunt.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=42410
        Many leaking DatasetDOMStringMaps seen on buildbot

        * dom/NodeRareData.h:
        (WebCore::NodeRareData::~NodeRareData): Add a virtual destructor so
        that the ElementRareData's destructor will be called when this is deleted
        from the Node's destructor.

2010-07-15  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        AX: Crash when table has empty thead tag
        https://bugs.webkit.org/show_bug.cgi?id=42391

        Test: accessibility/table-with-empty-thead-causes-crash.html

        * accessibility/AccessibilityTableColumn.cpp:
        (WebCore::AccessibilityTableColumn::headerObjectForSection):

2010-07-15  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Start loading plug-in streams
        https://bugs.webkit.org/show_bug.cgi?id=42407

        Export some ResourceRequestBase getters.

        * WebCore.exp.in:

2010-07-15  Kenneth Russell  <kbr@google.com>

        Reviewed by Nate Chapin.

        Query of NUM_COMPRESSED_TEXTURE_FORMATS must be handled by WebGL
        https://bugs.webkit.org/show_bug.cgi?id=42401

        No new tests; covered by gl-get-calls.html.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getParameter):
         - Return 0 for getParameter(NUM_COMPRESSED_TEXTURE_FORMATS).

2010-07-07  John Gregg  <johnnyg@google.com>

        Reviewed by Jian Li.

        Experimental directory upload feature.
        https://bugs.webkit.org/show_bug.cgi?id=40872

        This patch adds a new HTML attribute webkitdirectory which applies to 
        <input type="file"> tags and allows the user to specify a folder
        which is recursively enumerated so that all the files in that folder
        are added to the file list.

        The files chosen in that way have a .webkitRelativePath attribute which contains
        the relative path starting from the chosen folder.  The relative path is
        also appended to each item in the FormData when uploaded.

        All the code is behind an ENABLE_DIRECTORY_UPLOAD flag.

        Test: fast/forms/input-file-directory-upload.html

        * html/Blob.cpp:
        (WebCore::Blob::Blob):
        * html/Blob.h:
        * html/File.cpp:
        (WebCore::File::File):
        (WebCore::File::Init):
        (WebCore::File::webkitRelativePath):
        * html/File.h:
        (WebCore::File::create):
        * html/File.idl:
        * html/HTMLAttributeNames.in: add webkitdirectory attribute
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setFileListFromRenderer):
        (WebCore::HTMLInputElement::webkitdirectory):
        * html/HTMLInputElement.h:
        * html/HTMLInputElement.idl:
        * platform/BlobItem.cpp:
        (WebCore::FileBlobItem::create):
        (WebCore::FileBlobItem::FileBlobItem):
        * platform/BlobItem.h:
        (WebCore::FileBlobItem::relativePath):
        * platform/FileChooser.h:
        (WebCore::FileChooser::allowsDirectoryUpload):
        * platform/network/FormData.cpp:
        (WebCore::FormData::appendKeyValuePairItems):
        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::allowsMultipleFiles):
        (WebCore::RenderFileUploadControl::allowsDirectoryUpload):
        * rendering/RenderFileUploadControl.h:

2010-07-15  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Avoid creating huge compositing layers for elements that project outside the viewport
        https://bugs.webkit.org/show_bug.cgi?id=42338

        The logic that computed the bounds of compositing layers naively used the
        union of the bounds of descendant, non-composited RenderLayers, without regard
        to what is actually visible. This could result in huge layers for page with
        elements are large negative offsets, or with large negative text-indent (both
        common).
        
        For elements without transforms on them or in their ancestor chain, and when
        no 3d transforms or hardware-accelerated animations are used, can clip compositing
        layers to the size of the document, or based on CSS overflow and clip.

        Tests: compositing/geometry/limit-layer-bounds-clipping-ancestor.html
               compositing/geometry/limit-layer-bounds-fixed-positioned.html
               compositing/geometry/limit-layer-bounds-overflow-repaint.html
               compositing/geometry/limit-layer-bounds-positioned-transition.html
               compositing/geometry/limit-layer-bounds-positioned.html
               compositing/geometry/limit-layer-bounds-transformed-overflow.html
               compositing/geometry/limit-layer-bounds-transformed.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::enclosingOverflowClipAncestor):  Walk up the RenderLayer tree
        looking for an ancestor that has overflow, or to the root. Along the way, check for
        transformed elements.
        (WebCore::RenderLayerBacking::updateCompositedBounds):  If we're in "consult
        overlap" mode, and we don't have transforms, then constrain the bounds
        of composited layers by the RenderView's layoutOverflowRect(), or by the
        enclosing layer with overflow.
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry): If the offset from the renderer changes,
        we need to repaint the layer.

2010-07-15  Alex Nicolaou  <anicolao@chromium.org>

        Reviewed by Dirk Schulze.

        https://bugs.webkit.org/show_bug.cgi?id=42228
        
        SVG Masks were in the wrong colour space for non-CG graphics layers,
        because for those cases ImageBuffer needs to be explicitly told to
        convert the pixels. This change adds a test that demonstrates the
        problem and the conversion call to make the mask LinearRGB.

        Test: svg/custom/mask-colorspace.svg

        * rendering/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::createMaskImage):

2010-07-15  Daniel Bates  <dbates@rim.com>

        Reviewed by Darin Adler.

        [Mac] Implement LayoutTestController::markerTextForListItem()
        https://bugs.webkit.org/show_bug.cgi?id=37929

        Export symbols for WebCore::markerTextForListItem() and WebCore::toElement().

        * WebCore.exp.in:

2010-07-15  Andreas Kling  <andreas.kling@nokia.com>

        Rubber-stamped by Kenneth Rohde Christiansen.

        [Qt] Remove an unused variable in BitmapImage::draw()

        * platform/graphics/qt/ImageQt.cpp:
        (WebCore::BitmapImage::draw): Remove selfSize.

2010-07-15  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: pass all parameters to WebInspector.addConsoleMessage as a single payload object
        https://bugs.webkit.org/show_bug.cgi?id=42345

        This refactoring is covered by existing console tests.

        * bindings/js/ScriptArray.cpp:
        (WebCore::ScriptArray::set):
        * bindings/js/ScriptArray.h:
        (WebCore::ScriptArray::ScriptArray):
        (WebCore::ScriptArray::jsArray):
        * bindings/v8/ScriptArray.cpp:
        (WebCore::ScriptArray::set):
        * bindings/v8/ScriptArray.h:
        (WebCore::ScriptArray::ScriptArray):
        (WebCore::ScriptArray::~ScriptArray):
        * inspector/ConsoleMessage.cpp:
        (WebCore::ConsoleMessage::addToFrontend):
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::addConsoleMessage):
        * inspector/InspectorFrontend.h:
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.updateMessageRepeatCount):
        (WebInspector.ConsoleMessage):
        (WebInspector.ConsoleMessage.createTextMessage):
        (WebInspector.ConsoleCommandResult):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.generateStylesheet):
        * inspector/front-end/InjectedScriptAccess.js:
        (InjectedScriptAccess._installHandler.InjectedScriptAccess.prototype.methodName.myCallback):
        (InjectedScriptAccess._installHandler.InjectedScriptAccess.prototype.methodName):
        (InjectedScriptAccess._installHandler):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype._checkWarning):
        * inspector/front-end/inspector.js:
        (WebInspector.updateConsoleMessageExpiredCount):
        (WebInspector.addConsoleMessage):
        (WebInspector.log.logMessage):
        (WebInspector.log):

2010-07-14  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Darin Fisher.

        Backfill DNS and connect times rather than exposing hard zeros
        https://bugs.webkit.org/show_bug.cgi?id=42303

        There are several cases where domain lookup is not performed and/or a new connection is not established. Previously in these cases, we exposed a "0" to the API. Now, we instead "backfill" with the most recent mark's time.

        Also, previously, I was using the ResourceLoadTiming API incorrectly. Each mark is an integer representing offset in milliseconds from requestTime. So all values need to be added to requestTime.

        No new test because existing test expectations are set to FAIL because disable disabled by default. The expected results of existings tests change as expected when enabled.

        * page/Timing.cpp:
        (WebCore::toIntegerMilliseconds): Move to file static instead of class static because it might generate more optimal code. Also, instead of converting negative doubles to zero, ASSERT that they are >= 0. This is because we no longer expose hard zeros for DNS and connect, so we want to be sure that the -1s returned by the API are properly handled.
        (WebCore::Timing::domainLookupStart):
        (WebCore::Timing::domainLookupEnd):
        (WebCore::Timing::connectStart):
        (WebCore::Timing::connectEnd):
        (WebCore::Timing::requestStart):
        (WebCore::Timing::requestEnd):
        (WebCore::Timing::responseStart):
        * page/Timing.h:

2010-07-15  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: differentiate between blocking and connecting timers.

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

        * inspector/InspectorResource.cpp:
        (WebCore::InspectorResource::InspectorResource):
        (WebCore::InspectorResource::updateResponse):
        (WebCore::InspectorResource::updateScriptObject):
        (WebCore::InspectorResource::buildObjectForTiming):
        * inspector/InspectorResource.h:
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype.get cached):
        (WebInspector.Resource.prototype.set cached):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype._showPopover):
        (WebInspector.ResourceGraph):
        (WebInspector.ResourceGraph.prototype.refresh):
        (WebInspector.ResourceGraph.prototype._cachedChanged):
        * inspector/front-end/inspector.js:
        (WebInspector.updateResource):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadedResourceFromMemoryCache):
        * loader/FrameLoader.h:
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::ResourceResponseBase):
        (WebCore::ResourceResponseBase::connectionReused):
        (WebCore::ResourceResponseBase::setConnectionID):
        * platform/network/ResourceResponseBase.h:

2010-07-15  MORITA Hajime  <morrita@google.com>

        Text layout is wrong with a SVG Font that lacks <missing-glyph> element
        https://bugs.webkit.org/show_bug.cgi?id=42352

        floatWidthOfSubStringUsingSVGFont() calculated a wrong value for a
        sub-run, and a fallback to system font triggers such a computation.
        This change made floatWidthOfSubStringUsingSVGFont() to deal with
        sub-runs.
        
        Test: svg/custom/svg-fonts-without-missing-glyph.xhtml

        * svg/SVGFont.cpp:
        (WebCore::floatWidthOfSubStringUsingSVGFont):

2010-07-15  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Cycle detection needs to include shadow tree
        https://bugs.webkit.org/show_bug.cgi?id=42360

        Search for cycles in shadow tree fragments as well. Extended the svg/custom/recursion-* tests. No more crashes in any of them.

        * rendering/RenderSVGResourceContainer.h:
        (WebCore::RenderSVGResourceContainer::containsCyclicReference):
        * rendering/RenderSVGShadowTreeRootContainer.cpp: Implemented here, not inline, so that clients don't need to include SVGShadowTreeElements.h
        (WebCore::RenderSVGShadowTreeRootContainer::rootElement): Expose helper function, that returns the shadow tree root element as Node*.
        * rendering/RenderSVGShadowTreeRootContainer.h:

2010-07-15  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        clipPath is missing cycle detection
        https://bugs.webkit.org/show_bug.cgi?id=42350

        Detect cyclic clipper resources, and ignore them on rendering. Early exit in applyResource just like the pattern/mask resources do.

        * rendering/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::applyResource):
        (WebCore::RenderSVGResourceClipper::hitTestClipContent):
        (WebCore::RenderSVGResourceClipper::childElementReferencesResource):
        * rendering/RenderSVGResourceClipper.h:

2010-07-15  Mark Rowe  <mrowe@apple.com>

        Reviewed by Maciej Stachowiak.

        Fix a leak of Vector instances seen on the build bot.

        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::drawBoxSideFromPath): Don't unnecessarily heap allocate then leak the DashArray.

2010-07-15  Mark Rowe  <mrowe@apple.com>

        Update the sorting in the Xcode project files.

        * WebCore.xcodeproj/project.pbxproj:

2010-07-15  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Eric Seidel.

        SVG patterns and masks should not be able to reference themselves
        https://bugs.webkit.org/show_bug.cgi?id=32171

        Pattern still had an issue, when using constructs like:
        <pattern id="pattern1" xlink:href="#pattern2"/>
        <pattern id="pattern2"><rect fill="url(#pattern1)"/></pattern>

        Extended test svg/custom/recursive-pattern.svg to cover this situation.

        * rendering/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::applyResource): Don't perform the cycle check against node()...
        (WebCore::RenderSVGResourcePattern::createTileImage): .. but against the "patternContentElement" which respect the xlink:href chaining.

2010-07-15  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Adam Barth.

        Pixel test failure in moving-shadow-on-path.html and moving-shadow-on-container.html
        https://bugs.webkit.org/show_bug.cgi?id=42249

        Partly revert <http://trac.webkit.org/changeset/63307>. The RenderSVGRoot change caused a pixel test regression in two fast/repaint tests.

        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::layout): Include selfNeedsLayout() check in LayoutStateRepainter argument.

2010-07-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r63352.
        http://trac.webkit.org/changeset/63352
        https://bugs.webkit.org/show_bug.cgi?id=42341

        Broke plugin-initiate-popup-window.html and plugin-javascript-
        access.html on snow leopard (Requested by abarth on #webkit).

        * bindings/v8/NPV8Object.cpp:
        (_NPN_EvaluateHelper):

2010-07-14  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Make the LegacyHTMLTreeBuilder coalesce text nodes
        https://bugs.webkit.org/show_bug.cgi?id=42314

        This is slightly tricky as we're side-stepping the old
        parsers insertion logic in the cases where we know we can
        safely merge text into an existing text node instead of
        inserting a new one.

        This affects lots of tests (which will need to change for
        the HTML5 TreeBuilder anyway) and causes the LegacyHTMLTreeBuilder
        to now pass a bunch more subtests in html5lib/runner.html.

        The parser benchmark thinks that this is a small speedup.
        I think I happen to have been lucky enough to get the right
        cache alignment, and that this is likely a wash.

        * html/LegacyHTMLTreeBuilder.cpp:
        (WebCore::LegacyHTMLTreeBuilder::parseToken):

2010-07-14  Evan Stade  <estade@chromium.org>

        Reviewed by Kent Tamura.

        [chromium] Linux scrollbar steppers are "clickable" even when disabled
        https://bugs.webkit.org/show_bug.cgi?id=42231

        Not tested by layout tests.

        * platform/chromium/ScrollbarThemeChromiumLinux.cpp:
        (WebCore::ScrollbarThemeChromiumLinux::paintButton):

2010-07-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r63389.
        http://trac.webkit.org/changeset/63389
        https://bugs.webkit.org/show_bug.cgi?id=42311

        It broke the Chromium Linux build. (Requested by dave_levin on
        #webkit).

        * platform/KURLGoogle.cpp:
        (WebCore::decodeURLEscapeSequences):

2010-07-13  Mirko Damiani  <mirko@develer.com>

        Reviewed by Simon Hausmann.

        [Qt] CSS border style not cleared for SVG object
        https://bugs.webkit.org/show_bug.cgi?id=42150

        For tests and description see:
        https://bugs.webkit.org/show_bug.cgi?id=25738

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

2010-07-14  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        HTMLTreeBuilder shouldn't crash during fast/parser/remove-parser-current-node.html
        https://bugs.webkit.org/show_bug.cgi?id=42312

        We were crashing because of an ASSERT I added to the attach logic in
        the HTMLConstructionSite.  I knew this ASSERT was wrong when I added
        it, I just wanted to make sure we had test coverage of those cases.
        Turns out we do!  :)

        * html/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::attach):
        (WebCore::HTMLConstructionSite::attachAtSite):

2010-07-14  Victor Wang  <victorw@chromium.org>

        Reviewed by Darin Fisher.

        [chromium] update KURLGoogle decodeURLEscapeSequences to
        use googleurl public api so it does not access functions in
        url_canon_internal. This is for chromium multi-dll build.

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

        Test: (unittest) WebKit\chromium\tests\KURLTest.cpp

        * platform/KURLGoogle.cpp:
        (WebCore::decodeURLEscapeSequences):

2010-07-14  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Avoid extra memcpy of character tokens
        https://bugs.webkit.org/show_bug.cgi?id=42002

        Eric tells me this patch makes the new tree builder 1% faster than the
        old tree builder on our parser benchmark.

        * html/HTMLToken.h:
        (WebCore::AtomicHTMLToken::AtomicHTMLToken):
        (WebCore::AtomicHTMLToken::characters):
        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::ExternalCharacterTokenBuffer::ExternalCharacterTokenBuffer):
        (WebCore::convertToOldStyle):
        (WebCore::HTMLTreeBuilder::processFakeCharacters):

2010-07-14  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        HTMLTreeBuilder foster parents when it should not
        https://bugs.webkit.org/show_bug.cgi?id=42235

        Regarding foster parenting of nodes inside tables:
        "Process the token using the rules for the "in body" insertion mode,
        except that if the current node is a table, tbody, tfoot, thead, or
        tr element, then, whenever a node would be inserted into the current
        node, it must instead be foster parented."

        We were forgetting the "when the current node is" part of that check
        and always foster parenting, even if we had just inserted another
        element (which would have just changed the current node).

        This was covered by multiple tests in html5lib/runner.html
        but I wrote a reduction (one which I included) as it makes it
        easier to see what's going on.

        * html/HTMLConstructionSite.cpp:
        (WebCore::HTMLNames::causesFosterParenting):
        (WebCore::HTMLConstructionSite::attach):
        (WebCore::HTMLConstructionSite::insertHTMLHtmlElement):
        (WebCore::HTMLConstructionSite::insertHTMLHeadElement):
        (WebCore::HTMLConstructionSite::insertHTMLBodyElement):
        (WebCore::HTMLConstructionSite::insertTextNode):
        (WebCore::HTMLConstructionSite::shouldFosterParent):
        * html/HTMLConstructionSite.h:
        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::callTheAdoptionAgency):

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

        Reviewed by Mark Rowe.

        <rdar://problem/8131355> Apps load stale versions of pages when initial load happens via back/forward navigation.

        No test case is added because DumpRenderTree is not able to test the scenario where the initial load in a WebView
        occurs via a back/forward navigation.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::navigateToDifferentDocument): When the first load in a page is a back/forward navigation, we
          shouldn't try to prefer cached data but should do revalidation by default.
        (WebCore::FrameLoader::addExtraFieldsToRequest): Ditto.

2010-07-14  James Robinson  <jamesr@chromium.org>

        Reviewed by Darin Fisher.

        Breaks all dependencies on Page from platform/ and cleans up GLES2Context lifetime
        https://bugs.webkit.org/show_bug.cgi?id=42203

        Rather than constructing a GLES2Context from a Page, pass the LayerRendererChromium
        a GLES2Context in from the constructor.  This way the platform/ directory can remain
        ignorant of Page and friends.  Also adds functions on ChromeClientChromium to request
        onscreen and offscreen GLES2Contexts for callers in WebCore that need them.

        * page/chromium/ChromeClientChromium.h:
        * platform/chromium/GLES2Context.h:
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::create):
        (WebCore::LayerRendererChromium::LayerRendererChromium):
        * platform/graphics/chromium/LayerRendererChromium.h:

2010-07-14  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Darin Adler.

        Add functions to extract individual RGBA32 components
        https://bugs.webkit.org/show_bug.cgi?id=42305

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::willDraw): Use alphaChannel()
        * platform/graphics/Color.h:
        (WebCore::redChannel):
        (WebCore::greenChannel):
        (WebCore::blueChannel):
        (WebCore::alphaChannel):
        (WebCore::Color::red):
        (WebCore::Color::green):
        (WebCore::Color::blue):
        (WebCore::Color::alpha):

2010-07-14  Alexey Proskuryakov  <ap@apple.com>

        Not reviewed.

        https://bugs.webkit.org/show_bug.cgi?id=42201
        Use ResourceHandle object for synchronous loading

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::loadResourceSynchronously): Fix an obvious typo.

2010-07-14  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Brady Eidson.

        https://bugs.webkit.org/show_bug.cgi?id=42201
        Use ResourceHandle object for synchronous loading

        Fix a Tiger test failure.

        Setting NSURLRequest properties has been moved to createNSURLConnection to share code between
        sync and async cases, but on Tiger, we don't call this function.

        There is more refactoring needed to make this nice, and we need to figure out if some of
        request-tweaking code in createNSURLConnection needs to run on every redirect, as it happens
        with CFNetwork version.

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::loadResourceSynchronously): Set main document for cookies, which is
        the only thing we've been missing.

2010-07-14  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Dan Bernstein.

        * WebCore.xcodeproj/project.pbxproj: Silence rsync.

2010-07-14  Darin Adler  <darin@apple.com>

        Reviewed by Gavin Barraclough.

        Fix warning seen with newer gcc (on Qt buildbot).

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::callTheAdoptionAgency):
        Add parentheses around && expression.

2010-07-14  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Avoid extra memcpy of character tokens
        https://bugs.webkit.org/show_bug.cgi?id=42002

        This patch is just some cleanup to make fixing this bug easier.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::ExternalCharacterTokenBuffer::ExternalCharacterTokenBuffer):
        (WebCore::HTMLTreeBuilder::ExternalCharacterTokenBuffer::~ExternalCharacterTokenBuffer):
        (WebCore::HTMLTreeBuilder::ExternalCharacterTokenBuffer::isEmpty):
        (WebCore::HTMLTreeBuilder::ExternalCharacterTokenBuffer::skipLeadingWhitespace):
        (WebCore::HTMLTreeBuilder::ExternalCharacterTokenBuffer::takeLeadingWhitespace):
        (WebCore::HTMLTreeBuilder::ExternalCharacterTokenBuffer::takeRemaining):
        (WebCore::HTMLTreeBuilder::ExternalCharacterTokenBuffer::giveRemainingTo):
        (WebCore::HTMLTreeBuilder::ExternalCharacterTokenBuffer::takeRemainingWhitespace):
        (WebCore::HTMLTreeBuilder::processDoctypeToken):
        (WebCore::HTMLTreeBuilder::processStartTag):
        (WebCore::HTMLTreeBuilder::processEndTag):
        (WebCore::HTMLTreeBuilder::processComment):
        (WebCore::HTMLTreeBuilder::processCharacter):
        (WebCore::HTMLTreeBuilder::processCharacterBuffer):
        (WebCore::HTMLTreeBuilder::processEndOfFile):
        (WebCore::HTMLTreeBuilder::defaultForInitial):
        (WebCore::HTMLTreeBuilder::defaultForBeforeHTML):
        (WebCore::HTMLTreeBuilder::defaultForBeforeHead):
        (WebCore::HTMLTreeBuilder::defaultForInHead):
        (WebCore::HTMLTreeBuilder::defaultForInHeadNoscript):
        (WebCore::HTMLTreeBuilder::defaultForAfterHead):
        (WebCore::HTMLTreeBuilder::defaultForInTableText):
        * html/HTMLTreeBuilder.h:

2010-07-14  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Darin Adler.

        Canvas: Don't add shadow rect to dirty region when shadow alpha is 0
        https://bugs.webkit.org/show_bug.cgi?id=42300

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

2010-07-14  Kevin Ollivier  <kevino@theolliviers.com>

        [CURL] Build fix after request -> firstRequest rename.

        * platform/network/curl/FormDataStreamCurl.cpp:
        (WebCore::FormDataStream::read):
        (WebCore::FormDataStream::hasMoreElements):
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::headerCallback):
        (WebCore::ResourceHandleManager::setupPOST):
        (WebCore::parseDataUrl):
        (WebCore::ResourceHandleManager::dispatchSynchronousJob):
        (WebCore::ResourceHandleManager::startJob):
        (WebCore::ResourceHandleManager::initializeHandle):

2010-07-14  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by John Sullivan.

        <rdar://problem/8186963> Expose information about compositing layers.

        Expose information about the types of compositing layers via RenderLayerBacking::compositingLayerType().

        * WebCore.exp.in: Export WebCore::SpaceSplitStringData::createVector().
        * WebCore.xcodeproj/project.pbxproj: Make RenderLayerBacking.h a Private header for use by WebKit.
        * platform/graphics/GraphicsLayer.h: Add hasContentsLayer() and usingTiledLayer() methods.
        (WebCore::GraphicsLayer::hasContentsLayer):
        (WebCore::GraphicsLayer::usingTiledLayer):
        * platform/graphics/mac/GraphicsLayerCA.h:
        (WebCore::GraphicsLayerCA::hasContentsLayer): Return true if we have a contents layer.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::compositingLayerType): Return information about the type of composited layer.
        * rendering/RenderLayerBacking.h:

2010-07-14  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        TreeWalker::previousSibling calls firstChild instead of lastChild when handling FILTER_SKIP
        https://bugs.webkit.org/show_bug.cgi?id=42008

        TreeWalker::previousNode does not handle FILTER_REJECT when processing lastChild
        https://bugs.webkit.org/show_bug.cgi?id=42010

        Tests: fast/dom/TreeWalker/previousNodeLastChildReject.html
               fast/dom/TreeWalker/previousSiblingLastChildSkip.html

        * dom/TreeWalker.cpp:
        (WebCore::TreeWalker::previousSibling): Call lastChild instead of firstChild.
        (WebCore::TreeWalker::previousNode): Fix handling of FILTER_REJECT by exiting
        the lastChild loop when we encounter it.

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

        Reviewed by Brady Eidson.

        Fix crashing layout test on snowleopard.

        * platform/mac/CursorMac.mm:
        (WebCore::Cursor::ensurePlatformCursor): Make sure to retain the cursor.

2010-07-14  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        AX: aria-checked not recognized on image map radio buttons
        https://bugs.webkit.org/show_bug.cgi?id=42055

        Moves some code from AccessibilityRenderObject to AccessibilityObject so that
        elements that do not have render objects, but do have Nodes (like image map links 
        and list box options) can still make use of certain aria attributes.

        Test: platform/mac/accessibility/image-map-link-used-as-radiobutton.html

        * accessibility/AccessibilityImageMapLink.cpp:
        (WebCore::AccessibilityImageMapLink::roleValue):
        (WebCore::AccessibilityImageMapLink::accessibilityDescription):
        (WebCore::AccessibilityImageMapLink::title):
           Make imageMap use standard AccessibilityObject methods for getAttribute()
        * accessibility/AccessibilityImageMapLink.h:
        (WebCore::AccessibilityImageMapLink::node):
        * accessibility/AccessibilityListBoxOption.cpp:
        (WebCore::AccessibilityListBoxOption::accessibilityIsIgnored):
        (WebCore::AccessibilityListBoxOption::stringValue):
        * accessibility/AccessibilityListBoxOption.h:
        (WebCore::AccessibilityListBoxOption::node):
       * accessibility/AccessibilityObject.cpp:
        (WebCore::AccessibilityObject::language):
             Language method doesn't need a node() anymore, it can use the node from AccessibilityObject.
        (WebCore::renderListItemContainerForNode):
        (WebCore::AccessibilityObject::getAttribute):
        (WebCore::AccessibilityObject::intValue):
           Move intValue into AccessibilityObject.
        (WebCore::AccessibilityObject::hasIntValue):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isCheckbox):
        (WebCore::AccessibilityObject::isRadioButton):
        (WebCore::AccessibilityObject::isCheckboxOrRadio):
           Consolidate what defines a checkbox and radio button into AccessibilityObject.
        (WebCore::AccessibilityObject::node):
        (WebCore::AccessibilityObject::headingLevel):
       (WebCore::AccessibilityObject::isDetached):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isPasswordField):
        (WebCore::AccessibilityRenderObject::headingLevel):
        (WebCore::AccessibilityRenderObject::selectedTabItem):
        (WebCore::AccessibilityRenderObject::hierarchicalLevel):
        (WebCore::AccessibilityRenderObject::node):
        (WebCore::AccessibilityRenderObject::intValue):
        * accessibility/AccessibilityRenderObject.h:
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::itemAccessibilityText):
            Stop using AccessibilityObjects getAttribute (no reason to use it really).

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

        Reviewed by Simon Fraser.

        <rdar://problem/7759909> Certain text runs measure 1 pixel wider when measured as a whole than when measured piecewise
        https://bugs.webkit.org/show_bug.cgi?id=42279

        No test because the issue cannot be reproduced with standard fonts.

        Word- and run-rounding works by advancing ahead to the nearest integral width. As the total
        width accumulated becomes large, the float type’s low precision results in accumulated rounding
        error, sometimes crossing an integer. Consequently, word-rounding makes different decisions when
        measuring a multi-word run than when measuring its words individually. To work around this,
        word- and run-rounding are applied only to the width accumulated since the last rounding
        character.

        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::advance):
        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::ComplexTextController::adjustGlyphsAndAdvances):

2010-07-14  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Darin Adler.

        Fix enum value names for Navigation.{idl|h}
        https://bugs.webkit.org/show_bug.cgi?id=42282

        This is necessary after https://bugs.webkit.org/show_bug.cgi?id=42250.

        No new tests because no new functionality.

        * page/Navigation.cpp:
        (WebCore::Navigation::type):
        * page/Navigation.h:
        (WebCore::Navigation::):

2010-07-14  Johnny Ding  <jnd@chromium.org>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=41292
        Set right UserGestureIndicator to indicate whether the NPN_Evaluate allows popup window or not.

        Test: plugins/plugin-initiate-popup-window.html

        * bindings/v8/NPV8Object.cpp:
        (_NPN_EvaluateHelper):

2010-07-14  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        Bug 42117 - AX: Data table heuristics: consider assuming data table for 'zebra-striped' rows
        https://bugs.webkit.org/show_bug.cgi?id=42117

        Test: platform/mac/accessibility/table-with-zebra-rows.html

        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::isTableExposableThroughAccessibility):

2010-07-14  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        AX: VoiceOver cannot navigate this page because Safari is taking too long
        https://bugs.webkit.org/show_bug.cgi?id=42219

        No tests. Existing tests cover change.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::boundingBoxRect):

2010-07-14  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Darin Adler.

        Canvas: Fast-path for assigning the same color string as before to fillStyle or strokeStyle
        https://bugs.webkit.org/show_bug.cgi?id=42272

        Always route assignment of color strings via setFillColor() or setStrokeColor()
        where we can check it against the previous value and return early if it's the same.

        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        (WebCore::toHTMLCanvasStyle):
        (WebCore::JSCanvasRenderingContext2D::strokeStyle):
        (WebCore::JSCanvasRenderingContext2D::setStrokeStyle):
        (WebCore::JSCanvasRenderingContext2D::setFillStyle):
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setStrokeStyle):
        (WebCore::CanvasRenderingContext2D::setFillStyle):
        (WebCore::CanvasRenderingContext2D::setStrokeColor):
        (WebCore::CanvasRenderingContext2D::setFillColor):
        * html/canvas/CanvasRenderingContext2D.h:

2010-07-14  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Jian Li.

        Separate line-ending conversion code from BlobItem
        https://bugs.webkit.org/show_bug.cgi?id=40932

        Add common line-ending normalization code under platform/text.
        No new tests as it doesn't change any functionality.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/BlobBuilder.cpp:
        (WebCore::BlobBuilder::appendString):
        * html/FormDataList.cpp:
        (WebCore::FormDataList::appendString):
        * platform/BlobItem.cpp:
        * platform/BlobItem.h:
        * platform/text/LineEnding.cpp: Added.
        * platform/text/LineEnding.h: Added.

2010-07-14  Erik Arvidsson  <arv@chromium.org>

        Reviewed by Darin Adler.

        Implement border-start and border-end properties
        https://bugs.webkit.org/show_bug.cgi?id=41782

        Test: fast/css/border-start-end.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::resolveDirectionAwareProperty):
        * css/CSSPropertyNames.in:
        * inspector/front-end/SourceCSSTokenizer.js:
        (WebInspector.SourceCSSTokenizer):

2010-07-14  Alexey Proskuryakov  <ap@apple.com>

        Tiger and Gtk build fixes.

        https://bugs.webkit.org/show_bug.cgi?id=42201
        Use ResourceHandle object for synchronous loading

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::createNSURLConnection):
        (WebCore::ResourceHandle::loadResourceSynchronously):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::startHttp):

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

        Reviewed by Darin Adler.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=42232
        Make changing Cursors work in WebKit2.

        - Converted Mac and Windows Cursor implementations to lazily
          create the platform cursor.
        - Add HostWindow function to set the cursor and use it from Widget::setCursor.
        - Rework Windows cursor code to use fewer global variables.

        * WebCore.exp.in: Updated
        * loader/EmptyClients.h:
        (WebCore::EmptyChromeClient::setCursor): 
        (WebCore::EmptyChromeClient::setLastSetCursorToCurrentCursor):
        Added empty implementations.

        * page/Chrome.cpp:
        (WebCore::Chrome::setCursor):
        * page/Chrome.h:
        * page/ChromeClient.h:
        Change existing setCursor() function to take a Cursor instead of a
        PlatformCursorHandle. Added setLastSetCursorToCurrentCursor.

        * platform/Cursor.cpp:
        * platform/Cursor.h:
        Added Cursor Type and the option of lazily creating the native cursor
        (used on Mac and Windows for now).

        * platform/HostWindow.h:
        Add setCursor.

        * platform/mac/CursorMac.mm:
        (WebCore::createCustomCursor): This no longer needs to call determineHotSpot
        as that is done when on construction of the cursor now and the hotSpot passed
        in is correct.
        (WebCore::Cursor::ensurePlatformCursor):
        (WebCore::Cursor::Cursor):
        (WebCore::Cursor::~Cursor):
        (WebCore::Cursor::operator=):
        (WebCore::Cursor::platformCursor):
        Convert to lazily creating the native cursor on the first request and
        storing the type.

        * platform/mac/WidgetMac.mm:
        (WebCore::Widget::setCursor):
        Use HostWindow::setCursor to set the cursor. This in turn will call the
        ChromeClient.

        * platform/win/CursorWin.cpp:
        (WebCore::createSharedCursor):
        (WebCore::loadSharedCursor):
        (WebCore::loadCursorByName):
        (WebCore::Cursor::ensurePlatformCursor):
        (WebCore::SharedCursor::~SharedCursor):
        (WebCore::Cursor::Cursor):
        (WebCore::Cursor::~Cursor):
        (WebCore::Cursor::operator=):
        (WebCore::Cursor::platformCursor):
        Convert to lazily creating the native cursor on the first request and
        storing the type.

        * platform/win/WidgetWin.cpp:
        (WebCore::Widget::setCursor):
        Use HostWindow::setCursor to set the cursor. This in turn will call the
        ChromeClient.

        * plugins/win/PluginViewWin.cpp:
        (WebCore::PluginView::handleMouseEvent):
        Use the new setLastSetCursorToCurrentCursor client function to ensure
        the cursor is properly updated when over a plugin.

        * platform/chromium/CursorChromium.cpp:
        * platform/efl/CursorEfl.cpp:
        * platform/gtk/CursorGtk.cpp:
        * platform/haiku/CursorHaiku.cpp:
        * platform/wince/CursorWince.cpp:
        * platform/wx/CursorWx.cpp:
        * platform/qt/CursorQt.cpp:
        Change m_impl -> m_platformCursor.

2010-07-13  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        reconstructActiveFormElements should reconstruct attributes as well
        https://bugs.webkit.org/show_bug.cgi?id=42222

        The case in question is "<p><b foo='bar'></p>text</b>".
        When the "b" is re-opened to wrap the text it should include
        any attributes from the original (now closed) tag name.

        There are also similar cases for the Adoption Agency algorithm, but since
        the html5lib test suite did not cover those (and it wasn't immediately
        obvious to me how to test those) I've saved fixing that bug for a
        later patch.  For now I've just made the adoption agency use
        HTMLConstructionSite::createHTMLElementFromElementRecord so the
        FIXME can be in one place instead of two.

        In order to cleanly support createHTMLElementFromSavedElement
        I re-factored "attachToCurrent" out from createHTMLElementAndAttachToCurrent
        and changed all callers to use attachToCurrent(createHTMLElement(token)).

        This is covered by two existing tests in html5lib/runner.html
        and I wrote two more.  One to cover the basic case that we now pass
        and a second to cover an evil edge case which we do not.

        * html/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::attachToCurrent):
        (WebCore::HTMLConstructionSite::insertHTMLHtmlElement):
        (WebCore::HTMLConstructionSite::insertHTMLHeadElement):
        (WebCore::HTMLConstructionSite::insertHTMLBodyElement):
        (WebCore::HTMLConstructionSite::insertHTMLElement):
        (WebCore::HTMLConstructionSite::insertSelfClosingHTMLElement):
        (WebCore::HTMLConstructionSite::insertScriptElement):
        (WebCore::HTMLConstructionSite::insertForeignElement):
        (WebCore::HTMLConstructionSite::createHTMLElementFromElementRecord):
        (WebCore::HTMLConstructionSite::createHTMLElementFromSavedElement):
        (WebCore::HTMLConstructionSite::reconstructTheActiveFormattingElements):
        * html/HTMLConstructionSite.h:
        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::callTheAdoptionAgency):

2010-07-13  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=42201
        Use ResourceHandle object for synchronous loading

        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::ResourceHandle): Moved common tasks from create() to constructor.
        (WebCore::ResourceHandle::firstRequest): Renamed from request(). This is not changed with
        redirect, so the old name was quite confusing.

        * platform/network/ResourceHandle.h: Made createNSURLConnection() a member function, since
        it now needs access to both ResourceHandle and ResourceHandleInternal. Added createCFURLConnection().

        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal): Renamed m_request to m_firstRequest.

        * platform/network/mac/ResourceHandleMac.mm:
        (WebCoreSynchronousLoaderClient): Replaced an Objective C delegate class with a ResourceHandleClient
        subclass. This allows for much better code sharing, with common logic is in ResourceHandle.
        (WebCore::ResourceHandle::createNSURLConnection): Factored out more code that is common
        between sync and async parts.
        (WebCore::ResourceHandle::start): Ditto.
        (WebCore::ResourceHandle::cancel): Updated for firstRequest() renaming.
        (WebCore::ResourceHandle::loadResourceSynchronously): Use ResourceHandle and ResourceHandleClient,
        like a good loader.
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge): Updated for firstRequest() renaming.
        (WebCore::ResourceHandle::receivedCredential): Ditto.
        (-[WebCoreResourceHandleAsDelegate connection:willSendRequest:redirectResponse:]): Ditto.
        (-[WebCoreResourceHandleAsDelegate connection:didReceiveResponse:]): Ditto.
        (-[WebCoreResourceHandleAsDelegate connectionDidFinishLoading:]): Ditto.
        (-[WebCoreResourceHandleAsDelegate connection:didFailWithError:]): Ditto.

        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::WebCoreSynchronousLoaderClient::create):
        (WebCore::WebCoreSynchronousLoaderClient::setAllowStoredCredentials):
        (WebCore::WebCoreSynchronousLoaderClient::isDone):
        (WebCore::WebCoreSynchronousLoaderClient::data):
        (WebCore::WebCoreSynchronousLoaderClient::WebCoreSynchronousLoaderClient):
        (WebCore::willSendRequest):
        (WebCore::didReceiveResponse):
        (WebCore::didReceiveData):
        (WebCore::shouldUseCredentialStorageCallback):
        (WebCore::didFinishLoading):
        (WebCore::didFail):
        (WebCore::didReceiveChallenge):
        (WebCore::ResourceHandleInternal::~ResourceHandleInternal):
        (WebCore::ResourceHandle::~ResourceHandle):
        (WebCore::ResourceHandle::createCFURLConnection):
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::didReceiveAuthenticationChallenge):
        (WebCore::ResourceHandle::receivedCredential):
        (WebCore::ResourceHandle::loadResourceSynchronously):
        (WebCore::WebCoreSynchronousLoaderClient::willSendRequest):
        (WebCore::WebCoreSynchronousLoaderClient::didReceiveResponse):
        (WebCore::WebCoreSynchronousLoaderClient::didReceiveData):
        (WebCore::WebCoreSynchronousLoaderClient::didFinishLoading):
        (WebCore::WebCoreSynchronousLoaderClient::didFail):
        (WebCore::WebCoreSynchronousLoaderClient::didReceiveAuthenticationChallenge):
        (WebCore::WebCoreSynchronousLoaderClient::shouldUseCredentialStorage):
        Same changes for CFNetwork version. Now it's a more direct copy/paste than before, some
        day we'll share the code.

        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::continueAfterContentPolicy):
        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::createResourceHandle):
        (WebCore::ApplicationCacheGroup::didReceiveResponse):
        (WebCore::ApplicationCacheGroup::didFinishLoading):
        (WebCore::ApplicationCacheGroup::didFail):
        (WebCore::ApplicationCacheGroup::didReceiveManifestResponse):
        * loader/icon/IconLoader.cpp:
        (WebCore::IconLoader::didReceiveResponse):
        (WebCore::IconLoader::didFail):
        (WebCore::IconLoader::didFinishLoading):
        * platform/network/curl/ResourceHandleManager.cpp:
        (WebCore::headerCallback):
        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::QNetworkReplyHandler::start):
        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::start):
        (WebCore::ResourceHandle::loadResourceSynchronously):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::startHttp):
        Updated for request() -> firstRequest renaming.

2010-07-14  Marcus Bulach  <bulach@chromium.org>

        Reviewed by Jeremy Orlow.

        Code generator: ensure generated constants match their corresponding enums.
        https://bugs.webkit.org/show_bug.cgi?id=42250

        Specific interfaces can use DontCheckEnums attribute to avoid generating the compile-time check.

        Tests: updated bindings tests. Generated code should compile.

        * bindings/scripts/CodeGenerator.pm:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/scripts/test/CPP/WebDOMTestObj.h:
        (WebDOMTestObj::):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::):
        (WebCore::JSTestObjPrototype::getOwnPropertySlot):
        (WebCore::JSTestObjPrototype::getOwnPropertyDescriptor):
        (WebCore::jsTestObjCONST_VALUE_0):
        (WebCore::jsTestObjCONST_VALUE_1):
        (WebCore::jsTestObjCONST_VALUE_2):
        (WebCore::jsTestObjCONST_VALUE_4):
        (WebCore::jsTestObjCONST_VALUE_8):
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.h:
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::):
        (WebCore::ConfigureV8TestObjTemplate):
        * css/WebKitCSSTransformValue.idl:
        * dom/DOMCoreException.idl:
        * dom/EventException.idl:
        * dom/Node.idl:
        * dom/OverflowEvent.idl:
        * dom/RangeException.idl:
        * html/FileError.idl:
        * html/FileReader.idl:
        * html/canvas/Float32Array.idl:
        * html/canvas/Int16Array.idl:
        * html/canvas/Int32Array.idl:
        * html/canvas/Int8Array.idl:
        * html/canvas/Uint16Array.idl:
        * html/canvas/Uint32Array.idl:
        * html/canvas/Uint8Array.idl:
        * html/canvas/WebGLRenderingContext.idl:
        * inspector/JavaScriptCallFrame.idl:
        * loader/appcache/DOMApplicationCache.idl:
        * storage/SQLException.idl:
        * svg/SVGComponentTransferFunctionElement.idl:
        * svg/SVGException.idl:
        * svg/SVGFEBlendElement.idl:
        * svg/SVGFEColorMatrixElement.idl:
        * svg/SVGFECompositeElement.idl:
        * svg/SVGFEConvolveMatrixElement.idl:
        * svg/SVGFEDisplacementMapElement.idl:
        * svg/SVGFEMorphologyElement.idl:
        * svg/SVGFETurbulenceElement.idl:
        * svg/SVGGradientElement.idl:
        * xml/XMLHttpRequestException.idl:
        * xml/XPathException.idl:

2010-07-14  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Ojan Vafai.

        Unbreak fast/canvas/gradient-add-second-start-end-stop.html

        Assigning the same CanvasGradient or CanvasPattern to fillStyle
        or strokeStyle may not be a no-op since the object could have been
        modified since it was last set.

        Regressed with <http://trac.webkit.org/changeset/63327>

        * html/canvas/CanvasStyle.cpp:
        (WebCore::operator==):

2010-07-14  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Darin Adler.

        Canvas: Make assigning the same fillStyle or strokeStyle a fast no-op
        https://bugs.webkit.org/show_bug.cgi?id=42267

        Avoid calling into GraphicsContext when setting a style to its current value.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::setStrokeStyle): Return early if the
        new style is the same as the current one.
        (WebCore::CanvasRenderingContext2D::setFillStyle): Same.
        * html/canvas/CanvasStyle.cpp:
        (WebCore::operator==): Added operator==(CanvasStyle, CanvasStyle)
        * html/canvas/CanvasStyle.h:

2010-07-14  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Darin Fisher.

        Implement Web Timing redirectStart, redirectEnd, redirectCount
        https://bugs.webkit.org/show_bug.cgi?id=42018

        Tests: http/tests/misc/webtiming-one-redirect.php
               http/tests/misc/webtiming-two-redirects.php

        * loader/FrameLoaderTypes.h:
        (WebCore::FrameLoadTimeline::FrameLoadTimeline):
        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::willSendRequest): This method is called for each request (including server redirects). fetchStart is updated to the current time on each invocation so that it represents fetching of the final document and doesn't include redirect time. For each redirect, redirectCount is incremented and redirectStart to redirectEnd measures the cumulative fetch time for all redirects.
        * page/Navigation.cpp:
        (WebCore::Navigation::redirectCount): http://dev.w3.org/2006/webapi/WebTiming/#nt-redirect-count
        * page/Timing.cpp:
        (WebCore::Timing::redirectStart): http://dev.w3.org/2006/webapi/WebTiming/#nt-redirect-start
        (WebCore::Timing::redirectEnd): http://dev.w3.org/2006/webapi/WebTiming/#nt-redirect-end
        * page/Timing.h:
        * page/Timing.idl:

2010-07-14  Lucas De Marchi  <lucas.demarchi@profusion.mobi>

        Reviewed by Antonio Gomes.

        Generate MathML files with CMake even if MathML is disabled. This
        fixes EFL build after r63274.
        https://bugs.webkit.org/show_bug.cgi?id=42263

        No new functionality, so no new tests.

        * CMakeLists.txt:

2010-07-14  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Get rid of libWebCoreJS
        https://bugs.webkit.org/show_bug.cgi?id=42083

        Remove the need to build libWebCoreJS.

        * GNUmakefile.am: List all auto-generated source files for libWebCoreJS
        instead of relying on make to build libWebCoreJS. This is a more autotools-
        -friendly approach.

2010-07-14  Eric Carlson  <eric.carlson@apple.com>

        One more unreviewed build fix for r63319.

        * html/TimeRanges.cpp:
        (TimeRanges::nearest):

2010-07-14  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Enable toggling of the "Inspect Element" mode from the browser
        https://bugs.webkit.org/show_bug.cgi?id=42169

        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel):
        (WebInspector.ElementsPanel.prototype.handleShortcut):
        (WebInspector.ElementsPanel.prototype.toggleSearchingForNode):
        * inspector/front-end/inspector.js:
        (WebInspector.toggleSearchingForNode):

2010-07-14  Eric Carlson  <eric.carlson@apple.com>

        Unreviewed, build fix for r63319.

        * html/TimeRanges.cpp:
        (TimeRanges::nearest): Include math.h and use narrowPrecisionToFloat.

2010-07-14  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Darin Adler.

        Update media element's seeking logic
        https://bugs.webkit.org/show_bug.cgi?id=42178
        <rdar://problem/8185817>

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::seek): When asked to seek to an unbuffered time, seek to the 
        nearest time instead of generating an exception. Re-order the logic to match spec text.

        * html/TimeRanges.cpp:
        (TimeRanges::nearest): New, return the value closest to the specified time.
        * html/TimeRanges.h:

2010-07-14  Hans Wennborg  <hans@chromium.org>

        Reviewed by Steve Block.

        Rename DeviceOrientationController::onOrientationChange to didChangeDeviceOrientation
        https://bugs.webkit.org/show_bug.cgi?id=42257

        According to convention, we should avoid "on" in favor of "did" in function names.

        * dom/DeviceOrientationController.cpp:
        (WebCore::DeviceOrientationController::didChangeDeviceOrientation):
        * dom/DeviceOrientationController.h:

2010-07-14  Lucas De Marchi  <lucas.demarchi@profusion.mobi>

        Reviewed by Kent Tamura.

        Notify browser about popup being deleted. In EFL and BREW ports, the
        WebCore::Popup object was being deleted leaving the popup in browser
        alive. Popups can be deleted in two ways: either from browser to webcore or
        from webcore to browser. The first path was ok. The problem was when the
        user changed the page with a popup still opened. This would trigger the
        second path and would cause WebCore::Popup to be deleted without
        notifying browser.
        https://bugs.webkit.org/show_bug.cgi?id=41877

        No new functionality so no new tests.

        * platform/brew/PopupMenuBrew.cpp:
        (WebCore::PopupMenu::~PopupMenu): call hide() when object is
        destroyed.
        * platform/efl/PopupMenuEfl.cpp:
        (WebCore::PopupMenu::~PopupMenu): ditto.

2010-07-14  Satish Sampath  <satish@chromium.org>

        Reviewed by Kent Tamura.

        Invoke speech recognition when user clicks on the speech button of input elements.
        http://bugs.webkit.org/show_bug.cgi?id=42047

        No new tests, the relevant LayoutTestController bindings will be added in a subsequent patch.

        * rendering/TextControlInnerElements.cpp:
        (WebCore::InputFieldSpeechButtonElement::InputFieldSpeechButtonElement):
        (WebCore::InputFieldSpeechButtonElement::defaultEventHandler): Added click handling.
        (WebCore::InputFieldSpeechButtonElement::speechInput):
        (WebCore::InputFieldSpeechButtonElement::recordingComplete): Callback to indicate recording progress.
        (WebCore::InputFieldSpeechButtonElement::setRecognitionResult): Callback to receive recognized text.
        (WebCore::InputFieldSpeechButtonElement::detach):
        * rendering/TextControlInnerElements.h:

2010-07-14  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r63305.
        http://trac.webkit.org/changeset/63305
        https://bugs.webkit.org/show_bug.cgi?id=42256

        "debugger-breakpoints-not-activated-on-reload.html fails on
        GTK" (Requested by yurys on #webkit).

        * inspector/front-end/ScriptView.js:
        (WebInspector.ScriptView.prototype._addBreakpoint):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype._resourceLoadingFinished):
        (WebInspector.ScriptsPanel.prototype._breakpointAdded):
        (WebInspector.ScriptsPanel.prototype._scriptOrResourceForURLAndLine):
        (WebInspector.ScriptsPanel.prototype._showScriptOrResource):
        (WebInspector.ScriptsPanel.prototype._toggleBreakpointsClicked):
        * inspector/front-end/SourceView.js:
        (WebInspector.SourceView.prototype._addBreakpoint):

2010-07-14  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        Provide implementation of DeviceOrientationController and hook into DOMWindow
        https://bugs.webkit.org/show_bug.cgi?id=39588

        Added DeviceOrientationController::addListener() and removeListener()
        to start and stop the client and added calls from DomWindow. Implemented
        DeviceOrientationController::onDeviceOrientationChange() to fire a
        DeviceOrientationEvent on the window object.

        No new tests yet, pending LayoutTestController methods for mock DeviceOrientation.

        * dom/DeviceOrientationClient.h:
        * dom/DeviceOrientationController.cpp:
        (WebCore::DeviceOrientation::addListener):
        (WebCore::DeviceOrientation::removeListener):
        (WebCore::DeviceOrientation::removeAllListeners):
        (WebCore::DeviceOrientationController::onDeviceOrientationChange):
        * dom/DeviceOrientationController.h:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::addEventListener):
        (WebCore::DOMWindow::removeEventListener):
        (WebCore::DOMWindow::removeAllEventListeners):

2010-07-14  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: remove v8 debugger code that doesn't use ScriptDebugServer
        https://bugs.webkit.org/show_bug.cgi?id=42164

        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::retrieveFrame):
        (WebCore::ScriptDebugServer::addListener):
        (WebCore::ScriptDebugServer::setBreakpoint):
        (WebCore::ScriptDebugServer::removeBreakpoint):
        (WebCore::ScriptDebugServer::clearBreakpoints):
        (WebCore::ScriptDebugServer::setBreakpointsActivated):
        (WebCore::ScriptDebugServer::pauseOnExceptionsState):
        (WebCore::ScriptDebugServer::setPauseOnExceptionsState):
        (WebCore::ScriptDebugServer::continueProgram):
        (WebCore::ScriptDebugServer::stepIntoStatement):
        (WebCore::ScriptDebugServer::stepOverStatement):
        (WebCore::ScriptDebugServer::stepOutOfFunction):
        (WebCore::ScriptDebugServer::editScriptSource):
        (WebCore::ScriptDebugServer::handleV8DebugEvent):
        * bindings/v8/ScriptDebugServer.h:

2010-07-14  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        WebInspector: Clean-up InspectorBackend code. In the next changes
        InspectorBackend content will be generated by scripts. As far as
        generator is very simple thing all nontrivial function should be
        moved to InspectorController and DOMAgent.
        https://bugs.webkit.org/show_bug.cgi?id=42171

        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::pause):
        * bindings/js/ScriptDebugServer.h:
        (WebCore::ScriptDebugServer::activateBreakpoints):
        (WebCore::ScriptDebugServer::deactivateBreakpoints):
        * bindings/v8/ScriptDebugServer.h:
        (WebCore::ScriptDebugServer::activateBreakpoints):
        (WebCore::ScriptDebugServer::deactivateBreakpoints):
        (WebCore::ScriptDebugServer::pause):
        * inspector/Inspector.idl:
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::saveApplicationSettings):
        (WebCore::InspectorBackend::saveSessionSettings):
        (WebCore::InspectorBackend::enableSearchingForNode):
        (WebCore::InspectorBackend::disableSearchingForNode):
        (WebCore::InspectorBackend::enableMonitoringXHR):
        (WebCore::InspectorBackend::disableMonitoringXHR):
        (WebCore::InspectorBackend::getResourceContent):
        (WebCore::InspectorBackend::reloadPage):
        (WebCore::InspectorBackend::activateBreakpoints):
        (WebCore::InspectorBackend::deactivateBreakpoints):
        (WebCore::InspectorBackend::pause):
        (WebCore::InspectorBackend::resume):
        (WebCore::InspectorBackend::stepOverStatement):
        (WebCore::InspectorBackend::stepIntoStatement):
        (WebCore::InspectorBackend::stepOutOfFunction):
        (WebCore::InspectorBackend::setPauseOnExceptionsState):
        (WebCore::InspectorBackend::copyNode):
        (WebCore::InspectorBackend::pushNodeByPathToFrontend):
        (WebCore::InspectorBackend::highlightDOMNode):
        (WebCore::InspectorBackend::hideDOMNodeHighlight):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::saveApplicationSettings):
        (WebCore::InspectorController::saveSessionSettings):
        (WebCore::InspectorController::highlightDOMNode):
        (WebCore::InspectorController::resume):
        (WebCore::InspectorController::setPauseOnExceptionsState):
        (WebCore::InspectorController::getResourceContent):
        (WebCore::InspectorController::reloadPage):
        * inspector/InspectorController.h:
        (WebCore::InspectorController::hideDOMNodeHighlight):
        (WebCore::InspectorController::startProfiling):
        (WebCore::InspectorController::stopProfiling):
        (WebCore::InspectorController::enableSearchingForNode):
        (WebCore::InspectorController::disableSearchingForNode):
        (WebCore::InspectorController::enableMonitoringXHR):
        (WebCore::InspectorController::disableMonitoringXHR):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::copyNode):
        (WebCore::InspectorDOMAgent::pushNodeByPathToFrontend):
        * inspector/InspectorDOMAgent.h:
        * inspector/front-end/InspectorBackendStub.js:
        (.WebInspector.InspectorBackendStub.prototype.pause):
        (.WebInspector.InspectorBackendStub.prototype.resume):
        (.WebInspector.InspectorBackendStub.prototype.stepIntoStatement):
        (.WebInspector.InspectorBackendStub.prototype.stepOutOfFunction):
        (.WebInspector.InspectorBackendStub.prototype.stepOverStatement):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._togglePause):
        (WebInspector.ScriptsPanel.prototype._stepOverClicked):
        (WebInspector.ScriptsPanel.prototype._stepIntoClicked):
        (WebInspector.ScriptsPanel.prototype._stepOutClicked):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy):

2010-07-14  Joone Hur  <joone@kldp.org>

        Reviewed by Jian Li.

        [GTK] Enabling File Reader/Writer APIs
        https://bugs.webkit.org/show_bug.cgi?id=40209

        The layout test fast/files will be enabled after eventSender.beginDragWithFiles is implemented for GTK.

        * platform/gtk/FileSystemGtk.cpp:
        (WebCore::openFile): Added.
        (WebCore::readFromFile): Added.

2010-07-14  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Inconsistent LayoutRepainter usage in the SVG renderers
        https://bugs.webkit.org/show_bug.cgi?id=42245

        Unify LayoutRepainter usage in the SVG renders, as RenderBlock does it, always use:
        LayoutRepainter repainter(*this, m_everHadLayout && checkForRepaintDuringLayout());
        instead of including selfWillPaint / selfNeedsLayout checks. This improves layout test
        performance by 8s on my machine with a debug build (from 76.72s -> 68.59s, averaged over 5 runs)

        * rendering/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::layout):
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::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):

2010-07-14  Kent Tamura  <tkent@chromium.org>

        Unreviewed, build fix for r63300.

        * rendering/RenderSVGResourceContainer.h:
        (WebCore::RenderSVGResourceContainer::containsCyclicReference):

2010-07-14  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: do not activate all breakpoints on page reload
        https://bugs.webkit.org/show_bug.cgi?id=41461

        Test: inspector/debugger-breakpoints-not-activated-on-reload.html

        * inspector/front-end/ScriptView.js:
        (WebInspector.ScriptView.prototype._addBreakpoint):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype._breakpointAdded):
        (WebInspector.ScriptsPanel.prototype.toggleBreakpointsClicked):
        * inspector/front-end/SourceView.js:
        (WebInspector.SourceView.prototype._addBreakpoint):

2010-07-14  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: use OwnPtr to manage ConsoleMessages in InspectorController
        https://bugs.webkit.org/show_bug.cgi?id=42243

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::~InspectorController):
        (WebCore::InspectorController::addConsoleMessage):
        (WebCore::InspectorController::clearConsoleMessages):
        * inspector/InspectorController.h:
        (WebCore::InspectorController::consoleMessages):

2010-07-14  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Eric Seidel.

        SVG patterns and masks should not be able to reference themselves
        https://bugs.webkit.org/show_bug.cgi?id=32171

        Don't apply pattern/mask resources, if they contain cyclic references. Gradients/Filters are not affected.
        Clippers are already correcly handling this on their own, as well as markers (all which require subtle quirks, covered by existing tests).

        Tests: svg/custom/recursive-filter.svg
               svg/custom/recursive-gradient.svg
               svg/custom/recursive-mask.svg
               svg/custom/recursive-pattern.svg

        * rendering/RenderSVGResourceContainer.h:
        (WebCore::RenderSVGResourceContainer::RenderSVGResourceContainer): Stop using idForStyleResolution(), but use getIdAttribute(), no functional change though.
        (WebCore::RenderSVGResourceContainer::idChanged): Ditto.
        (WebCore::RenderSVGResourceContainer::childElementReferencesResource): To be implemented by classes inheriting from us. Defaults to false.
        (WebCore::RenderSVGResourceContainer::containsCyclicReference): Check whether this resource contains contains a child which references ourselves.
        * rendering/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::childElementReferencesResource): Check whether the masker child specifies mask=".." with the same URI than ourselves.
        (WebCore::RenderSVGResourceMasker::applyResource): Early exit if we contain a cylic reference.
        * rendering/RenderSVGResourceMasker.h:
        * rendering/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::childElementReferencesResource): Check whether the masker child specifies fill=".." with the same URI than ourselves.
        (WebCore::RenderSVGResourcePattern::applyResource): Early exit if we contain a cylic reference.
        * rendering/RenderSVGResourcePattern.h:
        * svg/SVGPaint.cpp:
        (WebCore::SVGPaint::matchesTargetURI): Add new helper function comparing a SVGPaint URI with a given reference id.
        * svg/SVGPaint.h:

2010-07-14  Eric Seidel  <eric@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Selection dumping code should not dump body's offset in the document
        https://bugs.webkit.org/show_bug.cgi?id=42238

        This requires updating the results of many layout tests,
        but has no functional change.

        * rendering/RenderTreeAsText.cpp:
        (WebCore::nodePosition):

2010-07-14  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Fisher.

        <input type=number> UI: inner spin button layout
        https://bugs.webkit.org/show_bug.cgi?id=41924

        Add layout/event/style code for the inner spin button, which is
        going to be used for Windows implementation.
        No new tests because no ports implement the inner spin button yet.

        * rendering/RenderTextControlSingleLine.cpp:
          Introduce m_innerSpinButton.
        (WebCore::RenderTextControlSingleLine::~RenderTextControlSingleLine):
          Detach m_innerSpinButton.
        (WebCore::RenderTextControlSingleLine::layout):
          Set position and size of m_innerSpinButton.
        (WebCore::RenderTextControlSingleLine::nodeAtPoint):
          Handle m_innerSpinButton.
        (WebCore::RenderTextControlSingleLine::forwardEvent):
          Handle m_innerSpinButton.
        (WebCore::RenderTextControlSingleLine::textBlockWidth):
          Shorten the text block width by m_innerSpinButton width.
        (WebCore::RenderTextControlSingleLine::preferredContentWidth):
          Add m_innerSpinButton width.
        (WebCore::RenderTextControlSingleLine::createSubtreeIfNeeded):
          Handle m_innerSpinButton.
        (WebCore::RenderTextControlSingleLine::createInnerSpinButtonStyle):
          Make style for m_innerSpinButton with INNER_SPIN_BUTTON pseudo class.
        * rendering/RenderTextControlSingleLine.h:

2010-07-14  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Fisher.

        <input type=number> UI: Support disabled/readonly states
        https://bugs.webkit.org/show_bug.cgi?id=38568

        Implement isEnabledFormControl() and isReadOnlyFormControl() of
        SpinButtonElement. They returns the states of the parent <input> element.
        The existing isEnabledFormControl() had a bug. It didn't have 'const'
        modifier.

        Test: fast/forms/input-appearance-spinbutton-disabled-readonly.html

        * rendering/TextControlInnerElements.cpp:
        (WebCore::SpinButtonElement::defaultEventHandler):
         - If the input element is disabled or read-only, don't process events.
         - Protect 'input' object from destruction during focus().
         - Fix a hit-test issue. We don't need to add renderBox()->y() because
           'local' is relative to the RenderBox.
         - Some code cleanup
        * rendering/TextControlInnerElements.h:
        (WebCore::SpinButtonElement::isEnabledFormControl):
        (WebCore::SpinButtonElement::isReadOnlyFormControl):

2010-07-13  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Page flashes to mostly white towards the end of loading
        https://bugs.webkit.org/show_bug.cgi?id=42230
        
        We constrain the size of huge composited layers. When doing so, we
        need to use the constained size to set the position as well
        as the dimensions, to ensure the layer appears in the correct place.

        Test: compositing/tiling/constrained-layer-size.html

        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::GraphicsLayerCA::updateLayerPosition):

2010-07-13  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Fisher.

        [Chromium] Linux implementation of <input type=number> UI
        https://bugs.webkit.org/show_bug.cgi?id=41925

        - Move the code for scrollbar steppers from ScrollbarThemeChromiumLinux
          to PlatformThemeChromiumGtk.
        - Move the code for scrollbar colors from RenderThemeChromiumLinux
          to PlatformThemeChromiumGtk.

        * WebCore.gypi:
        * platform/chromium/PlatformThemeChromiumGtk.cpp: Added.
        (WebCore::PlatformThemeChromiumGtk::setScrollbarColors): Moved from RenderThemeChromiumLinux.
        (WebCore::clamp): Moved from ScrollbarThemeChromiumLinux.
        (WebCore::PlatformThemeChromiumGtk::saturateAndBrighten): ditto.
        (WebCore::PlatformThemeChromiumGtk::outlineColor): ditto.
        (WebCore::PlatformThemeChromiumGtk::paintArrowButton): ditto.
        * platform/chromium/PlatformThemeChromiumGtk.h: Added.
        * platform/chromium/ScrollbarThemeChromiumLinux.cpp:
        (WebCore::ScrollbarThemeChromiumLinux::paintTrackPiece):
        (WebCore::ScrollbarThemeChromiumLinux::paintButton):
         Move the main part of the code to PlatformThemeChromiumGtk.
        (WebCore::ScrollbarThemeChromiumLinux::paintThumb):
        * rendering/RenderThemeChromiumLinux.cpp:
        (WebCore::RenderThemeChromiumLinux::adjustInnerSpinButtonStyle): Added.
        (WebCore::RenderThemeChromiumLinux::paintInnerSpinButton): Added.
        * rendering/RenderThemeChromiumLinux.h:

2010-07-13  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Darin Fisher

        Implementing DatabaseSync::transaction() and DatabaseSync::changeVersion().
        https://bugs.webkit.org/show_bug.cgi?id=40607

        Tests: fast/workers/storage/change-version-handle-reuse-sync.html
               fast/workers/storage/change-version-sync.html
               fast/workers/storage/empty-statement-sync.html
               fast/workers/storage/execute-sql-args-sync.html
               fast/workers/storage/executesql-accepts-only-one-statement-sync.html
               fast/workers/storage/multiple-transactions-on-different-handles-sync.html
               fast/workers/storage/open-database-creation-callback-sync.html
               fast/workers/storage/open-database-empty-version-sync.html
               fast/workers/storage/open-database-inputs-sync.html
               fast/workers/storage/open-database-set-empty-version-sync.html
               fast/workers/storage/open-database-while-transaction-in-progress-sync.html
               fast/workers/storage/sql-data-types-sync.html
               fast/workers/storage/sql-exception-codes-sync.html
               fast/workers/storage/test-authorizer-sync.html
               fast/workers/storage/transaction-in-transaction-sync.html

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * storage/AbstractDatabase.cpp:
        (WebCore::AbstractDatabase::maximumSize):
        (WebCore::AbstractDatabase::incrementalVacuumIfNeeded):
        * storage/AbstractDatabase.h:
        (WebCore::AbstractDatabase::sqliteDatabase):
        * storage/ChangeVersionWrapper.cpp:
        (WebCore::ChangeVersionWrapper::performPreflight):
        (WebCore::ChangeVersionWrapper::performPostflight):
        * storage/Database.cpp:
        (WebCore::Database::performGetTableNames):
        * storage/Database.h:
        * storage/DatabaseAuthorizer.cpp:
        (WebCore::DatabaseAuthorizer::createVTable):
        (WebCore::DatabaseAuthorizer::dropVTable):
        * storage/DatabaseCallback.h:
        * storage/DatabaseSync.cpp:
        (WebCore::ChangeVersionPreflightStep::create):
        (WebCore::ChangeVersionPreflightStep::performStep):
        (WebCore::ChangeVersionPreflightStep::ChangeVersionPreflightStep):
        (WebCore::ChangeVersionPostflightStep::create):
        (WebCore::ChangeVersionPostflightStep::performStep):
        (WebCore::ChangeVersionPostflightStep::ChangeVersionPostflightStep):
        (WebCore::DatabaseSync::changeVersion):
        (WebCore::DatabaseSync::transaction):
        (WebCore::DatabaseSync::runTransaction):
        * storage/DatabaseSync.h:
        * storage/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::getMaxSizeForDatabase):
        * storage/SQLError.h:
        * storage/SQLResultSet.cpp:
        * storage/SQLResultSet.h:
        * storage/SQLStatementCallback.h:
        * storage/SQLStatementErrorCallback.h:
        * storage/SQLStatementSync.cpp: Copied from WebCore/storage/SQLStatement.cpp.
        (WebCore::SQLStatementSync::SQLStatementSync):
        (WebCore::SQLStatementSync::execute):
        * storage/SQLStatementSync.h: Added.
        * storage/SQLTransaction.cpp:
        (WebCore::SQLTransaction::runCurrentStatement):
        (WebCore::SQLTransaction::deliverQuotaIncreaseCallback):
        (WebCore::SQLTransaction::postflightAndCommit):
        * storage/SQLTransaction.h:
        * storage/SQLTransactionCallback.h:
        * storage/SQLTransactionClient.cpp:
        (WebCore::SQLTransactionClient::didCommitWriteTransaction):
        (WebCore::SQLTransactionClient::didExecuteStatement):
        (WebCore::SQLTransactionClient::didExceedQuota):
        * storage/SQLTransactionClient.h:
        * storage/SQLTransactionErrorCallback.h:
        * storage/SQLTransactionSync.cpp:
        (WebCore::transactionClient):
        (WebCore::SQLTransactionSync::create):
        (WebCore::SQLTransactionSync::SQLTransactionSync):
        (WebCore::SQLTransactionSync::~SQLTransactionSync):
        (WebCore::SQLTransactionSync::executeSQL):
        (WebCore::SQLTransactionSync::begin):
        (WebCore::SQLTransactionSync::execute):
        (WebCore::SQLTransactionSync::commit):
        (WebCore::SQLTransactionSync::rollback):
        * storage/SQLTransactionSync.h:
        (WebCore::SQLTransactionSync::SQLTransactionSyncOptionalStep::~SQLTransactionSyncOptionalStep):
        * storage/SQLTransactionSyncCallback.h:
        * storage/chromium/SQLTransactionClientChromium.cpp:
        (WebCore::SQLTransactionClient::didCommitWriteTransaction):
        (WebCore::SQLTransactionClient::didExecuteStatement):
        (WebCore::SQLTransactionClient::didExceedQuota):

2010-07-13  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r63162.
        http://trac.webkit.org/changeset/63162
        https://bugs.webkit.org/show_bug.cgi?id=42224

        This is no longer needed (Requested by olliej_ on #webkit).

        * bindings/v8/ScriptSourceCode.h:
        (WebCore::ScriptSourceCode::ScriptSourceCode):

2010-07-13  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Fix my misreading of "clear to the last marker" in the HTML5 spec
        https://bugs.webkit.org/show_bug.cgi?id=42199

        * html/HTMLFormattingElementList.cpp:
        (WebCore::HTMLFormattingElementList::clearToLastMarker):
        * html/HTMLFormattingElementList.h:
        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processBodyEndTagForInBody):
        (WebCore::HTMLTreeBuilder::processEndOfFile):

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

        Reviewed by Gavin Barraclough.

        ES5 requires BOMs to be treated as whitespace
        https://bugs.webkit.org/show_bug.cgi?id=42218

        Remove BOM handling logic from WebCore Script objects.

        * bindings/js/StringSourceProvider.h:
        (WebCore::StringSourceProvider::StringSourceProvider):
        * loader/CachedScript.cpp:
        (WebCore::CachedScript::CachedScript):
        (WebCore::CachedScript::script):
        * loader/CachedScript.h:

2010-07-13  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Darin Adler.

        Canvas: rect(x,y,w,h) should move to (x,y) even if w=0 and h=0
        https://bugs.webkit.org/show_bug.cgi?id=42211

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

2010-07-13  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Show IDs and classnames in layer tree dumps
        https://bugs.webkit.org/show_bug.cgi?id=42213

        When dumping the layer tree via showLayerTree(), include id and class attributes for
        ease of debugging.
        
        No tests, since this is debug-only code.

        * rendering/RenderLayer.cpp:
        (showLayerTree):
        * rendering/RenderTreeAsText.cpp:
        (WebCore::RenderTreeAsText::writeRenderObject):
        * rendering/RenderTreeAsText.h:
        (WebCore::):

2010-07-13  Simon Fraser  <simon.fraser@apple.com>

        Build fix: fix WebCore exports by editing the .in file, rather than the generated file.

        * WebCore.exp.in:

2010-07-13  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=42216
        ResourceRequest::doUpdateResourceRequest() crashes if client denied request

        This is covered by many regression tests with patch for bug 42201 applied (because it makes
        us also use this code path for sync requests, and those currently have more strict limitations).

        * platform/network/cf/ResourceRequestCFNet.cpp:
        (WebCore::ResourceRequest::doUpdateResourceRequest): Added a null check.

2010-07-13  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Make our end tag in-foreign-content mode spec bug workarounds more closely match minefield
        https://bugs.webkit.org/show_bug.cgi?id=42187

        I do not expect these work-arounds to be permanent.  Hixie has promised to
        addresses the feedback to the parser sections of HTML5 soon.
        I added these hacks to make our hacks more-closely match Minefield's hacks
        and thus have us "pass" a few more html5lib runner tests.

        We now pass all of the html5lib foreign content tests
        (thus we'll likely need to write more).

        Tested by html5lib/runner.html

        * html/HTMLElementStack.cpp:
        (WebCore::HTMLElementStack::contains):
        * html/HTMLElementStack.h:
        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processEndTag):

2010-07-12  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Darin Fisher.

        Wire network times from ResourceLoadTiming to performance.timing
        https://bugs.webkit.org/show_bug.cgi?id=41824

        * page/Timing.cpp:
        (WebCore::Timing::domainLookupStart): http://dev.w3.org/2006/webapi/WebTiming/#nt-domain-lookupstart
        (WebCore::Timing::domainLookupEnd): http://dev.w3.org/2006/webapi/WebTiming/#nt-domain-lookupend
        (WebCore::Timing::connectStart): http://dev.w3.org/2006/webapi/WebTiming/#nt-connect-start
        (WebCore::Timing::connectEnd): http://dev.w3.org/2006/webapi/WebTiming/#nt-connect-end
        (WebCore::Timing::requestStart): http://dev.w3.org/2006/webapi/WebTiming/#nt-request-start
        (WebCore::Timing::requestEnd): http://dev.w3.org/2006/webapi/WebTiming/#nt-request-end
        (WebCore::Timing::responseStart): http://dev.w3.org/2006/webapi/WebTiming/#nt-response-start
        (WebCore::Timing::resourceLoadTiming):
        * page/Timing.h:
        * page/Timing.idl:

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

        Reviewed by Sam Weinig.

        Add support for loading javascript: URLs
        https://bugs.webkit.org/show_bug.cgi?id=42221

        * WebCore.exp.in:
        Export protocolIsJavaScript and ScriptValue::getString.

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

        Reviewed by Sam Weinig.

        Add support for URL frame loading using NPN_GetURLNotify
        https://bugs.webkit.org/show_bug.cgi?id=42192

        * WebCore.exp.in:
        Export ResourceRequestBase::setHTTPMethod and ResourceRequestBase::setURL.

2010-07-04  Zhenyao Mo  <zmo@google.com>

        Reviewed by Darin Fisher.

        Need to track texture completeness
        https://bugs.webkit.org/show_bug.cgi?id=41381

        Test: fast/canvas/webgl/texture-complete.html

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::WebGLRenderingContext): Init max texture level.
        (WebCore::WebGLRenderingContext::bindTexture): Pass max texture level to setTarget().
        (WebCore::WebGLRenderingContext::copyTexImage2D): Cache full texture info rather than partial.
        (WebCore::WebGLRenderingContext::generateMipmap): Ditto.
        (WebCore::WebGLRenderingContext::texImage2DBase): Ditto.
        (WebCore::WebGLRenderingContext::validateTexFuncParameters): Also validate level.
        * html/canvas/WebGLRenderingContext.h: Add max texture level.
        * html/canvas/WebGLTexture.cpp: Update the class to fully cache texture information and track NPOT and COMPLETE states.
        (WebCore::WebGLTexture::WebGLTexture):
        (WebCore::WebGLTexture::setTarget): Check whether the texture is initialized or has been deleted.
        (WebCore::WebGLTexture::setParameteri): Ditto.
        (WebCore::WebGLTexture::setParameterf): Ditto.
        (WebCore::WebGLTexture::setLevelInfo): Set texture info.
        (WebCore::WebGLTexture::generateMipmapLevelInfo): Generate texture info for all levels after generateMipmaps() is called.
        (WebCore::WebGLTexture::getInternalFormat): Return internal format on texture face 0 level 0.
        (WebCore::WebGLTexture::isNPOT): Check whether the texture is initialized or has been deleted.
        (WebCore::WebGLTexture::needToUseBlackTexture): Ditto.
        (WebCore::WebGLTexture::_deleteObject):
        (WebCore::WebGLTexture::mapTargetToIndex): Map target to index.
        (WebCore::WebGLTexture::canGenerateMipmaps): Check whether Mipmaps can be generated.
        (WebCore::WebGLTexture::computeLevelCount): Compute texture level count from width/height.
        (WebCore::WebGLTexture::update): Update NPOT/COMPLETE states.
        * html/canvas/WebGLTexture.h: Ditto.
        (WebCore::WebGLTexture::LevelInfo::LevelInfo): Add data structure to fully cache texture info.
        (WebCore::WebGLTexture::LevelInfo::setInfo): Set information.

2010-07-13  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Darin Adler.

        Canvas: drawImage() with wrong 'image' argument type should always throw TypeError
        https://bugs.webkit.org/show_bug.cgi?id=42160

        Test: canvas/philip/tests/2d.drawImage.wrongtype.html

        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        (WebCore::JSCanvasRenderingContext2D::drawImage): Throw TypeError instead of
        TYPE_MISMATCH_ERR if 'image' argument is not an image, canvas or video element.

2010-07-13  Aaron Boodman  <aa@chromium.org>

        Reviewed by Timothy Hatcher.

        Don't reset per-document user style caches when user styles are updated in
        Chromium.

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

        * page/PageGroup.cpp:
        (WebCore::PageGroup::addUserStyleSheetToWorld):
        (WebCore::PageGroup::removeUserStyleSheetFromWorld):
        (WebCore::PageGroup::removeUserStyleSheetsFromWorld):
        (WebCore::PageGroup::removeAllUserContent):
        (WebCore::PageGroup::resetUserStyleCacheInAllFrames):
        * page/PageGroup.h:

2010-07-13  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Dan Bernstein.

        On Leopard, media element can't handle audio/mp4 MIME type in source tag
        https://bugs.webkit.org/show_bug.cgi?id=29326

        Test: media/media-can-play-mpeg-audio.html

        * platform/MIMETypeRegistry.cpp:
        (WebCore::TypeExtensionPair::): Add "audio/mp4", "m4a" to mappings table.

2010-07-13  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Darin Fisher.

        Implement performance.timing.fetchStart
        https://bugs.webkit.org/show_bug.cgi?id=41816

        See: http://dev.w3.org/2006/webapi/WebTiming/#nt-fetch-start

        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::willSendRequest): Record the fetchStart time for each request for the main resource. This means it is called for each server redirect, overwritting the previous value. In https://bugs.webkit.org/show_bug.cgi?id=42018, this will be modified such that if a previous value exists, it is stored as the redirect time.
        * loader/FrameLoaderTypes.h:
        (WebCore::FrameLoadTimeline::FrameLoadTimeline):
        * page/Timing.cpp:
        (WebCore::Timing::fetchStart):
        * page/Timing.h:
        * page/Timing.idl:

2010-07-13  Satish Sampath  <satish@chromium.org>

        Reviewed by Steve Block.

        Speech input plumbing in webcore
        https://bugs.webkit.org/show_bug.cgi?id=41518

        Adds the following:
        - a SpeechInput class to be used by the speech enabled HTML elements
        - a SpeechInputListener interface to be implemented by the speech enabled HTML elements
        - a SpeechInputClient interface (defined in WebCore, implemented by WebKit) for WebCore to call into WebKit.
          This is available as a member of WebCore::Page, set by the platforms which support speech input.
        - a SpeechInputClientListener interface for WebCore to receive events from WebKit

        No new tests, the relevant LayoutTestController bindings will be added in a subsequent patch.

        * Android.mk:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * page/Page.cpp:
        (WebCore::Page::Page):
        * page/Page.h: Added SpeechInputClient member variable and associated methods.
        (WebCore::Page::setSpeechInputClient):
        (WebCore::Page::speechInputClient):
        * page/SpeechInput.cpp: Added new class to provide speech API services to HTML elements.
        (WebCore::SpeechInput::SpeechInput):
        (WebCore::SpeechInput::recordingComplete):
        (WebCore::SpeechInput::setRecognitionResult):
        (WebCore::SpeechInput::startRecognition):
        * page/SpeechInput.h: Added.
        (WebCore::SpeechInput::~SpeechInput):
        (WebCore::SpeechInput::client):
        * page/SpeechInputListener.h: Added.
        (WebCore::SpeechInputListener::~SpeechInputListener):
        * page/SpeechInputClient.h: Added new interface implemented by WebKit to bubble up speech API requests to the embedder.
        (WebCore::SpeechInputClient::~SpeechInputClient):
        * page/SpeechInputClientListener.h: Added.
        (WebCore::SpeechInputClientListener::~SpeechInputClientListener):

2010-07-13  Richard Moore <rich@kde.org>, Robert Hogan  <robert@webkit.org>

        Reviewed by Simon Hausmann.

        [Qt] MIME handling in qtwebkit network layer case-sensitivity

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

        Like other platforms, Qt needs to convert MIME types to lower case
        so they will be handled by WebCore.

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

2010-07-13  James Robinson  <jamesr@chromium.org>

        Reviewed by Simon Fraser.

        REGRESSION(55056) debug builds ASSERT falsely on pages with animations
        https://bugs.webkit.org/show_bug.cgi?id=42175

        Revision 55065 added some repaint box precomputation and some debug ASSERT()ions
        to ensure the precomputed values were valid.  However, if animations are enabled and
        not hardware accelerated, the repaint box dimensions become time-dependent and the
        ASSERT()s can trigger.  This can make it impossible to interactively debug pages
        like google maps.

        https://bugs.webkit.org/show_bug.cgi?id=37048 is another example of an assertion
        failing due to time dependent animation values.

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

2010-07-13  Zhenyao Mo  <zmo@google.com>

        Reviewed by Darin Fisher.

        Implement bufferData and bufferSubData with ArrayBuffer as input
        https://bugs.webkit.org/show_bug.cgi?id=41884

        Test: fast/canvas/webgl/buffer-data-array-buffer.html

        * html/canvas/WebGLBuffer.cpp: Implement associateBufferData & associateBufferSubData with ArrayBuffer as input.
        (WebCore::WebGLBuffer::associateBufferData):
        (WebCore::WebGLBuffer::associateBufferSubData):
        * html/canvas/WebGLBuffer.h: Ditto.
        * html/canvas/WebGLRenderingContext.cpp: Implement bufferData and bufferSubData with ArrayBuffer as input.
        (WebCore::WebGLRenderingContext::bufferData):
        (WebCore::WebGLRenderingContext::bufferSubData):
        * html/canvas/WebGLRenderingContext.h: Ditto.
        * html/canvas/WebGLRenderingContext.idl: Ditto.
        * platform/graphics/GraphicsContext3D.h: Ditto.
        * platform/graphics/mac/GraphicsContext3DMac.mm: Ditto.
        (WebCore::GraphicsContext3D::bufferData):
        (WebCore::GraphicsContext3D::bufferSubData):

2010-07-13  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Darin Fisher.

        Implement performance.timing.responseEnd
        https://bugs.webkit.org/show_bug.cgi?id=42006

        See: http://dev.w3.org/2006/webapi/WebTiming/#nt-response-end

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::finishedLoading):
        * loader/FrameLoaderTypes.h:
        (WebCore::FrameLoadTimeline::FrameLoadTimeline):
        * page/Timing.cpp:
        (WebCore::Timing::responseEnd):
        * page/Timing.h:
        * page/Timing.idl:

2010-07-13  W. James MacLean <wjmaclean@chromium.org>

        Reviewed by Darin Fisher

        Bug 41962 Limit html canvas element dimensions to 32767 for Skia platform
        https://bugs.webkit.org/show_bug.cgi?id=41962

        Test: fast/canvas/canvas-skia-excessive-size.html

        * WebCore/html/HTMLCanvasElement.cpp
        (WebCore::HTMLCanvasElement::convertLogicalToDevice):

2010-07-10  Zhenyao Mo  <zmo@google.com>

        Reviewed by Darin Fisher.

        Need to emulate MAX_VARYING_VECTORS/MAX_FRAGMENT_UNIFORM_VECTORs/MAX_VERTEX_UNIFORM_VECTORS for glGet
        https://bugs.webkit.org/show_bug.cgi?id=42032

        * platform/graphics/mac/GraphicsContext3DMac.mm:
        (WebCore::GraphicsContext3D::getIntegerv): Emulate the enums.

2010-07-13  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Eric Carlson.

        [GTK] video playback position query flood when mouse over the video element
        https://bugs.webkit.org/show_bug.cgi?id=35333

        Don't trigger a position query only to know which play/pause
        button to display. Instead use the media-control button display
        type to select the image to paint.

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

2010-07-13  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r63192.
        http://trac.webkit.org/changeset/63192
        https://bugs.webkit.org/show_bug.cgi?id=42173

        Broke fast/backgrounds/size/contain-and-cover.html (Requested
        by kling on #webkit).

        * manual-tests/css3-background-layer-count.html: Removed.
        * rendering/style/FillLayer.cpp:
        (WebCore::FillLayer::cullEmptyLayers):

2010-07-13  Marcus Bulach  <bulach@chromium.org>

        Reviewed by Jeremy Orlow.

        Removes cycles caused by "m_this" members in a few IndexedDB classes.
        https://bugs.webkit.org/show_bug.cgi?id=42161

        Adds IDBAny::create for the various types.
        No functionality change, just cleaning up.

        * storage/IDBAny.cpp:
        (WebCore::createIDBAny):
        (WebCore::IDBAny::create):
        * storage/IDBAny.h:
        * storage/IDBDatabaseRequest.cpp:
        (WebCore::IDBDatabaseRequest::IDBDatabaseRequest):
        (WebCore::IDBDatabaseRequest::createObjectStore):
        (WebCore::IDBDatabaseRequest::removeObjectStore):
        * storage/IDBDatabaseRequest.h:
        * storage/IDBKeyRange.cpp:
        (WebCore::IDBKeyRange::IDBKeyRange):
        * storage/IDBKeyRange.h:
        (WebCore::IDBKeyRange::left):
        (WebCore::IDBKeyRange::right):
        * storage/IDBObjectStoreRequest.cpp:
        (WebCore::IDBObjectStoreRequest::IDBObjectStoreRequest):
        (WebCore::IDBObjectStoreRequest::get):
        (WebCore::IDBObjectStoreRequest::add):
        (WebCore::IDBObjectStoreRequest::put):
        (WebCore::IDBObjectStoreRequest::remove):
        (WebCore::IDBObjectStoreRequest::createIndex):
        (WebCore::IDBObjectStoreRequest::removeIndex):
        * storage/IDBObjectStoreRequest.h:
        * storage/IndexedDatabaseRequest.cpp:
        (WebCore::IndexedDatabaseRequest::IndexedDatabaseRequest):
        (WebCore::IndexedDatabaseRequest::open):
        * storage/IndexedDatabaseRequest.h:

2010-07-13  Antti Koivisto  <koivisto@iki.fi>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Land the initial build system for WebKit2
        https://bugs.webkit.org/show_bug.cgi?id=41604

        The build is enabled by passing --qmakearg="CONFIG+=webkit2" to build-webkit

        * WebCore.pri:
        * WebCore.pro:

2010-07-13  Leon Clarke  <leonclarke@google.com>

        Reviewed by Pavel Feldman.

        Don't access objects after deleting them, following
        the addition of link prefetching. Also remove a forward declaration
        of the now-nonexistent CachedLinkPrefetch class.
        https://bugs.webkit.org/show_bug.cgi?id=3652

        No new tests. Correcting aspects of the prefetch change that shouldn't
        have affected functionality.

        * html/HTMLLinkElement.h:
        * loader/loader.cpp:
        (WebCore::Loader::Host::cancelPendingRequests):

2010-07-13  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Simon Hausmann.

        [Qt] Fix the case of a linker option to lowercase to be able to
        cross compile QtWebKit for Windows on Linux.

        No new tests needed.

        * WebCore.pro:

2010-07-12  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        WebInspector: Next iteration of Inspector code generator.
        The InspectorFrontend2 was replaced by slightly modified version of
        InspectorBackend file (Inspector.idl). At the end all the interface
        between WebInspector and inspected page will be specified by this file
        and generated by CodeGeneratorInspector (InspectorFrontend.cpp,
        InspectorBackend.cpp and InspectorBackend.js).
        https://bugs.webkit.org/show_bug.cgi?id=42104

        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gyp/scripts/rule_binding.py:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/scripts/IDLParser.pm:
        * bindings/scripts/IDLStructure.pm:
        * bindings/scripts/generate-bindings.pl:
        * inspector/CodeGeneratorInspector.pm:
        * inspector/Inspector.idl: Added.
        * inspector/InspectorCSSStore.cpp:
        (WebCore::InspectorCSSStore::inspectorStyleSheet):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::startTimelineProfiler):
        * inspector/InspectorController.h:
        (WebCore::InspectorController::remoteInspectorFrontend):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        * inspector/InspectorDOMAgent.h:
        (WebCore::InspectorDOMAgent::create):
        * inspector/InspectorFrontend2.idl: Removed.
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::InspectorTimelineAgent):
        (WebCore::InspectorTimelineAgent::resetFrontendProxyObject):
        * inspector/InspectorTimelineAgent.h:

2010-07-12  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        DeviceOrientationEvent should use optional properties
        https://bugs.webkit.org/show_bug.cgi?id=41607

        This change adds a new DeviceOrientation class which takes care of which of the
        optional properties are present. DeviceOrientationEvent owns an instance of
        DeviceOrientation, rather than owning the properties directly.
        DeviceOrientationEvent now requires custom bindings.

        Test: fast/dom/DeviceOrientation/optional-event-properties.html

        * Android.mk:
        * Android.jscbindings.mk:
        * Android.v8bindings.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSDeviceOrientationEventCustom.cpp: Added.
        (WebCore::JSDeviceOrientationEvent::alpha):
        (WebCore::JSDeviceOrientationEvent::beta):
        (WebCore::JSDeviceOrientationEvent::gamma):
        (WebCore::JSDeviceOrientationEvent::initDeviceOrientationEvent):
        * bindings/v8/custom/V8DeviceOrientationEventCustom.cpp: Added.
        (WebCore::V8DeviceOrientationEvent::alphaAccessorGetter):
        (WebCore::V8DeviceOrientationEvent::betaAccessorGetter):
        (WebCore::V8DeviceOrientationEvent::gammaAccessorGetter):
        (WebCore::V8DeviceOrientationEvent::initDeviceOrientationEventCallback):
        * dom/DeviceOrientation.cpp: Added.
        * dom/DeviceOrientation.h: Added.
        (WebCore::DeviceOrientation::create):
        (WebCore::DeviceOrientation::canProvideAlpha):
        (WebCore::DeviceOrientation::alpha):
        (WebCore::DeviceOrientation::canProvideBeta):
        (WebCore::DeviceOrientation::beta):
        (WebCore::DeviceOrientation::canProvideGamma):
        (WebCore::DeviceOrientation::gamma):
        (WebCore::DeviceOrientation::DeviceOrientation):
        * dom/DeviceOrientationEvent.cpp:
        (WebCore::DeviceOrientationEvent::DeviceOrientationEvent):
        (WebCore::DeviceOrientationEvent::initDeviceOrientationEvent):
        * dom/DeviceOrientationEvent.h:
        (WebCore::DeviceOrientationEvent::create):
        (WebCore::DeviceOrientationEvent::orientation):
        * dom/DeviceOrientationEvent.idl:

2010-07-13  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Antti Koivisto.

        CSS3 background: Number of layers should be determined by background-image element count
        https://bugs.webkit.org/show_bug.cgi?id=41201

        Change FillLayer culling logic to discard all layers
        after the first one without an image set.

        Manual test: css3-background-layer-count.html

        * manual-tests/css3-background-layer-count.html: Added.
        * rendering/style/FillLayer.cpp:
        (WebCore::FillLayer::cullEmptyLayers):

2010-07-07  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Darin Adler.

        Prevent assertion/duplicate loads for non-deferred subtitute-data loads

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

        MainResourceLoader uses the member m_initialRequest to store requests for future
        deferred loads. When doing the actual load in handleDataLoadNow(), we therefore
        have to clear this request so that subsequent entries into the loader will not
        start yet another load.

        This can happen as a result of a PageGroupLoadDeferrer going out of scope when
        returning from Chrome::runJavaScriptAlert(), which calls setDeferredLoading(false),
        but only in the case of using both substitute-data and non-deferred main resource
        load together. That's why two new DRT functions were added:

         * queueLoadHTMLString()
         * setDeferMainResourceLoad()

        The change adds DRT hooks for Mac, Win and Qt for these two functions. For Mac
        and Win the hook uses new SPI in WebDataSource. For Qt a new static member was
        added to the FrameLoaderClientQt and accessed though DumpRenderTreeSupportQt.

        Test: fast/loader/non-deferred-substitute-load.html

        * loader/MainResourceLoader.cpp:
        (WebCore::MainResourceLoader::handleDataLoadNow):

2010-07-13  Yoshiki Hayashi  <yhayashi@google.com>

        Reviewed by Kent Tamura.

        Make sure correct Nodes are passed to childrenChanged so that
        :last-child gets properly applied when fragment is inserted.
        https://bugs.webkit.org/show_bug.cgi?id=37944

        Test: fast/css/last-child-innerhtml.html

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::replaceChild):
        (WebCore::ContainerNode::appendChild):

2010-07-13  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Kent Tamura.

        InsertListCommand's modifyRange and doApply should be merged
        https://bugs.webkit.org/show_bug.cgi?id=41403

        Isolated the code in doApply to insert and remove lists for single paragraph into doApplyForSingleParagraph.
        Merged the code in modifyRange into doApply and cleaned up.

        No test is added since this is a clean up.

        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::InsertListCommand): m_forceCreateList is no longer initialized
        (WebCore::InsertListCommand::doApply): Isolated the code to insert/remove lists in doApplyForSingleParagraph
        (WebCore::InsertListCommand::doApplyForSingleParagraph): Insert/remove lists for single paragraph
        * editing/InsertListCommand.h: Added doApplyForSingleParagraph and removed m_forceCreateList

2010-07-12  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Fix typo in "close the cell" which caused assertion
        https://bugs.webkit.org/show_bug.cgi?id=42138

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::closeTheCell):

2010-07-12  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Fix line number handling in HTMLTreeBuilder to fix a zillion layout tests
        https://bugs.webkit.org/show_bug.cgi?id=42143

        Covered by a zillion layout tests.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processEndTag):
        (WebCore::HTMLTreeBuilder::processScriptStartTag):

2010-07-12  Jay Civelli  <jcivelli@chromium.org>

        Reviewed by Kent Tamura.

        Adding right aligned text called labels to PopupMenus.
        https://bugs.webkit.org/show_bug.cgi?id=41964

        * platform/PopupMenuClient.h:
        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupListBox::paintRow):
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::itemLabel):
        * rendering/RenderMenuList.h:
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::itemLabel):
        * rendering/RenderTextControlSingleLine.h:

2010-07-12  Mihnea Ovidenea  <mihnea@adobe.com>

        Reviewed by Dirk Schulze.

        [Cairo] Incorrect Test for Text Fill
        https://bugs.webkit.org/show_bug.cgi?id=42123

        Correct test used for text shadow.  It currently checks for
        equality with cTextFill.  However, this test fails if the
        text drawing mode is set to 'cTextFill | cTextStroke'.  Fix
        is to modify the test to be like other Cairo uses of the
        text drawing mode, and check for the cTextFill bit being
        set, not for equality with the bit.

        * platform/graphics/cairo/FontCairo.cpp:
        (WebCore::Font::drawGlyphs):

2010-07-12  Eric Seidel  <eric@webkit.org>

        Reviewed by Sam Weinig.

        Fix a typo in the adoption agency causing test failures
        https://bugs.webkit.org/show_bug.cgi?id=42133

        The new behavior actually differs from old webkit.
        <p><b><p>TEST
        was not bold in the old parser, but is bold now.
        This matches Minefield and the HTML5 spec.

        Covered by two tests in html5lib/runner.html.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::callTheAdoptionAgency):

2010-07-12  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Joseph Pecoraro.

        Web Inspector: provide starts and ends for network phases instead of duration.

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

        * inspector/InspectorResource.cpp:
        (WebCore::InspectorResource::updateResponse):
        (WebCore::InspectorResource::updateScriptObject):
        (WebCore::InspectorResource::buildObjectForTiming):
        * platform/network/ResourceLoadTiming.h:
        (WebCore::ResourceLoadTiming::deepCopy):
        (WebCore::ResourceLoadTiming::operator==):
        (WebCore::ResourceLoadTiming::ResourceLoadTiming):
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::ResourceResponseBase):
        (WebCore::ResourceResponseBase::wasCached):
        (WebCore::ResourceResponseBase::setWasCached):
        * platform/network/ResourceResponseBase.h:

2010-07-12  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        HTML5 Parser: document.write after onload blows away document
        https://bugs.webkit.org/show_bug.cgi?id=40745

        Rather than blowing away the document when we get a document.write call
        after the document is closed, we new ignore the write.  This
        technically violates the spec (which requires us to blow away the
        document), but blowing away the document breaks too many web sites.

        Rather than this patch, we could go back to our old behavior (which was
        to append the bytes just before EOF), but implementing this approach
        (suggested by Henri) will let us gather data about whether his approach
        is workable.

        See also: http://www.w3.org/Bugs/Public/show_bug.cgi?id=9767

        * dom/Document.cpp:
        (WebCore::Document::write):
        * html/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::insert):

2010-07-12  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Oliver Hunt.

        Strip BOMs from source before passing to V8
        https://bugs.webkit.org/show_bug.cgi?id=42102

        This extra copy may carry a performance penalty. We should investigate
        whether this allows any simplification in v8/scanner.cc:SkipJavaScriptWhiteSpace().

        No new tests because no new functionality.

        * bindings/v8/ScriptSourceCode.h:
        (WebCore::ScriptSourceCode::ScriptSourceCode):

2010-07-12  Gustavo Noronha Silva  <gns@gnome.org>

        Unreviewed. make distcheck fix.

        * GNUmakefile.am:

2010-07-12  Yuta Kitamura  <yutak@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Fix crash caused by unintentional deletion of worker bridge and channel.

        WebSocket: Crash caused by calling close() within onmessage handler
        https://bugs.webkit.org/show_bug.cgi?id=41507

        Test: websocket/tests/workers/close-in-onmessage-crash.html

        * websockets/WebSocket.cpp:
        (WebCore::WebSocket::close): bufferedAmount() may call WebSocket::didClose(),
        which causes m_channel to get freed.
        * websockets/WorkerThreadableWebSocketChannel.cpp:
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::send): Add reference to
        the bridge because waitForMethodCompletion() may dereference the bridge.
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::bufferedAmount): Ditto.
        (WebCore::WorkerThreadableWebSocketChannel::Bridge::waitForMethodCompletion):
        The root cause is a call to WorkerRunLoop::runInMode in this function.
        It may call WebSocket::didClose() even inside WebSocket::close(), which frees
        everything including the worker bridge and the channel.

2010-07-12  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        REGRESSION (HTML5 parser?): Impossible to get past the CAPTCHA on postcode.royalmail.com
        https://bugs.webkit.org/show_bug.cgi?id=41797

        Once we resume parsing after script execution, we want to clear the
        preload scanner so we don't scan any bytes it might have accumulated.

        Test: http/tests/loading/preload-slow-loading.php

        * html/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::resumeParsingAfterScriptExecution):

2010-07-12  Albert J. Wong  <ajwong@chromium.org>

        Reviewed by Jian Li.

        Adding directional property enums back into
        CSSComputedStyleDeclaration::getPropertyCSSValue().

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

        The four directional -webkit- properties --  CSSPropertyWebkitMarginEnd,
        CSSPropertyWebkitMarginStart, CSSPropertyWebkitPaddingEnd, and
        CSSPropertyWebkitPaddingStart -- are resolved into other css
        properties before the swtich statement via a call to
        CSSProperty::resolveDirectionAwareProperty().  Thus, they are never
        seen by the switch statement.  However, if you leave out a potential
        enum value from the switch, gcc will generate a warning if -Wall is
        specified.  This warning breaks the Chromium build.  To avoid this,
        we add in the enum values and ASSERT_NOT_REACHED() if they are hit.


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

2010-07-12  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        AX converts AtomicStrings to .string() more than needed
        https://bugs.webkit.org/show_bug.cgi?id=42056

        No behavior change. No new tests.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isPressed):
        (WebCore::siblingWithAriaRole):
        (WebCore::AccessibilityRenderObject::intValue):
        (WebCore::AccessibilityRenderObject::accessibilityDescription):
        (WebCore::AccessibilityRenderObject::hasTextAlternative):
        (WebCore::AccessibilityRenderObject::supportsARIAFlowTo):
        (WebCore::AccessibilityRenderObject::supportsARIADropping):
        (WebCore::AccessibilityRenderObject::supportsARIADragging):
        (WebCore::AccessibilityRenderObject::determineARIADropEffects):
        (WebCore::AccessibilityRenderObject::isExpanded):
        (WebCore::AccessibilityRenderObject::isRequired):
        (WebCore::AccessibilityRenderObject::isSelected):
        (WebCore::AccessibilityRenderObject::supportsARIAOwns):
        (WebCore::AccessibilityRenderObject::isEnabled):
        (WebCore::AccessibilityRenderObject::activeDescendant):
        (WebCore::AccessibilityRenderObject::determineAriaRoleAttribute):
        (WebCore::AccessibilityRenderObject::orientation):
        (WebCore::AccessibilityRenderObject::canSetExpandedAttribute):
        (WebCore::AccessibilityRenderObject::canSetValueAttribute):

2010-07-12  Tony Chang  <tony@chromium.org>

        Reviewed by David Hyatt.

        crash in FrameView::detachCustomScrollbars
        https://bugs.webkit.org/show_bug.cgi?id=41196

        Test: scrollbars/hidden-iframe-scrollbar-crash.html

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

2010-07-12  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        HTML tags should break out of foreign content
        https://bugs.webkit.org/show_bug.cgi?id=42106

        Implement another paragraph of the spec to pass another
        bunch of foreign content tests.

        This fixes a bunch of tests in html5lib/runner.html.
        After this change we only have 4 remaining foreign content failures.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTag):

2010-07-12  Zhenyao Mo  <zmo@google.com>

        Reviewed by Darin Fisher.

        Bring bufferData and clear to GLES2 compliant
        https://bugs.webkit.org/show_bug.cgi?id=41574

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::bufferData): Call validateBufferDataUsage().
        (WebCore::WebGLRenderingContext::clear): Check mask.
        (WebCore::WebGLRenderingContext::validateBufferDataUsage): Check usage.
        * html/canvas/WebGLRenderingContext.h: Declare validateBufferDataUsage.

2010-07-12  Eric Seidel  <eric@webkit.org>

        Unreviewed.  Attempt to fix Chromium Windows build.

        Always generate SVGNames and MathMLNames for all ports (to support HTML5)
        https://bugs.webkit.org/show_bug.cgi?id=42050

        Another way to fix this might be to mark all the .in files with
        svn:eol=native.  But fixing the perl to be more robust against
        stray whitespace seems to be a better long-term fix.

        No functional change, thus no tests.

        * bindings/scripts/InFilesParser.pm:

2010-07-12  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Remove dependency on PlatformString.h in Color.h
        https://bugs.webkit.org/show_bug.cgi?id=42109

        * platform/graphics/Color.cpp:
        * platform/graphics/Color.h:

2010-07-12  Eric Seidel  <eric@webkit.org>

        Unreviewed, build fix.

        Update HTMLTreeBuilder now that MathMLNames is always generated
        https://bugs.webkit.org/show_bug.cgi?id=42059

        Fix the Windows project file to build MathMLNames.*.
        Also added MathMLElementFactory.* which is a NOOP now, but will
        prevent folks from breaking the build when they turn MathML on.

        * WebCore.vcproj/WebCore.vcproj:

2010-07-12  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Darin Adler.

        Update media element's handling of empty 'src' attribute
        https://bugs.webkit.org/show_bug.cgi?id=42001

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::src): Return getNonEmptyURLAttribute().
        (WebCore::HTMLMediaElement::selectMediaResource): Call noneSupported() for empty 'src'.
        (WebCore::HTMLMediaElement::selectNextSourceChild): Use getNonEmptyURLAttribute() to convert 
        'src' to URL instead of document()->completeURL(). Don't consider a <source> with an empty 'src'. 

        * html/HTMLMediaElement.idl: Add 'NonEmpty' option to 'src' attribute.

        * html/HTMLSourceElement.cpp:
        (WebCore::HTMLSourceElement::src): Return getNonEmptyURLAttribute().
        (WebCore::HTMLSourceElement::isURLAttribute): New, 'src' is a URL attribute.
        * html/HTMLSourceElement.h:

        * html/HTMLSourceElement.idl: Add 'NonEmpty' option to 'src' attribute.

        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::parseMappedAttribute): Use getNonEmptyURLAttribute() to convert 
        'poster' to URL instead of document()->completeURL().

        * html/HTMLVideoElement.idl:  Add 'NonEmpty' option to 'poster' attribute.

2010-07-12  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] make dist is broken because of missing headers and other miscellaneous reasons
        https://bugs.webkit.org/show_bug.cgi?id=42107

        * GNUmakefile.am: Remove InspectorFrontend2.idl from the list of IDL files, so
        that it is not built into libWebCoreJS. Add missing header to the source list.
        Make sure to distribute the new file: WebCore/inspector/CodeGeneratorInspector.pm.

2010-07-12  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        HTMLTreeBuilder needs to support mixing SVG and MathML content
        https://bugs.webkit.org/show_bug.cgi?id=42096

        This is just a direct transcription of another paragraph of the
        HTML5 spec.

        This improved a couple results in html5lib/runner.html, but more
        work to do yet to pass all the foreign content tests.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTag):
        (WebCore::HTMLTreeBuilder::processEndTag):
        (WebCore::HTMLTreeBuilder::processUsingSecondaryInsertionModeAndAdjustInsertionMode):
        * html/HTMLTreeBuilder.h:
        * mathml/mathtags.in:

2010-07-12  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Update HTMLTreeBuilder now that MathMLNames is always generated
        https://bugs.webkit.org/show_bug.cgi?id=42059

        Fix the HTMLTreeBuilder MathML code path to compile and remove
        the MathML and SVG guards now that SVGNames and MathMLNames are
        always compiled into ever port after:
        https://bugs.webkit.org/show_bug.cgi?id=42050

        This fixed a whole bunch of libhtml5 tests now that we have the
        mathml code paths enabled.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTagForInBody):
        (WebCore::HTMLTreeBuilder::processStartTag):
        (WebCore::HTMLTreeBuilder::resetInsertionModeAppropriately):
        (WebCore::HTMLTreeBuilder::processEndTag):
        * page/Frame.cpp:
        (WebCore::Frame::Frame):
         - Always init SVGNames and MathML names.

2010-07-12  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Don't go into compositing mode for 0x0 plugins
        https://bugs.webkit.org/show_bug.cgi?id=34009
        
        Don't use compositing for small (0-height or width, or 1x1) plugins, or iframes whose
        height or width is zero.
        
        Previously we made all compositing decisions inside styleChanged(). However,
        now that plugin and iframe compositing behavior depends on renderer size, we have
        to wait until layout before deciding whether to composite these. This behavior
        change is controlled by the m_compositingDependsOnGeometry flag. When set,
        updateCompositingLayers() always does a hierarchy update.

        Tests: compositing/iframes/iframe-size-from-zero.html
               compositing/iframes/iframe-size-to-zero.html
               compositing/plugins/1x1-composited-plugin.html
               compositing/plugins/large-to-small-composited-plugin.html
               compositing/plugins/small-to-large-composited-plugin.html

        * page/FrameView.cpp:
        (WebCore::FrameView::updateCompositingLayers): No longer bail if usesCompositing() is false; we
        have to always enter updateCompositingLayers().
        (WebCore::FrameView::repaintFixedElementsAfterScrolling): Ditto
        (WebCore::FrameView::enterCompositingMode): Remove bogus return of a void.

        * rendering/RenderLayerCompositor.h: Add m_compositingDependsOnGeometry.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::RenderLayerCompositor): Initialize m_compositingDependsOnGeometry to false.
        (WebCore::RenderLayerCompositor::updateCompositingLayers): If m_compositingDependsOnGeometry is true,
        we always need to run through the layer hierarchy looking for things which need to be composited, even if
        we're not (yet) in compositing mode.
        
        (WebCore::RenderLayerCompositor::computeCompositingRequirements): Because we can enter compositing mode
        on the fly inside updateCompositingLayers() now, the state of willBeComposited needs to be updated
        when processing the root layer, for the case where the compositing mode changes.
        
        (WebCore::RenderLayerCompositor::requiresCompositingForPlugin): Set the m_compositingDependsOnGeometry
        flag if we see a potentially-composited plugin. Once we have layout information, only composite the plugin
        if height * width > 1.
        
        (WebCore::RenderLayerCompositor::requiresCompositingForIFrame): Set the m_compositingDependsOnGeometry
        flag if we see a potentially-composited iframe. Once we have layout information, only composite the plugin
        if height or width is greater than zero.

2010-07-12  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Need to do a layout when RenderLayers come and go because of compositing
        https://bugs.webkit.org/show_bug.cgi?id=42108
        
        If we create or destroy RenderLayers for reasons other than style changes
        (e.g. because of composited iframes or plugins), then we need to ensure
        that we do a layout.

        Test: compositing/iframes/layout-on-compositing-change.html

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

2010-07-11  Eric Seidel  <eric@webkit.org>

        Reviewed by Darin Adler.

        Always generate SVGNames and MathMLNames for all ports (to support HTML5)
        https://bugs.webkit.org/show_bug.cgi?id=42050

        Historically, FOONames has only been generate when ENABLE(FOO) is defined.
        However, for HTML5 parser support, we need to have access to the SVG
        and MathML tag names regardless of whether we the engine is configured
        to render SVG or MathML content.

        This change enables generation of SVGNames and MathMLNames on all ports and
        makes it so that ports can include FOOElementFactory.* regardless of whether
        ENABLE(FOO) is defined (and have it do the right thing).

        No functional change (yet) so no tests.

        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.pri:
        * dom/make_names.pl:

2010-07-10  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        make_names.pl should always generate all names in Names.* files
        https://bugs.webkit.org/show_bug.cgi?id=42023

        Only the *ElementFactory files need to have conditional contents
        based on enabled features.  WebCore should always have all known
        names for SVG, MathML, XML, XLink, HTML, etc. generated in the
        various *Names files, even if features are disabled.

        make_names.pl is kinda a big hack at this point.  I tried to clean
        up a little as I went.  The way I made *Names include all names was to
        read the .in files twice, once using the preprocessor and once without.

        * dom/make_names.pl:

2010-07-12  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Oliver Hunt.

        Canvas: Move fillRect() save/restore into GraphicsContext implementations
        https://bugs.webkit.org/show_bug.cgi?id=42088

        Saving the platform painter state is an expensive operation,
        so don't do it in fillRect() for platforms that don't need it. (CG, Qt)

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::fillRect):
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::fillRect):
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::fillRect):
        * platform/graphics/wince/GraphicsContextWince.cpp:
        (WebCore::GraphicsContext::fillRect):
        * platform/graphics/wx/GraphicsContextWx.cpp:
        (WebCore::GraphicsContext::fillRect):

2010-07-12  Nate Chapin  <japhet@chromium.org>

        Reviewed by Darin Fisher.

        Ensure that a cache policy that forces validation is cleared once
        the load event is fired, rather than only doing so at the next
        navigation. This leads to a lot of unnecessary load on AJAX-y
        websites.

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

        Test: http/tests/xmlhttprequest/cache-headers-after-reload.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::handledOnloadEvents): Reset m_loadType to FrameLoadTypeStandard.
        (WebCore::FrameLoader::addExtraFieldsToRequest): Only respect the original request's cache policy if the
            DocumentLoader is still loading, and handle the other cache policy settings that were scattered around the loader.
        (WebCore::FrameLoader::loadResourceSynchronously): Merge cachePolicy setting into FrameLoader::addExtraFieldsToRequest.
        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::create): Merge cachePolicy setting into FrameLoader::addExtraFieldsToRequest.

2010-07-12  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Oliver Hunt.

        CSS color parsing optimizations
        https://bugs.webkit.org/show_bug.cgi?id=42073

        - Avoid instantiating a CSSParser in parseColor() unless necessary.
        - Fixed hex color fast-path to support strings starting with '#'.
        - Avoid allocating a new string for the value part of a '#' color.

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseColor):
        * platform/graphics/Color.cpp:
        (WebCore::Color::parseHexColor):
        (WebCore::Color::Color):
        * platform/graphics/Color.h:

2010-07-09  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=13075
        XMLHttpRequest with failed authentication should set status to 401

        https://bugs.webkit.org/show_bug.cgi?id=6871
        <rdar://problem/3363403> 401 error page is never shown

        * platform/network/mac/ResourceHandleMac.mm: (WebCore::ResourceHandle::receivedCredential):
        Added a comment explaining why we handle empty credentials differently here.

        * platform/network/cf/ResourceHandleCFNet.cpp: (WebCore::ResourceHandle::receivedCredential):
        Bring this code in sync with Mac.

2010-07-12  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        Add a PluginController class, use it for invalidation and getting the user agent
        https://bugs.webkit.org/show_bug.cgi?id=42084

        * WebCore.exp.in:
        Export Widget::convertToContainingWindow.

2010-07-12  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Dragging within webkit with a drag created via Javascript ends up misinterpreting the data
        https://bugs.webkit.org/show_bug.cgi?id=41457

        Treat non-special-cased mime-types as Unicode strings in ClipboardQt's getData()
        Fixes corruption when retrieving data that was set with anything other than text/plain

        Also use QMimeData::setHtml() when applicable to be consistent with PasteboardQt.

        * platform/qt/ClipboardQt.cpp:
        (WebCore::isHtmlMimeType):
        (WebCore::ClipboardQt::getData):
        (WebCore::ClipboardQt::setData):

2010-07-12  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        add ANDROID to STORE_FONT_CUSTOM_PLATFORM_DATA
        https://bugs.webkit.org/show_bug.cgi?id=32273

        Tested by existing tests, just adding ANDROID to the list of platforms that use this feature.

        * loader/CachedFont.cpp:

2010-07-12  Lucas De Marchi  <lucas.demarchi@profusion.mobi>

        Unreviewed.

        [EFL] Move ScriptConcotrollerEfl.cpp from CMakeLists.txt to
        CMakeListsEfl.txt.

        * CMakeLists.txt:
        * CMakeListsEfl.txt:

2010-07-12  Lucas De Marchi  <lucas.demarchi@profusion.mobi>

        Unreviewed build fix after r60050.

        * CMakeLists.txt: Add WebCore/bindings to the include path.

2010-07-09  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        [GTK] Crashes when going back with page cache in unknown circunstances
        https://bugs.webkit.org/show_bug.cgi?id=41710

        Could not yet find a way to reproduce this in a layout test. The
        issue is document being NULL, so this NULL-check should be enough
        to get rid of the crash. We are working on trying to find a better
        solution for these null cases, like attaching the document earlier
        when openning a cached page.

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

2010-07-12  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Yury Semikhatsky.

        [Chromium] Crash when stepping on a breakpoint while debugging Web Inspector
        https://bugs.webkit.org/show_bug.cgi?id=41958

        * page/PageGroupLoadDeferrer.cpp:
        (WebCore::PageGroupLoadDeferrer::PageGroupLoadDeferrer):
        * page/PageGroupLoadDeferrer.h:

2010-07-12  François Sausset  <sausset@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        Make the mathsize MathML attribute handle values in em, px, pt,...
        https://bugs.webkit.org/show_bug.cgi?id=42067

        Test: mathml/presentation/attributes.xhtml

        * css/mathml.css:
        (math[mathsize="small"], mstyle[mathsize="small"], mo[mathsize="small"], mn[mathsize="small"], mi[mathsize="small"], mtext[mathsize="small"], mspace[mathsize="small"], ms[mathsize="small"]):
        (math[mathsize="normal"], mstyle[mathsize="normal"], mo[mathsize="normal"], mn[mathsize="normal"], mi[mathsize="normal"], mtext[mathsize="normal"], mspace[mathsize="normal"], ms[mathsize="normal"]):
        (math[mathsize="big"], mstyle[mathsize="big"], mo[mathsize="big"], mn[mathsize="big"], mi[mathsize="big"], mtext[mathsize="big"], mspace[mathsize="big"], ms[mathsize="big"]):
        * mathml/MathMLElement.cpp:
        (WebCore::MathMLElement::parseMappedAttribute):

2010-07-12  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Fix compilation with sealed GTK+.

        * platform/gtk/GtkVersioning.h:
        * platform/gtk/PasteboardHelper.cpp:
        (WebCore::PasteboardHelper::fillDataObjectFromDropData):

2010-07-12  François Sausset  <sausset@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        Fix a bug preventing msqrt and mfrac to use style color to draw themselves.
        In mfrac, the fraction bar is now using the color defined by the element style instead of black.
        In msqrt, the radical was always drawn in black due to a colorSpace problem.
        https://bugs.webkit.org/show_bug.cgi?id=41889

        Test: mathml/presentation/roots.xhtml
        Test: mathml/presentation/fractions.xhtml

        * mathml/RenderMathMLFraction.cpp:
        (WebCore::RenderMathMLFraction::paint):
        * mathml/RenderMathMLSquareRoot.cpp:
        (WebCore::RenderMathMLSquareRoot::paint):

2010-07-12  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Antti Koivisto.

        Canvas: arc() with startAngle == endAngle shouldn't add to the path
        https://bugs.webkit.org/show_bug.cgi?id=41420

        Spec link:
        http://www.whatwg.org/specs/web-apps/current-work/#dom-context-2d-stroke

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

2010-07-12  Shinichiro Hamaji  <hamaji@chromium.org>

        Reviewed by Ojan Vafai.

        Update padding on Windows?
        https://bugs.webkit.org/show_bug.cgi?id=38016

        Remove internal padding and add 1px vertical padding for Windows.

        * css/themeWin.css:
        (input[type="button"], input[type="submit"], input[type="reset"], input[type="file"]::-webkit-file-upload-button, button):
        * rendering/RenderButton.cpp:
        (WebCore::RenderButton::setupInnerStyle):
        * rendering/RenderTheme.h:
        * rendering/RenderThemeWin.cpp:
        * rendering/RenderThemeWin.h:
        * rendering/RenderThemeWince.cpp:
        * rendering/RenderThemeWince.h:

2010-07-12  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed. Chromium tests fix.

        [Chromium, V8] r63057 regressed url tests.

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

        * bindings/scripts/CodeGeneratorV8.pm:

2010-07-12  Steve Block  <steveblock@google.com>

        Reviewed by Alexey Proskuryakov.

        XPath substring function does not correctly handle non-positive values for the position argument
        https://bugs.webkit.org/show_bug.cgi?id=41913

        This patch changes the behavior of the XPath evaluate function when a non-positive
        position argument is supplied and no length argument is supplied. In this case,
        we reset the position to 1. This follows the spec and matches the current behaviour
        when a length argument is supplied.

        Test: fast/xpath/substring-non-positive-postion.html

        * xml/XPathFunctions.cpp:
        (WebCore::XPath::FunSubstring::evaluate):

2010-06-27  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Dumitru Daniliuc.

        Implement IDBObjectStore.get/set/remove
        https://bugs.webkit.org/show_bug.cgi?id=41250

        Implement these functions in IDBObjectStore,
        add plumbing, teach IDBAny/Callbacks how to deal
        with IDBKey, and a few small bits of cleanup.

        Test: Modified existing test to provide basic coverage.
              Will add much more extensive layout test coverage
              in future patches.

        * Android.derived.jscbindings.mk:
        * Android.derived.v8bindings.mk:
        * Android.jscbindings.mk:
        * Android.mk:
        * Android.v8bindings.mk:
        * CMakeLists.txt:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSIDBAnyCustom.cpp:
        (WebCore::toJS):
        * bindings/v8/custom/V8IDBAnyCustom.cpp:
        (WebCore::toV8):
        * storage/IDBAny.cpp:
        (WebCore::IDBAny::idbKey):
        (WebCore::IDBAny::set):
        * storage/IDBAny.h:
        (WebCore::IDBAny::):
        * storage/IDBAny.idl:
        * storage/IDBCallbacks.h:
        * storage/IDBDatabaseRequest.h:
        * storage/IDBDatabaseRequest.idl:
        * storage/IDBKeyRange.h:
        * storage/IDBObjectStore.h:
        (WebCore::IDBObjectStore::):
        * storage/IDBObjectStoreImpl.cpp:
        (WebCore::IDBObjectStoreImpl::IDBObjectStoreImpl):
        (WebCore::IDBObjectStoreImpl::get):
        (WebCore::IDBObjectStoreImpl::set):
        (WebCore::IDBObjectStoreImpl::remove):
        * storage/IDBObjectStoreImpl.h:
        * storage/IDBObjectStoreRequest.cpp:
        (WebCore::IDBObjectStoreRequest::get):
        (WebCore::IDBObjectStoreRequest::add):
        (WebCore::IDBObjectStoreRequest::modify):
        (WebCore::IDBObjectStoreRequest::addOrModify):
        (WebCore::IDBObjectStoreRequest::remove):
        * storage/IDBObjectStoreRequest.h:
        * storage/IDBObjectStoreRequest.idl:
        * storage/IDBRequest.cpp:
        (WebCore::IDBRequest::onSuccess):
        * storage/IDBRequest.h:

2010-07-11  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Dan Bernstein.

        Implement animation-related methods for WebKitTestRunner
        https://bugs.webkit.org/show_bug.cgi?id=42053

        * WebCore.exp.in: Export Document::getElementById for WebKit2's benefit.

2010-07-11  Adam Barth  <abarth@webkit.org>

        Rubber-stamped by Eric Seidel

        Add a complete list of the HTML5 entities in JSON format.

        * html/HTMLEntityNames.json: Added.

2010-07-11  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] WebKitWebView should support drops
        https://bugs.webkit.org/show_bug.cgi?id=39843

        Add support for dropping content onto GTK+ WebViews.

        No new tests, as the DRT does not support simulating drops yet.

        * platform/gtk/ClipboardUtilitiesGtk.cpp:
        (WebCore::dragOperationToGdkDragAction): Added.
        (WebCore::gdkDragActionToDragOperation): Properly detect DragOperationEvery.
        * platform/gtk/ClipboardUtilitiesGtk.h: Add declaration for dragOperationToGdkDragAction.
        * platform/gtk/PasteboardHelper.cpp:
        Add new target atom and rename the markup target type to match the others.
        Add a method which fills a data object from drop data.
        (WebCore::PasteboardHelper::initializeTargetList): Add support for new atoms.
        (WebCore::selectionDataToUTF8String): Added this helper.
        (WebCore::PasteboardHelper::getClipboardContents): Use the selectionDataToUTF8String helper.
        (WebCore::PasteboardHelper::targetListForDataObject): Change to reflect markup atom rename.
        (WebCore::PasteboardHelper::fillDataObjectFromDropData): Added.
        (WebCore::PasteboardHelper::dropAtoms): Added.
        * platform/gtk/PasteboardHelper.h: Add declarations of new methods.

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

        Reviewed by Anders Carlsson.

        Enhance content attribute reflection for URL attributes, including adding a non-empty option
        https://bugs.webkit.org/show_bug.cgi?id=42040

        Test: fast/dom/URL-attribute-reflection.html

        Changed syntax from [ReflectURL] to [Reflect,URL] and also added support for
        a new option, NonEmpty, which implements the non-empty URL concept from the
        HTML5 specification.

        * bindings/scripts/CodeGenerator.pm: Changed code to expect the Reflect and URL
        extended attributes to come in separately. The URL one simply means "the string
        of this attribute is a URL", since we don't have a distinct type for URL. Also
        added a new NonEmpty extended attribute.

        * bindings/scripts/CodeGeneratorJS.pm: Removed now-unneeded code to handle ReflectURL.
        * bindings/scripts/CodeGeneratorV8.pm: Ditto.

        * bindings/scripts/test/CPP/WebDOMTestObj.cpp: Updated for new added test cases
        and the fix I made to the reflectedCustomURLAttr test.
        * bindings/scripts/test/CPP/WebDOMTestObj.h: Ditto.
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp: Ditto.
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h: Ditto.
        * bindings/scripts/test/JS/JSTestObj.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestObj.h: Ditto.
        * bindings/scripts/test/ObjC/DOMTestObj.h: Ditto.
        * bindings/scripts/test/ObjC/DOMTestObj.mm: Ditto.
        * bindings/scripts/test/V8/V8TestObj.cpp: Ditto. Also, for some reason the V8
        bindig writes out the keywords into the generated file as comments, so the keyword
        change had a direct efffect on the output file.

        * bindings/scripts/test/TestObj.idl: Changed the test cases for ReflectURL to use
        the new syntax. Added test cases for NonEmpty. Fixed the name of
        reflectedNonEmptyURLAttr, which accidentally was repeating reflectedURLAttr
        instead; never noticed because we never compile the test output.

        * dom/Element.cpp:
        (WebCore::Element::getNonEmptyURLAttribute): Added. For use by NonEmpty and also
        by any code that wants to implement the non-empty URL content attribute semantic.
        * dom/Element.h: Ditto.

        * html/HTMLAnchorElement.idl: Use Reflect,URL instead of ReflectURL.
        * html/HTMLAreaElement.idl: Ditto.
        * html/HTMLFrameElement.idl: Ditto.
        * html/HTMLImageElement.idl: Ditto.
        * html/HTMLInputElement.idl: Ditto.
        * html/HTMLLinkElement.idl: Ditto.
        * html/HTMLMediaElement.idl: Ditto.
        * html/HTMLObjectElement.idl: Ditto.
        * html/HTMLScriptElement.idl: Ditto.
        * html/HTMLVideoElement.idl: Ditto.

2010-07-10  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Darin Adler.

        Add missing derrived sources to Xcode project
        https://bugs.webkit.org/show_bug.cgi?id=42034

        This allows --web-timing to work with build-webkit on OSX with JSC.
        This should have been done in bug 41442.

        No new tests because no new functionality.

        * WebCore.xcodeproj/project.pbxproj:

2010-07-10  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Don't initialize plug-ins until allowed by the page
        https://bugs.webkit.org/show_bug.cgi?id=42033

        * WebCore.exp.in:
        Export Document::addMediaCanStartListener and Document::removeMediaCanStartListener.

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

        Reviewed by Anders Carlsson.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=42021
        isEqualNode should work for DocumentType nodes

        Test: fast/dom/Node/isEqualNode.html

        * dom/Node.cpp:
        (WebCore::Node::isEqualNode): Add DocumentType logic from the DOM3 spec.

2010-07-10  Daniel Bates  <dbates@rim.com>

        Reviewed by Adam Barth.

        Move enum ReasonForCallingCanExecuteScripts to header ScriptControllerBase.h
        https://bugs.webkit.org/show_bug.cgi?id=39339

        Moved the enum ReasonForCallingCanExecuteScripts, which was
        defined in both the JSC and V8 ScriptController.h file, into
        a shared file called ScriptControllerBase.h.

        No functionality was changed, so no new tests.

        * GNUmakefile.am: Added file bindings/ScriptControllerBase.h.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.vcproj/WebCoreCommon.vsprops: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * bindings/ScriptControllerBase.h: Added.
        (WebCore::):
        * bindings/js/ScriptController.h: #include ScriptControllerBase.h
        * bindings/v8/ScriptController.h: Ditto.

2010-07-10  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        <rdar://problem/8153214> Continuation outlines in layers do not paint correctly

        Test: fast/inline/continuation-outlines-with-layers-2.html

        Continuation outlines are normally painted by the containing block. However, when the
        block and the inline are not enclosed by the same self-painting layer, the inline has to
        paint its own outlines. This was handled correctly only for the case where the inline had
        its own self-painting layer, but not when an ancestor inline had the self-painting layer.

        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paint): Instead of testing for having a self-painting layer, test
        whether any intermediate box between the inline and the containing block has a self-painting
        layer.
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintObject): Ditto.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::enclosingBoxModelObject): Added this utility method.
        * rendering/RenderObject.h:

2010-07-10  François Sausset  <sausset@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        Build fix: syntax and typo issues
        https://bugs.webkit.org/show_bug.cgi?id=41859

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTagForInBody):
        (WebCore::HTMLTreeBuilder::processStartTag):

2010-07-10  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        HTMLTreeBuilder needs adjustForeignAttributes support
        https://bugs.webkit.org/show_bug.cgi?id=42022

        To add adjust foreign attributes support I had to add an
        AtomicString (prefixed name) to QualifiedName hash.  Once I had
        done that, I decided it would be best for the other "adjust" functions
        to share the same hash logic, so I moved them to using the same
        AtomicString -> QualifiedName hash as well.

        Tested by html5lib/runner.html

        * dom/Attribute.h:
        (WebCore::Attribute::parserSetName):
        * html/HTMLTreeBuilder.cpp:

2010-07-10  Rob Buis  <rwlbuis@gmail.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=41978
        Remove namespace prefixes from idl files

        No new tests, idl syntax fixes.

        * css/CSSImportRule.idl:
        * css/CSSMediaRule.idl:
        * css/CSSStyleSheet.idl:
        * css/CSSVariablesRule.idl:
        * svg/SVGAnimatedString.idl:
        * svg/SVGColor.idl:
        * svg/SVGDocument.idl:
        * svg/SVGLangSpace.idl:
        * svg/SVGSVGElement.idl:
        * svg/SVGStringList.idl:
        * svg/SVGStylable.idl:
        * svg/SVGStyleElement.idl:
        * svg/SVGTests.idl:
        * svg/SVGZoomEvent.idl:
        * xml/XPathEvaluator.idl:

2010-07-10  Dumitru Daniliuc  <dumi@chromium.org>

        Unreviewed, GTK build fix.

        * bindings/gobject/GObjectEventListener.h:

2010-07-10  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Darin Adler.

        Remove unnecessary includes in header files in WebCore/dom.
        https://bugs.webkit.org/show_bug.cgi?id=41941

        * css/StyleMedia.h:
        * dom/BeforeLoadEvent.h:
        * dom/CustomEvent.h:
        * dom/DOMStringMap.h:
        * dom/DeviceOrientationEvent.h:
        * dom/EventListener.h:
        * dom/MessagePort.h:
        * dom/Node.cpp:
        * dom/NodeFilter.h:
        * dom/NodeRareData.h:
        * dom/RegisteredEventListener.h:
        * dom/SelectorNodeList.cpp:
        * dom/SelectorNodeList.h:
        * dom/StyleElement.h:
        * dom/Traversal.h:

2010-07-09  Tony Chang  <tony@chromium.org>

        Reviewed by Ojan Vafai.

        crash in WebCore::CompositeEditCommand::splitTreeToNode when indenting pre
        https://bugs.webkit.org/show_bug.cgi?id=38231

        Test: editing/execCommand/indent-pre.html

        * editing/IndentOutdentCommand.cpp:
        (WebCore::countParagraphs):
        (WebCore::IndentOutdentCommand::indentRegion): Split text nodes into one node per paragraph
                                                       so moveParagraph doesn't get confused.
        (WebCore::IndentOutdentCommand::splitTextNodes):
        * editing/IndentOutdentCommand.h:

2010-07-09  Erik Arvidsson  <arv@chromium.org>

        Reviewed by Darin Adler.

        Computed style is not implemented for padding-start, padding-end, margin-start, margin-end
        https://bugs.webkit.org/show_bug.cgi?id=41496

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSProperty.cpp:
        (WebCore::CSSProperty::resolveDirectionAwareProperty): This function resolves the property ID for a direction aware property.
        * css/CSSProperty.h:
        * css/CSSStyleSelector.cpp: Use helper function.
        (WebCore::CSSStyleSelector::applyProperty):

2010-07-09  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        HTML5 tree builder should pass some LayoutTests
        https://bugs.webkit.org/show_bug.cgi?id=41991

        Before this patch, we weren't attaching text nodes to the render tree,
        which turns out to be important.  :)

        This patch fixes more than 10,000 LayoutTests.

        * html/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::attach):
        (WebCore::HTMLConstructionSite::attachAtSite):

2010-07-09  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Darin Adler.

        [WINCE] Buildfix for TextEncodingRegistry
        https://bugs.webkit.org/show_bug.cgi?id=41992

        Renamed TextCodecWince to TextCodecWinCE.

        * platform/text/TextEncodingRegistry.cpp:
        (WebCore::buildBaseTextCodecMaps):
        (WebCore::extendTextCodecMaps):

2010-07-09  Leon Clarke  <leonclarke@google.com>

        Reviewed by Adam Barth.

        add support for link prefetching
        https://bugs.webkit.org/show_bug.cgi?id=3652

        Test: fast/dom/HTMLLinkElement/prefetch.html

        * Configurations/FeatureDefines.xcconfig:
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::tokenizeRelAttribute):
        (WebCore::HTMLLinkElement::process):
        * html/HTMLLinkElement.h:
        (WebCore::HTMLLinkElement::RelAttribute::RelAttribute):
        * loader/Cache.cpp:
        (WebCore::createResource):
        * loader/CachedResource.cpp:
        (WebCore::CachedResource::data):
        (WebCore::CachedResource::didAddClient):
        * loader/CachedResource.h:
        (WebCore::CachedResource::):
        (WebCore::CachedResource::error):
        (WebCore::CachedResource::isPrefetch):
        (WebCore::CachedResource::schedule):
        * loader/CachedScript.cpp:
        * loader/CachedScript.h:
        * loader/DocLoader.cpp:
        (WebCore::DocLoader::requestLinkPrefetch):
        (WebCore::DocLoader::canRequest):
        (WebCore::DocLoader::incrementRequestCount):
        (WebCore::DocLoader::decrementRequestCount):
        * loader/DocLoader.h:
        * loader/loader.cpp:
        (WebCore::cachedResourceTypeToTargetType):
        (WebCore::Loader::determinePriority):
        (WebCore::Loader::load):
        (WebCore::Loader::Host::servePendingRequests):
        (WebCore::Loader::Host::didFinishLoading):
        (WebCore::Loader::Host::didFail):
        (WebCore::Loader::Host::didReceiveResponse):
        (WebCore::Loader::Host::cancelPendingRequests):
        * loader/loader.h:
        (WebCore::Loader::):
        * platform/network/ResourceRequestBase.h:
        (WebCore::ResourceRequestBase::):

2010-07-09  James Robinson  <jamesr@chromium.org>

        Unreviewed build fix.  Add #include to pick up ExceptionCode values for config (like Qt) where it's not picked up indirectly.

        * html/HTMLCanvasElement.cpp:

2010-07-09  James Robinson  <jamesr@chromium.org>

        Reviewed by Darin Adler.

        Removes CanvasSurface and moves all of its functionality to HTMLCanvasElement.
        https://bugs.webkit.org/show_bug.cgi?id=42005

        http://trac.webkit.org/changeset/55201 introduced a new base class for HTMLCanvasElement called CanvasSurface.
        The intention was that this would allow for code sharing with the then-proposed OffscreenCanvas.  However,
        there is no OffscreenCanvas and there's unlikely to be one soon.  Additionally CanvasSurface breaks
        encapsulation pretty badly by doing "static_cast<HTMLCanvasElement* const>(this)".  Until an abstraction is
        really needed we should just use HTMLCanvasElement when we want to talk about a canvas.

        This patch moves all of CanvasSurface's functionality back up to HTMLCanvasElement and reorders the header
        to be a bit more logical.

        Refactor with no behavior change, thus no new tests.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/CanvasSurface.cpp: Removed.
        * dom/CanvasSurface.h: Removed.
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::HTMLCanvasElement):
        (WebCore::HTMLCanvasElement::willDraw):
        (WebCore::HTMLCanvasElement::setSurfaceSize):
        (WebCore::HTMLCanvasElement::toDataURL):
        (WebCore::HTMLCanvasElement::convertLogicalToDevice):
        (WebCore::HTMLCanvasElement::securityOrigin):
        (WebCore::HTMLCanvasElement::styleSelector):
        (WebCore::HTMLCanvasElement::createImageBuffer):
        (WebCore::HTMLCanvasElement::drawingContext):
        (WebCore::HTMLCanvasElement::buffer):
        (WebCore::HTMLCanvasElement::baseTransform):
        * html/HTMLCanvasElement.h:
        (WebCore::HTMLCanvasElement::setObserver):
        (WebCore::HTMLCanvasElement::width):
        (WebCore::HTMLCanvasElement::height):
        (WebCore::HTMLCanvasElement::size):
        (WebCore::HTMLCanvasElement::toDataURL):
        (WebCore::HTMLCanvasElement::setOriginTainted):
        (WebCore::HTMLCanvasElement::originClean):
        (WebCore::HTMLCanvasElement::hasCreatedImageBuffer):

2010-07-09  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.

        Calling layoutTestController.layerTreeAsText() should update layout
        https://bugs.webkit.org/show_bug.cgi?id=41818
        
        Need to call updateLayout() before we check for any layers, not after,
        since layout will update compositing, and may create layers.

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

2010-07-09  Kenneth Russell  <kbr@google.com>

        Reviewed by Nate Chapin.

        bufferSubData causes crash in WebGLBuffer::associateBufferSubData
        https://bugs.webkit.org/show_bug.cgi?id=42004

        Test: fast/canvas/webgl/index-validation-crash-with-buffer-sub-data.html

        * html/canvas/WebGLBuffer.cpp:
        (WebCore::WebGLBuffer::associateBufferData):
         - Allocate m_elementArrayBuffer for entry point taking only size.
           Guard against allocation failures of m_elementArrayBuffer.
        (WebCore::WebGLBuffer::associateBufferSubData):
         - Guard against any possibility of crashes due to m_elementArrayBuffer being NULL.

2010-07-09  Dumitru Daniliuc  <dumi@chromium.org>

        Unreviewed, but pre-approved by Eric Seidel.

        Remove unnecessary includes in header files in WebCore/css.
        https://bugs.webkit.org/show_bug.cgi?id=41941

        * css/CSSComputedStyleDeclaration.h:
        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::getFontData):
        * css/CSSFontFaceSource.h:
        * css/CSSPrimitiveValueMappings.h:
        * css/StyleMedia.h:

2010-07-09  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Get rid of manual case maps in HTMLTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=42000

        No functional change, thus no tests.

        * html/HTMLTreeBuilder.cpp:

2010-07-09  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Dimitri Glazkov.

        Implement performance.timing.navigationStart
        https://bugs.webkit.org/show_bug.cgi?id=41815

        See: http://dev.w3.org/2006/webapi/WebTiming/#nt-navigation-start

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadWithDocumentLoader):
        * loader/FrameLoaderTypes.h:
        (WebCore::FrameLoadTimeline::FrameLoadTimeline):
        * page/Timing.cpp:
        (WebCore::Timing::navigationStart):

2010-07-09  Jesus Sanchez-Palencia  <jesus.palencia@openbossa.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] GraphicsLayerQt must have syncCompositingStateForThisLayerOnly() implemented
        https://bugs.webkit.org/show_bug.cgi?id=41954

        Add GraphicsLayerQt::syncCompositingStateForThisLayerOnly, a non-recursive
        implementation of GraphicsLayerQt::syncCompositingState and which targets
        the current layer only.

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::GraphicsLayerQt::syncCompositingStateForThisLayerOnly):
        * platform/graphics/qt/GraphicsLayerQt.h:

2010-07-09  David Kozub  <zub@linux.fjfi.cvut.cz>

        Reviewed by Darin Adler.

        Fix build by adding missing html/TimeRanges.idl to CMakeLists.txt.

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

        No functional changes, thus no tests.

        * CMakeLists.txt:

2010-07-09  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Fix SVG tag name casing for HTMLTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=41998

        Tested by html5lib/runner.html

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

2010-07-09  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Implement SVG attribute case mapping for HTMLTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=41949

        Tested by html5lib/runner.html.

        * html/HTMLTreeBuilder.cpp:

2010-07-09  Andy Estes  <aestes@apple.com>

        Reviewed by Adele Peterson.

        Remove the workaround for a Core Animation bug on platforms where the
        bug has been fixed.
        https://bugs.webkit.org/show_bug.cgi?id=41927
        <rdar://problem/7920153>

        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::GraphicsLayerCA::createTransformAnimationsFromKeyframes): Add
        a compile-time check for platforms that have a Core Animation bug that
        needs working around.

2010-07-08  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Nate Chapin.

        Implement unloadEventEnd, loadEventStart, and loadEventEnd for Web Timing
        https://bugs.webkit.org/show_bug.cgi?id=41332

        Test: fast/dom/webtiming.html

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopLoading):
        (WebCore::FrameLoader::loadWithDocumentLoader):
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::frameLoadTimeline):
        * loader/FrameLoaderTypes.h:
        (WebCore::FrameLoadTimeline::FrameLoadTimeline):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::dispatchLoadEvent):
        * page/Timing.cpp:
        (WebCore::Timing::navigationStart):
        (WebCore::Timing::unloadEventEnd):
        (WebCore::Timing::loadEventStart):
        (WebCore::Timing::loadEventEnd):
        * page/Timing.h:
        * page/Timing.idl:

2010-07-09  Dumitru Daniliuc  <dumi@chromium.org>

        Unreviewed, but pre-approved by Eric Seidel.

        Remove all unnecessary includes from the header files in WebCore/accessibility/.
        https://bugs.webkit.org/show_bug.cgi?id=41941

        * accessibility/AXObjectCache.h:
        * accessibility/AccessibilityListBox.cpp:
        * accessibility/AccessibilityListBox.h:
        * accessibility/AccessibilityMenuList.h:
        * accessibility/mac/AccessibilityObjectWrapper.h:

2010-07-09  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Kent Tamura.

        [WINCE] Buildfix for EventHandlerWin
        https://bugs.webkit.org/show_bug.cgi?id=41909

        Use Clipboard.h instead of ClipboardWin.h on WinCE.

        * page/win/EventHandlerWin.cpp:

2010-07-09  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r62946.
        http://trac.webkit.org/changeset/62946
        https://bugs.webkit.org/show_bug.cgi?id=41965

        AppCache inspector support should be enabled in WebKit ToT.
        (Requested by pfeldman_ on #webkit).

        * inspector/front-end/StoragePanel.js:
        (WebInspector.StoragePanel):
        (WebInspector.StoragePanel.prototype.reset):
        (WebInspector.StoragePanel.prototype.addApplicationCache):

2010-07-09  François Sausset  <sausset@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        Implement MathML mathcolor & mathbackground attributes
        https://bugs.webkit.org/show_bug.cgi?id=41895

        Test: mathml/presentation/attributes.xhtml

        * dom/MappedAttributeEntry.h:
        (WebCore::):
        * mathml/MathMLElement.cpp:
        (WebCore::MathMLElement::MathMLElement):
        (WebCore::MathMLElement::mapToEntry):
        (WebCore::MathMLElement::parseMappedAttribute):
        * mathml/MathMLElement.h:
        * mathml/mathattrs.in:

2010-07-09  Xiaomei Ji  <xji@chromium.org>

        Reviewed by David Levin.

        Fix characters with unicode-bidi-mirror property are not correctly
        mirrored in Linux.
        https://bugs.webkit.org/show_bug.cgi?id=41305

        Since harfbuzz does not do mirroring, chromium should iterate each
        character in the string and mirror it if needed before passing the
        string to harfbuzz for shaping.

        Test: fast/text/international/bidi-mirror-he-ar.html

        * platform/graphics/chromium/FontLinux.cpp:
        (WebCore::TextRunWalker::TextRunWalker):
        (WebCore::TextRunWalker::~TextRunWalker):
        (WebCore::TextRunWalker::mirrorCharacters):


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

        Reviewed by Simon Fraser.

        Instantiate Netscape plug-ins, pass geometry information to Plugin
        https://bugs.webkit.org/show_bug.cgi?id=41960

        * WebCore.exp.in:
        Export ScrollView::contentsToWindow.

2010-07-09  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Kent Tamura.

        [WINCE] Buildfix for FrameWince after r47440
        https://bugs.webkit.org/show_bug.cgi?id=41904

        * page/wince/FrameWince.cpp: Added property svn:eol-style.
        (WebCore::computePageRectsForFrame):
        (WebCore::imageFromSelection):

2010-07-09  Vitaly Repeshko  <vitalyr@chromium.org>

        Reviewed by Pavel Feldman.

        [v8] Call JS gc in a fresh context to avoid retaining the current one.
        https://bugs.webkit.org/show_bug.cgi?id=41963
        http://crbug.com/46571

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

2010-07-09  Kenneth Russell  <kbr@google.com>

        Reviewed by Dimitri Glazkov.

        Crash with uniform array test
        https://bugs.webkit.org/show_bug.cgi?id=36028

        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        (WebCore::vertexAttribAndUniformHelperf):
        (WebCore::uniformHelperi):
        (WebCore::uniformMatrixHelper):
         - Fixed type tests and casting of incoming arrays.
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getUniform):
         - Fixed crash when null WebGLUniform is passed to getUniform.

2010-07-09  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        AX:  text editing not spoken by VO on web view contenteditable textbox
        https://bugs.webkit.org/show_bug.cgi?id=41912

        Test: platform/mac/accessibility/selection-value-changes-for-aria-textbox.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::renderObjectIsObservable):

2010-07-09  Michael Nordman  <michaeln@google.com>

        Reviewed by Dumitru Daniliuc.

        Use class ProgressEvent when raising appcache related progress events and
        set the 'total', 'loaded', and 'lengthComputable' attributes.
        Also raise the final progress event with the 'total' and 'loaded' attribute
        values are equal to one another to keep pace with the spec for this feature.
        https://bugs.webkit.org/show_bug.cgi?id=37602

        Test: http/tests/appcache/progress-counter.html

        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::ApplicationCacheGroup):
        (WebCore::ApplicationCacheGroup::didFinishLoadingManifest):
        (WebCore::ApplicationCacheGroup::checkIfLoadIsComplete):
        (WebCore::ApplicationCacheGroup::startLoadingEntry):
        (WebCore::CallCacheListenerTask::create):
        (WebCore::CallCacheListenerTask::performTask):
        (WebCore::CallCacheListenerTask::CallCacheListenerTask):
        (WebCore::ApplicationCacheGroup::postListenerTask):
        * loader/appcache/ApplicationCacheGroup.h:
        (WebCore::ApplicationCacheGroup::postListenerTask):
        * loader/appcache/ApplicationCacheHost.cpp:
        (WebCore::ApplicationCacheHost::notifyDOMApplicationCache):
        (WebCore::ApplicationCacheHost::stopDeferringEvents):
        (WebCore::ApplicationCacheHost::dispatchDOMEvent):
        * loader/appcache/ApplicationCacheHost.h:
        (WebCore::ApplicationCacheHost::DeferredEvent::DeferredEvent):

2010-07-09  Sebastian Dröge  <sebastian.droege@collabora.co.uk>

        Reviewed by Gustavo Noronha Silva.

        Bug 41340 - [GStreamer] Subtle race condition during seeks
        https://bugs.webkit.org/show_bug.cgi?id=41340

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webKitWebSrcStop):
        (webKitWebSrcNeedDataMainCb):
        (webKitWebSrcNeedDataCb):
        (webKitWebSrcEnoughDataMainCb):
        (webKitWebSrcEnoughDataCb):
        (webKitWebSrcSeekDataCb):
        (StreamingClient::didFinishLoading):
        Fix two subtle race conditions that can happen during seeks:
        - The timeout callback could be called before the callback ID is
          assigned to the instance private data. This causes the ID to
          be set after the callback has finished and breaks all future
          processing.
        - The source must not go EOS while a seek is pending because
          this confuses appsrc due to the different threads involved here.

2010-07-09  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Removed hard-coded enabled default of video support

        Properly detect video/audio instead of defaulting to true.Properly detect video/audio instead of defaulting to true.Properly detect video/audio instead of defaulting to true.Properly detect video/audio instead of defaulting to true.

        * WebCore.pri:

2010-07-09  Ben Murdoch  <benm@google.com>

        Reviewed by Steve Block.

        [Arm] Missing NaN check in XPath substring function
        https://bugs.webkit.org/show_bug.cgi?id=41862

        Test: fast/xpath/substring-nan-position.html

        * xml/XPathFunctions.cpp:
        (WebCore::XPath::FunSubstring::evaluate): Add an isnan()
            to the value returned from evaluating the position
            argument and early out and return the empty string.

2010-07-09  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Prospective build fix.

        Moved the media element detection from WebCore.pro into WebCore.pri, where
        all the features are detected. This is also used by build-webkit to determine
        the defaults, which may be the reason for the build breakage.

        * WebCore.pri:
        * WebCore.pro:

2010-07-09  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Re-enable support for QtMultimediaKit as backend for the media elements

        Experimental support is re-enabled if QtMobility is available and the Qt
        version is 4.7 or above.

        * WebCore.pro:
        * platform/graphics/MediaPlayer.cpp:
        * platform/graphics/qt/MediaPlayerPrivateQt.cpp:
        (WebCore::MediaPlayerPrivate::supportsType): Adapt to latest QtMultimediaKit API changes.
        (WebCore::MediaPlayerPrivate::MediaPlayerPrivate):
        (WebCore::MediaPlayerPrivate::totalBytes):

2010-07-09  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: do not show default tooltip when detailed network info is available.

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

        * English.lproj/localizedStrings.js:
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel):
        (WebInspector.ResourcesPanel.prototype.reset):
        (WebInspector.ResourcesPanel.prototype.showResource):
        (WebInspector.ResourcesPanel.prototype._getPopoverAnchor):
        (WebInspector.ResourcesPanel.prototype._showPopover):
        (WebInspector.ResourceTimeCalculator.prototype.computeBarGraphLabels):

2010-07-09  François Sausset  <sausset@gmail.com>

        Reviewed by Beth Dakin.

        Correct the default font variant of mtext (regular instead of italic).
        https://bugs.webkit.org/show_bug.cgi?id=41626

        Add test to be sure that only <mi> elements use italic fonts by default.
        Update test with fractions to take into account the correct behaviour of mtext (regular instead of italic).

        * css/mathml.css:
        (mi):

2010-07-09  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Dimitri Glazkov.

        Implement performance.navigation.type
        https://bugs.webkit.org/show_bug.cgi?id=41564

        Tests: fast/dom/navigation-type-back-forward.html
               fast/dom/navigation-type-navigate.html
               fast/dom/navigation-type-reload.html

        * page/Navigation.cpp:
        (WebCore::Navigation::type):
        * page/Navigation.h:
        (WebCore::Navigation::):
        * page/Navigation.idl:

2010-07-09  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: hide AppCache until implemented.

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

        * inspector/front-end/StoragePanel.js:
        (WebInspector.StoragePanel):
        (WebInspector.StoragePanel.prototype.reset):
        (WebInspector.StoragePanel.prototype.addApplicationCache):

2010-07-09  François Sausset  <sausset@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        Set the good default behaviour for the columalign attribute on MathML mtable element
        https://bugs.webkit.org/show_bug.cgi?id=41631

        Test update: mathml/tables.xhtml

        * css/mathml.css:
        (math):

2010-07-09  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r62937.
        http://trac.webkit.org/changeset/62937
        https://bugs.webkit.org/show_bug.cgi?id=41955

        Crashes SnowLeopard leaks and Windows debug bot in fast/xsl
        /xslt-relative-path.xml, with assertion in
        XSLTProcessorLibxslt.cpp:264 (Requested by WildFox on
        #webkit).

        * xml/XSLTProcessor.h:
        (WebCore::XSLTProcessor::XSLTProcessor):
        * xml/XSLTProcessorLibxslt.cpp:
        (WebCore::docLoaderFunc):
        (WebCore::setXSLTLoadCallBack):
        (WebCore::xsltStylesheetPointer):
        (WebCore::XSLTProcessor::transformToString):

2010-07-09  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Laszlo Gombos.

        NotificationPresenter needs a cancelRequestPermission API
        https://bugs.webkit.org/show_bug.cgi?id=41783

        Updated NotificationPresenter API, to use ScriptExecutionContext instead of origin.
        Added new API NotificationPresenter::cancelRequestsForPermision
        The new API will be implemented and a test will be added in a followup patch.

        * notifications/Notification.cpp:
        (WebCore::Notification::Notification):
        * notifications/NotificationCenter.cpp:
        (WebCore::NotificationCenter::checkPermission):
        (WebCore::NotificationCenter::requestPermission):
        (WebCore::NotificationCenter::disconnectFrame):
        * notifications/NotificationCenter.h:
        * notifications/NotificationPresenter.h:

2010-07-09  Andreas Wictor  <andreas.wictor@xcerion.com>

        Reviewed by Alexey Proskuryakov.

        Remove global variables from XSLTProcessorLibxslt.cpp
        https://bugs.webkit.org/show_bug.cgi?id=41348

        Remove the globalProcessor and globalDocLoader global variables
        by using the _private field that exists on most libxml structs.

        No new tests, existing tests covers this.

        * xml/XSLTProcessor.h:
        (WebCore::XSLTProcessor::sourceNode):
        (WebCore::XSLTProcessor::XSLTProcessor):
        * xml/XSLTProcessorLibxslt.cpp:
        (WebCore::registeredXSLTProcessors):
        (WebCore::registeredXSLStyleSheets):
        (WebCore::docLoaderFunc):
        (WebCore::clearSavedStyleSheetPointers):
        (WebCore::xsltStylesheetPointer):
        (WebCore::XSLTProcessor::transformToString):

2010-07-09  Adam Barth  <abarth@webkit.org>

        Unreviewed build fix.

        We recently taught the HTMLTokenizer to recognize self-closing tags,
        <http://trac.webkit.org/changeset/62926>, but that confused the
        LegacyHTMLTreeBuilder.  It turns out that it's much happier if we never
        say a tag is self-closing.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::convertToOldStyle):

2010-07-09  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Rob Buis.

        svg/custom/use-instanceRoot-event-bubbling.xhtml test crashes
        https://bugs.webkit.org/show_bug.cgi?id=41931

        Be careful to not mutate (marking it for recreation) the shadow tree, while building it.
        The recent change that cloneNode() properly synchronizes the style/SVG attributes caused this problem.

        Fixes crash seen on the buildbots in svg/custom/use-instanceRoot-event-bubbling.xhtml.

        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::SVGUseElement):
        (WebCore::SVGUseElement::recalcStyle):
        (WebCore::SVGUseElement::buildShadowAndInstanceTree):
        (WebCore::SVGUseElement::invalidateShadowTree):
        * svg/SVGUseElement.h:
        (WebCore::SVGUseElement::setUpdatesBlocked):

2010-07-09  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Skip leading newlines in <textarea>
        https://bugs.webkit.org/show_bug.cgi?id=41947

        We would have caught this earlier with the ASSERT.

        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::nextToken):

2010-07-08  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Provide detailed network info in the resources panel.

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

        * English.lproj/localizedStrings.js:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::willSendRequest):
        (WebCore::InspectorController::didReceiveResponse):
        * inspector/InspectorController.h:
        * inspector/InspectorResource.cpp:
        (WebCore::InspectorResource::InspectorResource):
        (WebCore::InspectorResource::updateResponse):
        (WebCore::InspectorResource::updateScriptObject):
        (WebCore::InspectorResource::buildObjectForTiming):
        * inspector/InspectorResource.h:
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel):
        (WebInspector.ResourcesPanel.prototype.elementsToRestoreScrollPositionsFor):
        (WebInspector.ResourcesPanel.prototype._getPopoverAnchor):
        (WebInspector.ResourcesPanel.prototype._showPopover):
        (WebInspector.ResourcesPanel.prototype.hide):
        (WebInspector.ResourceTimeCalculator.prototype.computeBarGraphLabels):
        (WebInspector.ResourceGraph):
        * inspector/front-end/inspector.js:
        (WebInspector.updateResource):
        * platform/network/ResourceLoadTiming.h:
        (WebCore::ResourceLoadTiming::create):
        (WebCore::ResourceLoadTiming::deepCopy):
        (WebCore::ResourceLoadTiming::operator==):
        (WebCore::ResourceLoadTiming::ResourceLoadTiming):
        * platform/network/ResourceRequestBase.h:
        (WebCore::ResourceRequestBase::reportLoadTiming):
        (WebCore::ResourceRequestBase::setReportLoadTiming):
        (WebCore::ResourceRequestBase::ResourceRequestBase):
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::connectionID):
        (WebCore::ResourceResponseBase::setConnectionID):
        * platform/network/ResourceResponseBase.h:

2010-07-09  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Implement self closing start tag state in the tokenizer
        https://bugs.webkit.org/show_bug.cgi?id=41946

        Amazingly we got this far w/o needing self closing.
        The LegacyHTMLTreeBuilder clearly uses the self-closing
        state, but the fact that we never exposed it seems to
        not have caused any test failures.  Sad.

        The new HTMLTreeBuilder only needs the self closing state
        for foreign content mode (and a few parse error cases).

        * html/HTMLToken.h:
        (WebCore::HTMLToken::setSelfClosing):
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::nextToken):
        * html/HTMLTreeBuilder.cpp:
        (WebCore::):

2010-07-09  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Add basic "in foreign content" support to the TreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=41943

        This is covered by numerous tests in html5lib/runner.html.

        "in foreign content" mode requires us to be able to process
        tokens using the "secondary insertion mode".  We have to set
        a fake insertion mode to do that, so much of this code is enabling
        setting of fake insertion modes, and then later restoration of the
        insertion mode after execution.

        There is a lot more of foreign content mode to implement, but this is
        a good start resulting in huge test progressions.

        * html/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::insertSelfClosingHTMLElement):
         - Use createHTMLElementAndAttachToCurrent instead of copy/paste code.
         - No need to include HTMLElementFactory in this file.
        * html/HTMLConstructionSite.h:
         - RedirectToFosterParentGuard does not need to be a friend class.
        * html/HTMLElementStack.cpp:
        (WebCore::HTMLElementStack::isOnlyHTMLElementsInScope):
        * html/HTMLElementStack.h:
        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTagForInBody):
        (WebCore::):
        * html/HTMLTreeBuilder.h:
        (WebCore::HTMLTreeBuilder::setInsertionMode):
        (WebCore::HTMLTreeBuilder::isFakeInsertionMode):
        (WebCore::HTMLTreeBuilder::setFakeInsertionMode):

2010-07-09  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Coalesce text nodes when foster parenting
        https://bugs.webkit.org/show_bug.cgi?id=41921

        Introduces the notion of an AttachmentSite to the overall
        HTMLConstructionSite.  Maybe we should rename HTMLConstructionSite to
        HTMLConstructionArea since we construct things all over the tree?  :)

        There's something wrong in the internal layering in this class, but I
        can't quite see what it is.  I added a FIXME for the some of the
        symptoms.

        * html/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::attach):
        (WebCore::HTMLConstructionSite::attachAtSite):
        (WebCore::HTMLConstructionSite::insertTextNode):
        (WebCore::HTMLConstructionSite::findFosterSite):
        (WebCore::HTMLConstructionSite::fosterParent):
        * html/HTMLConstructionSite.h:

2010-07-08  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        RenderSVGRoot does not include border/padding while repainting
        https://bugs.webkit.org/show_bug.cgi?id=41854

        RenderSVGRoot does not include border/padding in the repaint rect.
        clippedOverflowRectForRepaint() was missing. Affects all DRT results,
        as <svg> now gets properly sized.

        Test: svg/custom/repaint-moving-svg-and-div.xhtml

        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::repaintRectInLocalCoordinates):
        (WebCore::RenderSVGRoot::clippedOverflowRectForRepaint):
        * rendering/RenderSVGRoot.h:

2010-07-09  Albert J. Wong  <ajwong@chromium.org>

        Reviewed by Nikolas Zimmermann.

        Add RuntimeEnabledFeatures::timeRangesEnabled() required by r62880

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

        * bindings/generic/RuntimeEnabledFeatures.cpp:
        (WebCore::RuntimeEnabledFeatures::timeRangesEnabled):
                Add in timeRangesEnabled() implementation.
        * bindings/generic/RuntimeEnabledFeatures.h:
                Add in timeRangesEnabled() declaration.


2010-07-09  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Add setInsertionMode setter in preparation for "in foreign content" mode
        https://bugs.webkit.org/show_bug.cgi?id=41942

        "in foreign content" mode needs to be able to use a fake
        insertion mode for processing.  We need to be able to save the
        original insertion mode, set a fake one, and then restore the original
        if it wasn't changed.  To detect changes, we need all callsites to
        use a setInsertionMode accessor instead of m_insertionMode =

        No functional changes, thus no tests.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTagForInBody):
        (WebCore::HTMLTreeBuilder::processColgroupEndTagForInColumnGroup):
        (WebCore::HTMLTreeBuilder::processStartTagForInTable):
        (WebCore::HTMLTreeBuilder::processStartTag):
        (WebCore::HTMLTreeBuilder::processBodyEndTagForInBody):
        (WebCore::HTMLTreeBuilder::setInsertionModeAndEnd):
        (WebCore::HTMLTreeBuilder::processEndTagForInTableBody):
        (WebCore::HTMLTreeBuilder::processEndTagForInCell):
        (WebCore::HTMLTreeBuilder::processCaptionEndTagForInCaption):
        (WebCore::HTMLTreeBuilder::processTrEndTagForInRow):
        (WebCore::HTMLTreeBuilder::processEndTag):
        (WebCore::HTMLTreeBuilder::processCharacter):
        (WebCore::HTMLTreeBuilder::processDefaultForInTableTextMode):
        (WebCore::HTMLTreeBuilder::processGenericRCDATAStartTag):
        (WebCore::HTMLTreeBuilder::processGenericRawTextStartTag):
        (WebCore::HTMLTreeBuilder::processScriptStartTag):

2010-07-09  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Add insertForeignElement in preparation for adding "in foreign content" support
        https://bugs.webkit.org/show_bug.cgi?id=41940

        No functional changes, thus no tests.

        * html/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::insertForeignElement):
        (WebCore::HTMLConstructionSite::createElement):
        (WebCore::HTMLConstructionSite::createHTMLElement):
        * html/HTMLConstructionSite.h:

2010-07-09  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Implementing pending table characters
        https://bugs.webkit.org/show_bug.cgi?id=41916

        This turned out to not be as scary as I thought it would be.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processDoctypeToken):
        (WebCore::HTMLTreeBuilder::processStartTag):
        (WebCore::HTMLTreeBuilder::processEndTag):
        (WebCore::HTMLTreeBuilder::processComment):
        (WebCore::HTMLTreeBuilder::processCharacter):
        (WebCore::HTMLTreeBuilder::processEndOfFile):
        (WebCore::HTMLTreeBuilder::processDefaultForInTableTextMode):
        * html/HTMLTreeBuilder.h:

2010-07-08  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Handle whitespace correctly
        https://bugs.webkit.org/show_bug.cgi?id=41907

        This patch introduces an extra memcpy in the character token pipeline.
        I'll remove the memcpy in a future patch.

        * html/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::insertTextNode):
        * html/HTMLConstructionSite.h:
        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processCharacter):
        * html/HTMLTreeBuilder.h:

2010-07-09  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Move more mode handling into functions for later re-use
        https://bugs.webkit.org/show_bug.cgi?id=41939

        No functional changes, thus no tests.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processEndTagForInTableBody):
        (WebCore::HTMLTreeBuilder::processEndTagForInRow):
        (WebCore::HTMLTreeBuilder::processEndTagForInCell):
        (WebCore::HTMLTreeBuilder::processEndTag):
        * html/HTMLTreeBuilder.h:

2010-07-09  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Add new popUntilPopped functions to clean up code
        https://bugs.webkit.org/show_bug.cgi?id=41936

        Pretty self explanatory.  Much awesome code reduction.

        No functional changes, thus no tests.

        * html/HTMLElementStack.cpp:
        (WebCore::HTMLElementStack::popUntilPopped):
        * html/HTMLElementStack.h:
        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processAnyOtherEndTagForInBody):
        (WebCore::HTMLTreeBuilder::callTheAdoptionAgency):
        (WebCore::HTMLTreeBuilder::processEndTagForInBody):
        (WebCore::HTMLTreeBuilder::processCaptionEndTagForInCaption):
        (WebCore::HTMLTreeBuilder::processTableEndTagForInTable):
        (WebCore::HTMLTreeBuilder::processEndTag):

2010-07-09  Eric Seidel  <eric@webkit.org>

        Unreviewed.  Just renaming (discussed with Adam Barth).

        Rename createElement* to createHTMLElement* to better reflect
        behavior.  This is in preparation for adding foreign content support.

        * html/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::createHTMLElementAndAttachToCurrent):
        (WebCore::HTMLConstructionSite::insertHTMLHtmlElement):
        (WebCore::HTMLConstructionSite::insertHTMLHeadElement):
        (WebCore::HTMLConstructionSite::insertHTMLBodyElement):
        (WebCore::HTMLConstructionSite::insertHTMLElement):
        (WebCore::HTMLConstructionSite::insertSelfClosingHTMLElement):
        (WebCore::HTMLConstructionSite::createHTMLElement):
        * html/HTMLConstructionSite.h:
        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::callTheAdoptionAgency):

2010-07-09  Eric Seidel  <eric@webkit.org>

        Unreviewed.  Just renaming (discussed with Adam Barth).

        Rename insertElement to insertHTMLElement and
        insertSelfClosingElement to insertSelfClosingHTMLElement
        to better reflect what they actually do.  This is in preparation
        for adding foreign content support.

        * html/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::insertHTMLElement):
        (WebCore::HTMLConstructionSite::insertSelfClosingHTMLElement):
        (WebCore::HTMLConstructionSite::insertFormattingElement):
        (WebCore::HTMLConstructionSite::reconstructTheActiveFormattingElements):
        (WebCore::HTMLConstructionSite::fosterParent):
        * html/HTMLConstructionSite.h:
        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processCloseWhenNestedTag):
        (WebCore::HTMLTreeBuilder::processStartTagForInBody):
        (WebCore::HTMLTreeBuilder::processStartTagForInTable):
        (WebCore::HTMLTreeBuilder::processStartTag):
        (WebCore::HTMLTreeBuilder::callTheAdoptionAgency):
        (WebCore::HTMLTreeBuilder::processStartTagForInHead):
        (WebCore::HTMLTreeBuilder::processGenericRCDATAStartTag):
        (WebCore::HTMLTreeBuilder::processGenericRawTextStartTag):

2010-07-08  Rob Buis  <rwlbuis@gmail.com>

        Reviewed by Eric Seidel.

        Implement SVGSVGElement.getElementById
        https://bugs.webkit.org/show_bug.cgi?id=41655

        Implement getElementById for SVGSVGElement by trying to
        reuse Document.getElementById. If that fails to find an
        SVG element in the document fragent do a subtree search.

        Test: svg/custom/svg-getelementid.xhtml

        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::getElementById):
        * svg/SVGSVGElement.h:
        * svg/SVGSVGElement.idl:

2010-07-08  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Unwrap a few || blocks for easier readability
        https://bugs.webkit.org/show_bug.cgi?id=41838

        No functional change, thus no tests.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::adjustedLexerState):
        (WebCore::HTMLTreeBuilder::processStartTagForInBody):
        (WebCore::HTMLTreeBuilder::processStartTagForInTable):
        (WebCore::HTMLTreeBuilder::processStartTag):
        (WebCore::HTMLTreeBuilder::processEndTagForInBody):
        (WebCore::HTMLTreeBuilder::processEndTag):
        (WebCore::HTMLTreeBuilder::processComment):
        (WebCore::HTMLTreeBuilder::processStartTagForInHead):

2010-07-08  Sam Magnuson  <smagnuson@netflix.com>

        Reviewed by Simon Hausmann.

        [Qt] for debugging purposes nice I'm contributing back my FPS
        counter in the AnimationQtBase
        https://bugs.webkit.org/show_bug.cgi?id=40381

        Simply start a timer and count frames in the AnimationQtBase and
        spit out the FPS count at the end of a single animation.

        No new tests: this is a simple debugging aid.

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::AnimationQt::updateState):
        (WebCore::AnimationQt::updateCurrentTime):
        (WebCore::TransformAnimationQt::updateState):
        (WebCore::OpacityAnimationQt::updateState):

2010-07-08  Sam Magnuson  <smagnuson@netflix.com>

        Reviewed by Simon Hausmann.

        [Qt] instance objects created for QObjects are somtimes GC'd
        https://bugs.webkit.org/show_bug.cgi?id=40352

        In markAggregate loop over all the current fields and for any that
        still have a dynamic property or a child, mark them as
        well. Otherwise the proxy instance will go away and the JS that
        was bound to it will be lost.

        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtInstance::getQtInstance):
        (JSC::Bindings::QtInstance::removeCachedMethod):
        (JSC::Bindings::QtInstance::markAggregate):
        (JSC::Bindings::QtInstance::getPropertyNames):

2010-07-08  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        WebInspector: migrate InspectorDOMAgent to the generated version of
        InspectorFrontend interface. This is the next step on the way to
        Remote Debugging.

        * bindings/js/ScriptEventListener.cpp:
        (WebCore::eventListenerHandlerBody):
        (WebCore::eventListenerHandlerLocation):
        * bindings/js/ScriptEventListener.h:
        * bindings/v8/ScriptEventListener.cpp:
        (WebCore::eventListenerHandlerBody):
        (WebCore::eventListenerHandlerLocation):
        * bindings/v8/ScriptEventListener.h:
        * inspector/CodeGeneratorInspector.pm:
        * inspector/InspectorCSSStore.cpp:
        (WebCore::InspectorCSSStore::inspectorStyleSheet):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::connectFrontend):
        * inspector/InspectorController.h:
        (WebCore::InspectorController::inspectorFrontend2):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        (WebCore::InspectorDOMAgent::setDocument):
        (WebCore::InspectorDOMAgent::handleEvent):
        (WebCore::InspectorDOMAgent::pushChildNodesToFrontend):
        (WebCore::InspectorDOMAgent::getEventListenersForNode):
        (WebCore::InspectorDOMAgent::buildObjectForNode):
        (WebCore::InspectorDOMAgent::buildArrayForElementAttributes):
        (WebCore::InspectorDOMAgent::buildArrayForContainerChildren):
        (WebCore::InspectorDOMAgent::buildObjectForEventListener):
        (WebCore::InspectorDOMAgent::didInsertDOMNode):
        (WebCore::InspectorDOMAgent::getStyles):
        (WebCore::InspectorDOMAgent::getAllStyles):
        (WebCore::InspectorDOMAgent::getStyleSheet):
        (WebCore::InspectorDOMAgent::getRuleRangesForStyleSheetId):
        (WebCore::InspectorDOMAgent::getInlineStyle):
        (WebCore::InspectorDOMAgent::getComputedStyle):
        (WebCore::InspectorDOMAgent::buildObjectForAttributeStyles):
        (WebCore::InspectorDOMAgent::buildArrayForCSSRules):
        (WebCore::InspectorDOMAgent::buildArrayForPseudoElements):
        (WebCore::InspectorDOMAgent::applyStyleText):
        (WebCore::InspectorDOMAgent::toggleStyleEnabled):
        (WebCore::InspectorDOMAgent::setRuleSelector):
        (WebCore::InspectorDOMAgent::addRule):
        (WebCore::InspectorDOMAgent::buildObjectForStyle):
        (WebCore::InspectorDOMAgent::populateObjectWithStyleProperties):
        (WebCore::InspectorDOMAgent::buildArrayForDisabledStyleProperties):
        (WebCore::InspectorDOMAgent::buildObjectForStyleSheet):
        (WebCore::InspectorDOMAgent::buildObjectForRule):
        (WebCore::InspectorDOMAgent::toArray):
        (WebCore::InspectorDOMAgent::reportNodesAsSearchResults):
        * inspector/InspectorDOMAgent.h:
        (WebCore::InspectorDOMAgent::create):
        * inspector/InspectorFrontend.cpp:
        * inspector/InspectorFrontend.h:
        * inspector/InspectorFrontend2.idl:
        * inspector/front-end/inspector.js:
        (WebInspector.dispatchMessageFromBackend):

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

        Reviewed by Darin Adler.

        compositing/iframes/iframe-resize.html displays incorrectly after the resize
        https://bugs.webkit.org/show_bug.cgi?id=41794
        
        The clip and scroll layers of a composited iframe's RenderLayerCompositor are updated from
        from updateGraphicsLayerGeometry(), but this is too early to get the correct layoutWidth and
        layoutHeight from the FrameView which happen later in layout. So when a widget size changes,
        call updateAfterWidgetResize() directly on the RenderLayerBacking (if any).

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::updateAfterWidgetResize): New method that updates the clip
        and scroll layers of the iframe's content RenderLayerCompositor.
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry): Call updateAfterWidgetResize()
        * rendering/RenderLayerBacking.h: Add updateAfterWidgetResize().
        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::setWidgetGeometry): Call updateAfterWidgetResize().

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

        Reviewed by Dan Bernstein.

        Calling layoutTestController.layerTreeAsText() should update layout
        https://bugs.webkit.org/show_bug.cgi?id=41818

        Call updateLayout() on the document before obtaining the layer tree.
        This will update compositing layers.
        
        * page/Frame.cpp:
        (WebCore::Frame::layerTreeAsText):

2010-07-08  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Get my head wrapped around processCharacter
        https://bugs.webkit.org/show_bug.cgi?id=41812

        The bulk of the patch is just stubbing out functions to document what
        the spec tells us to do.  I'll implement these functions in subsequent
        patches.

        * html/HTMLConstructionSite.h:
        (WebCore::HTMLConstructionSite::insertLeadingWhitespace):
        (WebCore::HTMLConstructionSite::insertLeadingWhitespaceWithActiveFormattingElements):
        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processCharacter):
        * html/HTMLTreeBuilder.h:
        (WebCore::HTMLTreeBuilder::skipLeadingWhitespace):

2010-07-08  Tony Chang  <tony@chromium.org>

        Reviewed by Ojan Vafai.

        WebCore::InsertLineBreakCommand::shouldUseBreakElement ReadAV@NULL
        https://bugs.webkit.org/show_bug.cgi?id=30116
        Fixing the crash causes text insertions on hidden elements to get ignored
        (not a new bug).  This is https://bugs.webkit.org/show_bug.cgi?id=40342

        Test: editing/inserting/return-key-in-hidden-textarea.html

        * editing/InsertLineBreakCommand.cpp:
        (WebCore::InsertLineBreakCommand::doApply):
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply):

2010-07-08  Sam Weinig  <sam@webkit.org>

        Reviewed by Oliver Hunt.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=41923
        TimeRanges should expose a JS constructor

        * html/TimeRanges.idl: Remove [OmitConstructor].
        * page/DOMWindow.idl: Add constructor.

2010-07-08  Erik Arvidsson  <arv@chromium.org>

        Reviewed by Ojan Vafai.

        Add missing padding-end and margin-end CSS properties.
        https://bugs.webkit.org/show_bug.cgi?id=25761

        Tests: fast/css/margin-start-end.html
               fast/css/padding-start-end.html

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSPropertyNames.in:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        * inspector/front-end/SourceCSSTokenizer.js:
        (WebInspector.SourceCSSTokenizer):

2010-07-08  Aaron Boodman  <aa@chromium.org>

        Reviewed by Timothy Hatcher.

        Add the ability for user scripts and user styles to affect just the top frame.

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

        Tests: userscripts/user-script-all-frames.html
               userscripts/user-script-top-frame-only.html
               userscripts/user-style-all-frames.html
               userscripts/user-style-top-frame-only.html

        * WebCore.base.exp: Update PageGroup method signatures.
        * dom/Document.cpp:
        (WebCore::Document::pageGroupUserSheets): Check allFrames before injecting.
        * page/Frame.cpp:
        (WebCore::Frame::injectUserScriptsForWorld): Ditto.
        * page/PageGroup.cpp:
        (WebCore::PageGroup::addUserScriptToWorld):
        (WebCore::PageGroup::addUserStyleSheetToWorld):
        * page/PageGroup.h:
        * page/UserScript.h:
        (WebCore::UserScript::UserScript):
        (WebCore::UserScript::injectedFrames):
        * page/UserScriptTypes.h:
        (WebCore::):
        * page/UserStyleSheet.h:
        (WebCore::UserStyleSheet::UserStyleSheet):
        (WebCore::UserStyleSheet::injectedFrames):

2010-07-08  Adele Peterson  <adele@apple.com>

        Reviewed by Jon Honeycutt, Adam Roben, and Darin Adler.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=41721
        <rdar://problem/8158561> Missing plug-in indicator should have a pressed state

        Test: plugins/clicking-missing-plugin-fires-delegate.html

        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::HTMLPlugInElement): Initialize m_isCapturingMouseEvents.
        (WebCore::HTMLPlugInElement::detach): If we're still capturing when getting detached, clear the capturing node on the EventHandler.
        (WebCore::HTMLPlugInElement::defaultEventHandler): Call handleMissingPluginIndicatorEvent when the missing plugin indicator is showing.
        * html/HTMLPlugInElement.h:
        (WebCore::HTMLPlugInElement::isCapturingMouseEvents):
        (WebCore::HTMLPlugInElement::setIsCapturingMouseEvents):
        * page/ChromeClient.h:
        (WebCore::ChromeClient::shouldMissingPluginMessageBeButton): Added default implementation.
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::replacementTextRoundedRectPressedColor):
        (WebCore::RenderEmbeddedObject::RenderEmbeddedObject):
        (WebCore::RenderEmbeddedObject::setMissingPluginIndicatorIsPressed): Added.  Causes a repaint when the state changes.
        (WebCore::RenderEmbeddedObject::paintReplaced): Call getReplacementTextGeometry.
        (WebCore::RenderEmbeddedObject::getReplacementTextGeometry): Factored this out so it can be used in paintReplaced and in isInMissingPluginIndicator.
        (WebCore::RenderEmbeddedObject::isInMissingPluginIndicator): Hit test to see if the mouse event is in the missing plugin indicator.
        (WebCore::RenderEmbeddedObject::handleMissingPluginIndicatorEvent): Capture mouse events as needed and track the pressed appearance.
        * rendering/RenderEmbeddedObject.h:

2010-07-08  James Robinson  <jamesr@google.com>

        Reviewed by Darin Fisher.

        Allow resizing and getting the texture id from an offscreen GLES2Context
        https://bugs.webkit.org/show_bug.cgi?id=41828

        When using an offscreen GLES2Context the caller needs to be able to resize the backing store
        managed by the embedder and get access to a texture id to pass to the compositor.  WebGL
        does these actions in an indirect way, it will be refactored to use this path.

        * platform/chromium/GLES2Context.h:

2010-07-02  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Adam Barth.

        Crash in RenderObject::containingBlock when clearing selection in a display:none node.
        https://bugs.webkit.org/show_bug.cgi?id=41523

        updateStyleIfNeeded before clearing the selection in the RenderView. Otherwise,
        m_selectionStart and m_selectionEnd in RenderView point to garbage object.
        This fixes the crash because updateStyleIfNeeded clears the selection before
        clobbering nodes that contain the selection.

        Test: editing/selection/crash-on-clear-selection.html

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

2010-07-08  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Xan Lopez.

        Correct a mistake in calculating squiggle extents.  The entire
        quantity was being divided by two, rather than just the unitWidth.
        This error caused the squiggle to be about half the expected length.

        * platform/graphics/cairo/DrawErrorUnderline.h:
        (drawErrorUnderline):

2010-07-08  John Abd-El-Malek  <jam@chromium.org>

        Reviewed by Darin Fisher.

        [V8] Navigation policy doesn't play nicely with pepper plugins
        https://bugs.webkit.org/show_bug.cgi?id=41864

        * bindings/v8/V8Utilities.cpp:
        (WebCore::callingOrEnteredFrame):
        (WebCore::shouldAllowNavigation):
        (WebCore::navigateIfAllowed):

2010-07-08  Jon Honeycutt  <jhoneycutt@apple.com>

        Missing plug-ins may cause an assertion failure.
        https://bugs.webkit.org/show_bug.cgi?id=41900

        Reviewed by Adele Peterson.

        Test: plugins/missing-plugin.html

        * plugins/PluginView.cpp:
        (WebCore::PluginView::~PluginView):
        Check whether m_instance is null before trying to remove it from the
        map. Trying to remove a null instance results in an assertion failure.
        (WebCore::PluginView::PluginView):
        Initialize m_instance to 0, because there is an early return that may
        skip its being assigned its proper value.

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

        Reviewed by Oliver Hunt.

        Fix a test failure seen only on the Leopard bot.

        * bindings/js/JSSharedWorkerCustom.cpp:
        (WebCore::JSSharedWorkerConstructor::constructJSSharedWorker):
        If SharedWorker::create returns an exception, don't try to create a wrapper
        for its return value, which can be 0.

2010-07-08  Albert J. Wong  <ajwong@chromium.org>

        Not reviewed, build break fix for chromium.

        A new MediaControlElementType enum was added which caused a warning in
        the Chromium build.

        * rendering/RenderMediaControlsChromium.cpp:
        (WebCore::RenderMediaControlsChromium::paintMediaControlsPart):
            Add MediaVolumeSliderMuteButton enumartion entry.

2010-07-08  Dmitry Titov  <dimich@chromium.org>

        Reviewed by David Levin.

        Remove IDL declarations and stubs for navigator.registerProtocolHandler and navigator.registerContentHandler.
        https://bugs.webkit.org/show_bug.cgi?id=41878

        This is practically a rollback of http://trac.webkit.org/changeset/50477.

        * page/Chrome.cpp:
        * page/Chrome.h:
        * page/ChromeClient.h:
        * page/Navigator.cpp:
        * page/Navigator.h:
        * page/Navigator.idl:

2010-07-08  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Darin Adler.

        Fix adoptRef assertion failures caused by stack-allocated ResourceHandle objects
        https://bugs.webkit.org/show_bug.cgi?id=41823

        Create the ResourceHandle manually for now instead of calling
        ::create, since that methods does a few extra checks that make us
        fail a couple of HTTP tests.

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

2010-07-08  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by David Levin.

        https://bugs.webkit.org/show_bug.cgi?id=41886
        Shorten access control failure explanation messages

        * loader/CrossOriginAccessControl.cpp:
        (WebCore::passesAccessControlCheck):
        * loader/CrossOriginPreflightResultCache.cpp:
        (WebCore::CrossOriginPreflightResultCacheItem::allowsCrossOriginMethod):
        (WebCore::CrossOriginPreflightResultCacheItem::allowsCrossOriginHeaders):
        Removed "response header field" parts from error text - it's long, but doesn't add much
        to header field name.

        * platform/network/ResourceErrorBase.cpp:
        * platform/network/ResourceErrorBase.h:
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::didFail):
        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::DocumentThreadableLoader):
        (WebCore::DocumentThreadableLoader::makeSimpleCrossOriginAccessRequest):
        (WebCore::DocumentThreadableLoader::didReceiveResponse):
        (WebCore::DocumentThreadableLoader::preflightFailure):
        Renamed the constant for domain. WebCore shouldn't be creating errors observable by WebKit
        clients, because it can't create a platform error, and cannot load a localized string.
        We don't treat cross origin access check failures as true loading failures, so we don't tell
        clients about these.

2010-07-08  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Dan Bernstein.

        Mac OS X media controls should have a way to adjust volume incrementally
        https://bugs.webkit.org/show_bug.cgi?id=41718
        <rdar://problem/5679472>

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue): Handle MediaVolumeSliderMuteButtonPart.

        * css/CSSSelector.cpp: 
        (WebCore::CSSSelector::pseudoId): Handle PseudoMediaControlsVolumeSliderMuteButton.
        (WebCore::nameToPseudoTypeMap): Define mediaControlsVolumeSliderMuteButton.
        (WebCore::CSSSelector::extractPseudoType): Handle PseudoMediaControlsVolumeSliderMuteButton.

        * css/CSSSelector.h:
        (WebCore::CSSSelector::): Define PseudoMediaControlsVolumeSliderMuteButton.

        * css/CSSValueKeywords.in: Define media-volume-slider-mute-button.

        * css/mediaControls.css: 
        (audio::-webkit-media-controls-volume-slider-mute-button, video::-webkit-media-controls-volume-slider-mute-button): New.

        * css/mediaControlsQuickTime.css:
        (audio::-webkit-media-controls-panel, video::-webkit-media-controls-panel): Add "overflow: visible" 
        so volume slider pop-up will be visible.

        (audio::-webkit-media-controls-mute-button, video::-webkit-media-controls-mute-button): Make 
        mute button 14x12 instead of 15x14 so it matches the size in the volume slider.

        (audio::-webkit-media-controls-volume-slider-container, video::-webkit-media-controls-volume-slider-container):
        (audio::-webkit-media-controls-volume-slider, video::-webkit-media-controls-volume-slider):
        (audio::-webkit-media-controls-volume-slider-mute-button, video::-webkit-media-controls-volume-slider-mute-button): 
        New.

        * platform/ThemeTypes.h: Define MediaVolumeSliderMuteButtonPart.

        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlInputElement::MediaControlInputElement): Handle MEDIA_CONTROLS_VOLUME_SLIDER_MUTE_BUTTON.
        (WebCore::MediaControlMuteButtonElement::MediaControlMuteButtonElement): Add ButtonLocation 
        parameter both mute buttons can be created.
        (WebCore::MediaControlMuteButtonElement::create): Ditto.

        * rendering/MediaControlElements.h: Define MediaVolumeSliderMuteButton and ButtonLocation.

        * rendering/RenderMedia.cpp: 
        (WebCore::RenderMedia::styleDidChange): Update volume slider mute button.
        (WebCore::RenderMedia::createMuteButton): Pass ButtonLocation parameter to MediaControlMuteButtonElement::create.
        (WebCore::RenderMedia::createVolumeSliderMuteButton): New.
        (WebCore::RenderMedia::updateControls): Deal with volume slider mute button.
        (WebCore::RenderMedia::updateVolumeSliderContainer): Don't assume all ports want to position
        the volume slider in the same place, call new volumeSliderOffsetFromMuteButton theme function.
        (WebCore::RenderMedia::forwardEvent): Handle volume slider mute button.
        * rendering/RenderMedia.h:

        * rendering/RenderTheme.cpp: 
        (WebCore::RenderTheme::paint): Handle MediaVolumeSliderMuteButtonPart.
        (WebCore::RenderTheme::volumeSliderOffsetFromMuteButton): New, return location previously hard
        coded in RenderMedia::updateVolumeSliderContainer.
        * rendering/RenderTheme.h:

        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::adjustMediaSliderThumbSize): Deal with the volume slider thumb.
        (WebCore::RenderThemeMac::paintMediaVolumeSliderContainer): New, call the WKSI paint function 
        for this button.
        (WebCore::RenderThemeMac::paintMediaVolumeSliderTrack): Ditto.
        (WebCore::RenderThemeMac::paintMediaVolumeSliderThumb): Ditto.
        (WebCore::RenderThemeMac::shouldRenderMediaControlPart): Draw the volume slider parts when
        using the new controller UI for a movie that has audio.
        (WebCore::RenderThemeMac::volumeSliderOffsetFromMuteButton): New, position the volume slider 
        directly above the mute button.

        * rendering/style/RenderStyleConstants.h: Define MEDIA_CONTROLS_VOLUME_SLIDER_MUTE_BUTTON.

2010-07-08  Antonio Gomes  <tonikitoo@webkit.org>

        Unreviewed complementary fix for r62815

        One last time change made me blind to a "!" in a if statment.

        * editing/EditorCommand.cpp:
        (WebCore::executeToggleStyle):

2010-07-07  Ojan Vafai  <ojan@chromium.org>

        Reviewed by Darin Adler.

        Regression: Selection anchor + focus swap when arrow keys after setBaseAndExtent
        https://bugs.webkit.org/show_bug.cgi?id=32605

        Only have selections be non-directional when they are set via the mouse.
        Otherwise, all selections are directional.

        Test: editing/selection/extend-forward-after-set-base-and-extent.html

        * WebCore.base.exp:
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::setSelection):
        * editing/SelectionController.h:
        (WebCore::SelectionController::setSelection):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::selectClosestWordFromMouseEvent):
        (WebCore::EventHandler::selectClosestWordOrLinkFromMouseEvent):
        (WebCore::EventHandler::handleMousePressEventTripleClick):
        (WebCore::EventHandler::handleMousePressEventSingleClick):
        (WebCore::EventHandler::updateSelectionForMouseDrag):

2010-07-08  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Ojan Vafai.

        Refactor platform dependent editing behavior code out of Settings (part II)
        https://bugs.webkit.org/show_bug.cgi?id=39854

        Mac port is currently the only port relying on a style to be present on the start
        of a selection to consider the style as applied or not. All other ports
        have to have the style present in all text node of the selection for such.

        Patch makes situations that depend on this check like this to be controlled by
        the EditingBehavior class.

        Refactoring, so no new tests needed.

        * editing/EditingBehavior.h:
        (WebCore::EditingBehavior::shouldToggleStyleBasedOnStartOfSelection):
        * editing/EditorCommand.cpp:
        (WebCore::executeToggleStyle):

2010-07-08  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add stubbed out PluginView class
        https://bugs.webkit.org/show_bug.cgi?id=41879

        Export functions needed by WebKit2.

        * WebCore.exp.in:

2010-07-08  Ben Murdoch  <benm@google.com>

        Reviewed by Pavel Feldman.

        Fix build break in V8ConsoleCustom.cpp
        https://bugs.webkit.org/show_bug.cgi?id=40825

        No new tests as just fixing a build break.

        * bindings/v8/custom/V8ConsoleCustom.cpp: Guard profilesAccessorGetter
            appropriately.

2010-07-08  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Pass Page to BackForwardControllerClient::createBackForwardList since it
        may be called before implementations of BackForwardControllerClient have
        access to a Page.

        * history/BackForwardController.cpp:
        (WebCore::BackForwardController::BackForwardController):
        * history/BackForwardControllerClient.h:

2010-07-08  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r62778.
        http://trac.webkit.org/changeset/62778
        https://bugs.webkit.org/show_bug.cgi?id=41866

        Broke svg/W3C-SVG-1.1/text-intro-05-t.svg in debug (Requested
        by pfeldman on #webkit).

        * platform/graphics/chromium/FontLinux.cpp:
        (WebCore::TextRunWalker::TextRunWalker):
        (WebCore::TextRunWalker::~TextRunWalker):

2010-07-08  Vitaly Repeshko  <vitalyr@chromium.org>

        Reviewed by Pavel Feldman.

        Fix adoptRef usage violation in IDBObjectStoreRequest
        https://bugs.webkit.org/show_bug.cgi?id=41869

        * storage/IDBObjectStoreRequest.cpp:
        (WebCore::IDBObjectStoreRequest::IDBObjectStoreRequest):

2010-07-08  Sam Weinig  <sam@webkit.org>

        Another chromium build fix.

        * history/BackForwardListChromium.cpp:
        (WebCore::BackForwardListImpl::goBack):
        (WebCore::BackForwardListImpl::goForward):
        (WebCore::BackForwardListImpl::backListWithLimit):
        (WebCore::BackForwardListImpl::forwardListWithLimit):
        (WebCore::BackForwardListImpl::containsItem):
        (WebCore::BackForwardListImpl::removeItem):

2010-07-08  Sam Weinig  <sam@webkit.org>

        Fix Chromium build.

        * WebCore.gyp/WebCore.gyp:

2010-07-08  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=41826
        Convert BackForwardList to an abstract base class and add BackForwardListImpl
        as the concrete implementation of it.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.exp.in:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * history/BackForwardController.cpp:
        (WebCore::BackForwardController::BackForwardController):
        * history/BackForwardController.h:
        * history/BackForwardList.cpp: Removed.
        * history/BackForwardList.h:
        (WebCore::BackForwardList::~BackForwardList):
        (WebCore::BackForwardList::isBackForwardListImpl):
        (WebCore::BackForwardList::BackForwardList):
        * history/BackForwardListChromium.cpp:
        * history/BackForwardListImpl.cpp: Copied from WebCore/history/BackForwardList.cpp.
        * history/BackForwardListImpl.h: Copied from WebCore/history/BackForwardList.h.
        (WebCore::BackForwardListImpl::isBackForwardListImpl):

2010-07-08  Vitaly Repeshko  <vitalyr@chromium.org>

        Reviewed by Pavel Feldman.

        Fix adoptRef usage violations (mostly in chromium)
        https://bugs.webkit.org/show_bug.cgi?id=41863

        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::wrapNativeNodeFilter):
        * bindings/v8/V8NodeFilterCondition.h:
        (WebCore::V8NodeFilterCondition::create):
        * bindings/v8/custom/V8HTMLAllCollectionCustom.cpp:
        (WebCore::getNamedItems):
        * bindings/v8/custom/V8HTMLCollectionCustom.cpp:
        (WebCore::getNamedItems):
        * bindings/v8/custom/V8HTMLFormElementCustom.cpp:
        (WebCore::V8HTMLFormElement::namedPropertyGetter):
        * bindings/v8/custom/V8HTMLSelectElementCustom.cpp:
        (WebCore::V8HTMLSelectElement::namedPropertyGetter):
        * bindings/v8/custom/V8NamedNodesCollection.h:
        (WebCore::V8NamedNodesCollection::create):
        (WebCore::V8NamedNodesCollection::V8NamedNodesCollection):
        * storage/IDBDatabaseRequest.cpp:
        (WebCore::IDBDatabaseRequest::IDBDatabaseRequest):
        * storage/IndexedDatabaseRequest.cpp:
        (WebCore::IndexedDatabaseRequest::IndexedDatabaseRequest):

2010-07-08  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Silence a few noisy build rules.

        * GNUmakefile.am:

2010-07-08  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Canvas putImageData() resets painter state
        https://bugs.webkit.org/show_bug.cgi?id=41827

        Use drawImage() to copy pixels in putImageData() instead of QPixmap::operator=

        Test: fast/canvas/canvas-state-intact-after-putImageData.html

        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::putImageData):

2010-07-08  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Do not invoke shortcuts popup upon bare '?' if it's typed
        into an input field.
        https://bugs.webkit.org/show_bug.cgi?id=41760

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

2010-07-08  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Kent Tamura.

        [WINCE] Buildfix for EventHandler
        https://bugs.webkit.org/show_bug.cgi?id=41829

        SM_MENUDROPALIGNMENT isn't supported on WinCE.

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

2010-07-08  Xiaomei Ji  <xji@chromium.org>

        Reviewed by David Levin.

        Fix characters with unicode-bidi-mirror property are not correctly
        mirrored in Linux.
        https://bugs.webkit.org/show_bug.cgi?id=41305

        Since harfbuzz does not do mirroring, chromium should iterate each
        character in the string and mirror it if needed before passing the
        string to harfbuzz for shaping.

        Test: fast/text/international/bidi-mirror-he-ar.html

        * platform/graphics/chromium/FontLinux.cpp:
        (WebCore::TextRunWalker::TextRunWalker):
        (WebCore::TextRunWalker::~TextRunWalker):

2010-07-08  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Rob Buis & Dirk Schulze.

        SVG text transformed incorrectly when a transform and gradient applied
        https://bugs.webkit.org/show_bug.cgi?id=41563

        When rendering filled/stroked text with a gradient, RenderSVGResourceGradient creates a mask image,
        renders the text into the image, and then clips the current context against that image buffer,
        and filling a rect afterwards. This happened in the wrong coordinate space so far. Don't actually
        try to compute the right transformation matrix (which failed), but extract it directly from the
        GraphicsContext and apply this transformation to the mask image context.

        Fixes pixellation in svg/batik/text/textEffect3.svg and makes the new test svg/custom/text-rotated-gradient.svg pass.
        Only affects CoreGraphics platforms.

        Test: svg/custom/text-rotated-gradient.svg

        * rendering/RenderSVGResourceGradient.cpp:
        (WebCore::absoluteTransformFromContext):
        (WebCore::createMaskAndSwapContextForTextGradient):
        (WebCore::clipToTextMask):

2010-07-07  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Darin Fisher.

        [Chromium] Crash when re-entering message loop
        https://bugs.webkit.org/show_bug.cgi?id=41697

        A Chromium-specific test case will be submitted into Chromium shortly.

        * page/PageGroupLoadDeferrer.cpp:
        (WebCore::PageGroupLoadDeferrer::PageGroupLoadDeferrer):
        * page/PageGroupLoadDeferrer.h:
        (WebCore::PageGroupLoadDeferrer::nextDeferrer):

2010-07-07  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: skip breakpoints when script is already paused
        https://bugs.webkit.org/show_bug.cgi?id=41768

        Test: inspector/debugger-no-nested-pause.html

        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::handleV8DebugEvent):

2010-07-08  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        WebCore/benchmarks/parser/html-parser.html spends a lot of time in deprecatedParseURL
        https://bugs.webkit.org/show_bug.cgi?id=41807

        Wow.  This was an awful bug.  We were always taking the slow case
        every time we parsed a URL.  This is about a 10% speedup on our
        parsing benchmark, and might cause as much as a 1% speedup for Apple's
        PLT (even though I can't run that).

        We still spend a lot of time in deprecatedParseURL.  We might consider
        inlining it if its being kept around much longer.

        No behavioral change, just fixing a broken optimization.

        * css/CSSHelper.cpp:
        (WebCore::deprecatedParseURL):
         - We only need to strip characters <= '\r', not >.

2010-07-08  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: factor out common part of debugger tests
        https://bugs.webkit.org/show_bug.cgi?id=41836

        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::recompileAllJSFunctions): postpone script recompilation if JS stack is not empty.

2010-07-08  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Kent Tamura.

        Buildfix for !ENABLE(SVG_ANIMATION) after r51567.
        https://bugs.webkit.org/show_bug.cgi?id=41803

        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::sampleAnimationAtTime):

2010-07-07  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Nate Chapin.

        [V8] Fix document wrapper memory leak in bindings.
        https://bugs.webkit.org/show_bug.cgi?id=41771

        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        (WebCore::V8HTMLDocument::WrapInShadowObject): Do not create static persistent handle
        to shadowConstructor because it keeps the first context alive forever.

2010-07-07  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Enable smooth pixmap transforms by default
        https://bugs.webkit.org/show_bug.cgi?id=41774

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

2010-07-07  Jesus Sanchez-Palencia  <jesus@webkit.org>

        Reviewed by Antti Koivisto.

        [Qt] Missing include to build QtWebKit with WebKit2 in MediaPlayerPrivatePhonon.cpp
        https://bugs.webkit.org/show_bug.cgi?id=41767

        * platform/graphics/qt/MediaPlayerPrivatePhonon.cpp: Add Logging.h include

2010-07-07  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Move v8-related script offset conversion to DebuggerScript.js
        https://bugs.webkit.org/show_bug.cgi?id=41755

        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::dispatchDidParseSource):

2010-07-07  Nicolas Weber  <thakis@chromium.org>

        Reviewed by Dimitri Glazkov.
        https://bugs.webkit.org/show_bug.cgi?id=41580

        Fix rendering of radial gradients in skia if both points of the
        gradient are the same and r0 > 0.

        Test: fast/gradients/radial-centered.html

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

2010-06-18  MORITA Hajime  <morrita@google.com>

        Reviewed by Ojan Vafai.

        https://bugs.webkit.org/show_bug.cgi?id=26526
        Add support for input events (oninput) to contentEditable elements
        
        Made a default event handler on the Node to dispatch an input event when
        webkitEditableContentChanged arrived.
        
        Test: fast/events/event-input-contentEditable.html

        * dom/Node.cpp:
        (WebCore::Node::defaultEventHandler):

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

        Reviewed by Anders Carlsson.

        Fix adoptRef assertion failures caused by stack-allocated ResourceHandle objects
        https://bugs.webkit.org/show_bug.cgi?id=41823

        * platform/network/android/ResourceHandleAndroid.cpp:
        (WebCore::ResourceHandle::loadResourceSynchronously): Use adoptRef and new instead
        of allocating an object on the stack.
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::loadResourceSynchronously): Ditto.
        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::loadResourceSynchronously): Ditto.

        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::ResourceHandle::loadResourceSynchronously): Use create instead of
        allocating an object on the stack.

2010-07-07  Joseph Pecoraro  <joepeck@webkit.org>

        Rubber-stamped by Pavel Feldman.

        Web Inspector: All RefPtr arguments and return values should be changed to PassRefPtr according to common practice.
        https://bugs.webkit.org/show_bug.cgi?id=41759

        * inspector/CodeGeneratorInspector.pm:

2010-07-07  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        AX: TextArea should return AXSelectedTextRange of 0,0 if the cursor is not in the text area
        https://bugs.webkit.org/show_bug.cgi?id=41810

        Test: platform/mac/accessibility/selected-text-range-for-empty-textarea.html

        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:]):

2010-07-07  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        AX: Data table heuristics: assume data table if at least one row or column of TH cells exist
        https://bugs.webkit.org/show_bug.cgi?id=41806

        Test: platform/mac/accessibility/table-with-row-col-of-headers.html

        * accessibility/AccessibilityTable.cpp:
        (WebCore::AccessibilityTable::isTableExposableThroughAccessibility):

2010-07-07  Mark Rowe  <mrowe@apple.com>

        Fix the build.

        Xcode decided to change the reference type from "Relative to Build Product" to "Relative to Group"
        when I moved the file between folders. That's incredibly confusing so I'll file a bug against Xcode.

        * WebCore.xcodeproj/project.pbxproj:

2010-07-07  Mark Rowe  <mrowe@apple.com>

        Fix the MathML build.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::resetInsertionModeAppropriately): Fix a typo in a variable name.

2010-07-07  James Hawkins  <jhawkins@chromium.org>

        Reviewed by Dimitri Glazkov.

        Move setSuggestedValue() and suggestedValue() back to public as it's
        now used by WebInputElement.
        https://bugs.webkit.org/show_bug.cgi?id=41785

        No new tests, as the method is only being used by Chromium's WebKit
        API.

        * html/HTMLInputElement.h:

2010-07-07  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Sam Weinig.

        Clean up the project file slightly.

        Remove obsolete .exp files, add the new .exp.in file, and move ExportFileGenerator.cpp in to the Exports collection.

        * WebCore.xcodeproj/project.pbxproj:

2010-07-07  James Robinson  <jamesr@chromium.org> and Vincent Scheib <schieb@chromium.org>

        Reviewed by Dimitri Glazkov.

        WebCore::GLES2Context should allow creating onscreen and offscreen contexts
        https://bugs.webkit.org/show_bug.cgi?id=41492

        You should be able to create a GLES2Context for rendering both on screen
        and off screen (to a texture).  Chromium's layer renderer (used for compositing)
        does the former.  Currently WebGL does the latter by side stepping the
        WebCore::GLES2Context API completely.  Longer term it should move over to using this.

        * platform/chromium/GLES2Context.h:
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::initGL):

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

        Reviewed by Dan Bernstein.

        Document::ownerElement() should return an HTMLFrameOwnerElement
        https://bugs.webkit.org/show_bug.cgi?id=41789

        Change return type of RenderLayerCompositor::enclosingIFrameElement() to
        HTMLFrameOwnerElement*. No behavioral changes.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::shouldPropagateCompositingToEnclosingIFrame):
        (WebCore::RenderLayerCompositor::enclosingIFrameElement):
        * rendering/RenderLayerCompositor.h:

2010-07-07  Adam Barth  <abarth@webkit.org>

        Reviewed by Sam Weinig.

        Add reverseFind to Vector and deploy in HTML5 parser
        https://bugs.webkit.org/show_bug.cgi?id=41778

        This patch moves reverseFind from begin an
        HTMLFormattingElementList-specific concept to begin a general Vector
        concept.  Also, instead of using Entry as the type for operator==, we
        now use elements directly.  The old code compiled because the Entry
        constructor wasn't explicit, which means we were churning refs on every
        comparison!

        * html/HTMLFormattingElementList.cpp:
        (WebCore::HTMLFormattingElementList::find):
        (WebCore::HTMLFormattingElementList::bookmarkFor):
        (WebCore::HTMLFormattingElementList::insertAt):
        (WebCore::HTMLFormattingElementList::remove):
        * html/HTMLFormattingElementList.h:
        (WebCore::HTMLFormattingElementList::Entry::operator==):
        (WebCore::HTMLFormattingElementList::Entry::operator!=):

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

        Reviewed by Adam Barth.

        Turn on adoptRef assertion for RefCounted
        https://bugs.webkit.org/show_bug.cgi?id=41547

        The WebCore part of this fixes all the assertions I saw in testing.

        * html/FileReader.cpp:
        (WebCore::FileReader::readAsBinaryString): Added null checks.
        Callers from JavaScript can pass the wrong type, which becomes null.
        (WebCore::FileReader::readAsText): Ditto.
        (WebCore::FileReader::readAsDataURL): Ditto.

        * html/FileStreamClient.h: Removed unneeded include.

        * html/FileStreamProxy.cpp:
        (WebCore::FileStreamProxy::FileStreamProxy): Made inline and moved
        some of the code, including the ref, into the create function.
        (WebCore::FileStreamProxy::create): Moved some of the code from
        the constructor here. It's safe to ref once the object has been
        created and adopted.

        * html/FileStreamProxy.h: Changed create function to no longer be
        inlined. Also removed an unneeded include.

        * page/EventSource.cpp:
        (WebCore::EventSource::EventSource): Made inline, changed arguments
        and moved code that involves the need to ref this object into the
        create function. Also moved failure handling out there since it's
        cleaner to have a function that fails than a constructor. For
        example, the function can return 0.
        (WebCore::EventSource::create): Moved some of the code from the
        constructor here.

        * page/EventSource.h: Removed unneeded includes. Made the
        creation function non-inline. Changed the arguments to the constructor.

        * storage/StorageAreaSync.cpp:
        (WebCore::StorageAreaSync::StorageAreaSync): Made inline. Moved
        code that requires ref'ing this object out to the create function.
        (WebCore::StorageAreaSync::create): Moved some of the code from the
        constructor here.

        * storage/StorageAreaSync.h: Removed unneeded includes. Changed
        the type of one of the constructor arguments from String to
        const String&.

        * workers/SharedWorker.cpp:
        (WebCore::SharedWorker::SharedWorker): Made inline. Moved most of
        the setup code out of here into the create function.
        (WebCore::SharedWorker::create): Moved the code here.

        * workers/SharedWorker.h: Removed unneeded includes. Made the
        create function non-inline. Marked the toSharedWorker override private
        to catch people doing an unnecessary virtual function call if they
        already have a SharedWorker*.

        * workers/Worker.cpp:
        (WebCore::Worker::Worker): Made inline. Moved most of the setup code
        out of here into the create function.
        (WebCore::Worker::create): Moved the code here.

        * workers/Worker.h: Made the create function non-inline. Changed
        the arguments to the constructor.

2010-07-07  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        AX: when a node's role changes, the AX tree might need to be updated
        https://bugs.webkit.org/show_bug.cgi?id=41784

        Test: platform/mac/accessibility/update-children-when-aria-role-changes.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::AccessibilityRenderObject):
        (WebCore::AccessibilityRenderObject::updateAccessibilityRole):

2010-07-07  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        AX: when an element uses role="text" but no aria-label, it should default to textUnderElement()
        https://bugs.webkit.org/show_bug.cgi?id=41780

        Test: platform/mac/accessibility/static-text-role-uses-text-under-element.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::stringValue):
           Fallback to textUnderElement() if text() does not return any explicitly set text.
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnored): 
           Remove erroneous check to ignore text elements that didn't have a explicit text value.

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

        Reviewed by Darin Adler.

        Document::ownerElement() should return an HTMLFrameOwnerElement
        https://bugs.webkit.org/show_bug.cgi?id=41789

        Change the return type of Document::ownerElement() to an HTMLFrameOwnerElement, for better
        type checking. No behavioral changes.

        * accessibility/mac/AccessibilityObjectWrapper.mm:
        * dom/Document.cpp:
        (WebCore::Document::ownerElement):
        * dom/Document.h:
        * editing/SelectionController.cpp:
        * rendering/RenderBoxModelObject.cpp:
        * rendering/RenderLayer.cpp:
        * rendering/RenderView.cpp:

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

        Reviewed by Dan Bernstein.

        REGRESSION: GMail becomes blank after closing other tabs
        https://bugs.webkit.org/show_bug.cgi?id=40421

        RenderLayerCompositor's attach/detachRootPlatformLayer methods use
        setNeedsStyleRecalc() in order to trigger acclerated compositing layers
        to be hooked together across iframe boundaries. However, it was possible
        for these to get called while inside of Document::recalcStyle(), which
        is bad because it can cause the recalc to fail to get processed.
        
        Fix this by using the existing queuePostAttachCallback() functionality
        to delay the call to setNeedsStyleRecalc() if post-attach callbacks 
        are suspended (indicating that we're inside recalcStyle()).
        
        No new tests because I wasn't able to make a test that shows the problem.

        * dom/ContainerNode.h: Make queuePostAttachCallback() public.
        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::postAttachCallbacksAreSuspended): Added; returns
        whether s_attachDepth is non-zero.

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::attachRootPlatformLayer): Call scheduleNeedsStyleRecalc()
        instead of setNeedsStyleRecalc().
        (WebCore::RenderLayerCompositor::detachRootPlatformLayer): Ditto.
        (WebCore::needsStyleRecalcCallback): Here we call setNeedsStyleRecalc().
        (WebCore::RenderLayerCompositor::scheduleNeedsStyleRecalc):
        (WebCore::RenderLayerCompositor::notifyIFramesOfCompositingChange):
        * rendering/RenderLayerCompositor.h: Add scheduleNeedsStyleRecalc().

2010-07-06  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Incorrect compositing order with negative z-index
        https://bugs.webkit.org/show_bug.cgi?id=38959
        
        When painting the contents of compositing layers whose phase is "GraphicsLayerPaintBackground"
        (indicating that they are used for the background of elements with negative z-index children),
        we need to paint the non-composited negative-z-order descendants at the end of the background phase, so
        they appear behind composited negative-z-order descendants.

        Test: compositing/z-order/negative-z-index.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintIntoLayer):

2010-07-06  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Incorrect compositing order with negative z-index
        https://bugs.webkit.org/show_bug.cgi?id=38959

        Prerequisite: adopt new paintList() method that was added when painting compositing layer contents.
        No behavioral changes.

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintIntoLayer):

2010-07-07  Adam Barth  <abarth@webkit.org>

        Unreviewed.

        Fix ASSERT in Eric's previous patch.  I think he tested his patch in
        Release and not Debug.

        * html/HTMLFormattingElementList.h:
        (WebCore::HTMLFormattingElementList::Entry::Entry):
        (WebCore::HTMLFormattingElementList::findIndex):

2010-07-07  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Grease the TreeBuilder's lightning
        https://bugs.webkit.org/show_bug.cgi?id=41756

        Brings the new TreeBuilder from 7s to 3s on the parser benchmark.
        This makes performance comparable to the old parser.

        We have not begun to fight!  There is so much fat left on these bones.

        * html/HTMLFormattingElementList.cpp:
        (WebCore::HTMLFormattingElementList::find):
        (WebCore::HTMLFormattingElementList::bookmarkFor):
        (WebCore::HTMLFormattingElementList::insertAt):
        (WebCore::HTMLFormattingElementList::remove):
        * html/HTMLFormattingElementList.h:
        (WebCore::HTMLFormattingElementList::findIndex):

2010-07-07  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        HTMLTreeBuilder is way too slow
        https://bugs.webkit.org/show_bug.cgi?id=41754

        This takes us from 14s to 7s on our parsing benchmark.
        That's still much slower than the old tree builder, but there
        is a huge amount of fat left to trim.

        Vector<T> wasn't able to inline all the Entry functions when
        they were buried in the cpp.  Turns out the active formatting elements
        list is very hot.

        I'm not sure Vector<T> is going to be the right data structure for us
        in the end, but it has done alright for bring-up.

        * html/HTMLFormattingElementList.cpp:
        * html/HTMLFormattingElementList.h:
        (WebCore::HTMLFormattingElementList::Entry::Entry):
        (WebCore::HTMLFormattingElementList::Entry::~Entry):
        (WebCore::HTMLFormattingElementList::Entry::isMarker):
        (WebCore::HTMLFormattingElementList::Entry::element):
        (WebCore::HTMLFormattingElementList::Entry::replaceElement):
        (WebCore::HTMLFormattingElementList::Entry::operator==):
        (WebCore::HTMLFormattingElementList::Entry::operator!=):

2010-07-06  Darin Adler  <darin@apple.com>

        Reviewed by Adam Barth.

        More OwnPtr work, including making clear set the pointer to 0 before deletion
        https://bugs.webkit.org/show_bug.cgi?id=41727

        * WebCore.exp.in: Updated.

        * css/CSSSelector.h:
        (WebCore::CSSSelector::RareData::RareData): Use adoptPtr.
        (WebCore::CSSSelector::createRareData): Ditto.
        * dom/SpaceSplitString.h:
        (WebCore::SpaceSplitString::SpaceSplitString): Ditto.
        (WebCore::SpaceSplitString::set): Ditto.
        * history/CachedFrame.cpp:
        (WebCore::CachedFrame::CachedFrame): Ditto.
        (WebCore::CachedFrame::setCachedFramePlatformData): Ditto.

        * history/CachedFrame.h: Use PassOwnPtr.

        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::CallCacheListenerTask::create): Use adoptPtr.
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::storeCopyOfCache): Ditto.
        * platform/PurgeableBuffer.h:
        (WebCore::PurgeableBuffer::create): Ditto.
        * platform/graphics/GlyphMetricsMap.h:
        (WebCore::::locatePageSlowCase): Ditto.
        * platform/graphics/GraphicsLayer.h:
        (WebCore::AnimationValue::AnimationValue): Ditto.
        (WebCore::TransformAnimationValue::TransformAnimationValue): Ditto.
        * platform/graphics/MediaPlayer.h:
        (WebCore::MediaPlayer::create): Ditto.
        * platform/graphics/SimpleFontData.h:
        (WebCore::SimpleFontData::boundsForGlyph): Ditto.
        * platform/mac/PurgeableBufferMac.cpp:
        (WebCore::PurgeableBuffer::create): Ditto.
        * rendering/InlineFlowBox.h:
        (WebCore::InlineFlowBox::setHorizontalOverflowPositions): Ditto.
        (WebCore::InlineFlowBox::setVerticalOverflowPositions): Ditto.
        * rendering/RootInlineBox.h:
        (WebCore::RootInlineBox::floats): Ditto.
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::inheritAnimations): Ditto.
        (WebCore::InheritedFlags::inheritTransitions): Ditto.

        * rendering/style/SVGRenderStyleDefs.h: Use PassOwnPtr.

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

        Reviewed by Anders Carlsson.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=41772
        Add basic piping for BackForwardControllerClient.

        * WebCore.exp.in:
        * WebCore.xcodeproj/project.pbxproj:
        * history/BackForwardController.cpp:
        (WebCore::BackForwardController::BackForwardController):
        * history/BackForwardControllerClient.h:
        * page/Page.cpp:
        (WebCore::Page::Page):
        * page/Page.h:
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged):

2010-07-07  Lucas De Marchi  <lucas.demarchi@profusion.mobi>

        Unreviewed build fix after r62577.

        [EFL] build fix after r62577
        https://bugs.webkit.org/show_bug.cgi?id=41764

        No new functionality so no new tests.

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

        Reviewed by Xan Lopez.

        [GTK] Scrollbars sometimes go dead and stop scrolling the view
        https://bugs.webkit.org/show_bug.cgi?id=41711

        Rework the setGtkAdjustment function slightly, make it have an
        early return, and be more readable.

        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::setGtkAdjustments):

2010-07-07  Kristian Monsen  <kristianm@google.com>

        Reviewed by Steve Block.

        Updating Android to use the UserGestureIndicator class instead of Android specific code.
        The rest of the changes are in parts of the Android port which are yet to be upstreamed.

        No change in behavior, so no new test.

        * platform/network/android/ResourceRequest.h:
        (WebCore::ResourceRequest::ResourceRequest):
        (WebCore::ResourceRequest::doUpdateResourceRequest):

2010-07-07  Andy Estes  <aestes@apple.com>

        Reviewed by Adam Barth.

        Allow a beforeload listener to prevent loading of images in <object> tags.
        https://bugs.webkit.org/show_bug.cgi?id=41027
        <rdar://problem/8120596>

        Tests: fast/dom/beforeload/image-object-before-load-innerHTML.html
               fast/dom/beforeload/image-object-before-load.html

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::attach): Do not call
        RenderImage::setCachedImage() at the end of attach(). Instead, allow
        this to happen conditionally after beforeload is dispatched.
        * loader/ImageLoader.cpp:
        (WebCore::ImageLoader::dispatchPendingBeforeLoadEvent): Render fallback
        content if an object's load was cancelled.

2010-07-06  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        <use> on <font-face> causes crashes, if SVGUseElement gets detached
        https://bugs.webkit.org/show_bug.cgi?id=41621

        Do not call removeFromMappedElementSheet() from the SVGFontFaceElement destructor,
        as that can potentially cause the element to be reattached while destructing.

        In order to fix the crash in the testcase, the order of calling the base-class detach
        method in SVGUseElement and the instance/shadow tree destruction has to be reversed,
        matching the order in removedFromDocument().

        Test: svg/custom/use-font-face-crash.svg

        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::~SVGFontFaceElement): Remove removeFromMappedElementSheet() call.
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::detach): Reverse order of calling base-class detach method and instance/shadow tree destruction.

2010-07-07  Steve Block  <steveblock@google.com>

        Reviewed by Adam Barth.

        document.createEvent() should support DeviceOrientationEvent
        https://bugs.webkit.org/show_bug.cgi?id=41618

        Tests: fast/dom/DeviceOrientation/create-event.html

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

2010-07-07  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: show functions from internal browser scripts on the call stack if they
        are there.
        https://bugs.webkit.org/show_bug.cgi?id=41762

        * English.lproj/localizedStrings.js:
        * inspector/front-end/CallStackSidebarPane.js:
        (WebInspector.CallStackSidebarPane.prototype.update):

2010-07-07  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: All RefPtr arguments and return values should be
        changed to PassRefPtr whenever it is possible according to common practice.
        https://bugs.webkit.org/show_bug.cgi?id=41759

        * inspector/CodeGeneratorInspector.pm:
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::pushGCEventRecords):
        (WebCore::InspectorTimelineAgent::didInstallTimer):
        (WebCore::InspectorTimelineAgent::didRemoveTimer):
        (WebCore::InspectorTimelineAgent::didScheduleResourceRequest):
        (WebCore::InspectorTimelineAgent::willSendResourceRequest):
        (WebCore::InspectorTimelineAgent::didFinishLoadingResource):
        (WebCore::InspectorTimelineAgent::didMarkTimeline):
        (WebCore::InspectorTimelineAgent::didMarkDOMContentEvent):
        (WebCore::InspectorTimelineAgent::didMarkLoadEvent):
        (WebCore::InspectorTimelineAgent::addRecordToTimeline):
        (WebCore::InspectorTimelineAgent::setHeapSizeStatistic):
        (WebCore::InspectorTimelineAgent::pushCurrentRecord):
        * inspector/InspectorTimelineAgent.h:
        (WebCore::InspectorTimelineAgent::TimelineRecordEntry::TimelineRecordEntry):
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createGenericRecord):
        (WebCore::TimelineRecordFactory::createGCEventData):
        (WebCore::TimelineRecordFactory::createFunctionCallData):
        (WebCore::TimelineRecordFactory::createEventDispatchData):
        (WebCore::TimelineRecordFactory::createGenericTimerData):
        (WebCore::TimelineRecordFactory::createTimerInstallData):
        (WebCore::TimelineRecordFactory::createXHRReadyStateChangeData):
        (WebCore::TimelineRecordFactory::createXHRLoadData):
        (WebCore::TimelineRecordFactory::createEvaluateScriptData):
        (WebCore::TimelineRecordFactory::createMarkTimelineData):
        (WebCore::TimelineRecordFactory::createScheduleResourceRequestData):
        (WebCore::TimelineRecordFactory::createResourceSendRequestData):
        (WebCore::TimelineRecordFactory::createResourceReceiveResponseData):
        (WebCore::TimelineRecordFactory::createResourceFinishData):
        (WebCore::TimelineRecordFactory::createReceiveResourceData):
        (WebCore::TimelineRecordFactory::createPaintData):
        (WebCore::TimelineRecordFactory::createParseHTMLData):
        * inspector/TimelineRecordFactory.h:

2010-07-07  Antti Koivisto  <koivisto@iki.fi>

        Reviewed by Kenneth Rohde Christiansen.
        
        [Qt] Initial WebKit2 implementation
        https://bugs.webkit.org/show_bug.cgi?id=40233

        Export some event conversion functions needed for WebKit2.

        * platform/PlatformKeyboardEvent.h:
        * platform/qt/PlatformKeyboardEventQt.cpp:
        (WebCore::keyIdentifierForQtKeyCode):
        (WebCore::windowsKeyCodeForKeyEvent):

2010-07-06  Steve Block  <steveblock@google.com>

        Reviewed by Adam Barth.

        DeviceOrientationEventConstructor should be exposed at window.DeviceOrientationEvent
        https://bugs.webkit.org/show_bug.cgi?id=41685

        Test: fast/dom/Window/window-properties-device-orientation.html
              fast/dom/DeviceOrientation/window-property.txt

        * page/DOMWindow.idl:

2010-07-07  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r62645.
        http://trac.webkit.org/changeset/62645
        https://bugs.webkit.org/show_bug.cgi?id=41757

        "Broken inspector tests on several platforms" (Requested by
        eseidel on #webkit).

        * inspector/front-end/ScriptView.js:
        (WebInspector.ScriptView.prototype._addBreakpoint):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype._resourceLoadingFinished):
        (WebInspector.ScriptsPanel.prototype._breakpointAdded):
        (WebInspector.ScriptsPanel.prototype._scriptOrResourceForURLAndLine):
        (WebInspector.ScriptsPanel.prototype._showScriptOrResource):
        (WebInspector.ScriptsPanel.prototype._toggleBreakpointsClicked):
        * inspector/front-end/SourceView.js:
        (WebInspector.SourceView.prototype._addBreakpoint):

2010-07-07  Steve Block  <steveblock@google.com>

        Reviewed by Adam Barth.

        JavaInstanceV8 needs to push a local reference frame to avoid table overflow.
        https://bugs.webkit.org/show_bug.cgi?id=41516

        This change is required to help prevent the Java virtual machine from
        running out of local references. The Java virtual machine supports only
        a limited number of local references. Normally, local references are
        cleared when the native method returns.

        This change adds calls to PushLocalFrame() and PopLocalFrame() around
        each invocation of a method on JavaInstance. These calls instruct the
        virtual machine to clear local references when the frame is popped.
        This means that in the case where many calls to JavaInstance methods
        are made within the same native call, local references are cleared as
        soon as they are no longer needed, thus conserving references.

        This change mirrors exactly JavaInstanceJSC.

        No new tests.

        * bridge/jni/v8/JavaInstanceV8.cpp:
        (JavaInstance::virtualBegin):
        (JavaInstance::virtualEnd):
        * bridge/jni/v8/JavaInstanceV8.h:

2010-07-06  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Inspector should remember the size of sidebars set by the user
        https://bugs.webkit.org/show_bug.cgi?id=19207

        * inspector/front-end/AbstractTimelinePanel.js:
        (WebInspector.AbstractTimelinePanel):
        * inspector/front-end/AuditsPanel.js:
        (WebInspector.AuditsPanel):
        * inspector/front-end/ConsolePanel.js:
        (WebInspector.ConsolePanel):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.rightSidebarResizerDragEnd):
        * inspector/front-end/Panel.js:
        (WebInspector.Panel):
        (WebInspector.Panel.prototype.get toolbarItemClass):
        (WebInspector.Panel.prototype.show):
        (WebInspector.Panel.prototype.createSidebar):
        (WebInspector.Panel.prototype.get _sidebarWidthSettingName):
        (WebInspector.Panel.prototype._endSidebarDragging):
        (WebInspector.Panel.prototype.updateSidebarWidth):
        (WebInspector.Panel.prototype.restoreSidebarWidth):
        (WebInspector.Panel.prototype.saveSidebarWidth):
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel):
        (WebInspector.ResourcesPanel.prototype.resourceTrackingWasEnabled):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype._endSidebarResizeDrag):
        (WebInspector.ScriptsPanel.prototype._sidebarResizeDrag):
        (WebInspector.ScriptsPanel.prototype.setSidebarWidth):
        * inspector/front-end/Settings.js:
        (WebInspector.populateApplicationSettings):
        * inspector/front-end/StoragePanel.js:
        (WebInspector.StoragePanel):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel):

2010-07-05  Steve Block  <steveblock@google.com>

        Reviewed by Adam Barth.

        DeviceOrientation should be renamed to DeviceOrientationController
        https://bugs.webkit.org/show_bug.cgi?id=41608

        No new tests, renaming only.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/DeviceOrientation.cpp: Removed.
        * dom/DeviceOrientation.h: Removed.
        * dom/DeviceOrientationController.cpp: Copied from WebCore/dom/DeviceOrientation.cpp.
        (WebCore::DeviceOrientationController::DeviceOrientationController):
        (WebCore::DeviceOrientationController::onDeviceOrientationChange):
        * dom/DeviceOrientationController.h: Copied from WebCore/dom/DeviceOrientation.h.
        * page/Page.cpp:
        (WebCore::Page::Page):
        * page/Page.h:
        (WebCore::Page::deviceOrientationController):

2010-07-07  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: do not activate all breakpoints on page reload
        https://bugs.webkit.org/show_bug.cgi?id=41461

        Test: inspector/debugger-breakpoints-not-activated-on-reload.html

        * inspector/front-end/ScriptView.js:
        (WebInspector.ScriptView.prototype._addBreakpoint):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype._breakpointAdded):
        (WebInspector.ScriptsPanel.prototype.toggleBreakpointsClicked):
        * inspector/front-end/SourceView.js:
        (WebInspector.SourceView.prototype._addBreakpoint):

2010-07-07  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed. Rollout r62633 - test crashes after some last-minute modifications.

        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::~SVGFontFaceElement):

2010-07-07  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Fix </html> handling in before head mode
        https://bugs.webkit.org/show_bug.cgi?id=41752

        Covered by html5lib/runner.html.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processEndTag):

2010-07-07  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        </div> pops too many <div> elements in body
        https://bugs.webkit.org/show_bug.cgi?id=41751

        Another missing return!

        While tracking this down I added some debugging code to both the
        open elements stack and the active formatting elements list.

        I also unwrapped a very long || chain to make it more readable.

        * html/HTMLElementStack.cpp:
        (WebCore::HTMLElementStack::show):
        * html/HTMLElementStack.h:
        * html/HTMLFormattingElementList.cpp:
        (WebCore::HTMLFormattingElementList::show):
        * html/HTMLFormattingElementList.h:
        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processEndTagForInBody):

2010-07-06  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        HTMLTreeBuilder needs to handle <table><input>
        https://bugs.webkit.org/show_bug.cgi?id=41744

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTagForInTable):

2010-07-06  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Teach HTMLTreeBuilder how to handle <button><button>
        https://bugs.webkit.org/show_bug.cgi?id=41743

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTagForInBody):

2010-07-06  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Teach TreeBuilder how to handle <form><form>
        https://bugs.webkit.org/show_bug.cgi?id=41741

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTagForInBody):

2010-07-06  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        <table> should auto-close <p> when not in quirks mode
        https://bugs.webkit.org/show_bug.cgi?id=41740

        This is already covered by multiple tests in html5lib/runner.html

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTagForInBody):

2010-07-06  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Make "in body" character handling reconstruct active formatting elements
        https://bugs.webkit.org/show_bug.cgi?id=41739

        This fixes a bunch of tests, and due to some other bug in our
        formatting code, regresses two.  I'll fix that bug in a separate
        patch.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processCharacter):

2010-07-06  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Darin Adler.

        <use> on <font-face> causes crashes, if SVGUseElement gets detached
        https://bugs.webkit.org/show_bug.cgi?id=41621

        Do not call removeFromMappedElementSheet() from the destructor, as the call to document()->updateStyleSelector() that can potentially
        cause the element to be reattached while destructing. It's not needed at all, because removedFromDocument() is called before destruction,
        which already calls removeFromMappedElementSheet() - at this point it's still safe to update the style selector.

        The crash is reproducable when using <use> on <font-face>.

        Test: svg/custom/use-font-face-crash.svg

        * svg/SVGFontFaceElement.cpp:
        (WebCore::SVGFontFaceElement::~SVGFontFaceElement):

2010-07-07  Hayato Ito  <hayato@chromium.org>

        Reviewed by Darin Adler.

        Rolling out 'page-break-inside:avoid' part of the r54929.
        Rebased the related layout tests, which are now expected to fail, as well.

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

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

2010-07-07  Mark Rowe  <mrowe@apple.com>

        Fix failures in a handful of Java-related tests.

        * WebCore.exp.in: Remove an extraneous ENABLE_ from an #if so that the condition
        evalutes to true when we expect it to.

2010-07-06  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Joseph Pecoraro.

        Web Inspector: provide line numbers for inline styles.

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

        Test: inspector/styles-source-lines-inline.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseSheet):
        * css/CSSParser.h:
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::parseString):
        (WebCore::CSSStyleSheet::parseStringAtLine):
        * css/CSSStyleSheet.h:
        * dom/StyleElement.cpp:
        (WebCore::StyleElement::process):
        (WebCore::StyleElement::createSheet):
        * dom/StyleElement.h:
        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::HTMLStyleElement):
        (WebCore::HTMLStyleElement::finishParsingChildren):
        * html/HTMLStyleElement.h:
        * inspector/InspectorCSSStore.cpp:
        (WebCore::InspectorCSSStore::getRuleRangesForStyleSheet):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForRule):
        * inspector/front-end/DOMAgent.js:
        (WebInspector.CSSStyleDeclaration.parseRule):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertiesSection.else.linkifyUncopyable):
        (WebInspector.StylePropertiesSection):

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

        Reviewed by Jon Honeycutt.

        <rdar://problem/8163651> Wrong value type being supplied for kCTTypesetterOptionForcedEmbeddingLevel key

        No change in behavior, so no new test.

        * platform/graphics/mac/ComplexTextControllerCoreText.cpp:
        (WebCore::ComplexTextController::collectComplexTextRunsForCharactersCoreText): Use CFNumber instances
        as the values of the kCTTypesetterOptionForcedEmbeddingLevel key, instead of CFBooleans.

2010-07-06  Mark Rowe  <mrowe@apple.com>

        Fix production builds on Mac OS X.

        * DerivedSources.make: Don't try and generate the export file during the installhdrs build phase.
        It's not useful until much later in the build process, and it's not possible to generate it until
        after the tool has been compiled anyway.
        * WebCore.xcodeproj/project.pbxproj: Tweak how the ICU and forwarding headers are copied so that it
        works in production builds once more.

2010-07-06  Steve Falkenburg  <sfalken@apple.com>

        Reviewed by Simon Fraser.

        Expose URL matching from WebUserContentURLPattern
        https://bugs.webkit.org/show_bug.cgi?id=41726
        <rdar://problem/7910144>

        * WebCore.exp.in: Export UserContentURLPattern::matches for use in WebKit.

2010-07-06  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Fix <nobr><nobr> case in HTMLTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=41735

        We were both not handling <nobr> correctly, as well as
        never hitting the <nobr> case because our formatting
        elements check was overzealous.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTagForInBody):

2010-07-06  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Implement start table tag in table mode
        https://bugs.webkit.org/show_bug.cgi?id=41736

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTagForInTable):
        (WebCore::HTMLTreeBuilder::processTableEndTagForInTable):
        (WebCore::HTMLTreeBuilder::processEndTagForInTable):
        * html/HTMLTreeBuilder.h:

2010-07-06  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Implement "act as if the banana has been peeled" (for lack of a better term)
        https://bugs.webkit.org/show_bug.cgi?id=41734

        The spec has a tricky passage that says "whenever a node would be
        inserted into the current node, it must instead be foster parented."
        This patch attempts to implement that requirement.

        * html/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::attach):
        (WebCore::HTMLConstructionSite::HTMLConstructionSite):
        (WebCore::HTMLConstructionSite::insertHTMLHtmlElement):
        (WebCore::HTMLConstructionSite::insertHTMLHeadElement):
        (WebCore::HTMLConstructionSite::insertHTMLBodyElement):
        (WebCore::HTMLConstructionSite::insertScriptElement):
        (WebCore::HTMLConstructionSite::fosterParent):
        * html/HTMLConstructionSite.h:
        (WebCore::HTMLConstructionSite::RedirectToFosterParentGuard::RedirectToFosterParentGuard):
        (WebCore::HTMLConstructionSite::RedirectToFosterParentGuard::~RedirectToFosterParentGuard):
        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTagForInTable):
        (WebCore::HTMLTreeBuilder::processEndTagForInTable):
        * html/HTMLTreeBuilder.h:

2010-07-06  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Fix </optgroup> in "in select" mode
        https://bugs.webkit.org/show_bug.cgi?id=41733

        I had to add a oneBelowTop() accessor.
        I added some ASSERTs after looking at the fragment case
        documentation.  I'm now convinced that top() and oneBeforeTop()
        should never be NULL, so we just ASSERT they aren't.

        This is a very obscure corner of the HTML spec, but at least
        we have a test for it.  This makes one more html5lib test pass.

        * html/HTMLConstructionSite.h:
        (WebCore::HTMLConstructionSite::oneBelowTop):
        * html/HTMLElementStack.cpp:
        (WebCore::HTMLElementStack::topRecord):
        (WebCore::HTMLElementStack::top):
        (WebCore::HTMLElementStack::oneBelowTop):
        * html/HTMLElementStack.h:
        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processEndTag):

2010-07-06  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Fix "in row" "Anything else" handling of end tags
        https://bugs.webkit.org/show_bug.cgi?id=41731

        I also fixed </br> handling to follow the spec more closely
        since it implementation was old and didn't use all our
        new processFake* hotness.

        This is already covered by 3 tests, however we don't
        pass them yet, due to lack of table foster parenting
        code (which Adam is working on as we speak).

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processEndTagForInBody):
        (WebCore::HTMLTreeBuilder::processEndTag):

2010-07-06  Mark Rowe  <mrowe@apple.com>

        Fix clean builds on Mac OS X.

        Since "Copy Forwarding and ICU Headers" was split in to a separate target
        from the WebCore framework it no longer had automatica access to the
        PRIVATE_HEADERS_FOLDER_PATH variable. This caused it to copy the header
        files in to the wrong location. Fix that by giving PRIVATE_HEADERS_FOLDER_PATH
        its correct value and ensuring that the path exists.

        * WebCore.xcodeproj/project.pbxproj:

2010-07-06  Sam Weinig  <sam@webkit.org>

        Fix Gtk build.

        * GNUmakefile.am:

2010-07-06  Mark Rowe  <mrowe@apple.com>

        Tiger build fix.

        Don't use WebCore's LDFLAGS when building WebCoreExportFileGenerator.

        * WebCore.xcodeproj/project.pbxproj:

2010-07-06  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        "In cell" does not correctly handle <td><tr> or <td><td>
        https://bugs.webkit.org/show_bug.cgi?id=41729

        This change is mostly cleanup to try and prevent forgetting
        tag name checks in the future by using inlines to reduce
        copy/paste code.

        3 little bugs in InCellMode:
         - Missing trTag from the long or statement (reason for the cleanup)
         - Used || instead of &&
         - Forgot to reprocess the tag after closeTheCell()

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTagForInBody):
        (WebCore::HTMLTreeBuilder::processStartTagForInTable):
        (WebCore::HTMLTreeBuilder::processStartTag):
        (WebCore::HTMLTreeBuilder::processEndTagForInTable):
        (WebCore::HTMLTreeBuilder::processEndTag):

2010-07-06  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Move fosterParent to HTMLConstructionSite
        https://bugs.webkit.org/show_bug.cgi?id=41728

        This paves the way for handling the default case of InTableMode
        properly.

        * html/HTMLConstructionSite.cpp:
        (WebCore::HTMLConstructionSite::fosterParent):
        * html/HTMLConstructionSite.h:
        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::callTheAdoptionAgency):

2010-07-06  Adam Barth  <abarth@webkit.org>

        Rubber-stamped by Eric Seidel.

        Move HTMLConstructionSite to its own file.  No behavior change.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLConstructionSite.cpp: Copied from WebCore/html/HTMLTreeBuilder.cpp.
        (WebCore::HTMLNames::hasImpliedEndTag):
        (WebCore::HTMLConstructionSite::attach):
        (WebCore::HTMLConstructionSite::HTMLConstructionSite):
        (WebCore::HTMLConstructionSite::~HTMLConstructionSite):
        (WebCore::HTMLConstructionSite::insertHTMLHtmlStartTagBeforeHTML):
        (WebCore::HTMLConstructionSite::mergeAttributesFromTokenIntoElement):
        (WebCore::HTMLConstructionSite::insertHTMLHtmlStartTagInBody):
        (WebCore::HTMLConstructionSite::insertHTMLBodyStartTagInBody):
        * html/HTMLConstructionSite.h: Copied from WebCore/html/HTMLTreeBuilder.h.
        * html/HTMLTreeBuilder.cpp:
        * html/HTMLTreeBuilder.h:

2010-07-06  Mark Rowe  <mrowe@apple.com>

        Build fix.

        The path to the generated file needs to be relative to the built product directory,
        not to the project file.

        * WebCore.xcodeproj/project.pbxproj:

2010-07-06  Mark Rowe  <mrowe@apple.com>

        Reviewed by Darin Adler.

        <http://webkit.org/b/41725> REGRESSION(r62283): No longer possible to build for Tiger from SnowLeopard due to export file shenanigans

        Change how the exports file is generated. Rather than having the logic for which symbols
        to include be encoded in a Makefile that concatenated separate files, the logic is now
        encoded as #if's in the base exports file. This ensures that the exact same preprocessor
        settings are used when determining which symbols to export as when compiling the code that
        defines the symbols.

        * DerivedSources.make: Remove logic that determines which export files to concatenate.
        Replace with an invocation of WebCoreExportFileGenerator.
        * WebCore.3DRendering.exp: Removed.
        * WebCore.AcceleratedCompositing.exp: Removed.
        * WebCore.ClientBasedGeolocation.exp: Removed.
        * WebCore.ContextMenus.exp: Removed.
        * WebCore.DashboardSupport.exp: Removed.
        * WebCore.DragSupport.exp: Removed.
        * WebCore.Geolocation.exp: Removed.
        * WebCore.Inspector.exp: Removed.
        * WebCore.JNI.exp: Removed.
        * WebCore.NPAPI.exp: Removed.
        * WebCore.OrientationEvents.exp: Removed.
        * WebCore.PluginHostProcess.exp: Removed.
        * WebCore.ProtectionSpaceAuthCallback.exp: Removed.
        * WebCore.SVG.Animation.exp: Removed.
        * WebCore.SVG.Filters.exp: Removed.
        * WebCore.SVG.ForeignObject.exp: Removed.
        * WebCore.SVG.exp: Removed.
        * WebCore.Tiger.exp: Removed.
        * WebCore.Video.exp: Removed.
        * WebCore.VideoProxy.exp: Removed.
        * WebCore.exp.in: Renamed from WebCore/WebCore.base.exp. Merge the individual .exp
        files in, wrapping the appropriate parts with the necessary #if's.
        * WebCore.xcodeproj/project.pbxproj:
        * make-exports-file-generator: Added.

2010-07-06  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=41723
        Add BackForwardController class

        - Add BackForwardController which currently only forwards to the existing
          BackForwardList implementation. This is a first step toward allowing
          for a proxying BackForwardList implementation.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.base.exp:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * history/BackForwardController.cpp: Added.
        (WebCore::BackForwardController::BackForwardController):
        (WebCore::BackForwardController::~BackForwardController):
        * history/BackForwardController.h: Added.
        (WebCore::BackForwardController::client):
        (WebCore::BackForwardController::list):
        * history/BackForwardControllerClient.h: Added.
        (WebCore::BackForwardControllerClient::~BackForwardControllerClient):
        * page/Page.cpp:
        (WebCore::Page::Page):
        (WebCore::Page::~Page):
        (WebCore::Page::backForwardList):
        (WebCore::Page::goBack):
        (WebCore::Page::goForward):
        (WebCore::Page::canGoBackOrForward):
        (WebCore::Page::goBackOrForward):
        (WebCore::Page::getHistoryLength):
        * page/Page.h:

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

        Unreviewed.

        Fixes regression on API test by disabling the scrollbars before
        configuring the adjustments.

        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::setGtkAdjustments):

2010-07-06  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Add support for <li>, <dd> and <dt> nested tag closing
        https://bugs.webkit.org/show_bug.cgi?id=41720

        li, dd, and dt have nearly identical logic in HTML5, so I
        attempted to make them share as much code as possible.

        This fixes a bunch of subtests for html5lib/runner.html

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processCloseWhenNestedTag):
        (WebCore::HTMLTreeBuilder::processStartTagForInBody):
        (WebCore::HTMLTreeBuilder::processAnyOtherEndTagForInBody):
        (WebCore::HTMLTreeBuilder::furthestBlockForFormattingElement):
        * html/HTMLTreeBuilder.h:

2010-07-06  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Factor HTMLConstructionSite out of HTMLTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=41716

        The HTMLContructionSite is the model object on which the
        HTMLTreeBuilder (a controller) acts.

        No behavior change.  I'll move this class into its own file in a
        followup patch.

        * html/HTMLFormattingElementList.h:
        (WebCore::HTMLFormattingElementList::at):
        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::HTMLTreeBuilder):
        (WebCore::HTMLConstructionSite::HTMLConstructionSite):
        (WebCore::HTMLTreeBuilder::passTokenToLegacyParser):
        (WebCore::HTMLTreeBuilder::processDoctypeToken):
        (WebCore::HTMLConstructionSite::insertHTMLHtmlStartTagBeforeHTML):
        (WebCore::HTMLConstructionSite::mergeAttributesFromTokenIntoElement):
        (WebCore::HTMLConstructionSite::insertHTMLHtmlStartTagInBody):
        (WebCore::HTMLConstructionSite::insertHTMLBodyStartTagInBody):
        (WebCore::HTMLTreeBuilder::processFakePEndTagIfPInScope):
        (WebCore::HTMLTreeBuilder::processIsindexStartTagForInBody):
        (WebCore::HTMLTreeBuilder::processStartTagForInBody):
        (WebCore::HTMLTreeBuilder::processColgroupEndTagForInColumnGroup):
        (WebCore::HTMLTreeBuilder::closeTheCell):
        (WebCore::HTMLTreeBuilder::processStartTagForInTable):
        (WebCore::HTMLTreeBuilder::processStartTag):
        (WebCore::HTMLTreeBuilder::processBodyEndTagForInBody):
        (WebCore::HTMLTreeBuilder::processAnyOtherEndTagForInBody):
        (WebCore::HTMLTreeBuilder::furthestBlockForFormattingElement):
        (WebCore::HTMLTreeBuilder::findFosterParentFor):
        (WebCore::HTMLTreeBuilder::callTheAdoptionAgency):
        (WebCore::HTMLTreeBuilder::resetInsertionModeAppropriately):
        (WebCore::HTMLTreeBuilder::processEndTagForInBody):
        (WebCore::HTMLTreeBuilder::processCaptionEndTagForInCaption):
        (WebCore::HTMLTreeBuilder::processTrEndTagForInRow):
        (WebCore::HTMLTreeBuilder::processEndTagForInTable):
        (WebCore::HTMLTreeBuilder::processEndTag):
        (WebCore::HTMLTreeBuilder::processComment):
        (WebCore::HTMLTreeBuilder::processCharacter):
        (WebCore::HTMLTreeBuilder::processEndOfFile):
        (WebCore::HTMLTreeBuilder::processDefaultForBeforeHTMLMode):
        (WebCore::HTMLTreeBuilder::processStartTagForInHead):
        (WebCore::HTMLConstructionSite::insertDoctype):
        (WebCore::HTMLConstructionSite::insertComment):
        (WebCore::HTMLConstructionSite::insertCommentOnDocument):
        (WebCore::HTMLConstructionSite::insertCommentOnHTMLHtmlElement):
        (WebCore::HTMLConstructionSite::createElementAndAttachToCurrent):
        (WebCore::HTMLConstructionSite::insertHTMLHtmlElement):
        (WebCore::HTMLConstructionSite::insertHTMLHeadElement):
        (WebCore::HTMLConstructionSite::insertHTMLBodyElement):
        (WebCore::HTMLConstructionSite::insertElement):
        (WebCore::HTMLConstructionSite::insertSelfClosingElement):
        (WebCore::HTMLConstructionSite::insertFormattingElement):
        (WebCore::HTMLTreeBuilder::processGenericRCDATAStartTag):
        (WebCore::HTMLTreeBuilder::processGenericRawTextStartTag):
        (WebCore::HTMLConstructionSite::insertScriptElement):
        (WebCore::HTMLTreeBuilder::processScriptStartTag):
        (WebCore::HTMLConstructionSite::insertTextNode):
        (WebCore::HTMLConstructionSite::createElement):
        (WebCore::HTMLTreeBuilder::indexOfFirstUnopenFormattingElement):
        (WebCore::HTMLTreeBuilder::reconstructTheActiveFormattingElements):
        (WebCore::HTMLTreeBuilder::generateImpliedEndTagsWithExclusion):
        (WebCore::HTMLTreeBuilder::generateImpliedEndTags):
        * html/HTMLTreeBuilder.h:
        (WebCore::HTMLConstructionSite::currentElement):
        (WebCore::HTMLConstructionSite::openElements):
        (WebCore::HTMLConstructionSite::activeFormattingElements):
        (WebCore::HTMLConstructionSite::head):
        (WebCore::HTMLConstructionSite::form):
        (WebCore::HTMLConstructionSite::releaseForm):
        (WebCore::HTMLConstructionSite::setForm):
        (WebCore::HTMLConstructionSite::fragmentScriptingPermission):
        (WebCore::HTMLConstructionSite::attach):

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

        Reviewed by Xan Lopez.

        [GTK] Scrollbars sometimes go dead and stop scrolling the view
        https://bugs.webkit.org/show_bug.cgi?id=41711

        Fixes GtkScrolledWindow scrollbars not actually scrolling the page
        in certain conditions. No tests because it is hard to reproduce,
        and depends on interaction with a widget that is outside of the
        WebView, which is tricky.

        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::setGtkAdjustments):

2010-07-06  Darin Adler  <darin@apple.com>

        Reviewed by Geoffrey Garen.

        Simplify access to element attribute map, removing unneeded functions
        https://bugs.webkit.org/show_bug.cgi?id=41703

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::canShareStyleWithElement): Use the
        attributeMap function instead of the mappedAttributes function.
        (WebCore::CSSStyleSelector::styleForElement): Ditto.

        * dom/Element.cpp:
        (WebCore::Element::~Element): Renamed namedAttrMap to m_attributeMap.
        (WebCore::Element::removeAttribute): Ditto.
        (WebCore::Element::getAttribute): Ditto.
        (WebCore::Element::setAttribute): Ditto.
        (WebCore::Element::setAttributeMap): Ditto.
        (WebCore::Element::hasAttributes): Ditto.
        (WebCore::Element::createAttributeMap): Ditto.
        (WebCore::Element::insertedIntoDocument): Ditto.
        (WebCore::Element::removedFromDocument): Ditto.
        (WebCore::Element::getURLAttribute): Ditto.

        * dom/Element.h: Removed unneeded virtual attributes function.
        Made read-only argument to attributes function default to false.
        (Later, we'll eliminate this.) Renamed namedAttrMap to m_attributeMap
        and made it private instead of protected.

        * dom/StyledElement.cpp:
        (WebCore::StyledElement::attributeChanged): Use attributeMap function
        instead of namedAttrMap data member or mappedAttributes function.
        (WebCore::StyledElement::classAttributeChanged): Ditto.
        (WebCore::StyledElement::parseMappedAttribute): Ditto.

        * dom/StyledElement.h: Removed mappedAttributes function and changed
        callers to use attributeMap function instead.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::setInputType): Use attributeMap instead of
        mappedAttributes.
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::getPresentationAttribute): Ditto.

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

        Reviewed by Sam Weinig.

        Add a build rule that removes the old generated Obj-C bindings for PluginArray and MimeTypeArray.

        * DerivedSources.make:

2010-07-06  Adam Barth  <abarth@webkit.org>

        Unreviewed.

        Make the remaining insertion modes explicit.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTag):
        (WebCore::HTMLTreeBuilder::processEndTag):
        (WebCore::HTMLTreeBuilder::processCharacter):
        (WebCore::HTMLTreeBuilder::processEndOfFile):

2010-07-06  Alexey Proskuryakov  <ap@apple.com>

        Not reviewed, fixing a simple copy/paste mistake.

        https://bugs.webkit.org/show_bug.cgi?id=41156
        Cross origin XMLHttpRequest should log the reason why connection failed

        Covered by xmlhttprequest/access-control-basic-non-simple-deny-cached.html

        * loader/CrossOriginPreflightResultCache.cpp:
        (WebCore::CrossOriginPreflightResultCacheItem::allowsCrossOriginHeaders): Fix incorrectly
        copy/pasted header field name.

2010-07-06  Xan Lopez  <xlopez@igalia.com>

        GTK+ fixes for the DOM plug-in renaming Apocalypse.

        * GNUmakefile.am:

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

        Yet another Windows build fix.

        * DerivedSources.cpp:

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

        Fix Windows build.

        * WebCore.vcproj/WebCore.vcproj:

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

        More build fixes.

        * WebCore.gypi:
        * WebCore.pro:

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

        Try to fix Qt build.

        * WebCore.pro:

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

        Attempt to fix GTK+ build.

        * GNUmakefile.am:

2010-07-06  Adam Barth  <abarth@webkit.org>

        Address reviewer comments from https://bugs.webkit.org/show_bug.cgi?id=41671

        Deploy isTableBodyContextTag where possible.  No behavior change.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTagForInBody):
        (WebCore::HTMLTreeBuilder::processStartTag):
        (WebCore::HTMLTreeBuilder::processEndTagForInTable):
        (WebCore::HTMLTreeBuilder::processEndTag):

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

        Build fixes.

        * WebCore.gypi:
        * bindings/js/JSBindingsAllInOne.cpp:

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

        Reviewed by Sam Weinig.

        DOM plug-in related renames
        https://bugs.webkit.org/show_bug.cgi?id=41709

        This is in preparation for using "Plugin" for something other than a DOM object.

        MimeType => DOMMimeType
        MimeTypeArray => DOMMimeTypeArray
        Plugin => DOMPlugin
        PluginArray => DOMPluginArray

        * CMakeLists.txt:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.pri:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMMimeTypeArrayCustom.cpp: Added.
        (WebCore::JSDOMMimeTypeArray::canGetItemsForName):
        (WebCore::JSDOMMimeTypeArray::nameGetter):
        * bindings/js/JSDOMPluginArrayCustom.cpp: Added.
        (WebCore::JSDOMPluginArray::canGetItemsForName):
        (WebCore::JSDOMPluginArray::nameGetter):
        * bindings/js/JSDOMPluginCustom.cpp: Added.
        (WebCore::JSDOMPlugin::canGetItemsForName):
        (WebCore::JSDOMPlugin::nameGetter):
        * bindings/js/JSMimeTypeArrayCustom.cpp: Removed.
        * bindings/js/JSPluginArrayCustom.cpp: Removed.
        * bindings/js/JSPluginCustom.cpp: Removed.
        * bindings/scripts/CodeGeneratorJS.pm:
        * page/DOMWindow.idl:
        * page/Navigator.cpp:
        (WebCore::Navigator::plugins):
        (WebCore::Navigator::mimeTypes):
        * page/Navigator.h:
        * page/Navigator.idl:
        * plugins/DOMMimeType.cpp: Added.
        (WebCore::DOMMimeType::DOMMimeType):
        (WebCore::DOMMimeType::~DOMMimeType):
        (WebCore::DOMMimeType::type):
        (WebCore::DOMMimeType::suffixes):
        (WebCore::DOMMimeType::description):
        (WebCore::DOMMimeType::enabledPlugin):
        * plugins/DOMMimeType.h: Added.
        (WebCore::DOMMimeType::create):
        (WebCore::DOMMimeType::mimeClassInfo):
        * plugins/DOMMimeType.idl: Added.
        * plugins/DOMMimeTypeArray.cpp: Added.
        (WebCore::DOMMimeTypeArray::DOMMimeTypeArray):
        (WebCore::DOMMimeTypeArray::~DOMMimeTypeArray):
        (WebCore::DOMMimeTypeArray::length):
        (WebCore::DOMMimeTypeArray::item):
        (WebCore::DOMMimeTypeArray::canGetItemsForName):
        (WebCore::DOMMimeTypeArray::namedItem):
        (WebCore::DOMMimeTypeArray::getPluginData):
        * plugins/DOMMimeTypeArray.h: Added.
        (WebCore::DOMMimeTypeArray::create):
        (WebCore::DOMMimeTypeArray::disconnectFrame):
        * plugins/DOMMimeTypeArray.idl: Added.
        * plugins/DOMPlugin.cpp: Added.
        (WebCore::DOMPlugin::DOMPlugin):
        (WebCore::DOMPlugin::~DOMPlugin):
        (WebCore::DOMPlugin::name):
        (WebCore::DOMPlugin::filename):
        (WebCore::DOMPlugin::description):
        (WebCore::DOMPlugin::length):
        (WebCore::DOMPlugin::item):
        (WebCore::DOMPlugin::canGetItemsForName):
        (WebCore::DOMPlugin::namedItem):
        * plugins/DOMPlugin.h: Added.
        (WebCore::DOMPlugin::create):
        (WebCore::DOMPlugin::pluginInfo):
        * plugins/DOMPlugin.idl: Added.
        * plugins/DOMPluginArray.cpp: Added.
        (WebCore::DOMPluginArray::DOMPluginArray):
        (WebCore::DOMPluginArray::~DOMPluginArray):
        (WebCore::DOMPluginArray::length):
        (WebCore::DOMPluginArray::item):
        (WebCore::DOMPluginArray::canGetItemsForName):
        (WebCore::DOMPluginArray::namedItem):
        (WebCore::DOMPluginArray::refresh):
        (WebCore::DOMPluginArray::pluginData):
        * plugins/DOMPluginArray.h: Added.
        (WebCore::DOMPluginArray::create):
        (WebCore::DOMPluginArray::disconnectFrame):
        * plugins/DOMPluginArray.idl: Added.
        * plugins/MimeType.cpp: Removed.
        * plugins/MimeType.h: Removed.
        * plugins/MimeType.idl: Removed.
        * plugins/MimeTypeArray.cpp: Removed.
        * plugins/MimeTypeArray.h: Removed.
        * plugins/MimeTypeArray.idl: Removed.
        * plugins/Plugin.cpp: Removed.
        * plugins/Plugin.h: Removed.
        * plugins/Plugin.idl: Removed.
        * plugins/PluginArray.cpp: Removed.
        * plugins/PluginArray.h: Removed.
        * plugins/PluginArray.idl: Removed.

2010-07-06  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=41156
        Cross origin XMLHttpRequest should log the reason why connection failed

        Covered by multiple existing tests.

        * loader/CrossOriginAccessControl.cpp:
        (WebCore::passesAccessControlCheck):
        * loader/CrossOriginAccessControl.h:
        * loader/CrossOriginPreflightResultCache.cpp:
        (WebCore::CrossOriginPreflightResultCacheItem::parse):
        (WebCore::CrossOriginPreflightResultCacheItem::allowsCrossOriginMethod):
        (WebCore::CrossOriginPreflightResultCacheItem::allowsCrossOriginHeaders):
        (WebCore::CrossOriginPreflightResultCacheItem::allowsRequest):
        * loader/CrossOriginPreflightResultCache.h:
        Functions that check requests now take a string argument for error explanation.

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::DocumentThreadableLoader): Make an informative error
        if crossOriginRequestPolicy is DenyCrossOriginRequests. This doesn't currently go anywhere,
        since XMLHttpRequest is the only client that logs from didFail(), and it of course supports
        cross origin requests.
        (WebCore::DocumentThreadableLoader::makeSimpleCrossOriginAccessRequest): Make an informative
        error when trying to e.g. send a cross origin XMLHttpRequest to ftp://.
        (WebCore::DocumentThreadableLoader::didReceiveResponse): Pass error explanation from cross
        origin access control code.
        (WebCore::DocumentThreadableLoader::preflightFailure): Ditto.

        * loader/DocumentThreadableLoader.h: preflightFailure() now takes arguments.

        * platform/network/ResourceErrorBase.cpp:
        * platform/network/ResourceErrorBase.h:
        Added a constant for WebKit error domain.

        * xml/XMLHttpRequest.cpp: (WebCore::XMLHttpRequest::didFail): Report the error to console.
        One day we'll be able to also provide script file and line number here, so it's best to
        pass error all the way down to XHR for reporting.

2010-07-06  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: convert script offset to webkit format in v8 ScriptDebugServer
        https://bugs.webkit.org/show_bug.cgi?id=41696

        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::dispatchDidParseSource):

2010-07-06  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Implement InTableBodyMode
        https://bugs.webkit.org/show_bug.cgi?id=41671

        In the process of implementing this patch, Eric and I discussed some of
        the high-level organization of the HTMLTreeBuilder class.  We'd like to
        split it up into smaller pieces.  In the meantime, I've reordered some
        of the declarations in the header to make the relations between the
        different kinds of functions clearer.

        * html/HTMLElementStack.cpp:
        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processIsindexStartTagForInBody):
        (WebCore::HTMLTreeBuilder::processStartTagForInBody):
        (WebCore::HTMLTreeBuilder::processStartTagForInTable):
        (WebCore::HTMLTreeBuilder::processStartTag):
        (WebCore::HTMLTreeBuilder::processEndTagForInTable):
        (WebCore::HTMLTreeBuilder::processEndTag):
        (WebCore::HTMLTreeBuilder::processCharacter):
        (WebCore::HTMLTreeBuilder::processEndOfFile):
        * html/HTMLTreeBuilder.h:

2010-07-06  Leandro Pereira  <leandro@profusion.mobi>

        Unreviewed build fix.

        [EFL] Generate code for RemoteInspector.

        * CMakeLists.txt:

2010-07-06  Varun Jain  <varunjain@chromium.org>

        Reviewed by Oliver Hunt.

        Implementing CURVE_TO_CUBIC specification for SVG Path Segments. Currently,
        curves specified in relative cordinates such as using createCurvetoCubicRel()
        javascript function are not displayed.

        SVG CurvetoCubic Path not implemented for relative cordinates
        https://bugs.webkit.org/show_bug.cgi?id=41294

        Test: svg/custom/svg-curve-with-relative-cordinates.html

        * svg/SVGPathSegList.cpp:
        (WebCore::SVGPathSegList::toPathData):

2010-07-06  Alexey Proskuryakov  <ap@apple.com>

        Roll out patch for https://bugs.webkit.org/show_bug.cgi?id=41348 "Remove global variables
        from XSLTProcessorLibxslt.cpp", as it causes crashes on buildbot.

        * xml/XSLTProcessor.h:
        (WebCore::XSLTProcessor::xslStylesheet):
        (WebCore::XSLTProcessor::XSLTProcessor):
        * xml/XSLTProcessorLibxslt.cpp:
        (WebCore::docLoaderFunc):
        (WebCore::setXSLTLoadCallBack):
        (WebCore::xsltStylesheetPointer):
        (WebCore::XSLTProcessor::transformToString):

2010-07-06  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Add processing for "in cell" mode and end tag processing for "in row"
        https://bugs.webkit.org/show_bug.cgi?id=41688

        I added several new table tests, not all of which pass yet.
        Remaining failures exist due to lack of full "in table body" mode
        support, which Adam has an outstanding patch for.
        I believe all of the various branches added by this change are
        covered now by our tests.

        * html/HTMLElementStack.cpp:
         - Added QualifiedName versions of inScope functions.
           Using tagName.localName() is wrong for non-HTML elements,
           in preparation for supporting foreign content we should centralize
           our handling of QualifiedName in these functions instead of
           sprinkling more .localName() calls around the code.
        (WebCore::HTMLElementStack::inScope):
        (WebCore::HTMLElementStack::inListItemScope):
        (WebCore::HTMLElementStack::inTableScope):
        * html/HTMLElementStack.h:
        * html/HTMLFormattingElementList.cpp:
        (WebCore::HTMLFormattingElementList::Entry::operator==):
        (WebCore::HTMLFormattingElementList::Entry::operator!=):
         - Calling element() on markers will assert, so use m_element.
        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::closeTheCell):
         - Implemented per the spec.
        (WebCore::HTMLTreeBuilder::processStartTag):
         - Use isTableBodyContextTag where possible.
         - Add InCellMode.
        (WebCore::HTMLTreeBuilder::resetInsertionModeAppropriately):
         - Use isTableBodyContextTag where possible.
        (WebCore::HTMLTreeBuilder::processTrEndTagForInRow):
         - This code is needed from at least two callsites.
        (WebCore::HTMLTreeBuilder::processEndTag):
         - Add InCellMode and InRowMode
        (WebCore::HTMLTreeBuilder::processCharacter):
        (WebCore::HTMLTreeBuilder::processEndOfFile):
        * html/HTMLTreeBuilder.h:

2010-07-06  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Make <a> auto-close any parent <a> tag
        https://bugs.webkit.org/show_bug.cgi?id=41684

        I first fixed <a> to auto-close surrounding <a> tags.
        That caused about 3 more test passes and one new test failure.
        The test failure was due to <marque> not adding a marker
        to the active formatting elements.

        So I made a one-line change to fix <marque>.  However that hit an
        ASSERT due to a bug in indexOfFirstUnopenFormattingElement.
        Fixing indexOfFirstUnopenFormattingElement fixed another bunch of
        Adoption Agency related tests (clearly this was the second typo
        which was causing all the adoption agency failures).
        
        However fixing <marque> and indexOfFirstUnopenFormattingElement,
        added yet another failure due to missing support for </p>
        automatically adding an implicit <p> tag.  Fixing </p> finally
        got the tests to a stable (all improving) state.

        In the end, these 4 minor (and very well tested) tweaks fixed a total
        of 9 subtests in html5lib/runner.html.
        Another subtest progressed, but did not fully pass due to missing
        <table> foster-parenting support.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTagForInBody):
        (WebCore::HTMLTreeBuilder::processEndTagForInBody):
        (WebCore::HTMLTreeBuilder::indexOfFirstUnopenFormattingElement):

2010-07-02  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Xan Lopez

        [GStreamer] can't seek past maxTimeLoaded value
        https://bugs.webkit.org/show_bug.cgi?id=40526

        Extended the seekable range to the whole media. This allows video
        played with progressive download to be seeked past the current
        buffered position.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::maxTimeSeekable):
        (WebCore::MediaPlayerPrivateGStreamer::updateStates):

2010-07-06  Andreas Wictor  <andreas.wictor@xcerion.com>

        Reviewed by Alexey Proskuryakov.

        Remove global variables from XSLTProcessorLibxslt.cpp
        https://bugs.webkit.org/show_bug.cgi?id=41348

        Remove the globalProcessor and globalDocLoader global variables
        by using the _private field that exists on most libxml structs.

        No new tests, existing tests covers this.

        * xml/XSLTProcessor.h:
        (WebCore::XSLTProcessor::sourceNode):
        (WebCore::XSLTProcessor::XSLTProcessor):
        * xml/XSLTProcessorLibxslt.cpp:
        (WebCore::registredXSLTProcessors):
        (WebCore::registredXSLStyleSheets):
        (WebCore::docLoaderFunc):
        (WebCore::xsltStylesheetPointer):
        (WebCore::XSLTProcessor::transformToString):

2010-07-06  Darin Adler  <darin@apple.com>

        Fix Cairo build.

        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::createPlatformShadow): Removed unnneded release
        in code that passes a PassOwnPtr to another PassOwnPtr.

2010-07-06  Darin Adler  <darin@apple.com>

        Fix Chromium build.

        * platform/graphics/skia/SkiaUtils.cpp:
        (WebCore::scratchContext): Use leakPtr instead of release.

2010-07-06  Martin Robinson  <mrobinson@igalia.com>

        Unreviewed.

        Build fix after r62549.

        * GNUmakefile.am: Generate RemoteInspector files by manually listing
        them instead of building them into libWebCoreJS.la.

2010-07-06  Darin Adler  <darin@apple.com>

        Reviewed by Adam Barth.

        Add adoptPtr and leakPtr functions for OwnPtr and PassOwnPtr
        https://bugs.webkit.org/show_bug.cgi?id=41320

        Made code changes required because of the change to the release function.
        The equivalent to the old release function is now named leakPtr and
        should be used sparingly. The new release function returns a PassOwnPtr.

        * css/CSSFontFaceSource.cpp:
        (WebCore::CSSFontFaceSource::getFontData): Changed code to call
        leakPtr instead of release.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::addProperty): Ditto.

        * css/CSSSegmentedFontFace.cpp:
        (WebCore::CSSSegmentedFontFace::getFontData): Removed unneeded type
        casting. Not sure why this changed the type to FontData* and then
        casted back to SimpleFontData*.

        * css/MediaQuery.cpp:
        (WebCore::MediaQuery::MediaQuery): Removed call to release on a
        PassOwnPtr, since the data member is now an OwnPtr.
        (WebCore::MediaQuery::~MediaQuery): Removed now-unneeded delete.
        * css/MediaQuery.h: Changed m_expressions to be an OwnPtr.

        * html/HTMLToken.h:
        (WebCore::AtomicHTMLToken::AtomicHTMLToken): Use assignment instead
        of the set function since there are no raw pointers involved.
        * loader/CachedResource.cpp:
        (WebCore::CachedResource::makePurgeable): Ditto.

        * loader/CrossOriginPreflightResultCache.cpp:
        (WebCore::CrossOriginPreflightResultCache::appendEntry): Use
        leakPtr instead of release, and also add FIXME about deleting the
        old value if the original and URL are already in the map. I
        believe dealing with this FIXME may fix a storage leak.

        * loader/CrossOriginPreflightResultCache.h: Change the argument
        to be PassOwnPtr instead of a raw pointer, since this function
        does take ownership.

        * loader/DocumentThreadableLoader.cpp:
        (WebCore::DocumentThreadableLoader::DocumentThreadableLoader):
        Use assignment instead of the set function since there are no raw
        pointers involved.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::startIconLoader): Ditto.
        * loader/TextResourceDecoder.cpp:
        (WebCore::TextResourceDecoder::decode): Ditto.
        (WebCore::TextResourceDecoder::flush): Ditto.

        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::fired): Use OwnPtr instead of an explicit
        delete.

        * platform/CrossThreadCopier.h: Removed explicit code that tried
        to copy PassOwnPtr in a complicated way. It did nothing different
        from just returning the PassOwnPtr. This presumably was done because
        PassRefPtr has issues when copied cross-thread, but there are no
        similar issues for PassOwnPtr. Someone with more experience than I
        might be able to remove the specialization altogether, because
        CrossThreadCopierPassThrough does the right thing in this case.

        * platform/SharedBuffer.cpp:
        (WebCore::SharedBuffer::adoptPurgeableBuffer): Changed argument to
        be a PassOwnPtr.
        (WebCore::SharedBuffer::releasePurgeableBuffer): Changed result to
        be a PassOwnPtr.
        * platform/SharedBuffer.h: Updated for changes above.

        * rendering/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::applyResource): Changed one site
        to use assignment instead of the set function since there are no raw
        pointers involved. Changed another site to use leakPtr instead
        of release.

        * rendering/RenderSVGResourceGradient.cpp:
        (WebCore::createMaskAndSwapContextForTextGradient): Use assignment
        instead of the set function since there are no raw pointers involved.

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::setContent): Use leakPtr instead of release.
        (WebCore::RenderStyle::setBoxShadow): Ditto.

        * workers/DefaultSharedWorkerRepository.cpp:
        (WebCore::DefaultSharedWorkerRepository::connectToWorker):
        Removed unneeded call to release function in a code path that passes
        a PassOwnPtr to a function that takes a PassOwnPtr.

        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::setTimeout): Changed argument type to PassOwnPtr.
        (WebCore::WorkerContext::setInterval): Ditto.
        * workers/WorkerContext.h: Updated for changes above.

        * workers/WorkerMessagingProxy.cpp:
        (WebCore::WorkerMessagingProxy::postMessageToWorkerObject):
        (WebCore::WorkerMessagingProxy::postMessageToWorkerContext):
        Removed unneeded call to release function in code paths that pass
        a PassOwnPtr to a function that takes a PassOwnPtr.

2010-07-06  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        WebInspector: generator part of the patch for bug 40675.
        On the way to Remote Debugging we want to support JSON serialization
        on both sides of WebInspector transport.
        As far as InspectorFrontend class is a simple proxy to WebInspector
        it would be better to generate it from an IDL file.
        We have generator infrastructure for binding and will reuse it for
        new generator.
        https://bugs.webkit.org/show_bug.cgi?id=41692


        * CMakeLists.txt:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gyp/scripts/rule_binding.py:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/scripts/CodeGenerator.pm:
        * bindings/scripts/IDLParser.pm:
        * bindings/scripts/generate-bindings.pl:
        * inspector/CodeGeneratorInspector.pm: Added.
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::startTimelineProfiler):
        * inspector/InspectorController.h:
        * inspector/InspectorFrontend.cpp:
        * inspector/InspectorFrontend.h:
        * inspector/InspectorFrontend2.idl: Added.
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::InspectorTimelineAgent):
        (WebCore::InspectorTimelineAgent::resetFrontendProxyObject):
        (WebCore::InspectorTimelineAgent::addRecordToTimeline):
        * inspector/InspectorTimelineAgent.h:

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

        Rubber-stamped by Xan Lopez.

        [GTK] Crashes when going back with page cache in unknown circunstances
        https://bugs.webkit.org/show_bug.cgi?id=41710

        Also NULL-check document, in hopes of fixing this hard to
        reproduce crash that we are getting reported quite a bit.

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

2010-07-05  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: On the way to Remote Debuging we want to support JSON
        serialization on both sides of WebInspector transport. As far as
        InspectorFrontend class is a simple proxy to WebInspector it would
        be better to generate it from an IDL file. We have generator
        infostructure for binding and will reuse it for new generator.
        https://bugs.webkit.org/show_bug.cgi?id=40675

        * bindings/js/ScriptCallStack.cpp:
        (WebCore::ScriptCallStack::stackTrace):
        * bindings/js/ScriptCallStack.h:
        * bindings/v8/ScriptCallStack.cpp:
        (WebCore::ScriptCallStack::stackTrace):
        * bindings/v8/ScriptCallStack.h:
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::addRecordToTimeline):
        * inspector/InspectorFrontend.h:
        * inspector/InspectorTimelineAgent.cpp:
        (WebCore::InspectorTimelineAgent::pushGCEventRecords):
        (WebCore::InspectorTimelineAgent::willCallFunction):
        (WebCore::InspectorTimelineAgent::willDispatchEvent):
        (WebCore::InspectorTimelineAgent::willLayout):
        (WebCore::InspectorTimelineAgent::willRecalculateStyle):
        (WebCore::InspectorTimelineAgent::willPaint):
        (WebCore::InspectorTimelineAgent::willWriteHTML):
        (WebCore::InspectorTimelineAgent::didWriteHTML):
        (WebCore::InspectorTimelineAgent::didInstallTimer):
        (WebCore::InspectorTimelineAgent::didRemoveTimer):
        (WebCore::InspectorTimelineAgent::willFireTimer):
        (WebCore::InspectorTimelineAgent::willChangeXHRReadyState):
        (WebCore::InspectorTimelineAgent::willLoadXHR):
        (WebCore::InspectorTimelineAgent::willEvaluateScript):
        (WebCore::InspectorTimelineAgent::didScheduleResourceRequest):
        (WebCore::InspectorTimelineAgent::willSendResourceRequest):
        (WebCore::InspectorTimelineAgent::willReceiveResourceData):
        (WebCore::InspectorTimelineAgent::willReceiveResourceResponse):
        (WebCore::InspectorTimelineAgent::didFinishLoadingResource):
        (WebCore::InspectorTimelineAgent::didMarkTimeline):
        (WebCore::InspectorTimelineAgent::didMarkDOMContentEvent):
        (WebCore::InspectorTimelineAgent::didMarkLoadEvent):
        (WebCore::InspectorTimelineAgent::addRecordToTimeline):
        (WebCore::InspectorTimelineAgent::setHeapSizeStatistic):
        (WebCore::InspectorTimelineAgent::didCompleteCurrentRecord):
        (WebCore::InspectorTimelineAgent::pushCurrentRecord):
        * inspector/InspectorTimelineAgent.h:
        (WebCore::InspectorTimelineAgent::TimelineRecordEntry::TimelineRecordEntry):
        * inspector/TimelineRecordFactory.cpp:
        (WebCore::TimelineRecordFactory::createGenericRecord):
        (WebCore::TimelineRecordFactory::createGCEventData):
        (WebCore::TimelineRecordFactory::createFunctionCallData):
        (WebCore::TimelineRecordFactory::createEventDispatchData):
        (WebCore::TimelineRecordFactory::createGenericTimerData):
        (WebCore::TimelineRecordFactory::createTimerInstallData):
        (WebCore::TimelineRecordFactory::createXHRReadyStateChangeData):
        (WebCore::TimelineRecordFactory::createXHRLoadData):
        (WebCore::TimelineRecordFactory::createEvaluateScriptData):
        (WebCore::TimelineRecordFactory::createMarkTimelineData):
        (WebCore::TimelineRecordFactory::createScheduleResourceRequestData):
        (WebCore::TimelineRecordFactory::createResourceSendRequestData):
        (WebCore::TimelineRecordFactory::createResourceReceiveResponseData):
        (WebCore::TimelineRecordFactory::createResourceFinishData):
        (WebCore::TimelineRecordFactory::createReceiveResourceData):
        (WebCore::TimelineRecordFactory::createPaintData):
        (WebCore::TimelineRecordFactory::createParseHTMLData):
        * inspector/TimelineRecordFactory.h:

2010-07-06  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Implement InColgroupMode
        https://bugs.webkit.org/show_bug.cgi?id=41663

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processColgroupEndTagForInColumnGroup):
        (WebCore::HTMLTreeBuilder::processStartTag):
        (WebCore::HTMLTreeBuilder::processEndTag):
        (WebCore::HTMLTreeBuilder::processCharacter):
        (WebCore::HTMLTreeBuilder::processEndOfFile):
        * html/HTMLTreeBuilder.h:

2010-07-06  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Implement bookmarking for HTML5 Adoption Agency algorithm
        https://bugs.webkit.org/show_bug.cgi?id=41659

        Was easier than I expected it to be.
        Fixes a bunch of html5lib/runner.html tests.

        * html/HTMLFormattingElementList.cpp:
        (WebCore::HTMLFormattingElementList::bookmarkFor):
        (WebCore::HTMLFormattingElementList::insertAt):
        * html/HTMLFormattingElementList.h:
        (WebCore::HTMLFormattingElementList::Bookmark::Bookmark):
        (WebCore::HTMLFormattingElementList::Bookmark::moveToAfter):
        (WebCore::HTMLFormattingElementList::Bookmark::elementBefore):
        (WebCore::HTMLFormattingElementList::Bookmark::elementAfter):
        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::callTheAdoptionAgency):

2010-07-06  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Implement more of InTableMode
        https://bugs.webkit.org/show_bug.cgi?id=41652

        By the time we got around to landing this patch, it turns out to be
        just a bit of cleanup (the functional changes where landed already.)

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processCharacter):
        (WebCore::HTMLTreeBuilder::processEndOfFile):

2010-07-06  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r62529.
        http://trac.webkit.org/changeset/62529
        https://bugs.webkit.org/show_bug.cgi?id=41661

        http/tests/inspector/resource-har-conversion.html is broken
        (Requested by yutak on #webkit).

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::addResource):
        (WebCore::InspectorController::removeResource):
        * inspector/InspectorController.h:
        * inspector/InspectorResource.cpp:
        (WebCore::InspectorResource::InspectorResource):
        (WebCore::InspectorResource::updateScriptObject):
        (WebCore::InspectorResource::cachedResource):
        (WebCore::InspectorResource::type):
        (WebCore::InspectorResource::resourceData):
        * inspector/InspectorResource.h:
        (WebCore::InspectorResource::):
        (WebCore::InspectorResource::create):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.Type.toString):
        (WebInspector.Resource.prototype.set type):
        (WebInspector.Resource.prototype._mimeTypeIsConsistentWithType):
        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceView.prototype._refreshRequestHeaders):
        (WebInspector.ResourceView.prototype._refreshResponseHeaders):
        (WebInspector.ResourceView.prototype._refreshHeaders):
        * inspector/front-end/inspector.css:
        (.resources-category-scripts, .resources-category-xhr, .resources-category-fonts, .resources-category-other):
        * inspector/front-end/inspector.js:
        (WebInspector.loaded):
        (WebInspector.updateResource):
        * websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::WebSocketChannel):
        (WebCore::WebSocketChannel::disconnect):
        (WebCore::WebSocketChannel::didOpen):
        (WebCore::WebSocketChannel::didClose):
        (WebCore::WebSocketChannel::processBuffer):
        * websockets/WebSocketChannel.h:

2010-07-06  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Implement InCaptionMode
        https://bugs.webkit.org/show_bug.cgi?id=41660

        Implementing this mode also turned up a subtle bug in the adoption
        agency code.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTag):
        (WebCore::HTMLTreeBuilder::processCaptionEndTagForInCaption):
        (WebCore::HTMLTreeBuilder::processEndTag):
        (WebCore::HTMLTreeBuilder::processCharacter):
        (WebCore::HTMLTreeBuilder::indexOfFirstUnopenFormattingElement):
            - We're supposed to reutrn the first *unopened* formatting element.
              The old code returned the first *opened* formatting element.
        * html/HTMLTreeBuilder.h:

2010-07-06  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Implement defaut cases for InTableMode
        https://bugs.webkit.org/show_bug.cgi?id=41656

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTag):
        (WebCore::HTMLTreeBuilder::processEndTagForInBody):
        (WebCore::HTMLTreeBuilder::processEndTag):
        * html/HTMLTreeBuilder.h:

2010-07-05  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        SVGRenderContainer forces too many kids to relayout
        https://bugs.webkit.org/show_bug.cgi?id=15391

        Fixing a long-standing performance issue. We should only ever need to relayout container children when the parent bounds change.
        The bounds of a container can only change, if the outermost RenderSVGRoot container uses relative length values and its size changes.
        This can either happen when the window resizes for standalone SVG documents, or if an enclosing RenderBox changes width/height values.

        Only relayout container children if the container has selfNeedsLayout() true, or if the parent bounds change.
        Lively Kernel doesn't do any relayouts anymore, except if you change the Safari window size, this is a great progression.

        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::layout): No need to special case Path updates, if the element uses relative lengths. SVGRenderSupport now handles this case.
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::layout): Fix some style issues.
        * rendering/RenderSVGContainer.h:
        (WebCore::RenderSVGContainer::setDrawsContents): Inlined for speed.
        (WebCore::RenderSVGContainer::drawsContents): Ditto.
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::RenderSVGRoot): Initialize m_isLayoutSizeChanged to false.
        (WebCore::RenderSVGRoot::layout): Set m_isLayoutSizeChanged=true when the RenderSVGRoot size changes during layout.
        (WebCore::RenderSVGRoot::calcViewport): Remove hasRelativeLengths() special case.
        * rendering/RenderSVGRoot.h:
        (WebCore::RenderSVGRoot::isLayoutSizeChanged): New function, which returns true during layout() if the outermost <svg> size changes.
        * rendering/RenderSVGViewportContainer.cpp:
        (WebCore::RenderSVGViewportContainer::calcViewport): Cleanup code, and remove obsolete hasRelativeLengths() special case.
        * rendering/SVGRenderSupport.cpp:
        (WebCore::svgRootTreeObject): Added helper function, that returns the RenderSVGRoot for a given RenderObject.
        (WebCore::SVGRenderSupport::layoutChildren): Remove FIXME, only relayout container children, if the parent bounds change and the child uses relative lengths.
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::updateRelativeLengthsInformation): Implemented this function. Keeps track of relative lengths elements, so that the
                                                                       hasRelativeLengths() information is always up2date.
        * svg/SVGStyledElement.h:
        (WebCore::SVGStyledElement::hasRelativeLengths): Don't call the virtual selfHasRelativeLengths() information, just return wheter m_elementsWithRelativeLengths is not empty.

2010-07-05  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Dan Bernstein.

        Fix for Bug 41509 - Ranges for @font-face unicode-range must be separated by commas
        https://bugs.webkit.org/show_bug.cgi?id=41509

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

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseFontFaceUnicodeRange):

2010-07-05  Yuta Kitamura  <yutak@chromium.org>

        Reviewed by Pavel Feldman.

        Add WebSocket resource type to Web Inspector.

        When a new WebSocket connection is established, a line for that connection
        will appear in Web Inspector's Resources tab. If the resource name is
        clicked, the details of handshake request and response will be shown.

        Web Inspector: WebSocket in Resources tab
        https://bugs.webkit.org/show_bug.cgi?id=40768

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::addResource): WebSocket resource does not
        have an associated loader, thus frame might be null. Need to check it.
        (WebCore::InspectorController::removeResource): Ditto.
        (WebCore::InspectorController::didCreateWebSocket):
        (WebCore::InspectorController::willSendWebSocketHandshakeRequest):
        (WebCore::InspectorController::didReceiveWebSocketHandshakeResponse):
        (WebCore::InspectorController::didCloseWebSocket):
        * inspector/InspectorController.h:
        * inspector/InspectorResource.cpp: Add null checks of m_loader and m_frame,
        because WebSocket does not have a loader and we need to allow null for
        these variables.
        (WebCore::createReadableStringFromBinary):
        (WebCore::InspectorResource::InspectorResource):
        (WebCore::InspectorResource::create): Factory function of
        regular (non-WebSocket) resources.
        (WebCore::InspectorResource::createWebSocket): Factory function of
        WebSocket resources.
        (WebCore::InspectorResource::updateWebSocketRequest):
        (WebCore::InspectorResource::updateWebSocketResponse):
        (WebCore::InspectorResource::updateScriptObject):
        (WebCore::InspectorResource::cachedResource):
        (WebCore::InspectorResource::type):
        (WebCore::InspectorResource::resourceData):
        * inspector/InspectorResource.h:
        (WebCore::InspectorResource::):
        (WebCore::InspectorResource::markWebSocket):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.Type.toString):
        (WebInspector.Resource.prototype.set type):
        (WebInspector.Resource.prototype._mimeTypeIsConsistentWithType):
        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceView.prototype._refreshRequestHeaders):
        (WebInspector.ResourceView.prototype._refreshResponseHeaders):
        (WebInspector.ResourceView.prototype._refreshHeaders):
        * inspector/front-end/inspector.css:
        (.resources-category-websockets, .resources-category-other):
        (.resources-category-websockets .resources-graph-bar):
        (.resources-category-websockets.resource-cached .resources-graph-bar):
        * inspector/front-end/inspector.js:
        (WebInspector.loaded):
        (WebInspector.updateResource):
        * websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::WebSocketChannel):
        (WebCore::WebSocketChannel::disconnect):
        (WebCore::WebSocketChannel::didOpen):
        (WebCore::WebSocketChannel::didClose):
        (WebCore::WebSocketChannel::processBuffer):
        (WebCore::WebSocketChannel::identifier):
        * websockets/WebSocketChannel.h:

2010-07-05  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Fix Chromium build.

        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::fillResourceList):
        (WebCore::InspectorApplicationCacheAgent::getApplicationCaches):

2010-07-05  Adam Barth  <abarth@webkit.org>

        Unreviewed.

        Move processStartTagForInBody to its own function.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTagForInBody):
        (WebCore::HTMLTreeBuilder::processStartTag):
        * html/HTMLTreeBuilder.cpp.orig: Added.
        * html/HTMLTreeBuilder.h:

2010-07-05  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Fix one more notImplemented in h1-h6 start tag handling
        https://bugs.webkit.org/show_bug.cgi?id=41654

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTag):

2010-07-05  Eric Seidel  <eric@webkit.org>

        Unreviewed.  Just fixing proess to process.
        Clearly Adam and I can't spell.  Thankfully MikeSmith can.

        Add <isindex> support, per HTML5
        https://bugs.webkit.org/show_bug.cgi?id=41650

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processFakeStartTag):
        (WebCore::HTMLTreeBuilder::processFakeEndTag):
        (WebCore::HTMLTreeBuilder::processIsindexStartTagForBody):
        (WebCore::HTMLTreeBuilder::processStartTag):
        * html/HTMLTreeBuilder.h:

2010-07-05  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Add <isindex> support, per HTML5
        https://bugs.webkit.org/show_bug.cgi?id=41650

        Covered by html5lib/runner.html including a new
        isindex.dat test suite.

        * html/HTMLToken.h:
        (WebCore::AtomicHTMLToken::AtomicHTMLToken):
         - Support passing attributes to the constructor.
        (WebCore::AtomicHTMLToken::name):
        (WebCore::AtomicHTMLToken::setName):
        (WebCore::AtomicHTMLToken::getAttributeItem):
        (WebCore::AtomicHTMLToken::attributes):
        (WebCore::AtomicHTMLToken::takeAtributes):
         - Reduces ref-churn, and makes it possible for callers
           to modify attributes w/o affecting future uses of the attributes.
        (WebCore::AtomicHTMLToken::usesName):
         - Used by ASSERTS.
        (WebCore::AtomicHTMLToken::usesAttributes):
         - Used by ASSERTS.
        * html/HTMLTreeBuilder.cpp:
        (WebCore::convertToOldStyle):
         - Can't be const, now that we use takeAttributes()
        (WebCore::HTMLTreeBuilder::insertHTMLStartTagBeforeHTML):
        (WebCore::HTMLTreeBuilder::proesssFakeStartTag):
         - New function.  I'm not sure this is the perfect design
          (I'd kinda like AtomicHTMLToken to be copyable so we can
           have create functions for it), but this makes the callsites
           using fake tokens much more readable.
        (WebCore::HTMLTreeBuilder::proesssFakeEndTag):
        (WebCore::HTMLTreeBuilder::processFakeCharacters):
        (WebCore::HTMLTreeBuilder::attributesForIsindexInput):
        (WebCore::HTMLTreeBuilder::processIsindexStartTagForBody):
        (WebCore::HTMLTreeBuilder::processStartTag):
        (WebCore::HTMLTreeBuilder::insertScriptElement):
         - Use takeAttributes() for less ref-churn.
        (WebCore::HTMLTreeBuilder::createElement): ditto
        (WebCore::HTMLTreeBuilder::finished):
         - Remove bogus use of AtomicHTMLToken constructor which
           wasn't even being used now that we support emitting EOF tokens
           from the Tokenizer directly.
        * html/HTMLTreeBuilder.h:

2010-07-05  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        ASSERT that we're processing the correct type of token
        https://bugs.webkit.org/show_bug.cgi?id=41647

        Making these asserts work required a small (non-observable) tweak to
        some old code.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processDoctypeToken):
        (WebCore::HTMLTreeBuilder::processStartTag):
        (WebCore::HTMLTreeBuilder::processBodyEndTagForInBody):
        (WebCore::HTMLTreeBuilder::processAnyOtherEndTagForInBody):
        (WebCore::HTMLTreeBuilder::processEndTag):
        (WebCore::HTMLTreeBuilder::processComment):
        (WebCore::HTMLTreeBuilder::processCharacter):
        (WebCore::HTMLTreeBuilder::processEndOfFile):
        (WebCore::HTMLTreeBuilder::processStartTagForInHead):

2010-07-05  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Implement in select in table
        https://bugs.webkit.org/show_bug.cgi?id=41646

        This mode is mostly a fall-through to the InSelectMode.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTag):
        (WebCore::HTMLTreeBuilder::processEndTag):
        (WebCore::HTMLTreeBuilder::processCharacter):
        (WebCore::HTMLTreeBuilder::processEndOfFile):

2010-07-05  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Implement basic text node coalescing
        https://bugs.webkit.org/show_bug.cgi?id=41623

        This patch isn't the end-all, be-all of text node coalescing, but it's
        a good start.

        * dom/CharacterData.cpp:
        (WebCore::CharacterData::parserAppendData):
        (WebCore::CharacterData::appendData):
        * dom/CharacterData.h:
            - Added a new method to dance around mutation events.
        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::insertTextNode):

2010-07-05  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Implement InSelectMode
        https://bugs.webkit.org/show_bug.cgi?id=41627

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTag):
        (WebCore::HTMLTreeBuilder::processEndTag):
        (WebCore::HTMLTreeBuilder::processCharacter):
        (WebCore::HTMLTreeBuilder::processEndOfFile):

2010-07-05  Fady Samuel  <fsamuel@chromium.org>

        Reviewed by Darin Adler.

        Fixed a svg crash when setting class of an svg ellipse object.

        Altering the CSS class of an attached SVG element causes WebKit to crash
        https://bugs.webkit.org/show_bug.cgi?id=40857

        Test: svg/css/svg-ellipse-render-crash.html

        * dom/StyledElement.cpp:
        (WebCore::StyledElement::classAttributeChanged):

2010-07-05  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        Reproducible crash with Optimize Legibility extension
        https://bugs.webkit.org/show_bug.cgi?id=41585

        Test: fast/css/text-rendering-priority.html

        Moved the text-rendering CSS property to the “high priority” group, because applying it
        during style selection invalidates the font.

        * css/CSSPropertyNames.in: Moved text-rendering to the “high priority” section at the top.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyDeclarations): Updated compile-time assertion.

2010-07-05  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        optimizeLegibility doesn't play nice with fonts that do not have a space glyph
        https://bugs.webkit.org/show_bug.cgi?id=41599

        No test because none of the fonts available to DumpRenderTree are missing a space glyph.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::findNextLineBreak): When the font does not map the space character
        to a glyph, a fallback font is used for space. Therefore, wordTrailingSpaceWidth must be
        initialized with the width of a space as measured by the Font rather than with the cached
        space width.

2010-07-05  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Implement HTML5's "reset insertion mode appropriately"
        https://bugs.webkit.org/show_bug.cgi?id=41628

        This has some minimal testing.  One from my previous
        </table> patch, and a few from the main suite.

        Mostly resetInsertionModeAppropriately isn't used yet
        but we're about to add a bunch of states which do use it
        and our test coverage will expand further as we do.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::HTMLTreeBuilder):
        (WebCore::HTMLTreeBuilder::setInsertionModeAndEnd):
        (WebCore::HTMLTreeBuilder::resetInsertionModeAppropriately):
        * html/HTMLTreeBuilder.h:

2010-07-04  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Add </table> support for "in table" insertion mode
        https://bugs.webkit.org/show_bug.cgi?id=41591

        resetInsertionModeAppropriately isn't implemented yet, however
        I've added a test for the usage I added.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::resetInsertionModeAppropriately):
        (WebCore::HTMLTreeBuilder::processEndTag):
        * html/HTMLTreeBuilder.h:

2010-07-05  Joseph Pecoraro  <joepeck@webkit.org>

        Unreviewed build fix for r62503.

        Chromium missing method. Filed bug 41632 to track.

        * loader/appcache/ApplicationCacheHost.h:
        (WebCore::ApplicationCacheHost::applicationCache):

2010-07-05  Joseph Pecoraro  <joepeck@webkit.org>

        Unreviewed build fix for r62503.

        Missed GTK's build file.

        * GNUmakefile.am:

2010-07-05  Joseph Pecoraro  <joepeck@webkit.org>

        Unreviewed build fix for r62503.

        Pass a blank ResourceResponse instead of passing 0.

        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::ApplicationCacheGroup::createResourceHandle):

2010-07-05  Joseph Pecoraro  <joepeck@webkit.org>

        Unreviewed build fix for r62503.

        Forward declare ApplicationCache for Chromium.

        * loader/appcache/ApplicationCacheHost.h:

2010-07-05  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Pavel Feldman.

        WebInspector: HTML5 Offline Web Applications Support (ApplicationCache)
        https://bugs.webkit.org/show_bug.cgi?id=24529

        Parts of this patch were written by Kavita Kanetkar <kkanetkar@chromium.org>.

        Part 2: Pulling ApplicationCache Resources to Display in the Inspector.

          The InspectorApplicationCacheAgent gathers the information it
          needs and forwards it on to the inspector.

        * inspector/InspectorApplicationCacheAgent.cpp:
        (WebCore::InspectorApplicationCacheAgent::fillResourceList): get information about the resources.
        (WebCore::InspectorApplicationCacheAgent::getApplicationCaches): gathers all the information from the ApplicationCacheHost.
        (WebCore::InspectorApplicationCacheAgent::buildObjectForApplicationCache):
        (WebCore::InspectorApplicationCacheAgent::buildArrayForApplicationCacheResources):
        (WebCore::InspectorApplicationCacheAgent::buildObjectForApplicationCacheResource):
        * inspector/InspectorApplicationCacheAgent.h: defines structures to hold information about caches and resources.
        (WebCore::InspectorApplicationCacheAgent::ApplicationCacheInfo::ApplicationCacheInfo):
        (WebCore::InspectorApplicationCacheAgent::ResourceInfo::ResourceInfo):
        (WebCore::InspectorApplicationCacheAgent::~InspectorApplicationCacheAgent):
        * loader/appcache/ApplicationCacheHost.h:
        (WebCore::ApplicationCacheHost::applicationCacheForInspector): new convention, public cache accessor for the inspector.
        (WebCore::ApplicationCacheHost::documentLoader): added const.

          The User Interface uses a DataGrid, like Cookies.

        * inspector/front-end/ApplicationCacheItemsView.js:
        (WebInspector.ApplicationCacheItemsView.prototype._update):
        (WebInspector.ApplicationCacheItemsView.prototype._updateCallback):
        (WebInspector.ApplicationCacheItemsView.prototype._createDataGrid):
        (WebInspector.ApplicationCacheItemsView.prototype._populateDataGrid.numberCompare):
        (WebInspector.ApplicationCacheItemsView.prototype._populateDataGrid.localeCompare):
        (WebInspector.ApplicationCacheItemsView.prototype._populateDataGrid):

          The usual frontend pull workflow, except this goes through
          InspectorApplicationCacheAgent instead of InspectorController.

        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::getApplicationCaches):
        (WebCore::InspectorBackend::inspectorApplicationCacheAgent):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::didGetApplicationCaches):
        * inspector/InspectorFrontend.h:
        * inspector/front-end/DOMAgent.js:
        (WebInspector.DOMNode.prototype.hasChildNodes): style fix.
        (WebInspector.DOMAgent.prototype.nodeForId): style fix.
        (WebInspector.ApplicationCache.getApplicationCachesAsync): pull.
        (WebInspector.Cookies.getCookiesAsync):
        * inspector/front-end/StoragePanel.js:
        (WebInspector.StoragePanel.prototype.updateManifest):
        (WebInspector.ApplicationCacheSidebarTreeElement.prototype.onselect):
        * inspector/front-end/inspector.js:
        (WebInspector.updateResource):
        (WebInspector._addAppCacheDomain):
        (WebInspector.reset):

          Miscellaneous. Localized Strings and fixes.

        * English.lproj/localizedStrings.js: "Type", "%s (%s)"
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::deleteCookie):
        * inspector/InspectorController.h:

2010-07-04  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Pavel Feldman.

        WebInspector: HTML5 Offline Web Applications Support (ApplicationCache)
        https://bugs.webkit.org/show_bug.cgi?id=24529

        Part 1: Backend -> Frontend Messages. ApplicationCache Status and Connectivity Status.

        This patch adds an InspectorApplicationCacheAgent to monitor application
        cache changes, starts a UI in the Storage panel, handles the boilerplate
        of adding new files.

          Added an agent to encapsulate and handle the application cache logic.
          This is similar to the timeline agent.

        * inspector/InspectorApplicationCacheAgent.cpp: Added.
        (WebCore::InspectorApplicationCacheAgent::InspectorApplicationCacheAgent):
        (WebCore::InspectorApplicationCacheAgent::~InspectorApplicationCacheAgent):
        (WebCore::InspectorApplicationCacheAgent::didReceiveManifestResponse):
        (WebCore::InspectorApplicationCacheAgent::updateApplicationCacheStatus):
        (WebCore::InspectorApplicationCacheAgent::updateNetworkState):
        * inspector/InspectorApplicationCacheAgent.h: Added.

          InspectorController owns an InspectorApplicationCacheAgent. This
          handles its lifetime management.

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::~InspectorController):
        (WebCore::InspectorController::connectFrontend): create the agent with a frontend.
        (WebCore::InspectorController::disconnectFrontend): remove the agent when closing.
        (WebCore::InspectorController::releaseFrontendLifetimeAgents):
        * inspector/InspectorController.h:

          User Interface for ApplicationCache in the StoragePanel. This follows
          very closely to Cookies, it will have a sortable table of items. The
          status bar contains connectivity and application cache status
          indicators which update when backend messages are received. There
          are some stubs which the next part will implement.

        * inspector/front-end/ApplicationCacheItemsView.js: Added.
        (WebInspector.ApplicationCacheItemsView):
        (WebInspector.ApplicationCacheItemsView.prototype.get statusBarItems): refresh, delete, connectivity, application cache status.
        (WebInspector.ApplicationCacheItemsView.prototype.show):
        (WebInspector.ApplicationCacheItemsView.prototype.hide):
        (WebInspector.ApplicationCacheItemsView.prototype.updateStatus): this is the application cache status indicator.
        (WebInspector.ApplicationCacheItemsView.prototype.updateNetworkState): this is the online/offline connectivity indicator.
        (WebInspector.ApplicationCacheItemsView.prototype._update):
        (WebInspector.ApplicationCacheItemsView.prototype._updateCallback):
        (WebInspector.ApplicationCacheItemsView.prototype._createDataGrid):
        (WebInspector.ApplicationCacheItemsView.prototype._populateDataGrid):
        (WebInspector.ApplicationCacheItemsView.prototype.resize):
        (WebInspector.ApplicationCacheItemsView.prototype._deleteButtonClicked):
        (WebInspector.ApplicationCacheItemsView.prototype._deleteCallback):
        (WebInspector.ApplicationCacheItemsView.prototype._refreshButtonClicked):

          The usual dispatch flow from the backend, to the frontend, to the
          panel, and then to the visible view. Some slight refactoring to
          eliminate duplicated code.

        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::updateDOMStorage):
        (WebCore::InspectorFrontend::didGetApplicationCaches):
        (WebCore::InspectorFrontend::updateApplicationCacheStatus):
        * inspector/InspectorFrontend.h:
        * inspector/front-end/StoragePanel.js:
        (WebInspector.StoragePanel):
        (WebInspector.StoragePanel.prototype.reset):
        (WebInspector.StoragePanel.prototype.addApplicationCache):
        (WebInspector.StoragePanel.prototype.showDatabase):
        (WebInspector.StoragePanel.prototype.showDOMStorage):
        (WebInspector.StoragePanel.prototype.showCookies):
        (WebInspector.StoragePanel.prototype.showApplicationCache):
        (WebInspector.StoragePanel.prototype._genericViewSetup):
        (WebInspector.StoragePanel.prototype.updateApplicationCacheStatus):
        (WebInspector.StoragePanel.prototype.updateNetworkState):
        (WebInspector.CookieSidebarTreeElement.prototype.set subtitle):
        (WebInspector.ApplicationCacheSidebarTreeElement):
        (WebInspector.ApplicationCacheSidebarTreeElement.prototype.onselect):
        (WebInspector.ApplicationCacheSidebarTreeElement.prototype.get mainTitle):
        (WebInspector.ApplicationCacheSidebarTreeElement.prototype.set mainTitle):
        (WebInspector.ApplicationCacheSidebarTreeElement.prototype.get subtitle):
        (WebInspector.ApplicationCacheSidebarTreeElement.prototype.set subtitle):
        * inspector/front-end/inspector.js:
        (WebInspector.dispatch.delayDispatch):
        (WebInspector.dispatch):
        (WebInspector._addAppCacheDomain):
        (WebInspector.addDOMStorage):
        (WebInspector.updateDOMStorage):

          Notify the InspectorApplicationCacheAgent on application cache changes
          or specifics. Notify the InspectorController on generic resource events.
          That is because ApplicationCacheController is a ResourceClient and needs
          to trigger the resource events normally handled by ResourceLoader.

        * loader/appcache/ApplicationCacheGroup.cpp:
        (WebCore::inspectorUpdateApplicationCacheStatus): helper method to prevent duplicated code.
        (WebCore::ApplicationCacheGroup::setNewestCache): status change.
        (WebCore::ApplicationCacheGroup::makeObsolete): status change.
        (WebCore::ApplicationCacheGroup::update): status change.
        (WebCore::ApplicationCacheGroup::createResourceHandle): resource event.
        (WebCore::ApplicationCacheGroup::willSendRequest): resource event.
        (WebCore::ApplicationCacheGroup::didReceiveResponse): resource event.
        (WebCore::ApplicationCacheGroup::didReceiveData): resource event.
        (WebCore::ApplicationCacheGroup::didFinishLoading): resource event.
        (WebCore::ApplicationCacheGroup::didFail): resource event.
        (WebCore::ApplicationCacheGroup::didFinishLoadingManifest): resource event.
        (WebCore::ApplicationCacheGroup::manifestNotFound): status change.
        (WebCore::ApplicationCacheGroup::checkIfLoadIsComplete): status change.
        (WebCore::ApplicationCacheGroup::setUpdateStatus): single access point for status changes.
        * loader/appcache/ApplicationCacheGroup.h:
        * page/Page.cpp:
        (WebCore::networkStateChanged): connectivity status change.

          Final inspector details to add the new file, style new elements,
          images, and localized strings.

        * inspector/front-end/inspector.css:
        (.application-cache-sidebar-tree-item .icon):
        (.timeline-records-counter, .storage-application-cache-status, .storage-application-cache-connectivity):
        (.storage-application-cache-status-icon, .storage-application-cache-connectivity-icon):
        (.status-bar-divider):
        (.storage-application-cache-status, .storage-application-cache-connectivity):
        * inspector/front-end/inspector.html:
        * inspector/front-end/Images/applicationCache.png: Added.
        * English.lproj/localizedStrings.js: "APPLICATION CACHE", "No Application Cache information available.", "Online", "Offline"

          Updated build files.

        * CMakeLists.txt:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/front-end/WebKit.qrc:

2010-07-05  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Add basic <col> support to the treebuilder
        https://bugs.webkit.org/show_bug.cgi?id=41590

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTag):

2010-07-05  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Add basic "in row" mode to support <td> and <th> insertion
        https://bugs.webkit.org/show_bug.cgi?id=41588

        Also fixed <td> or <th> as a direct child of <table>.

        Most of this was covered by html5lib/runner.html tests,
        but I had to add a new tables01.dat to cover the <th> cases.

        * html/HTMLElementStack.cpp:
        (WebCore::HTMLNames::isTableRowScopeMarker):
        (WebCore::HTMLElementStack::popUntilTableRowScopeMarker):
        * html/HTMLElementStack.h:
        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTag):

2010-07-05  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Finish implementing "any other end tag" for "in body" mode
        https://bugs.webkit.org/show_bug.cgi?id=41582

        I believe I found a "bug" in the HTML5 spec when writing this:
        http://www.w3.org/Bugs/Public/show_bug.cgi?id=10080

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processAnyOtherEndTagForInBody):
        (WebCore::HTMLTreeBuilder::processEndTag):
        * html/HTMLTreeBuilder.h:

2010-07-05  Martin Robinson  <mrobinson@igalia.com>

        Unreviewed.

        Add a missing slash to the list of generated sources. This
        was missing from a previous build fix.

        * GNUmakefile.am:

2010-07-05  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Joseph Pecoraro.

        Web Inspector: preserve scroll positions in source frame when switching between panes.

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

        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.hide):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype.set visible):
        * inspector/front-end/SourceView.js:
        (WebInspector.SourceView.prototype.hide):

2010-07-05  Rob Buis  <rwlbuis@gmail.com>

        Reviewed by Dirk Schulze.

        IE SVG test fails
        https://bugs.webkit.org/show_bug.cgi?id=41619

        Make SVGSVGElement.createSVGTransform create a SVGTransform with the
        right type, thereby fixing the IE test.

        Test: svg/custom/svg-createsvgtransform-type.html

        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::createSVGTransform):

2010-07-05  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: computed style pane is not updated when styles pane is collapsed.

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

        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.updateStyles):

2010-07-05  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Logic to track whether elements are using relative lengths is incomplete
        https://bugs.webkit.org/show_bug.cgi?id=41566

        Add logic to all SVG elements which create renderes to expose a method
        "bool selfHasRelativeLengths()", that returns whether the element uses relative
        lengths (eg. <rect x="50%"...). This will be used soon to avoid relayouts of
        container children, when the bounds have not changed.

        A new method SVGStyledElement::updateRelativeLengthsInformation() is added,
        which is called from the various svgAttributeChanged() methods and insertedIntoDocument/removedFromDocument.
        It will be implemented in a follow-up patch. This patch does not affect any test behaviour related
        to relayouting. As SVGFilterElement finally got a proper svgAttributeChanged() method, it now
        properly invalidates clients on attribute changes - covered by a new test.

        Tests: svg/custom/relative-sized-inner-svg.xhtml
               svg/custom/relative-sized-use-without-attributes-on-symbol.xhtml
               svg/filters/filter-width-update.svg
 
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::layout): Rename hasRelativeValues to hasRelativeLengths.
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::layout): Ditto.
        (WebCore::RenderSVGRoot::calcViewport): Ditto.
        * rendering/RenderSVGViewportContainer.cpp:
        (WebCore::RenderSVGViewportContainer::calcViewport): Ditto
        * rendering/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::layoutChildren): Ditto.
        * svg/SVGCircleElement.cpp:
        (WebCore::SVGCircleElement::svgAttributeChanged): Call updateRelativeLengthsInformation() if any attribute which may contain relative lengths changes.
        (WebCore::SVGCircleElement::selfHasRelativeLengths): Ditto. Same for all other SVG*Elements below.
        * svg/SVGCircleElement.h:
        * svg/SVGEllipseElement.cpp:
        (WebCore::SVGEllipseElement::svgAttributeChanged):
        (WebCore::SVGEllipseElement::selfHasRelativeLengths):
        * svg/SVGEllipseElement.h:
        * svg/SVGFilterElement.cpp:
        (WebCore::SVGFilterElement::svgAttributeChanged):
        (WebCore::SVGFilterElement::selfHasRelativeLengths):
        * svg/SVGFilterElement.h:
        * svg/SVGForeignObjectElement.cpp:
        (WebCore::SVGForeignObjectElement::svgAttributeChanged):
        (WebCore::SVGForeignObjectElement::selfHasRelativeLengths):
        * svg/SVGForeignObjectElement.h:
        * svg/SVGImageElement.cpp:
        (WebCore::SVGImageElement::svgAttributeChanged):
        (WebCore::SVGImageElement::selfHasRelativeLengths):
        * svg/SVGImageElement.h:
        * svg/SVGLineElement.cpp:
        (WebCore::SVGLineElement::svgAttributeChanged):
        (WebCore::SVGLineElement::selfHasRelativeLengths):
        * svg/SVGLineElement.h:
        * svg/SVGLinearGradientElement.cpp:
        (WebCore::SVGLinearGradientElement::svgAttributeChanged):
        (WebCore::SVGLinearGradientElement::selfHasRelativeLengths):
        * svg/SVGLinearGradientElement.h:
        * svg/SVGMarkerElement.cpp:
        (WebCore::SVGMarkerElement::svgAttributeChanged):
        (WebCore::SVGMarkerElement::selfHasRelativeLengths):
        * svg/SVGMarkerElement.h:
        * svg/SVGMaskElement.cpp:
        (WebCore::SVGMaskElement::svgAttributeChanged):
        (WebCore::SVGMaskElement::selfHasRelativeLengths):
        * svg/SVGMaskElement.h:
        * svg/SVGPatternElement.cpp:
        (WebCore::SVGPatternElement::svgAttributeChanged):
        (WebCore::SVGPatternElement::selfHasRelativeLengths):
        * svg/SVGPatternElement.h:
        * svg/SVGRadialGradientElement.cpp:
        (WebCore::SVGRadialGradientElement::svgAttributeChanged):
        (WebCore::SVGRadialGradientElement::selfHasRelativeLengths):
        * svg/SVGRadialGradientElement.h:
        * svg/SVGRectElement.cpp:
        (WebCore::SVGRectElement::svgAttributeChanged):
        (WebCore::SVGRectElement::selfHasRelativeLengths):
        * svg/SVGRectElement.h:
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::svgAttributeChanged):
        (WebCore::SVGSVGElement::selfHasRelativeLengths):
        * svg/SVGSVGElement.h:
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::insertedIntoDocument): Call updateRelativeLengthsInformation().
        (WebCore::SVGStyledElement::removedFromDocument): Ditto.
        (WebCore::SVGStyledElement::updateRelativeLengthsInformation): Not implemented so far. Will land in a follow-up patch, together with the render tree changes.
        * svg/SVGStyledElement.h:
        (WebCore::SVGStyledElement::hasRelativeLengths): Devirtualized. For now, just call selfHasRelativeLengths() - this will change in a follow-up patch.
        (WebCore::SVGStyledElement::updateRelativeLengthsInformation):
        (WebCore::SVGStyledElement::selfHasRelativeLengths): Renamed from hasRelativeValues().
        * svg/SVGSymbolElement.cpp:
        (WebCore::SVGSymbolElement::svgAttributeChanged):
        (WebCore::SVGSymbolElement::selfHasRelativeLengths):
        * svg/SVGSymbolElement.h:
        * svg/SVGTextContentElement.cpp:
        (WebCore::SVGTextContentElement::selfHasRelativeLengths):
        * svg/SVGTextContentElement.h:
        * svg/SVGTextPathElement.cpp:
        (WebCore::SVGTextPathElement::svgAttributeChanged):
        (WebCore::SVGTextPathElement::insertedIntoDocument): Call right base class' method. Skipped one in the hierachy before.
        (WebCore::SVGTextPathElement::selfHasRelativeLengths):
        * svg/SVGTextPathElement.h:
        * svg/SVGTextPositioningElement.cpp:
        (WebCore::SVGTextPositioningElement::svgAttributeChanged):
        (WebCore::listContainsRelativeValue): New helper funtion that checks wheter a SVGLengthList contains relative lengths.
        (WebCore::SVGTextPositioningElement::selfHasRelativeLengths):
        * svg/SVGTextPositioningElement.h:
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::insertedIntoDocument): Call right base class' method. Skipped on in the hierachy before.
        (WebCore::SVGUseElement::removedFromDocument): Ditto.
        (WebCore::SVGUseElement::svgAttributeChanged):
        (WebCore::SVGUseElement::buildShadowAndInstanceTree): Call updateRelativeLengthsInformation() after building the shadow tree.
        (WebCore::SVGUseElement::selfHasRelativeLengths): Same as all other methods, except that it includes the shadow tree root element.
        * svg/SVGUseElement.h:

2010-07-05  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Problem with copying a code from Scripts panel.

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

        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype._getSelection):
        (WebInspector.TextViewer.prototype._selectionToPosition):

2010-07-05  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze / Darin Adler.

        Node.cloneNode does not work on SVG nodes
        https://bugs.webkit.org/show_bug.cgi?id=41421

        Be sure to synchronize animated SVG properties before checking whether NamedNodeMap exists.
        When creating a SVG element from JS, and setting all attributes via SVG DOM, and not using setAttribute
        the NamedNodeMap does not exist. When cloning such an element, be sure to synchronize SVG <-> XML DOM
        attributes before attempting to clone, otherwhise the SVG animated properties are lost while cloning.

        Test: svg/custom/clone-element-with-animated-svg-properties.html

        * dom/Element.cpp:
        (WebCore::Element::cloneElementWithoutChildren):

2010-07-05  Antti Koivisto  <koivisto@iki.fi>

        Revert unplanned project file change.

        * WebCore.pri:
        * WebCore.pro:

2010-07-05  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Darin Adler.

        Memory corruption with SVG <use> element
        https://bugs.webkit.org/show_bug.cgi?id=40994

        Fix race condition in svgAttributeChanged. Never call svgAttributeChanged() from attributeChanged()
        when we're synchronizing SVG attributes. It leads to either unnecessary extra work being done or
        crashes. Especially together with <polyline>/<polygon> which always synchronize the SVGAnimatedPoints
        datastructure with the points attribute, no matter if there are changes are not. This should be
        furhter optimized, but this fix is sane and fixes the root of the evil races.

        Test: svg/custom/use-property-synchronization-crash.svg

        * svg/SVGElement.cpp:
        (WebCore::SVGElement::attributeChanged):

2010-07-05  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        [v8] Web Inspector: remove v8-specific code dealing with getOwnPropertyNames from InjectedScript.js
        https://bugs.webkit.org/show_bug.cgi?id=41595

        * inspector/front-end/InjectedScript.js:
        (injectedScriptConstructor):

2010-07-04  Rob Buis  <rwlbuis@gmail.com>

        Reviewed by Dirk Schulze.

        SVG polygons should draw polygons up to the first parsing error
        https://bugs.webkit.org/show_bug.cgi?id=41140

        Render polygons up until the first parsing error.

        Test: svg/custom/poly-parsing-error.html

        * svg/SVGPolyElement.cpp:
        (WebCore::SVGPolyElement::parseMappedAttribute):

2010-07-04  Alice Liu  <alice.liu@apple.com>

        Reviewed by Dan Bernstein.

        Crash reading past end of block in UniscribeController::shapeAndPlaceItem
        https://bugs.webkit.org/show_bug.cgi?id=41554

        Test: platform/win/fast/text/uniscribe-item-boundary-crash.html

        * platform/graphics/win/UniscribeController.cpp:
        (WebCore::UniscribeController::shapeAndPlaceItem):
        Don't look one past the end of str. Instead look to the next item, if applicable.

2010-07-04  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Add basic "in table body" mode to support <tr> insertion
        https://bugs.webkit.org/show_bug.cgi?id=41587

        This also adds a (currently untestable?)
        popUntilTableBodyScopeMarker code path.
        Any tags which would be between a tbody a <tr> would end up
        foster parented outside the <table>.  I think the spec was
        just being over-cautious with popUntilTableBodyScopeMarker.

        * html/HTMLElementStack.cpp:
        (WebCore::HTMLNames::isTableScopeMarker):
        (WebCore::HTMLNames::isTableBodyScopeMarker):
        (WebCore::HTMLElementStack::popUntilTableBodyScopeMarker):
        * html/HTMLElementStack.h:
        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTag):
        (WebCore::HTMLTreeBuilder::callTheAdoptionAgency):

2010-07-04  Anders Carlsson  <andersca@apple.com>

        Fix Windows build.

        * WebCore.vcproj/WebCore.vcproj:

2010-07-04  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        HTMLTreeBuilder needs an adoption agency
        https://bugs.webkit.org/show_bug.cgi?id=41453

        Fix Qt Minimal build.  SVGNames.h should always
        be generated, even when SVG is off, however that's
        not how things currently work.

        * html/HTMLTreeBuilder.cpp:

2010-07-04  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Add a very basic InTable insertion mode
        https://bugs.webkit.org/show_bug.cgi?id=41581

        There is still a bunch of low-hanging fruit left for this
        mode, but even this most-basic support lets us pass 6 more tests. :)

        It's a progression, ship it! :)

        * html/HTMLElementStack.cpp:
        (WebCore::HTMLNames::isScopeMarker):
        (WebCore::HTMLNames::isListItemScopeMarker):
        (WebCore::HTMLNames::isTableScopeMarker):
        (WebCore::HTMLElementStack::popUntilTableScopeMarker):
        * html/HTMLElementStack.h:
        * html/HTMLFormattingElementList.cpp:
        (WebCore::HTMLFormattingElementList::appendMarker):
        * html/HTMLFormattingElementList.h:
        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTag):
        * html/HTMLTreeBuilder.h:

2010-07-01  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        HTMLTreeBuilder needs an adoption agency
        https://bugs.webkit.org/show_bug.cgi?id=41453

        This changes some test results, but only makes the simplest
        adoption agency cases pass.  I think the code is likely
        very close, but further iteration to make this change larger
        seems counter-productive.  I recommend we check in this
        progression and work from here.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::addChildCommon):
         - Make sure callers don't assume this will reparent.
        (WebCore::ContainerNode::parserAddChild):
         - Update comment to document lack of reparenting behavior.
        * html/HTMLElementStack.cpp:
        (WebCore::HTMLElementStack::ElementRecord::ElementRecord):
        (WebCore::HTMLElementStack::ElementRecord::~ElementRecord):
        (WebCore::HTMLElementStack::ElementRecord::replaceElement):
        (WebCore::HTMLElementStack::ElementRecord::isAbove):
         - Added for debugging.
        (WebCore::HTMLElementStack::pushHTMLHtmlElement):
        (WebCore::HTMLElementStack::insertAbove):
         - Needed for the adoption agency.
        (WebCore::HTMLElementStack::topRecord):
        (WebCore::HTMLElementStack::bottom):
        (WebCore::HTMLElementStack::removeHTMLHeadElement):
        (WebCore::HTMLElementStack::remove):
        (WebCore::HTMLElementStack::find):
        (WebCore::HTMLElementStack::topmost):
        (WebCore::HTMLElementStack::contains):
        (WebCore::HTMLElementStack::htmlElement):
        (WebCore::HTMLElementStack::headElement):
        (WebCore::HTMLElementStack::bodyElement):
        (WebCore::HTMLElementStack::pushCommon):
        (WebCore::HTMLElementStack::removeNonTopCommon):
         - Fix the name to match top/bottom.
        * html/HTMLElementStack.h:
        (WebCore::HTMLElementStack::ElementRecord::element):
        (WebCore::HTMLElementStack::ElementRecord::next):
        (WebCore::HTMLElementStack::ElementRecord::releaseNext):
        (WebCore::HTMLElementStack::ElementRecord::setNext):
        * html/HTMLFormattingElementList.cpp:
        (WebCore::HTMLFormattingElementList::closestElementInScopeWithName):
        (WebCore::HTMLFormattingElementList::contains):
        (WebCore::HTMLFormattingElementList::find):
        (WebCore::HTMLFormattingElementList::remove):
        * html/HTMLFormattingElementList.h:
        (WebCore::HTMLFormattingElementList::isEmpty):
        (WebCore::HTMLFormattingElementList::size):
        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTag):
        (WebCore::HTMLTreeBuilder::furthestBlockForFormattingElement):
         - Part of the Adoption Agency algorithm.
        (WebCore::HTMLTreeBuilder::findFosterParentFor):
         - Used to move mis-nested content out of tables.
           This doesn't seem to work quite right yet.
        (WebCore::HTMLTreeBuilder::reparentChildren):
        (WebCore::HTMLTreeBuilder::callTheAdoptionAgency):
         - The ridiculously long/complicated adoption agency algorithm from HTML5.
        (WebCore::HTMLTreeBuilder::processEndTag):
        * html/HTMLTreeBuilder.h:

2010-07-04  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Darin Adler.

        Remove custom src bindings for HTMLFrameElement and HTMLIFrameElement
        https://bugs.webkit.org/show_bug.cgi?id=41578

        Remove bindings obsoleted by: http://trac.webkit.org/changeset/59866
        No new tests because behavior is not changed.

        * Android.jscbindings.mk:
        * Android.v8bindings.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSHTMLFrameElementCustom.cpp:
        * bindings/js/JSHTMLIFrameElementCustom.cpp: Removed.
        * bindings/v8/custom/V8HTMLFrameElementCustom.cpp:
        * bindings/v8/custom/V8HTMLIFrameElementCustom.cpp: Removed.
        * html/HTMLFrameElement.idl:
        * html/HTMLIFrameElement.idl:

2010-07-03  Adam Barth  <abarth@webkit.org>

        Reviewed by Maciej Stachowiak.

        Implement AfterAfterFramesetMode
        https://bugs.webkit.org/show_bug.cgi?id=41561

        This mode is almost unobservable.  The main way to observe it seems to
        be seeing where comment nodes get attached to the DOM.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTag):
        (WebCore::HTMLTreeBuilder::processEndTag):
        (WebCore::HTMLTreeBuilder::processComment):
        (WebCore::HTMLTreeBuilder::processCharacter):
        (WebCore::HTMLTreeBuilder::processEndOfFile):

2010-07-03  Zhenyao Mo  <zmo@google.com>

        Reviewed by Dimitri Glazkov.

        WebGLRenderingContext::vertexAttrib* leads to possible out-of-range vector member visit
        https://bugs.webkit.org/show_bug.cgi?id=41572

        * html/canvas/WebGLRenderingContext.cpp: Fix the out-of-range vector member visit, also refactor the code.
        (WebCore::WebGLRenderingContext::vertexAttrib1f):
        (WebCore::WebGLRenderingContext::vertexAttrib1fv):
        (WebCore::WebGLRenderingContext::vertexAttrib2f):
        (WebCore::WebGLRenderingContext::vertexAttrib2fv):
        (WebCore::WebGLRenderingContext::vertexAttrib3f):
        (WebCore::WebGLRenderingContext::vertexAttrib3fv):
        (WebCore::WebGLRenderingContext::vertexAttrib4f):
        (WebCore::WebGLRenderingContext::vertexAttrib4fv):
        (WebCore::WebGLRenderingContext::vertexAttribfImpl):
        (WebCore::WebGLRenderingContext::vertexAttribfvImpl):
        * html/canvas/WebGLRenderingContext.h: Helper function declaration.

2010-07-03  Jeremy Orlow  <jorlow@chromium.org>

        Ugh.  Have to put the destructor in the .h file since the .ccp isn't compiled yet.

        * storage/IDBKey.h:
        (WebCore::IDBKey::~IDBKey):

2010-07-03  Jeremy Orlow  <jorlow@chromium.org>

        Build fix.  Forgot destructor.

        * storage/IDBKey.cpp:
        (WebCore::IDBKey::~IDBKey):

2010-06-26  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Dumitru Daniliuc.

        Support for keys and in-memory storage for IndexedDB
        https://bugs.webkit.org/show_bug.cgi?id=41252

        It'll take some time to get data persistence working for IndexedDB,
        so until then, we'll just store everything in an in memory tree.
        The tree uses WTF::AVLTree and is a template so that it can be used by
        object stores (IDBKey -> SerializedScriptValue) and indexes (IDBKey ->
        IDBKey).  This class will be used in a subsequent patch.

        Also add an IDBKey type that represents one of these keys.  We use a
        custom toJS function in a way similar to IDBAny to convert from WebCore
        to a JS value.  For converting the other way, we have to teach the code
        generators what to do (unfortunately).  This is done in a way similar
        to serialized script value.  Unlike serialized script value, IDBKey is
        in WebCore and only a helper function is JS engine specific.

        This code is not accessable from layout tests.  (Will fix in
        https://bugs.webkit.org/show_bug.cgi?id=41250)  The bindings tests
        show us that the generated bindings are what we expect.

        * ForwardingHeaders/wtf/AVLTree.h: Added.
        * bindings/js/IDBBindingUtilities.cpp: Added.
        (WebCore::createIDBKeyFromValue):
        * bindings/js/IDBBindingUtilities.h: Added.
        * bindings/js/JSIDBKeyCustom.cpp: Added.
        (WebCore::toJS):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/scripts/test/CPP/WebDOMTestObj.cpp:
        (WebDOMTestObj::idbKey):
        * bindings/scripts/test/CPP/WebDOMTestObj.h:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        (webkit_dom_test_obj_idb_key):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::):
        (WebCore::jsTestObjPrototypeFunctionIdbKey):
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.mm:
        (-[DOMTestObj idbKey:]):
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjInternal::idbKeyCallback):
        (WebCore::):
        * bindings/v8/IDBBindingUtilities.cpp: Added.
        (WebCore::createIDBKeyFromValue):
        * bindings/v8/IDBBindingUtilities.h: Added.
        * bindings/v8/custom/V8IDBKeyCustom.cpp: Added.
        (WebCore::toV8):
        * storage/IDBCallbacks.h:
        * storage/IDBKey.cpp: Added.
        (WebCore::IDBKey::IDBKey):
        (WebCore::IDBKey::~IDBKey):
        * storage/IDBKey.h: Added.
        (WebCore::IDBKey::create):
        (WebCore::IDBKey::):
        (WebCore::IDBKey::type):
        (WebCore::IDBKey::string):
        (WebCore::IDBKey::number):
        * storage/IDBKey.idl: Added.
        * storage/IDBKeyTree.h: Added.
        (WebCore::IDBKeyTree::create):
        (WebCore::IDBKeyTree::AVLTreeAbstractor::get_less):
        (WebCore::IDBKeyTree::AVLTreeAbstractor::set_less):
        (WebCore::IDBKeyTree::AVLTreeAbstractor::get_greater):
        (WebCore::IDBKeyTree::AVLTreeAbstractor::set_greater):
        (WebCore::IDBKeyTree::AVLTreeAbstractor::get_balance_factor):
        (WebCore::IDBKeyTree::AVLTreeAbstractor::set_balance_factor):
        (WebCore::IDBKeyTree::AVLTreeAbstractor::null):
        (WebCore::IDBKeyTree::AVLTreeAbstractor::compare_key_node):
        (WebCore::IDBKeyTree::AVLTreeAbstractor::compare_node_node):
        (WebCore::::IDBKeyTree):
        (WebCore::::~IDBKeyTree):
        (WebCore::::AVLTreeAbstractor::compare_key_key):
        (WebCore::::get):
        (WebCore::::insert):
        (WebCore::::remove):

2010-07-03  Jon Honeycutt  <jhoneycutt@apple.com>

        The missing plug-in indicator should be clickable

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

        From an original patch by Kevin Decker.

        Reviewed by Darin Adler.

        * html/HTMLPlugInElement.cpp:
        (WebCore::HTMLPlugInElement::defaultEventHandler):
        If the renderer is a RenderEmbeddedWidget showing the missing plug-in
        indicator, and the event is a click even, call the ChromeClient's
        missingPluginButtonClicked() function.

        * page/ChromeClient.h:
        (WebCore::ChromeClient::missingPluginButtonClicked):
        Declare missingPluginButtonClicked(), and stub the default
        implementation.

        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::RenderEmbeddedObject):
        Initialize m_showsMissingPluginIndicator.
        (WebCore::RenderEmbeddedObject::setShowsMissingPluginIndicator):
        Assert that we're not currently showing any replacement text. Set
        m_showsMissingPluginIndicator after setting the replacement text.
        (WebCore::RenderEmbeddedObject::setShowsCrashedPluginIndicator):
        Add the same assert as above.

        * rendering/RenderEmbeddedObject.h:
        (WebCore::RenderEmbeddedObject::showsMissingPluginIndicator):
        Getter for m_showsMissingPluginIndicator.

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

        Reviewed by Geoffrey Garen.

        Move BOM handling out of the lexer and parser
        https://bugs.webkit.org/show_bug.cgi?id=41539

        Update WebCore to ensure that SourceProviders don't
        produce strings with BOMs in them.

        * bindings/js/ScriptSourceProvider.h:
        (WebCore::ScriptSourceProvider::ScriptSourceProvider):
        * bindings/js/StringSourceProvider.h:
        (WebCore::StringSourceProvider::StringSourceProvider):
        * loader/CachedScript.cpp:
        (WebCore::CachedScript::CachedScript):
        (WebCore::CachedScript::script):
        * loader/CachedScript.h:
        (WebCore::CachedScript::):
          CachedScript now stores decoded data with the BOMs stripped,
          and caches the presence of BOMs across memory purges.

2010-07-03  Xan Lopez  <xlopez@igalia.com>

        Include DerivedSources/WebCore before DerivedSources/

        Recently DerivedSources generation was changed, with some files no
        longer being generated in the toplevel DerivedSources
        directory. Since that directory is first in the -I flags the build
        can be broken in some cases by including old files unless a 'make
        clean' is done. Change the -I order to fix the build in the 32 bit
        Release bot.

        * GNUmakefile.am:

2010-07-03  Erik Arvidsson  <arv@chromium.org>

        Reviewed by Ojan Vafai.

        Fix issue where a contextmenu event was reporting the wrong target if
        the context menu was shown due to pressing the context menu key
        (or Shift+F10).
        
        Split sendContextMenuForEvent into one case for keyboard events and use
        that when the contextmenu event should be dispatched due to a keypress.

        For the keboard case we now use the focused node as the target for the
        event and use the clipped rect to determine the position of the menu.
        
        https://bugs.webkit.org/show_bug.cgi?id=38129

        Use manual test since DRT does not handle context menu keys.

        * manual-tests/win/contextmenu-key.html: Added.
        * page/EventHandler.cpp:
        (WebCore::EventHandler::sendContextMenuEvent):
        (WebCore::EventHandler::sendContextMenuEventForKey):
        * page/EventHandler.h:

2010-07-03  Dirk Schulze  <krit@webkit.org>

        Unreviewed sort of Xcode project file.

        * WebCore.xcodeproj/project.pbxproj:

2010-07-03  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Kent Tamura.

        [BREWMP] Port Widget
        https://bugs.webkit.org/show_bug.cgi?id=41538

        Make Widget a dummy class. WebKit Brew MP uses the full screen mode
        and does not use the window system introduced in Brew MP.

        * platform/Widget.h:
        * platform/brew/WidgetBrew.cpp: Added.
        (WebCore::Widget::Widget):
        (WebCore::Widget::~Widget):
        (WebCore::Widget::frameRect):
        (WebCore::Widget::setFrameRect):
        (WebCore::Widget::setFocus):
        (WebCore::Widget::setCursor):
        (WebCore::Widget::show):
        (WebCore::Widget::hide):
        (WebCore::Widget::paint):
        (WebCore::Widget::setIsSelected):

2010-07-03  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Implement AfterFramesetMode
        https://bugs.webkit.org/show_bug.cgi?id=41560

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTag):
        (WebCore::HTMLTreeBuilder::processEndTag):
        (WebCore::HTMLTreeBuilder::processCharacter):
        (WebCore::HTMLTreeBuilder::processEndOfFile):

2010-07-02  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Implement InFramesetMode
        https://bugs.webkit.org/show_bug.cgi?id=41559

        Pretty straighforward.  We still don't handle character tokens
        correctly.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTag):
        (WebCore::HTMLTreeBuilder::processEndTag):
        (WebCore::HTMLTreeBuilder::processCharacter):
        (WebCore::HTMLTreeBuilder::processEndOfFile):

2010-07-02  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Handle <frameset> InBody
        https://bugs.webkit.org/show_bug.cgi?id=41558

        Handling the <frameset> tag in the InBody mode is somewhat delicate.

        * html/HTMLElementStack.cpp:
        (WebCore::HTMLElementStack::popHTMLBodyElement):
        (WebCore::HTMLElementStack::popUntil):
        (WebCore::HTMLElementStack::popCommon):
        * html/HTMLElementStack.h:
        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTag):

2010-07-02  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Special handling of <rp> and <rt> tags
        https://bugs.webkit.org/show_bug.cgi?id=41557

        So sayeth the spec.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTag):

2010-07-02  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Implement special optgroup processing
        https://bugs.webkit.org/show_bug.cgi?id=41556

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTag):

2010-07-02  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Handle <image> in new parser
        https://bugs.webkit.org/show_bug.cgi?id=41555

        This patch is kind of goofy but apparently how the world works.

        * html/HTMLToken.h:
        (WebCore::AtomicHTMLToken::setName):
        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTag):

2010-07-02  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Alexey Proskuryakov.

        Remove extra semicolon at the end of HTMLTreeBuilder::attach
        https://bugs.webkit.org/show_bug.cgi?id=41546

        This is not critical, but the extra semicolon at the end of HTMLTreeBuilder::attach
        causes a warning in RVCT.

        * html/HTMLTreeBuilder.h:
        (WebCore::HTMLTreeBuilder::attach):

2010-07-02  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Darin Adler.

        Performance::disconnectFrame() needs to disconnect its children
        https://bugs.webkit.org/show_bug.cgi?id=41533

        No new tests because no new functionality.

        * page/Performance.cpp:
        (WebCore::Performance::disconnectFrame):

2010-07-02  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Sam Weinig.

        Checking if WTF_USE_JSC is defined before redefining it in config.h
        https://bugs.webkit.org/show_bug.cgi?id=41530

        * config.h:

2010-07-02  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Dimitri Glazkov.

        Add vendor prefix to window.performance
        https://bugs.webkit.org/show_bug.cgi?id=41525

        No new tests because window.performance tests not landed yet.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::webkitPerformance):
        * page/DOMWindow.h:
        (WebCore::DOMWindow::optionalWebkitPerformance):
        * page/DOMWindow.idl:

2010-07-02  Zoltan Herczeg  <zherczeg@webkit.org>

        Reviewed by Oliver Hunt.

        Minor fix: Diffuse constant is float (not integer)
        https://bugs.webkit.org/show_bug.cgi?id=10412

        * svg/SVGFEDiffuseLightingElement.cpp:
        (WebCore::SVGFEDiffuseLightingElement::parseMappedAttribute):

2010-07-02  Martin Robinson  <mrobinson@igalia.com>

        Unreviewed.

        Build fix for GTK+. Try to force a rebuild of the HTMLNames.h
        file first by touching HTMLTagNames.in.

        * html/HTMLTagNames.in:

2010-07-02  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Oliver Hunt.

        RGB colors should be clamped to the 0-255 range
        https://bugs.webkit.org/show_bug.cgi?id=39482

        Spec link:
        http://www.whatwg.org/specs/web-apps/current-work/#colors

        Test: fast/canvas/canvas-color-clamping.html

        * css/CSSParser.cpp:
        (WebCore::parseColorInt):
        (WebCore::CSSParser::parseColor):
        (WebCore::parseColorIntFromValue):
        (WebCore::CSSParser::parseColorParameters):

2010-07-02  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r62410.
        http://trac.webkit.org/changeset/62410
        https://bugs.webkit.org/show_bug.cgi?id=41549

        accursed last minute changes (Requested by olliej on #webkit).

        * bindings/js/ScriptSourceProvider.h:
        (WebCore::ScriptSourceProvider::ScriptSourceProvider):
        * bindings/js/StringSourceProvider.h:
        (WebCore::StringSourceProvider::StringSourceProvider):
        * loader/CachedScript.cpp:
        (WebCore::CachedScript::CachedScript):
        (WebCore::CachedScript::script):
        * loader/CachedScript.h:

2010-07-02  Martin Robinson  <mrobinson@igalia.com>

        Unreviewed.

        Further Build fix for GTK+. Also include HTMLElementFactory.h in
        the list of dependencies.

        * GNUmakefile.am:

2010-07-02  Martin Robinson  <mrobinson@igalia.com>

        Unreviewed.

        Build fix for GTK+. *Names.{cpp,h} targets should now include the
        header files. Also adds the header files to the generated sources list.

        * GNUmakefile.am:

2010-07-02  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Darin Fisher.

        DB clean up.
        https://bugs.webkit.org/show_bug.cgi?id=41404

        1. Made all DatabaseTasks internal classes of Database and made
           the Database methods called by those tasks private.
        2. Removed the Database::stop{ed}() methods.
        3. Removed the code that kept track of open databases from
           ScriptExecutionContext (no longer needed).
        4. Made minor changes to Database::closeImmediately() to make it
           possible for DatabaseThread to call that method instead of
           close().
        5. Minor fix to DatabaseTracker: addOpenDatabase() should call
           OriginQuotaManager::addDatabase() if the origin quota manager
           is not tracking this origin.
        6. Removed Database::performPolicyChecks(). We already update the
           DB size after each transaction, and we enforce a max size for
           the DB at the beginning of each transaction.

        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::stopDatabases):
        * dom/ScriptExecutionContext.h:
        (WebCore::ScriptExecutionContext::hasOpenDatabases):
        * storage/Database.cpp:
        (WebCore::Database::openDatabase):
        (WebCore::Database::Database):
        (WebCore::Database::markAsDeletedAndClose):
        (WebCore::Database::close):
        (WebCore::Database::closeImmediately):
        * storage/Database.h:
        * storage/DatabaseTask.cpp:
        (WebCore::DatabaseTask::performTask):
        (WebCore::Database::DatabaseOpenTask::DatabaseOpenTask):
        (WebCore::Database::DatabaseOpenTask::doPerformTask):
        (WebCore::Database::DatabaseOpenTask::debugTaskName):
        (WebCore::Database::DatabaseCloseTask::DatabaseCloseTask):
        (WebCore::Database::DatabaseCloseTask::doPerformTask):
        (WebCore::Database::DatabaseCloseTask::debugTaskName):
        (WebCore::Database::DatabaseTransactionTask::DatabaseTransactionTask):
        (WebCore::Database::DatabaseTransactionTask::doPerformTask):
        (WebCore::Database::DatabaseTransactionTask::debugTaskName):
        (WebCore::Database::DatabaseTableNamesTask::DatabaseTableNamesTask):
        (WebCore::Database::DatabaseTableNamesTask::doPerformTask):
        (WebCore::Database::DatabaseTableNamesTask::debugTaskName):
        * storage/DatabaseTask.h:
        (WebCore::Database::DatabaseOpenTask::create):
        (WebCore::Database::DatabaseCloseTask::create):
        (WebCore::Database::DatabaseTransactionTask::create):
        (WebCore::Database::DatabaseTableNamesTask::create):
        * storage/DatabaseThread.cpp:
        (WebCore::DatabaseThread::databaseThread):
        * storage/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::addOpenDatabase):
        * storage/SQLTransaction.cpp:
        (WebCore::SQLTransaction::executeSQL):
        (WebCore::SQLTransaction::checkAndHandleClosedDatabase):

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

        Reviewed by Geoffrey Garen.

        Move BOM handling out of the lexer and parser
        https://bugs.webkit.org/show_bug.cgi?id=41539

        Update WebCore to ensure that SourceProviders don't
        produce strings with BOMs in them.

        * bindings/js/ScriptSourceProvider.h:
        (WebCore::ScriptSourceProvider::ScriptSourceProvider):
        * bindings/js/StringSourceProvider.h:
        (WebCore::StringSourceProvider::StringSourceProvider):
        * loader/CachedScript.cpp:
        (WebCore::CachedScript::CachedScript):
        (WebCore::CachedScript::script):
        * loader/CachedScript.h:
        (WebCore::CachedScript::):
          CachedScript now stores decoded data with the BOMs stripped,
          and caches the presence of BOMs across memory purges.

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

        Add missing symbol to exports file.

        * WebCore.base.exp:

2010-07-02  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Darin Fisher.

        Remove the extra setFailed() call in JPEG decoder to prevent
        re-using an already freed object.
        https://bugs.webkit.org/show_bug.cgi?id=41487

        Test: fast/images/large-size-image-crash.html

        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::JPEGImageReader::decode):

2010-07-02  Peter Beverloo  <peter@lvp-media.com>

        Reviewed by Maciej Stachowiak.

        Add the HTML5 <mark> element. Text content of the element will have
        a yellow background color and black text.

        Test: fast/html/mark-element.html
        Tests for <p> closing, phrasing child content and residual style.

        * css/html.css:
        (mark):
        * html/HTMLElement.cpp:
        (WebCore::inlineTagList):
        * html/HTMLTagNames.in:
        * html/LegacyHTMLTreeBuilder.cpp:
        (WebCore::LegacyHTMLTreeBuilder::getNode):
        (WebCore::LegacyHTMLTreeBuilder::isInline):
        (WebCore::LegacyHTMLTreeBuilder::isResidualStyleTag):

2010-07-02  Zhenyao Mo  <zmo@google.com>

        Reviewed by Dimitri Glazkov.

        Fix issues in boundary situations for WebGLRenderingContext::drawArrays/drawElements
        https://bugs.webkit.org/show_bug.cgi?id=41473

        * WebCore.gypi: Add CheckedInt.h.
        * WebCore.xcodeproj/project.pbxproj: Add CheckedInt.h.
        * html/canvas/CheckedInt.h: Added support of safe integer operations.
        (mozilla::CheckedInt_internal::integer_type_manually_recorded_info::):
        (mozilla::CheckedInt_internal::is_unsupported_type::):
        (mozilla::CheckedInt_internal::):
        (mozilla::CheckedInt_internal::integer_traits::):
        (mozilla::CheckedInt_internal::integer_traits::min):
        (mozilla::CheckedInt_internal::integer_traits::max):
        (mozilla::CheckedInt_internal::has_sign_bit):
        (mozilla::CheckedInt_internal::binary_complement):
        (mozilla::CheckedInt_internal::is_in_range):
        (mozilla::CheckedInt_internal::is_add_valid):
        (mozilla::CheckedInt_internal::is_sub_valid):
        (mozilla::CheckedInt_internal::is_mul_valid):
        (mozilla::CheckedInt_internal::is_div_valid):
        (mozilla::CheckedInt::CheckedInt):
        (mozilla::CheckedInt::value):
        (mozilla::CheckedInt::valid):
        (mozilla::CheckedInt::operator -):
        (mozilla::CheckedInt::operator ==):
        (mozilla::CheckedInt::operator !=):
        (mozilla::operator /):
        (mozilla::cast_to_CheckedInt_impl::run):
        (mozilla::):
        (mozilla::cast_to_CheckedInt):
        (mozilla::operator ==):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::validateIndexArrayConservative): Fix a bug against 0-size buffer situation.
        (WebCore::WebGLRenderingContext::drawArrays): Deal with overflows and count==0 situation.
        (WebCore::WebGLRenderingContext::drawElements): Deal with count==0 situation.

2010-07-02  Zhenyao Mo  <zmo@google.com>

        Reviewed by Dimitri Glazkov.

        linkProgram should fail when vertex/fragment shaders are not both present
        https://bugs.webkit.org/show_bug.cgi?id=41380

        Test: fast/canvas/webgl/program-test.html

        * html/canvas/WebGLProgram.cpp: Add flag for link failure due to missing shaders.
        (WebCore::WebGLProgram::WebGLProgram):
        * html/canvas/WebGLProgram.h: Add interface for linkFailure flag.
        (WebCore::WebGLProgram::isLinkFailureFlagSet):
        (WebCore::WebGLProgram::setLinkFailureFlag):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getProgramParameter): Intercept when linkFailureFlag is set.
        (WebCore::WebGLRenderingContext::linkProgram): Check if there are missing shaders and don't link if yes.
        * html/canvas/WebGLShader.cpp: Cache shader type.
        (WebCore::WebGLShader::WebGLShader):
        * html/canvas/WebGLShader.h: Ditto.
        (WebCore::WebGLShader::getType):

2010-07-02  Qi Zhang  <qi.2.zhang@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt]  Failed on http://philip.html5.org/tests/canvas/suite/tests/2d.drawImage.negativesource.html

        Support negative width and height in canvas image draw

        * platform/graphics/FloatRect.h:
        * platform/graphics/qt/FloatRectQt.cpp:
        (WebCore::FloatRect::normalized):
        * platform/graphics/qt/ImageQt.cpp:
        (WebCore::BitmapImage::draw):

2010-06-24  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Alexey Proskuryakov.

        REGRESSION: Enter does not trigger submit of forms when focus is on select.
        https://bugs.webkit.org/show_bug.cgi?id=39532

        Restore behavior where hitting "Enter" on a select element attempts to submit
        form implicitly.

        * dom/SelectElement.cpp:
        (WebCore::SelectElement::menuListDefaultEventHandler): Added htmlForm argument,
            and attempting to submit implicitly.
        (WebCore::SelectElement::listBoxDefaultEventHandler): Ditto.
        (WebCore::SelectElement::defaultEventHandler): Plumbed through htmlForm argument.
        * dom/SelectElement.h: Added htmlForm argument to method declaration.
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::defaultEventHandler): Changed to provide submitting form
            as the argument.

2010-07-02  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Fisher.

        [Chromium] Support indeterminate checkbox for Linux, and a small fix for Windows
        https://bugs.webkit.org/show_bug.cgi?id=41508

        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::RenderThemeChromiumSkia::paintCheckbox):
          Use dedicated images for indeterminate states.
        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore::RenderThemeChromiumWin::determineClassicState):
          Do not use DFCS_CHECKED in a case of indeterminate state in
          order to have consistent appearance of indeterminate checkbox.

2010-07-02  Brent Fulgham  <bfulgham@webkit.org>

        Reviewed by Gustavo Noronha Silva.

        Fixes https://bugs.webkit.org/show_bug.cgi?id=41323.
        Provides an implementation of the 'squiggle' used for
        bad grammar or spelling, based on the Pango logic used
        by the GTK builds.

        No new tests. Covered by LayoutTests/editing/spelling

        * WebCore.vcproj/WebCore.vcproj: Add new file holding underline
        implementation, set to build only for WinCairo port.
        * platform/graphics/cairo/DrawErrorUnderline.cpp: Added.
        (drawErrorUnderline): New file containing the squiggle drawing
        logic based on the Pango implementation.  Placed in its own file
        to isolate licenses.
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawLineForMisspellingOrBadGrammar):
        Have WinCairo build call new 'drawErrorUnderline' implementation.

2010-07-02  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] Separate DerivedSources per-project
        https://bugs.webkit.org/show_bug.cgi?id=41109

        Generate WebCore derived sources in <builddir>/DerivedSources/WebCore.

        * GNUmakefile.am:

2010-07-02  Zhenyao Mo  <zmo@google.com>

        Reviewed by Dimitri Glazkov.

        Implement OpenGL ES 2.0 semantics for vertex attribute 0
        https://bugs.webkit.org/show_bug.cgi?id=41300

        Test: fast/canvas/webgl/gl-bind-attrib-location-test.html
              fast/canvas/webgl/gl-vertex-attrib.html

        * html/canvas/WebGLProgram.cpp:
        (WebCore::WebGLProgram::numActiveAttribLocations): const.
        (WebCore::WebGLProgram::getActiveAttribLocation): const.
        (WebCore::WebGLProgram::isUsingVertexAttrib0): Determine whether vertex attrib 0 is used by the program.
        * html/canvas/WebGLProgram.h: Declare isUsingVertexAttrib0.
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::WebGLRenderingContext): Deal with vertex attrib 0.
        (WebCore::WebGLRenderingContext::disableVertexAttribArray): Ditto.
        (WebCore::WebGLRenderingContext::drawArrays): Ditto.
        (WebCore::WebGLRenderingContext::drawElements): Ditto.
        (WebCore::WebGLRenderingContext::getVertexAttrib): Use cached value instead of calling glGetVertexAtrtrib.
        (WebCore::WebGLRenderingContext::vertexAttrib1f): Validate input, deal with vertex attrib 0.
        (WebCore::WebGLRenderingContext::vertexAttrib1fv): Ditto.
        (WebCore::WebGLRenderingContext::vertexAttrib2f): Ditto.
        (WebCore::WebGLRenderingContext::vertexAttrib2fv): Ditto.
        (WebCore::WebGLRenderingContext::vertexAttrib3f): Ditto.
        (WebCore::WebGLRenderingContext::vertexAttrib3fv): Ditto.
        (WebCore::WebGLRenderingContext::vertexAttrib4f): Ditto.
        (WebCore::WebGLRenderingContext::vertexAttrib4fv): Ditto.
        (WebCore::WebGLRenderingContext::vertexAttribPointer): Ditto.
        (WebCore::WebGLRenderingContext::handleNPOTTextures): Move isGLES2Compliant() to caller.
        (WebCore::WebGLRenderingContext::vertexAttribImpl): Helper for vertexAttribNfv.
        (WebCore::WebGLRenderingContext::initVertexAttrib0): Initialize vertex attrib 0.
        (WebCore::WebGLRenderingContext::simulateVertexAttrib0): Simulate vertex attrib 0.
        (WebCore::WebGLRenderingContext::restoreStatesAfterVertexAttrib0Simulation): Restore states after simulating vertex attrib 0.
        * html/canvas/WebGLRenderingContext.h:
        (WebCore::WebGLRenderingContext::VertexAttribState::VertexAttribState): Tracking full vertex attrib states.
        (WebCore::WebGLRenderingContext::VertexAttribState::initValue): Init value to [0,0,0,1].

2010-07-02  Zhenyao Mo  <zmo@google.com>

        Reviewed by Dimitri Glazkov.

        Need to validate the size of the incoming arrays for uniform* functions
        https://bugs.webkit.org/show_bug.cgi?id=41383

        * html/canvas/WebGLRenderingContext.cpp: Validate input array size.
        (WebCore::WebGLRenderingContext::uniform1fv):
        (WebCore::WebGLRenderingContext::uniform1iv):
        (WebCore::WebGLRenderingContext::uniform2fv):
        (WebCore::WebGLRenderingContext::uniform2iv):
        (WebCore::WebGLRenderingContext::uniform3fv):
        (WebCore::WebGLRenderingContext::uniform3iv):
        (WebCore::WebGLRenderingContext::uniform4fv):
        (WebCore::WebGLRenderingContext::uniform4iv):
        (WebCore::WebGLRenderingContext::uniformMatrix2fv):
        (WebCore::WebGLRenderingContext::uniformMatrix3fv):
        (WebCore::WebGLRenderingContext::uniformMatrix4fv):
        (WebCore::WebGLRenderingContext::validateUniformParameters):
        (WebCore::WebGLRenderingContext::validateUniformMatrixParameters):
        * html/canvas/WebGLRenderingContext.h: Add helper functions.

2010-07-02  Tor Arne Vestbø  <tor.arne.vestbo@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Canvas arcTo() should draw straight line to p1 if p0, p1 and p2 are collinear

        The implementation of PathQt's addArcTo() was not float-safe and also had
        a case where it drew an 'infinite' line, which is not part of the spec.

        http://www.whatwg.org/specs/web-apps/current-work/#dom-context-2d-arcto

        We now use qFuzzyCompare() in both cases. The method isPointOnPathBorder()
        also had the same problem, and was refactored a bit in the process of fixing
        the bug.

        Initial patch by Andreas Kling.

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

        * platform/graphics/qt/PathQt.cpp:

2010-07-02  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        [v8] Web Inspector: inspected page crashes on attempt to change iframe's src attribute
        https://bugs.webkit.org/show_bug.cgi?id=41511

        Tests: fast/events/popup-blocked-from-fake-user-gesture.html
               http/tests/inspector/change-iframe-src.html

        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::processingUserGesture): use V8Proxy from the ScriptController instead of one
        from the call stack. Get event directly from hidden property to avoid unnecessary checks.
        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::invokeEventHandler):
        * bindings/v8/V8HiddenPropertyName.h:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::eventAccessorGetter):
        (WebCore::V8DOMWindow::eventAccessorSetter):

2010-07-02  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Fix tokenization of <!----->
        https://bugs.webkit.org/show_bug.cgi?id=41505

        I noticed this error when browsing through the HTML5lib failures.
        We're adding an extra character to the comment token, contrary to what
        the spec says to do.

        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::nextToken):

2010-07-02  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Implement processFakePEndTagIfPInScope
        https://bugs.webkit.org/show_bug.cgi?id=41503

        This is a common idiom because <p> likes to close itself.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processFakePEndTagIfPInScope):
        (WebCore::HTMLTreeBuilder::processStartTag):
        * html/HTMLTreeBuilder.h:

2010-07-02  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Implement AfterAfterBodyMode
        https://bugs.webkit.org/show_bug.cgi?id=41501

        In implementing this mode, I noticed a bug in the character processing
        of the AfterBodyMode, which I fixed by adding a break statement.  Also,
        to get one of the new tests to pass, I needed to implement one
        notImplemented() in the InBody insertion mode.  Yay for testing.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTag):
        (WebCore::HTMLTreeBuilder::processEndTag):
        (WebCore::HTMLTreeBuilder::processComment):
        (WebCore::HTMLTreeBuilder::processCharacter):
        (WebCore::HTMLTreeBuilder::processEndOfFile):

2010-07-02  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r62371.
        http://trac.webkit.org/changeset/62371
        https://bugs.webkit.org/show_bug.cgi?id=41515

        "Breaks media/controls-drag-timebar.html on 32-Bit Release"
        (Requested by philn-tp on #webkit).

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::maxTimeSeekable):
        (WebCore::MediaPlayerPrivateGStreamer::updateStates):

2010-06-28  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Xan Lopez.

        [GStreamer] can't seek past maxTimeLoaded value
        https://bugs.webkit.org/show_bug.cgi?id=40526

        Extended the seekable range to the whole media. This allows video
        played with progressive download to be seeked past the current
        buffered position.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::maxTimeSeekable):
        (WebCore::MediaPlayerPrivateGStreamer::updateStates):

2010-07-02  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Implement AfterBodyMode for HTML5 tree builder
        https://bugs.webkit.org/show_bug.cgi?id=41500

        In the coarse of implementing this state, I ran into an ASSERT in how
        </br> tags where handled, which I fixed.  Technically, that could be a
        separate patch, but it seemed harmless to include it here (with tests).

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTag):
        (WebCore::HTMLTreeBuilder::processEndTag):
        (WebCore::HTMLTreeBuilder::processComment):
        (WebCore::HTMLTreeBuilder::processCharacter):
        (WebCore::HTMLTreeBuilder::processEndOfFile):
        (WebCore::HTMLTreeBuilder::insertCommentOnHTMLHtmlElement):
        * html/HTMLTreeBuilder.h:

2010-07-02  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Handle <base> and friends in AfterHeadMode
        https://bugs.webkit.org/show_bug.cgi?id=41502

        Implement notImplemented() per spec.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTag):

2010-07-01  Oliver Hunt  <oliver@apple.com>

        Build fix

        * dom/Document.h:

2010-07-01  Oliver Hunt  <oliver@apple.com>

        Reviewed by Maciej Stachowiak.

        Add a FixedArray template to encapsulate fixed length arrays
        https://bugs.webkit.org/show_bug.cgi?id=41506

        Add forwarding header, and replace a few fixed length arrays
        with the new FixedArray type.

        * ForwardingHeaders/wtf/FixedArray.h: Added.
        * dom/Document.h:
        * platform/graphics/GlyphMetricsMap.h:

2010-07-01  Simon Fraser  <simon.fraser@apple.com>

        No review.

        Fix a link warning in 32-bit by not explicitly exporting WebCore::GraphicsLayer::syncCompositingStateForThisLayerOnly().

        * WebCore.AcceleratedCompositing.exp:

2010-07-01  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Dimitri Glazkov.

        Add window.performance.navigation namespace
        https://bugs.webkit.org/show_bug.cgi?id=41442

        Adds window.performance.navigation namespace consisting of ".type"
        and ".redirectCount". As part of this change, I renmaed "NavigationTiming"
        to just "Timing" to avoid confusion.

        No new tests because tests will be added in a subsequent patch when
        functionality is added.

        * Android.mk:
        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * page/Navigation.cpp: Added.
        (WebCore::Navigation::Navigation):
        (WebCore::Navigation::frame):
        (WebCore::Navigation::disconnectFrame):
        (WebCore::Navigation::type):
        (WebCore::Navigation::redirectCount):
        * page/Navigation.h: Added.
        (WebCore::Navigation::create):
        * page/Navigation.idl: Added.
        * page/NavigationTiming.cpp: Removed.
        * page/NavigationTiming.h: Removed.
        * page/NavigationTiming.idl: Removed.
        * page/Performance.cpp:
        (WebCore::Performance::navigation):
        (WebCore::Performance::timing):
        * page/Performance.h:
        * page/Performance.idl:
        * page/Timing.cpp: Added.
        (WebCore::Timing::Timing):
        (WebCore::Timing::frame):
        (WebCore::Timing::disconnectFrame):
        (WebCore::Timing::navigationStart):
        * page/Timing.h: Added.
        (WebCore::Timing::create):
        * page/Timing.idl: Added.

2010-07-01  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by Jian Li.

        [chromium] Dragging a link triggers an assert when accessing event.dataTransfer.types
        https://bugs.webkit.org/show_bug.cgi?id=41493

        ClipboardChromium::writeURL violates ClipboardChromium's assumption that uriList will always
        be non-empty if url is valid.

        No new tests.

        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::ClipboardChromium::writeURL):

2010-07-01  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Clamp color stops passed to QGradient to 1.0
        [https://bugs.webkit.org/show_bug.cgi?id=41484

        Fixes an issue where color stops would be silently dropped from radial gradients.

        * platform/graphics/qt/GradientQt.cpp:
        (WebCore::Gradient::platformGradient):

2010-07-01  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        HTMLTokenizer should ASSERT that it never emits a null character
        https://bugs.webkit.org/show_bug.cgi?id=41448

        No functional change, thus no tests.  These ASSERTs would have
        caught the coding error which caused the trouble in bug 41436
        (which was fixed by bug 41439).

        * html/HTMLToken.h:
        (WebCore::HTMLToken::beginStartTag):
        (WebCore::HTMLToken::beginCharacter):
        (WebCore::HTMLToken::beginDOCTYPE):
        (WebCore::HTMLToken::appendToName):
        (WebCore::HTMLToken::appendToComment):
        (WebCore::HTMLToken::appendToAttributeName):
        (WebCore::HTMLToken::appendToAttributeValue):
        (WebCore::HTMLToken::appendToPublicIdentifier):
        (WebCore::HTMLToken::appendToSystemIdentifier):

2010-07-01  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Tor Arne Vestbø.

        Canvas: Don't paint with empty radial gradients
        https://bugs.webkit.org/show_bug.cgi?id=41190

        If a radial gradient has x0==x1 && y0==y1 && r0==r1, don't paint with it.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::fillRect):
        * platform/graphics/Gradient.h:
        (WebCore::Gradient::isZeroSize):

2010-07-01  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Adam Barth.

        Add interface for network platform to pass up timing information
        https://bugs.webkit.org/show_bug.cgi?id=41437

        The Web Timing feature requires the network platform to expose detailed
        timing information for the main resource. This patch adds that data to
        the ResourceResponseBase. Since the 82 bytes of information is only
        needed for the main resource, it is a RefPtr to avoid using the memory
        for other resource types.

        No new tests because no new functionality.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/network/ResourceLoadTiming.h: Added.
        (WebCore::ResourceLoadTiming::create):
        (WebCore::ResourceLoadTiming::deepCopy):
        (WebCore::ResourceLoadTiming::operator==):
        (WebCore::ResourceLoadTiming::operator!=):
        (WebCore::ResourceLoadTiming::ResourceLoadTiming):
        * platform/network/ResourceResponseBase.cpp:
        (WebCore::ResourceResponseBase::adopt):
        (WebCore::ResourceResponseBase::copyData):
        (WebCore::ResourceResponseBase::resourceLoadTiming):
        (WebCore::ResourceResponseBase::setResourceLoadTiming):
        (WebCore::ResourceResponseBase::compare):
        * platform/network/ResourceResponseBase.h:

2010-07-01  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r62321.
        http://trac.webkit.org/changeset/62321
        https://bugs.webkit.org/show_bug.cgi?id=41494

        Broke the non-win builds. (Requested by dumi on #webkit).

        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::addOpenDatabase):
        (WebCore::ScriptExecutionContext::removeOpenDatabase):
        (WebCore::ScriptExecutionContext::stopDatabases):
        * dom/ScriptExecutionContext.h:
        * storage/Database.cpp:
        (WebCore::Database::openDatabase):
        (WebCore::Database::Database):
        (WebCore::Database::markAsDeletedAndClose):
        (WebCore::ContextRemoveOpenDatabaseTask::create):
        (WebCore::ContextRemoveOpenDatabaseTask::performTask):
        (WebCore::ContextRemoveOpenDatabaseTask::isCleanupTask):
        (WebCore::ContextRemoveOpenDatabaseTask::ContextRemoveOpenDatabaseTask):
        (WebCore::Database::close):
        (WebCore::Database::closeImmediately):
        (WebCore::Database::stop):
        (WebCore::Database::performPolicyChecks):
        * storage/Database.h:
        (WebCore::Database::):
        (WebCore::Database::stopped):
        * storage/DatabaseTask.cpp:
        (WebCore::DatabaseTask::performTask):
        (WebCore::DatabaseOpenTask::DatabaseOpenTask):
        (WebCore::DatabaseOpenTask::doPerformTask):
        (WebCore::DatabaseOpenTask::debugTaskName):
        (WebCore::DatabaseCloseTask::DatabaseCloseTask):
        (WebCore::DatabaseCloseTask::doPerformTask):
        (WebCore::DatabaseCloseTask::debugTaskName):
        (WebCore::DatabaseTransactionTask::DatabaseTransactionTask):
        (WebCore::DatabaseTransactionTask::~DatabaseTransactionTask):
        (WebCore::DatabaseTransactionTask::doPerformTask):
        (WebCore::DatabaseTransactionTask::debugTaskName):
        (WebCore::DatabaseTableNamesTask::DatabaseTableNamesTask):
        (WebCore::DatabaseTableNamesTask::doPerformTask):
        (WebCore::DatabaseTableNamesTask::debugTaskName):
        * storage/DatabaseTask.h:
        (WebCore::DatabaseOpenTask::create):
        (WebCore::DatabaseCloseTask::create):
        (WebCore::DatabaseTransactionTask::create):
        (WebCore::DatabaseTableNamesTask::create):
        * storage/DatabaseThread.cpp:
        (WebCore::DatabaseThread::databaseThread):
        * storage/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::addOpenDatabase):
        * storage/SQLTransaction.cpp:
        (WebCore::SQLTransaction::executeSQL):
        (WebCore::SQLTransaction::checkAndHandleClosedDatabase):

2010-07-01  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        [GTK] Stop using GdkRegion in 3.x mode
        https://bugs.webkit.org/show_bug.cgi?id=41463

        Make us compile without using GdkRegion, since it's gone from GTK+
        3.x.

        * platform/graphics/IntRect.h:
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::drawFocusRing):
        * platform/graphics/gtk/FontGtk.cpp:
        (WebCore::cairo_region_shrink):
        (WebCore::Font::drawComplexText):
        * platform/gtk/GtkPluginWidget.cpp:
        (WebCore::GtkPluginWidget::paint):
        * platform/gtk/RenderThemeGtk.h:
        * platform/gtk/ScrollbarGtk.cpp:
        (ScrollbarGtk::paint):

2010-06-30  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Darin Fisher.

        DB clean up.
        https://bugs.webkit.org/show_bug.cgi?id=41404

        1. Made all DatabaseTasks internal classes of Database and made
           the Database methods called by those tasks private.
        2. Removed the Database::stop{ed}() methods.
        3. Removed the code that kept track of open databases from
           ScriptExecutionContext (no longer needed).
        4. Made minor changes to Database::closeImmediately() to make it
           possible for DatabaseThread to call that method instead of
           close().
        5. Minor fix to DatabaseTracker: addOpenDatabase() should call
           OriginQuotaManager::addDatabase() if the origin quota manager
           is not tracking this origin.
        6. Removed Database::performPolicyChecks(). We already update the
           DB size after each transaction, and we enforce a max size for
           the DB at the beginning of each transaction.

        * dom/ScriptExecutionContext.cpp:
        (WebCore::ScriptExecutionContext::stopDatabases):
        * dom/ScriptExecutionContext.h:
        (WebCore::ScriptExecutionContext::hasOpenDatabases):
        * storage/Database.cpp:
        (WebCore::Database::openDatabase):
        (WebCore::Database::Database):
        (WebCore::Database::markAsDeletedAndClose):
        (WebCore::Database::close):
        (WebCore::Database::closeImmediately):
        * storage/Database.h:
        * storage/DatabaseTask.cpp:
        (WebCore::DatabaseTask::performTask):
        (WebCore::Database::DatabaseOpenTask::DatabaseOpenTask):
        (WebCore::Database::DatabaseOpenTask::doPerformTask):
        (WebCore::Database::DatabaseOpenTask::debugTaskName):
        (WebCore::Database::DatabaseCloseTask::DatabaseCloseTask):
        (WebCore::Database::DatabaseCloseTask::doPerformTask):
        (WebCore::Database::DatabaseCloseTask::debugTaskName):
        (WebCore::Database::DatabaseTransactionTask::DatabaseTransactionTask):
        (WebCore::Database::DatabaseTransactionTask::doPerformTask):
        (WebCore::Database::DatabaseTransactionTask::debugTaskName):
        (WebCore::Database::DatabaseTableNamesTask::DatabaseTableNamesTask):
        (WebCore::Database::DatabaseTableNamesTask::doPerformTask):
        (WebCore::Database::DatabaseTableNamesTask::debugTaskName):
        * storage/DatabaseTask.h:
        (WebCore::Database::DatabaseOpenTask::create):
        (WebCore::Database::DatabaseCloseTask::create):
        (WebCore::Database::DatabaseTransactionTask::create):
        (WebCore::Database::DatabaseTableNamesTask::create):
        * storage/DatabaseThread.cpp:
        (WebCore::DatabaseThread::databaseThread):
        * storage/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::addOpenDatabase):
        * storage/SQLTransaction.cpp:
        (WebCore::SQLTransaction::executeSQL):
        (WebCore::SQLTransaction::checkAndHandleClosedDatabase):

2010-07-01  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Fisher.

        [Chromium] Support indeterminate checkbox for Windows
        https://bugs.webkit.org/show_bug.cgi?id=41444

        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore::RenderThemeChromiumWin::determineState):
         Check isIndeterminate() and set an appropriate flag value.

2010-07-01  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=41488
        <rdar://problem/7487420> Crash in SubresourceLoader::create when load is initiated from plug-in destructor

        Test: plugins/js-from-destroy.html

        * loader/SubresourceLoader.cpp: (WebCore::SubresourceLoader::create): Null check active
        document loader.

2010-07-01  Andy Estes  <aestes@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/8113003> Correctly fire beforeload events for images
        added to the DOM using .innerHTML.
        https://bugs.webkit.org/show_bug.cgi?id=40919

        Test: fast/dom/beforeload/image-before-load-innerHTML.html

        * html/LegacyHTMLDocumentParser.cpp:
        (WebCore::LegacyHTMLDocumentParser::write): Do not fire synchronous
        image beforeload events immediately after parsing a document fragment.
        Let the events fire later, giving the fragment time to potentially be
        inserted into the document.

2010-07-01  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Tor Arne Vestbø.

        Canvas: bezierCurveTo() and quadraticCurveTo() must ensure subpaths
        https://bugs.webkit.org/show_bug.cgi?id=41192

        If the current path is empty, bezierCurveTo() and quadraticCurveTo() will now
        move to the (first) control point before adding the curve.

        Spec links:
        http://www.whatwg.org/specs/web-apps/current-work/#dom-context-2d-beziercurveto
        http://www.whatwg.org/specs/web-apps/current-work/#dom-context-2d-quadraticcurveto

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::quadraticCurveTo):
        (WebCore::CanvasRenderingContext2D::bezierCurveTo):

2010-07-01  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Darin Adler.

        Canvas element cannot have negative width or height (HTML5 spec 4.8.11)
        https://bugs.webkit.org/show_bug.cgi?id=39149

        If assigned a negative value, it should default to 300 for width and 150 for height.

        Spec link:
        http://www.whatwg.org/specs/web-apps/current-work/#attr-canvas-width

        Test: fast/canvas/canvas-negative-size.html

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

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

        Reviewed by Steve Falkenburg.

        Turn on adoptRef assertion for TreeShared.

        * platform/TreeShared.h: Remove LOOSE_TREE_SHARED and all the ifdefs.
        Actually, I used LOOSE_REF_COUNTED by accident in a few places, but
        removing them all now.

        * rendering/ShadowElement.cpp:
        (WebCore::ShadowBlockElement::create): Added adoptRef. This was a
        storage leak before, probably recently introduced r61324.
        (WebCore::ShadowInputElement::create): Ditto.

2010-07-01  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Only include the geolocation IDL in the GObject DOM bindings set
        if geolocation is enabled.

        * GNUmakefile.am:

2010-07-01  Timothy Hatcher  <timothy@apple.com>

        Provide a WebView preference to disable DNS prefetching.

        https://bugs.webkit.org/show_bug.cgi?id=28825
        rdar://problem/7181249

        Reviewed by Darin Adler.

        * WebCore.base.exp: Added Settings::setDNSPrefetchingEnabled.
        * dom/Document.cpp:
        (WebCore::Document::initDNSPrefetch): Check settings->dnsPrefetchingEnabled().
        * page/Settings.cpp:
        (WebCore::Settings::Settings): Set m_dnsPrefetchingEnabled to true.
        (WebCore::Settings::setDNSPrefetchingEnabled): Added. Set m_dnsPrefetchingEnabled.
        * page/Settings.h:
        (WebCore::Settings::dnsPrefetchingEnabled): Added. Return m_dnsPrefetchingEnabled.

2010-07-01  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.

        Get accelerated compositing working with webkit2
        https://bugs.webkit.org/show_bug.cgi?id=41084

        Step 2: add a  method, syncCompositingStateForThisLayerOnly(), to GraphicsLayer to commit
        batched changes non-recursively. This allows us to use GraphicsLayer in places where we
        don't want to kick off a recursive commit of the entire tree.

        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::syncCompositingStateForThisLayerOnly):
        * platform/graphics/mac/GraphicsLayerCA.h:
        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::GraphicsLayerCA::syncCompositingStateForThisLayerOnly):
        * WebCore.AcceleratedCompositing.exp: Export the new method for use in WebKit2.

2010-07-01  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Sam Weinig.

        Get accelerated compositing working with webkit2
        https://bugs.webkit.org/show_bug.cgi?id=41084

        Step 1: add a new .exp file for WebCore, which exports symbols only when USE(ACCELERATED_COMPOSITING)
        is defined.
        
        Also export WebCore::FloatSize::FloatSize(WebCore::IntSize const&) from WebCore.

        * DerivedSources.make:
        * WebCore.AcceleratedCompositing.exp: Added.
        * WebCore.base.exp:
        * WebCore.xcodeproj/project.pbxproj:

2010-07-01  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/8148656> <https://bugs.webkit.org/show_bug.cgi?id=41431>
        REGRESSION (r49411): Various crashes due to JavaScript execution during plug-in destruction

        Test: plugins/write-xssauditor-from-destroy.html

        Fix specific known cases that also crash in same process case. I don't know if there is
        any rule for when documentLoader should be checked for being null, it looks like a mess.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::referrer):
        * page/XSSAuditor.cpp:
        (WebCore::XSSAuditor::findInRequest):

2010-07-01  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Darin Adler.

        The HTML5 canvas 2d.drawImage.zerocanvas test does not pass
        https://bugs.webkit.org/show_bug.cgi?id=40271

        Throw INVALID_STATE_ERR when attempting to draw a canvas with zero width or height.

        Spec link:
        http://www.whatwg.org/specs/web-apps/current-work/#dom-context-2d-drawimage

        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        (WebCore::JSCanvasRenderingContext2D::drawImage): Call setDOMException after drawImage(canvas, x, y)
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::drawImage):

2010-07-01  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Oliver Hunt.

        [Qt] Canvas: clip() should use non-zero winding rule
        https://bugs.webkit.org/show_bug.cgi?id=41466

        Use non-zero winding number rule when clipping a GraphicsContext from canvas.
        Fixes appearance of the "pill" in the web inspector.

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

2010-07-01  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r62246.
        http://trac.webkit.org/changeset/62246
        https://bugs.webkit.org/show_bug.cgi?id=41470

        "Worker tests are broken in Chromium" (Requested by yurys on
        #webkit).

        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::processingUserGesture):
        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::invokeEventHandler):
        * bindings/v8/V8HiddenPropertyName.h:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::eventAccessorGetter):
        (WebCore::V8DOMWindow::eventAccessorSetter):

2010-07-01  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Tor Arne Vestbø.

        Canvas: Exception erroneously thrown for drawImage() when image.complete=false
        https://bugs.webkit.org/show_bug.cgi?id=33968

        Do nothing in drawImage() if called with an image whose 'complete'
        attribute is false, or a video whose readyState is either HAVE_NOTHING
        or HAVE_METADATA.

        Spec link:
        http://www.whatwg.org/specs/web-apps/current-work/#dom-context-2d-drawimage

        Test: fast/canvas/canvas-drawImage-incomplete.html

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

2010-07-01  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Dan Bernstein.

        Prevent crash on counter destruction
        https://bugs.webkit.org/show_bug.cgi?id=40032

        Added counter destruction to RenderWidget::destroy()

        Test: fast/css/counters/destroy-counter-crash.html

        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::destroy):

2010-07-01  Lucas De Marchi  <lucas.demarchi@profusion.mobi>

        Unreviewed build fix after r62215.

        No new functionality, so no new tests.

        * CMakeLists.txt: Add missing files and re-sort.

2010-07-01  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Remove an unneeded assert.

        This assert is triggered for example while showing the falling leaves demo.
        GraphicsLayerQtImpl::toGraphicsLayerQtImpl asserts that its input
        pointer is null. Looking at the uses of this method it seems like
        it is expected to return null if a null pointer is given to it.

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::toGraphicsLayerQtImpl):

2010-06-16  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix qmake vcproj generation for QtWebKit.

        qmake use TARGET=/LIBS+= -lTARGET to create dependencies
        between projects in a subdir template.

        Since when compiling outside of Qt we hijack the target name of
        QtWebKit to add the configuration and version suffix to the binary
        filename, qmake can't establish the WebCore project as a dependency
        to QtTestBrowser.

        This patch makes sure that the target is not hijacked on the
        first of the three passes where the dependencies are determined.

        * WebCore.pro:

2010-07-01  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        SVGRenderStyle::diff() is missing
        https://bugs.webkit.org/show_bug.cgi?id=41455

        Don't just return StyleDifferenceLayout when two SVGRenderStyle objects differ.
        Figure out when to repaint, and as last resort do a relayout.

        Lively Kernel doesn't do any relayouts anymore, same for lots of demos in the IE9 testcenter.

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::diff):
        * rendering/style/SVGRenderStyle.cpp:
        (WebCore::SVGRenderStyle::diff):
        * rendering/style/SVGRenderStyle.h:

2010-07-01  Antti Koivisto  <koivisto@iki.fi>

        Revert accidental commit.

        * platform/network/qt/ResourceRequestQt.cpp:
        (WebCore::ResourceRequest::toNetworkRequest):

2010-07-01  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Nikolas Zimmermann.

        Buildfix for !ENABLE(SVG_FOREIGN_OBJECT) after r62196.
        https://bugs.webkit.org/show_bug.cgi?id=40984

        * rendering/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::finishRenderSVGContent):

2010-07-04  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Dirk Schulze.

        Buildfix for !ENABLE(FILTERS) after r62238.
        https://bugs.webkit.org/show_bug.cgi?id=41456

        * rendering/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::prepareToRenderSVGContent):

2010-07-01  MORITA Hajime  <morrita@google.com>

        Unreviewed build fix.

        * rendering/RenderInputSpeech.cpp:
        (WebCore::RenderInputSpeech::paintInputFieldSpeechButton):
        * rendering/RenderInputSpeech.h:
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::paintInputFieldSpeechButton):
        * rendering/RenderTheme.h:

2010-07-01  Satish Sampath  <satish@chromium.org>

        Reviewed by Kent Tamura.

        Rendering the speech button in input elements.
        https://bugs.webkit.org/show_bug.cgi?id=40984

        The button currently has only one state and rendered as an image on all platforms. Subsequent
        patches will add user input handling and more states + rendering code to the button. The
        button's appearance can be customized by individual ports in their RenderTheme implementation
        if required.

        Tests: platform/mac/fast/forms/input-appearance-numberandspeech.html
               platform/mac/fast/forms/input-appearance-searchandspeech.html
               platform/mac/fast/forms/input-appearance-speechbutton.html

        * GNUmakefile.am:
        * Resources/inputSpeech.png: Added.
        * Resources/inputSpeech.tiff: Added. Used by the Mac implementation.
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.qrc:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/qt/ImageQt.cpp:
        (loadResourcePixmap): Load the speech button images for Qt port.
        * rendering/RenderInputSpeech.cpp: Added.
        (WebCore::RenderInputSpeech::adjustInputFieldSpeechButtonStyle): Sets the button's dimensions.
        (WebCore::RenderInputSpeech::paintInputFieldSpeechButton):
        * rendering/RenderInputSpeech.h: Added.
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::layout):
        (WebCore::RenderTextControlSingleLine::forwardEvent):
        (WebCore::RenderTextControlSingleLine::createSubtreeIfNeeded): Create the speech button.
        (WebCore::RenderTextControlSingleLine::createInnerBlockStyle):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle):
        (WebCore::RenderTheme::paint):
        (WebCore::RenderTheme::adjustInputFieldSpeechButtonStyle):
        (WebCore::RenderTheme::paintInputFieldSpeechButton):
        * rendering/RenderTheme.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintSearchFieldCancelButton): Get cancel button to render to the left of
        speech button when enabled.

2010-07-01  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Extra nullcheck needed at SelectionControllerGtk.cpp
        https://bugs.webkit.org/show_bug.cgi?id=41447

        Extra null check added.

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

2010-07-01  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Adam Barth.

        [v8] Web Inspector: inspected page crashes on attempt to change iframe's src attribute
        https://bugs.webkit.org/show_bug.cgi?id=41350

        Tests: fast/events/popup-blocked-from-fake-user-gesture.html
               http/tests/inspector/change-iframe-src.html

        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::processingUserGesture): use V8Proxy from the ScriptController instead of one
        from the call stack. Get event directly from hidden property to avoid unnecessary checks.
        * bindings/v8/V8AbstractEventListener.cpp:
        (WebCore::V8AbstractEventListener::invokeEventHandler):
        * bindings/v8/V8HiddenPropertyName.h:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::eventAccessorGetter):
        (WebCore::V8DOMWindow::eventAccessorSetter):

2010-07-01  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        RenderSVGContainer/RenderSVGRoot report wrong strokeBoundingBox()
        https://bugs.webkit.org/show_bug.cgi?id=41450

        strokeBoundingBox() was reporting the repaintRectInLocalCoordinates() for children of a container,
        instead of the actual strokeBoundingBox(). Only visible in WebInspector when looking at a container
        which has a resource applied and contains a children which also has a resource applied.

        Doesn't affect any test results.

        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::objectBoundingBox):
        (WebCore::RenderSVGContainer::strokeBoundingBox):
        (WebCore::RenderSVGContainer::repaintRectInLocalCoordinates):
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::objectBoundingBox): Deinlined this functions, it's virtual so there's no gain.
        (WebCore::RenderSVGRoot::strokeBoundingBox): Ditto.
        (WebCore::RenderSVGRoot::repaintRectInLocalCoordinates):
        * rendering/RenderSVGRoot.h:
        * rendering/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::computeContainerBoundingBox):
        * rendering/SVGRenderSupport.h: Add enum controlling the mode of container bounding box mode calculation.

2010-07-01  Zoltan Herczeg  <zherczeg@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Implementing feConvolveMatrix svg filter
        https://bugs.webkit.org/show_bug.cgi?id=5861

        The implementation is optimized for speed, and uses
        multiple algorithms for different parts of the image.
        See SVGFEConvolveMatrixElement.cpp for a detailed
        description.

        * svg/SVGFEConvolveMatrixElement.cpp:
        (WebCore::SVGFEConvolveMatrixElement::build):
        * svg/graphics/filters/SVGFEConvolveMatrix.cpp:
        (WebCore::clampRGBAValue):
        (WebCore::FEConvolveMatrix::fastSetInteriorPixels):
        (WebCore::FEConvolveMatrix::getPixelValue):
        (WebCore::FEConvolveMatrix::fastSetOuterPixels):
        (WebCore::FEConvolveMatrix::setInteriorPixels):
        (WebCore::FEConvolveMatrix::setOuterPixels):
        (WebCore::FEConvolveMatrix::apply):
        * svg/graphics/filters/SVGFEConvolveMatrix.h:
        (WebCore::FEConvolveMatrix::uniteChildEffectSubregions):

2010-07-01  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Abstract 'a'-'z' checks into a function
        https://bugs.webkit.org/show_bug.cgi?id=41438

        Hopefully this version is more readable.

        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::nextToken):

2010-07-01  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Parameter names in frame src URLs parsed incorrectly if resembles HTML entity code followed by underscore
        https://bugs.webkit.org/show_bug.cgi?id=41345

        Apparently whether an HTML entity requires a trailing semicolon varies
        depending on the entity.  The full table is in the spec:

        http://www.whatwg.org/specs/web-apps/current-work/multipage/named-character-references.html#named-character-references

        I believe branch added in this patch is accurate.  At some point, I'll
        add a full test suite for all the named entities.

        * html/HTMLEntityParser.cpp:
        (WebCore::consumeHTMLEntity):

2010-07-01  Eric Seidel  <eric@webkit.org>

        Unreviewed.  Fix paste-o in Gtk build file.

        Split out HTMLFormattingElementList into its own file
        https://bugs.webkit.org/show_bug.cgi?id=41440

        * GNUmakefile.am:

2010-07-01  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Eric Seidel & Dirk Schulze.

        Performance regression for setting content of <text> in SVG
        https://bugs.webkit.org/show_bug.cgi?id=36564

        Dramatically reducing the number of repaintRectInLocalCoordinates() calls needed while painting.
        Do not pass the repaintRect to prepareToRenderSVGContent, only calculate it if opacity < 1 or -webkit-svg-shadow is set.
        Most noticeable is that RenderSVGRoot had to visit all children, before actually painting, just to calculate the repaint rect.
        And as RenderSVGRoot never carries shadow or opacity it was completly useless.

        RenderSVGContainer also called repaintRectInLocalCoordinates, but the result is only needed when painting outlines, which is a rare case.
        These modifications fix the performance regression and the number of repaintRectInLocalCoordinate calls for the complex example in
        the bug report with 500 runs shrinks from 1.7 million calls to less than 105.000.

        50 runs without the patch: ~ 520.8ms
        50 runs with the patch   : ~ 501.8ms

        The test calls setTimeout(0) 50 times, that already accounts for the 500ms. So setting the content of a <text>
        element withs clippers applied, is very cheap now.

        Also remove the need to pass in a filter argument to prepareToRenderSVGContent/finishRenderSVGContent, it can easily be grabbed
        of the cache - just like all other resources are handled, simplifying the code.

        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::paint):
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::paint):
        (WebCore::RenderSVGContainer::repaintRectInLocalCoordinates):
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::paint):
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::paint):
        * rendering/SVGInlineFlowBox.cpp:
        (WebCore::SVGInlineFlowBox::paint):
        * rendering/SVGRenderSupport.cpp:
        (WebCore::SVGRenderSupport::prepareToRenderSVGContent):
        (WebCore::SVGRenderSupport::finishRenderSVGContent):
        * rendering/SVGRenderSupport.h:
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::paint):

2010-07-01  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Split out HTMLFormattingElementList into its own file
        https://bugs.webkit.org/show_bug.cgi?id=41440

        No functional changes, thus no tests.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processEndTag):
        (WebCore::HTMLTreeBuilder::indexOfFirstUnopenFormattingElement):
        (WebCore::HTMLTreeBuilder::reconstructTheActiveFormattingElements):
        * html/HTMLTreeBuilder.h:

2010-07-01  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        BogusCommentState should come in from the cold
        https://bugs.webkit.org/show_bug.cgi?id=41439

        The BogusCommentState has always been wrong.  The proximate issue is
        that it didn't handle resuming correctly when parsing a partial input
        stream.  Now that we have EOF working properly, we can actually
        implement this state correctly.

        We need to distinguish when we enter this state from when we continue
        in this state.  We could do that with a branch for each character, but
        it seemed easier to split the state in two, even though that leaves us
        with one more state in our tokenizer than we have in the HTML5 spec.

        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::nextToken):
        * html/HTMLTokenizer.h:
        (WebCore::HTMLTokenizer::):

2010-06-30  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        HTMLTokenizer's whitespace checks are very redundant
        https://bugs.webkit.org/show_bug.cgi?id=41434

        This patch adds isTokenizerWhitespace, which replaces a lot of
        redundant logic in nextToken.

        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::nextToken):

2010-06-30  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Crash when uploading document to Google Docs
        https://bugs.webkit.org/show_bug.cgi?id=40795

        Fix bug where the local file wasn't opened (for POSTing)
        if it were the first element in the form.

        * platform/network/qt/QNetworkReplyHandler.cpp:
        (WebCore::FormDataIODevice::FormDataIODevice):
        (WebCore::FormDataIODevice::moveToNextElement):
        (WebCore::FormDataIODevice::openFileForCurrentElement):
        * platform/network/qt/QNetworkReplyHandler.h:

2010-06-30  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Implement generateImpliedEndTags and deploy to steps which were blocked on it
        https://bugs.webkit.org/show_bug.cgi?id=41432

        This fixes one subtest in html5lib/runner.html and positively
        effects a couple others.

        More code sharing will be needed here.  For the moment
        we're using copy/paste code, but that will soon be shared.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processEndTag):
        (WebCore::HTMLTreeBuilder::generateImpliedEndTagsWithExclusion):
        (WebCore::HTMLTreeBuilder::generateImpliedEndTags):
        * html/HTMLTreeBuilder.h:

2010-06-30  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed buildfix after r62196 and r62214.

        * html/HTMLElementStack.cpp: Put !ENABLE(SVG) guard instead of 
        !ENABLE(SVG_FOREIGN_OBJECT) around include of SVGNames.h.

2010-06-30  Sam Weinig  <sam@webkit.org>

        Really fix the windows build.

        * bindings/js/JSBindingsAllInOne.cpp:

2010-06-30  Sam Weinig  <sam@webkit.org>

        Another Chromium build fix.

        * page/DOMWindow.idl:

2010-06-30  Sam Weinig  <sam@webkit.org>

        Fix Chromium build.

        * WebCore.gyp/WebCore.gyp:

2010-06-30  Sam Weinig  <sam@webkit.org>

        Fix Windows build.

        * bindings/js/JSBindingsAllInOne.cpp:

2010-06-30  Sam Weinig  <sam@webkit.org>

        Fix Gtk build.

        * GNUmakefile.am:

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

        Reviewed by Dan Bernstein.

        Patch for https://bugs.webkit.org/show_bug.cgi?id=41146
        <rdar://problem/8126069>
        Implement the .dataset DOM property

        Tests: fast/dom/dataset-xhtml.xhtml
               fast/dom/dataset.html

        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMStringMapCustom.cpp: Added.
        (WebCore::JSDOMStringMap::canGetItemsForName):
        (WebCore::JSDOMStringMap::nameGetter):
        (WebCore::JSDOMStringMap::getOwnPropertyNames):
        (WebCore::JSDOMStringMap::deleteProperty):
        (WebCore::JSDOMStringMap::putDelegate):
        * bindings/js/JSDOMStringMapCustom.h: Added.
        * dom/DOMStringMap.cpp: Added.
        (WebCore::DOMStringMap::~DOMStringMap):
        * dom/DOMStringMap.h: Added.
        (WebCore::DOMStringMap::DOMStringMap):
        * dom/DOMStringMap.idl: Added.
        * dom/DatasetDOMStringMap.cpp: Added.
        (WebCore::isValidAttributeName):
        (WebCore::convertAttributeNameToPropertyName):
        (WebCore::propertyNameMatchesAttributeName):
        (WebCore::isValidPropertyName):
        (WebCore::convertPropertyNameToAttributeName):
        (WebCore::DatasetDOMStringMap::ref):
        (WebCore::DatasetDOMStringMap::deref):
        (WebCore::DatasetDOMStringMap::getNames):
        (WebCore::DatasetDOMStringMap::item):
        (WebCore::DatasetDOMStringMap::contains):
        (WebCore::DatasetDOMStringMap::setItem):
        (WebCore::DatasetDOMStringMap::deleteItem):
        * dom/DatasetDOMStringMap.h: Added.
        (WebCore::DatasetDOMStringMap::create):
        (WebCore::DatasetDOMStringMap::DatasetDOMStringMap):
        * dom/Element.cpp:
        (WebCore::Element::dataset):
        * dom/Element.h:
        * dom/Element.idl:
        * dom/ElementRareData.h:
        * page/DOMWindow.idl:

2010-06-30  Darin Adler  <darin@apple.com>

        More Qt build fix.

        * html/HTMLElementStack.cpp: Put !ENABLE(SVG_FOREIGN_OBJECT) around
        include of SVGNames.h too.

2010-06-30  Darin Adler  <darin@apple.com>

        Reviewed by Adam Barth.

        Add assertion, off by default, for when you forget to do adoptRef
        https://bugs.webkit.org/show_bug.cgi?id=41422

        * platform/TreeShared.h: Added code to require adoption and assert if
        you don't call adoptRef. For now, it is turned off because of the
        LOOSE_TREE_SHARED define in this header. Later we can turn it on
        once we get everything working without asserting. Note also that it
        only works for objects with an initial reference count of 1.

2010-06-30  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Darin Adler.

        Buildfix for !ENABLE(SVG_FOREIGN_OBJECT) after r62196.
        https://bugs.webkit.org/show_bug.cgi?id=41429

        * html/HTMLElementStack.cpp:

2010-06-30  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Add new popUntil(tagName) function and deploy
        https://bugs.webkit.org/show_bug.cgi?id=41405

        Add a new popUntil function to share some common code
        between states.  There is more code to share here, but this
        is a start.

        I also filled in a couple similar states to these with the
        hope of sharing more code, but decided to wait for a later
        patch.

        No test changes, since this code doesn't do enough yet to
        pass any more subtests.  Lack of generateImpliedEndTags is the main
        blocking issue.

        * html/HTMLElementStack.cpp:
        (WebCore::HTMLElementStack::popUntil):
        * html/HTMLElementStack.h:
        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processEndTag):

2010-06-30  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        [GTK] Unit test for DOM insertion methods
        https://bugs.webkit.org/show_bug.cgi?id=40495

        Fix typo in custom function detection method.

        * bindings/scripts/CodeGeneratorGObject.pm:

2010-06-30  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Implement HTML5 "in scope" algorithm and attempt to use it
        https://bugs.webkit.org/show_bug.cgi?id=41402

        Implemented the 4 needed "in scope" functions for HTML5.
        3 for the different sets of scope markers, and one for
        doing exact element comparisons instead of tag name searches.

        I deployed inScope("body") for </body> and </html> in InBody.

        Adds two new (expected) failures, since we're now
        switching out of InBody to AfterBody when seeing
        </html>.  We don't implement AfterBody yet, so
        the rest of the content after </html> is ignored.

        * html/HTMLElementStack.cpp:
        (WebCore::inScopeCommon):
        (WebCore::HTMLElementStack::inScope):
        (WebCore::HTMLElementStack::inListItemScope):
        (WebCore::HTMLElementStack::inTableScope):
        * html/HTMLElementStack.h:
        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processBodyEndTagForInBody):
        (WebCore::HTMLTreeBuilder::processEndTag):
        * html/HTMLTreeBuilder.h:

2010-06-30  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Split HTMLElementStack out into its own file
        https://bugs.webkit.org/show_bug.cgi?id=41399

        No functional change, thus no tests.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTMLElementStack.cpp: Added.
        (WebCore::HTMLElementStack::ElementRecord::ElementRecord):
        (WebCore::HTMLElementStack::ElementRecord::element):
        (WebCore::HTMLElementStack::ElementRecord::next):
        (WebCore::HTMLElementStack::ElementRecord::releaseNext):
        (WebCore::HTMLElementStack::ElementRecord::setNext):
        (WebCore::HTMLElementStack::HTMLElementStack):
        (WebCore::HTMLElementStack::~HTMLElementStack):
        (WebCore::HTMLElementStack::popHTMLHeadElement):
        (WebCore::HTMLElementStack::pop):
        (WebCore::HTMLElementStack::pushHTMLHtmlElement):
        (WebCore::HTMLElementStack::pushHTMLHeadElement):
        (WebCore::HTMLElementStack::pushHTMLBodyElement):
        (WebCore::HTMLElementStack::push):
        (WebCore::HTMLElementStack::top):
        (WebCore::HTMLElementStack::removeHTMLHeadElement):
        (WebCore::HTMLElementStack::remove):
        (WebCore::HTMLElementStack::contains):
        (WebCore::HTMLElementStack::inScope):
        (WebCore::HTMLElementStack::htmlElement):
        (WebCore::HTMLElementStack::headElement):
        (WebCore::HTMLElementStack::bodyElement):
        (WebCore::HTMLElementStack::pushCommon):
        (WebCore::HTMLElementStack::popCommon):
        (WebCore::HTMLElementStack::removeNonFirstCommon):
        * html/HTMLElementStack.h: Added.
        * html/HTMLTreeBuilder.h:

2010-06-30  Kenneth Russell  <kbr@google.com>

        Reviewed by Oliver Hunt.

        WebCore::WebGLArrayInternal::lengthAttrGetter ReadAV@NULL (b1a3e1a3e9d01f17fd493d68eeb2742f)
        https://bugs.webkit.org/show_bug.cgi?id=38040

        Changed custom ArrayBufferView constructors to create a
        fully-initialized, zero-length array when called with zero
        arguments. This is the simplest fix which works identically in
        both the JSC and V8 bindings.

        Test: fast/canvas/webgl/array-buffer-view-crash.html

        * bindings/js/JSArrayBufferViewHelper.h:
        (WebCore::constructArrayBufferView):
        * bindings/v8/custom/V8ArrayBufferViewCustom.h:
        (WebCore::constructWebGLArray):

2010-06-30  Victor Wang  <victorw@chromium.org>

        Reviewed by Darin Fisher.

        [chromium] update webcore gyp to use v8 dll for chromium multi dll build.

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

        * WebCore.gyp/WebCore.gyp:

2010-06-30  Jeremy Moskovich  <jeremy@chromium.org>

        Reviewed by Dimitri Glazkov.

        [Chromium] Add OOP font loading to FontPlatformDataChromiumMac.

        On OS X, with font management software installed. Fonts
        can reside in an arbitrary path on disk which is blocked by
        Chromium's sandbox.

        This change adds hooks to FontPlaformData which allow cross-process
        font loading in case of need.

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

        Not possible to test - requires sandboxing which DRT doesn't support.

        * WebCore.gypi:
        * platform/graphics/chromium/FontPlatformDataChromiumMac.mm: Added.
        (WebCore::FontPlatformData::FontPlatformData):
        (WebCore::FontPlatformData::~FontPlatformData):
        (WebCore::FontPlatformData::operator=):
        (WebCore::FontPlatformData::setFont):
        (WebCore::FontPlatformData::roundsGlyphAdvances):
        (WebCore::FontPlatformData::allowsLigatures):
        (WebCore::FontPlatformData::description):

2010-06-30  Jeremy Moskovich  <jeremy@chromium.org>

        Reviewed by Dan Bernstein.

        Minor tweaks to FontPlatformDataMac & SimpleFontDataMac.mm

        * Avoid an extra FontPlatformData copy in SimpleFontDataMac.mm
        * Fix a typo in FontPlatformDataMac.mm

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

        No behavior changes so no new tests.

        * platform/graphics/mac/FontPlatformDataMac.mm:
        (WebCore::FontPlatformData::description):
        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::copyFontTableForTag):

2010-06-30  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Make "disallow multiple calls to SetWindow" on windowed plugins a quirk
        https://bugs.webkit.org/show_bug.cgi?id=41407

        Only disallow calling SetWindow more than once if we're using Flash 9 or older.
        This fixes resizing of YouTube videos via the player's own button.

        Removed copy-pasted logic in PluginViewGtk since the issue only exists
        when running Flash with a non-Gtk toolkit.

        * plugins/PluginPackage.cpp:
        (WebCore::PluginPackage::determineQuirks):
        * plugins/PluginQuirkSet.h:
        (WebCore::):
        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::setNPWindowIfNeeded): Remove unnecessary logic copy-pasted from PluginViewQt.
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::setNPWindowIfNeeded):

2010-06-30  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Antti Koivisto.

        [Qt, Gtk, Symbian] Mind the semantics of NPRect for windowed plugin clip rects
        https://bugs.webkit.org/show_bug.cgi?id=41406

        NPRect has right/bottom instead of width/height.
        This was fixed in PluginViewMac with http://trac.webkit.org/changeset/45815

        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::setNPWindowIfNeeded):
        * plugins/qt/PluginViewQt.cpp:
        (WebCore::PluginView::setNPWindowIfNeeded):
        * plugins/symbian/PluginViewSymbian.cpp:
        (WebCore::PluginView::setNPWindowIfNeeded):

2010-06-30  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Simon Fraser.

        Spatial Navigation: make elements in inner frames nested more than 1 level deep focusable
        https://bugs.webkit.org/show_bug.cgi?id=41160

        Patch addresses the problem of spatial navigation not work properly with nested
        inner frames by adding the isNodeDeepDescendantOfDocument method. It recursively checks
        if a give node is descendant of a given document or any parent of it.

        Test: fast/events/spatial-navigation/snav-iframe-nested.html

        * page/FocusController.cpp:
        (WebCore::FocusController::deepFindFocusableNodeInDirection):
        * page/SpatialNavigation.cpp:
        (WebCore::isNodeDeepDescendantOfDocument):
        * page/SpatialNavigation.h:

2010-06-30  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        HTMLTokenizer should use fewer macros
        https://bugs.webkit.org/show_bug.cgi?id=41397

        Macros are sadness.  Inline functions are the new hotness.

        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::processEntity):
        (WebCore::HTMLTokenizer::emitAndResumeIn):
        (WebCore::HTMLTokenizer::emitAndReconsumeIn):
        (WebCore::HTMLTokenizer::emitEndOfFile):
        (WebCore::HTMLTokenizer::flushBufferedEndTag):
        (WebCore::HTMLTokenizer::flushEmitAndResumeIn):
        (WebCore::HTMLTokenizer::nextToken):
        (WebCore::HTMLTokenizer::bufferCharacter):
        (WebCore::HTMLTokenizer::bufferCodePoint):
        (WebCore::HTMLTokenizer::bufferParseError):
        (WebCore::HTMLTokenizer::bufferCurrentToken):
        (WebCore::HTMLTokenizer::bufferEndOfFile):
        * html/HTMLTokenizer.h:

2010-06-30  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Adam Barth.

        Remove dead binding code
        https://bugs.webkit.org/show_bug.cgi?id=41388

        Removed BindingElement because it was obsoleted by r59866.

        * WebCore.gypi:
        * bindings/generic/BindingElement.h: Removed.
        * bindings/v8/SerializedScriptValue.cpp:
        * bindings/v8/V8Binding.h:
        * bindings/v8/custom/V8DatabaseCustom.cpp:
        * bindings/v8/custom/V8DatabaseSyncCustom.cpp:
        * bindings/v8/custom/V8SQLTransactionCustom.cpp:
        * bindings/v8/custom/V8SQLTransactionSyncCustom.cpp:

2010-06-30  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        HTMLTokenizer needs EndOfFile support
        https://bugs.webkit.org/show_bug.cgi?id=41344

        EndOfFile support uncovered a bug in our implementation of finish().
        finish() may be called more than once if the first call does not
        result in end() being called (and parsing thus actually stopping).

        SegmentedString::close() should have ASSERTed that it was not already
        closed when close() is called.  I've added such an assert now.

        * html/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::finish):
        * platform/text/SegmentedString.cpp:
        (WebCore::SegmentedString::close):
        * platform/text/SegmentedString.h:

2010-06-29  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        HTMLTokenizer needs EndOfFile support
        https://bugs.webkit.org/show_bug.cgi?id=41344

        We're using \0 as the EndOfFile marker as HTML5 replaces
        all other \0 with \0xFFFD.  Added some special case logic
        to InputStreamPreprocessor::peek not to replace \0 when
        its being used at the end of a stream.

        This fixed 60 subtests in html5lib/runner.html.

        There are still at least two states (BogusCommentState and
        CDATASectionState) which do not have proper EOF support.

        * html/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::finish):
        (WebCore::HTMLDocumentParser::finishWasCalled):
        * html/HTMLInputStream.h:
        (WebCore::HTMLInputStream::markEndOfFile):
        (WebCore::HTMLInputStream::haveSeenEndOfFile):
        * html/HTMLToken.h:
        (WebCore::HTMLToken::makeEndOfFile):
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::nextToken):
        (WebCore::HTMLTokenizer::emitEndOfFile):
        * html/HTMLTokenizer.h:
        (WebCore::HTMLTokenizer::InputStreamPreprocessor::peek):
        (WebCore::HTMLTokenizer::InputStreamPreprocessor::shouldTreatNullAsEndOfFileMarker):
        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::passTokenToLegacyParser):

2010-06-28  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Teach HTML5TreeBuilder how to merge attributes from extra html/body elements
        https://bugs.webkit.org/show_bug.cgi?id=41337

        Had to teach ElementStack to store pointers to html, head, and body
        elements.

        This fixed a few tests in LayoutTests/html5lib.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::insertHTMLStartTagBeforeHTML):
        (WebCore::HTMLTreeBuilder::mergeAttributesFromTokenIntoElement):
        (WebCore::HTMLTreeBuilder::insertHTMLStartTagInBody):
        (WebCore::HTMLTreeBuilder::processStartTag):
        (WebCore::HTMLTreeBuilder::processEndTag):
        (WebCore::HTMLTreeBuilder::createElementAndAttachToCurrent):
        (WebCore::HTMLTreeBuilder::insertHTMLHtmlElement):
        (WebCore::HTMLTreeBuilder::insertHTMLHeadElement):
        (WebCore::HTMLTreeBuilder::insertHTMLBodyElement):
        (WebCore::HTMLTreeBuilder::insertElement):
        (WebCore::HTMLTreeBuilder::insertGenericRCDATAElement):
        (WebCore::HTMLTreeBuilder::insertGenericRawTextElement):
        * html/HTMLTreeBuilder.h:
        (WebCore::HTMLTreeBuilder::ElementStack::ElementStack):
        (WebCore::HTMLTreeBuilder::ElementStack::popHTMLHeadElement):
        (WebCore::HTMLTreeBuilder::ElementStack::pop):
        (WebCore::HTMLTreeBuilder::ElementStack::pushHTMLHtmlElement):
        (WebCore::HTMLTreeBuilder::ElementStack::pushHTMLHeadElement):
        (WebCore::HTMLTreeBuilder::ElementStack::pushHTMLBodyElement):
        (WebCore::HTMLTreeBuilder::ElementStack::push):
        (WebCore::HTMLTreeBuilder::ElementStack::removeHTMLHeadElement):
        (WebCore::HTMLTreeBuilder::ElementStack::remove):
        (WebCore::HTMLTreeBuilder::ElementStack::htmlElement):
        (WebCore::HTMLTreeBuilder::ElementStack::headElement):
        (WebCore::HTMLTreeBuilder::ElementStack::bodyElement):
        (WebCore::HTMLTreeBuilder::ElementStack::pushCommon):
        (WebCore::HTMLTreeBuilder::ElementStack::popCommon):
        (WebCore::HTMLTreeBuilder::ElementStack::removeNonFirstCommon):

2010-06-30  José Millán Soto  <jmillan@igalia.com>

        Reviewed by Xan Lopez.

        [Gtk] Text attributes not exposed
        https://bugs.webkit.org/show_bug.cgi?id=25528

        Implemented the get_run_attributes and get_default_attributes
        functions for the ATK_TEXT role.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (getAttributeSetForAccessibilityObject):
        (compareAttribute):
        (attributeSetDifference):
        (accessibilityObjectLength):
        (getAccessibilityObjectForOffset):
        (getRunAttributesFromAccesibilityObject):
        (webkit_accessible_text_get_run_attributes):
        (webkit_accessible_text_get_default_attributes):

2010-06-30  Yuta Kitamura  <yutak@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Fix Sec-WebSocketKey{1,2} headers.

        According to WebSocket specification, a value of Sec-WebSocketKey{1,2} header
        should not start or end with a space.

        WebSocket: Malformed handshake headers in a worker due to rand_s failing
        https://bugs.webkit.org/show_bug.cgi?id=41327

        No new tests. ASSERT should catch the problem.

        * websockets/WebSocketHandshake.cpp:
        (WebCore::generateSecWebSocketKey):

2010-06-30  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Dan Bernstein.

        Fix for Bug 41339 - unicode-range property only with a descending range
        causes a crash

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

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

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseFontFaceUnicodeRange):

2010-06-29  Abhinav Mithal <abhinav.mithal@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] [Symbian] Fix doube-deallocation while destroying PluginContainerSymbian
        https://bugs.webkit.org/show_bug.cgi?id=37303

        * plugins/symbian/PluginViewSymbian.cpp:
        (WebCore::PluginView::platformDestroy):

2010-06-29  Zhenyao Mo  <zmo@google.com>

        Reviewed by Dimitri Glazkov.

        Implement getAttachedShaders
        https://bugs.webkit.org/show_bug.cgi?id=31172

        * bindings/js/JSWebGLRenderingContextCustom.cpp: JS binding for getAttachedShaders().
        (WebCore::JSWebGLRenderingContext::getAttachedShaders):
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp: V8 binding for getAttachedShaders().
        (WebCore::V8WebGLRenderingContext::getAttachedShadersCallback):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getAttachedShaders): Implementation of getAttachedShaders().
        (WebCore::WebGLRenderingContext::findShader): Helper function to find a shader object from its name.
        * html/canvas/WebGLRenderingContext.h: Declaration of getAttachedShaders().
        * html/canvas/WebGLRenderingContext.idl: Ditto.
        * platform/graphics/GraphicsContext3D.h: Ditto.
        * platform/graphics/mac/GraphicsContext3DMac.mm:
        (WebCore::GraphicsContext3D::getAttachedShaders): Implementation of getAttachedShaders().

2010-06-29  MORITA Hajime  <morrita@google.com>

        Reviewed by Kent Tamura.

        REGRESSION: [Chromium] <progress> appearance on windows looks not good
        https://bugs.webkit.org/show_bug.cgi?id=41343
        
        RenderThemeChromiumWin::paintProgressBar() should return false,
        which indicates the widget is painted.
        
        Test: fast/dom/HTMLProgressElement/progress-element.html
              * rebaselined with a wrong expectation.

        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore::RenderThemeChromiumWin::paintProgressBar):

2010-06-29  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Jian Li.

        Fix http/tests/local/blob/send-data-blob.html on Windows
        https://bugs.webkit.org/show_bug.cgi?id=41228

        Fix a regression bug in the line-conversion code.
        Rewrite the line-conversion function with simpler functions to
        make it less error prone.

        No new tests as this is for bug fixes.

        * platform/BlobItem.cpp:
        (WebCore::StringBlobItem::convertToCString):

2010-06-29  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Darin Fisher.

        Implementing DatabaseSync::openDatabaseSync().
        https://bugs.webkit.org/show_bug.cgi?id=40607

        1. Moved some common code from Database to AbstractDatabase.
        2. Made performOpenAndVerify() virtual, since DatabaseSync doesn't
           need to interact with DatabaseThread.
        3. Removed the m_creationCallback field, since it's only needed in
           the openDatabase{Sync} methods.

        * storage/AbstractDatabase.cpp:
        (WebCore::retrieveTextResultFromDatabase):
        (WebCore::setTextValueInDatabase):
        (WebCore::guidMutex):
        (WebCore::guidToVersionMap):
        (WebCore::updateGuidVersionMap):
        (WebCore::guidToDatabaseMap):
        (WebCore::guidForOriginAndName):
        (WebCore::AbstractDatabase::databaseInfoTableName):
        (WebCore::AbstractDatabase::AbstractDatabase):
        (WebCore::AbstractDatabase::closeDatabase):
        (WebCore::AbstractDatabase::version):
        (WebCore::AbstractDatabase::performOpenAndVerify):
        (WebCore::AbstractDatabase::scriptExecutionContext):
        (WebCore::AbstractDatabase::securityOrigin):
        (WebCore::AbstractDatabase::stringIdentifier):
        (WebCore::AbstractDatabase::displayName):
        (WebCore::AbstractDatabase::estimatedSize):
        (WebCore::AbstractDatabase::fileName):
        (WebCore::AbstractDatabase::databaseVersionKey):
        (WebCore::AbstractDatabase::getVersionFromDatabase):
        (WebCore::AbstractDatabase::setVersionInDatabase):
        (WebCore::AbstractDatabase::versionMatchesExpected):
        (WebCore::AbstractDatabase::setExpectedVersion):
        (WebCore::AbstractDatabase::disableAuthorizer):
        (WebCore::AbstractDatabase::enableAuthorizer):
        (WebCore::AbstractDatabase::setAuthorizerReadOnly):
        (WebCore::AbstractDatabase::lastActionChangedDatabase):
        (WebCore::AbstractDatabase::lastActionWasInsert):
        (WebCore::AbstractDatabase::resetDeletes):
        (WebCore::AbstractDatabase::hadDeletes):
        (WebCore::AbstractDatabase::resetAuthorizer):
        * storage/AbstractDatabase.h:
        (WebCore::AbstractDatabase::opened):
        (WebCore::AbstractDatabase::isNew):
        (WebCore::AbstractDatabase::databaseDebugName):
        * storage/Database.cpp:
        (WebCore::DatabaseCreationCallbackTask::create):
        (WebCore::DatabaseCreationCallbackTask::performTask):
        (WebCore::DatabaseCreationCallbackTask::DatabaseCreationCallbackTask):
        (WebCore::Database::openDatabase):
        (WebCore::Database::Database):
        (WebCore::Database::version):
        (WebCore::Database::openAndVerifyVersion):
        (WebCore::Database::close):
        (WebCore::Database::stop):
        (WebCore::Database::performOpenAndVerify):
        * storage/Database.h:
        (WebCore::Database::sqliteDatabase):
        * storage/DatabaseAuthorizer.cpp:
        (WebCore::DatabaseAuthorizer::create):
        (WebCore::DatabaseAuthorizer::DatabaseAuthorizer):
        (WebCore::DatabaseAuthorizer::denyBasedOnTableName):
        * storage/DatabaseAuthorizer.h:
        * storage/DatabaseSync.cpp:
        (WebCore::DatabaseSync::openDatabaseSync):
        (WebCore::DatabaseSync::DatabaseSync):
        (WebCore::DatabaseSync::~DatabaseSync):
        (WebCore::DatabaseSync::markAsDeletedAndClose):
        (WebCore::CloseSyncDatabaseOnContextThreadTask::create):
        (WebCore::CloseSyncDatabaseOnContextThreadTask::performTask):
        (WebCore::CloseSyncDatabaseOnContextThreadTask::CloseSyncDatabaseOnContextThreadTask):
        (WebCore::DatabaseSync::closeImmediately):
        * storage/DatabaseSync.h:
        * storage/DatabaseTask.cpp:
        (WebCore::DatabaseOpenTask::DatabaseOpenTask):
        (WebCore::DatabaseOpenTask::doPerformTask):
        * storage/DatabaseTask.h:
        (WebCore::DatabaseOpenTask::create):

2010-06-29  François Sausset  <sausset@gmail.com>

        Reviewed by Darin Adler.

        Fix a bug when a msubsup element is inside a mrow element
        https://bugs.webkit.org/show_bug.cgi?id=36525

        Test: mathml/presentation/subsup.xhtml

        * mathml/RenderMathMLSubSup.cpp:
        (WebCore::RenderMathMLSubSup::stretchToHeight):

2010-06-29  Zhenyao Mo  <zmo@google.com>

        Reviewed by Dimitri Glazkov.

        uniformmatrix* should generate INVALID_VALUE with transpose = true
        https://bugs.webkit.org/show_bug.cgi?id=41235

        Test: fast/canvas/webgl/gl-uniformmatrix4fv.html

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::uniformMatrix2fv): Call validateUniformMatrixParameters instead.
        (WebCore::WebGLRenderingContext::uniformMatrix3fv): Ditto.
        (WebCore::WebGLRenderingContext::uniformMatrix4fv): Ditto.
        (WebCore::WebGLRenderingContext::validateUniformMatrixParameters): Validate input parameters for uniformMatrix*().
        * html/canvas/WebGLRenderingContext.h: Declare validateUniformMatrixParameters().

2010-06-29  Kenneth Russell  <kbr@google.com>

        Reviewed by Dimitri Glazkov.

        Support UNPACK_FLIP_Y_WEBGL and UNPACK_PREMULTIPLY_ALPHA_WEBGL for texImage2D taking ArrayBufferView
        https://bugs.webkit.org/show_bug.cgi?id=40398

        Added support for UNPACK_FLIP_Y_WEBGL and UNPACK_PREMULTIPLY_ALPHA_WEBGL pixel store
        parameters to texImage2D and texSubImage2D entry points taking ArrayBufferView.
        More cleanly separated the unpacking and packing phases of user-supplied pixel data
        in GraphicsContext3D, and added support for unpack alignment. Fixed bug in handling
        of unpackAlignment in GraphicsContext3D::flipVertically. Necessarily added
        validation of the amount of data passed to texImage2D and texSubImage2D. Modified
        fast/canvas/webgl/tex-image-with-format-and-type.html to include premultiplied alpha
        tests for relevant source formats; added new test which exercises all combinations
        of UNPACK_FLIP_Y_WEBGL, UNPACK_PREMULTIPLY_ALPHA_WEBGL, and UNPACK_ALIGNMENT pixel
        store parameters.

        Test: fast/canvas/webgl/tex-image-and-sub-image-2d-with-array-buffer-view.html

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::texImage2D):
        (WebCore::WebGLRenderingContext::texSubImage2D):
        (WebCore::WebGLRenderingContext::validateTexFuncData):
        * html/canvas/WebGLRenderingContext.h:
        * platform/graphics/GraphicsContext3D.cpp:
        (WebCore::GraphicsContext3D::extractImageData):
        (WebCore::GraphicsContext3D::extractTextureData):
        (WebCore::GraphicsContext3D::flipVertically):
        (WebCore::doUnpackingAndPacking):
        (WebCore::computeIncrementParameters):
        (WebCore::doPacking):
        (WebCore::GraphicsContext3D::packPixels):
        * platform/graphics/GraphicsContext3D.h:
        (WebCore::GraphicsContext3D::):
        * platform/graphics/cg/GraphicsContext3DCG.cpp:
        (WebCore::GraphicsContext3D::getImageData):
        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3D::getImageData):
        * platform/graphics/skia/GraphicsContext3DSkia.cpp:
        (WebCore::GraphicsContext3D::getImageData):

2010-06-29  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Dirk Schulze.

        Buildfix for !ENABLE(SVG_FOREIGN_OBJECT) after r61667.
        https://bugs.webkit.org/show_bug.cgi?id=41367

        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::isOutermostSVG): Add missing ENABLE(SVG_FOREIGN_OBJECT).

2010-06-29  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Darin Adler.

        Buildfix after r62118.
        https://bugs.webkit.org/show_bug.cgi?id=41365

        * rendering/RenderSVGRoot.cpp: Inlude missing RenderSVGResource.h.

2010-06-29  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r62052.
        http://trac.webkit.org/changeset/62052
        https://bugs.webkit.org/show_bug.cgi?id=41357

        Causes crashes in JSLazyEventListener::initializeFunction (see
        bug 41352) (Requested by aroben on #webkit).

        * bindings/js/ScriptEventListener.cpp:
        (WebCore::createAttributeEventListener):
        * bindings/js/ScriptEventListener.h:
        * bindings/v8/ScriptEventListener.cpp:
        (WebCore::createAttributeEventListener):
        * bindings/v8/ScriptEventListener.h:
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::parseMappedAttribute):
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::parseMappedAttribute):
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::parseMappedAttribute):

2010-06-29  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r62129.
        http://trac.webkit.org/changeset/62129
        https://bugs.webkit.org/show_bug.cgi?id=41362

        Needed to roll out r62052 (see bug 41357) (Requested by aroben
        on #webkit).

        * bindings/js/ScriptEventListener.cpp:
        (WebCore::createWindowAttributeEventListener):

2010-06-29  Beth Dakin  <bdakin@apple.com>

        Reviewed by Darin Adler.

        Speculative fix for <rdar://problem/8071558> CrashTracer: [USER] 
        2300+ crashes in Safari at com.apple.WebCore: 
        WebCore::FrameView::scheduleRelayout + 352

        Unfortunately, we don't have a reproducible case for this bug, and 
        therefore, we do not have a layout test either. It is pretty clear 
        from the logs that m_frame->settings() is null in 
        FrameView::scheduleRelayout() in the crashing case. 
        m_frame->settings() is null whenever page is null. Everywhere else 
        in FrameView.cpp we null-check either page or settings before using 
        settings. It seems plausible to me that scheduleRelayout could be 
        called when page is null, so the fix is just to add null-checks. 

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

2010-06-29  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/7975842> Certain text is repeated after using splitText()

        Tests: fast/text/setData-dirty-lines.html
               fast/text/splitText-dirty-lines.html

        * dom/CharacterData.cpp:
        (WebCore::CharacterData::setData): Call RenderText::setTextWithOffset() rather than
        setText(), because only the former correctly dirties line boxes.
        * dom/Text.cpp:
        (WebCore::Text::splitText): Ditto.

2010-06-29  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r62073.
        http://trac.webkit.org/changeset/62073
        https://bugs.webkit.org/show_bug.cgi?id=41359

        Necessary to fix chromium build when r62052 is rolled out.
        (Requested by dave_levin on #webkit).

        * bindings/v8/ScriptEventListener.h:

2010-06-29  Vangelis Kokkevis  <vangelis@chromium.org>

        Reviewed by Darin Fisher.

        [Chromium] Hooking up WebGL layers to the gpu-compositor. Implement missing
        methods to set the contents of a GraphicsLayer with a platform specific WebGL
        Layer, and to update the contents of the WebGL Layer when needed.
        https://bugs.webkit.org/show_bug.cgi?id=41243

        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::setContentsToWebGL):
        * platform/graphics/chromium/GraphicsLayerChromium.h:
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::removeAllSublayers):
          No need to call setNeedsCommit() from here as the previous call to
          layer->removeFromSuperlayer() will have that effect (and we only need
          to notify the owner if there were actually any sublayers removed).
        * platform/graphics/chromium/LayerChromium.h:
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::drawLayer):
        * platform/graphics/chromium/WebGLLayerChromium.cpp:
        (WebCore::WebGLLayerChromium::create):
        (WebCore::WebGLLayerChromium::updateTextureContents):
        (WebCore::WebGLLayerChromium::setContext):

2010-06-29  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Buildfix for --minimal build after r62052
        https://bugs.webkit.org/show_bug.cgi?id=41338

        * bindings/js/ScriptEventListener.cpp: #if ENABLE(SVG) guards added.
        (WebCore::createWindowAttributeEventListener):

2010-06-29  Brent Fulgham  <bfulgham@webkit.org>

        Build fix. Not reviewd.

        CGColor is only used for PLATFORM(CG).  Conditionalize include
        to correct build failure for WinCairo.

        * platform/graphics/win/MediaPlayerPrivateFullscreenWindow.cpp:
        Conditionalize use of CGColor.

2010-06-29  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Clean up the source lists in the GNUMakefile.am files
        https://bugs.webkit.org/show_bug.cgi?id=41229

        Clean up the GNUMakefile.am a little bit. Alphabetize and conglomerate
        the source lists.

        * GNUmakefile.am:

2010-06-29  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] DragDataGtk should use DataObjectGtk as the platformDragData
        https://bugs.webkit.org/show_bug.cgi?id=40307

        Use DataObjectGtk as the platformDragData for DragDataGtk. DataObjectGtk
        contains all the information necessary to keep track of drops in progress.

        * platform/DragData.h: Use a DataObjectGtk* as the platform drag data.
        * platform/gtk/DragDataGtk.cpp:
        (WebCore::DragData::containsFiles): Retrieve information via platformDragData.
        (WebCore::DragData::asFilenames): Ditto.
        (WebCore::DragData::containsPlainText): Ditto.
        (WebCore::DragData::asPlainText): Ditto.
        (WebCore::DragData::createClipboard): Create the Clipboard with the platformDragData.
        (WebCore::DragData::containsCompatibleContent): Retrieve information via platformDragData.
        (WebCore::DragData::containsURL): Ditto.
        (WebCore::DragData::asURL): Ditto.
        (WebCore::DragData::asFragment): Ditto.

2010-06-29  Adam Langley  <agl@chromium.org>

        Build fix. Not reviewd.

        * platform/graphics/chromium/FontPlatformDataLinux.cpp:
        (WebCore::FontPlatformData::setupPaint):
          The name of the Skia function changed between writing this patch and
          commiting it.

2010-06-29  Adam Langley  <agl@chromium.org>

        Reviewed by Kent Tamura.

        [chromium] Support forced autohinting.

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

        Freetype (the typical font rendering on Linux) includes an 'autohinter':
        an algorithm for hinting glyph shapes without using the embedded hinting
        bytecode in a font.

        Some people prefer the autohinter's results, so we support forcing its
        use.

        This change also fixes a bug where two FontPlatformData structures would
        compare equal, even if their rendering styles were different.

        * platform/graphics/chromium/FontPlatformDataLinux.cpp:
        (WebCore::FontPlatformData::setupPaint):
          In order to compare FontPlatformData structures we need to make sure
          that they are initialised.
        (WebCore::FontPlatformData::operator==):
        * platform/graphics/chromium/FontRenderStyle.h:
        (WebCore::FontRenderStyle::FontRenderStyle):
        (WebCore::FontRenderStyle::operator==):
          This fixes the case where two FontPlatformData structures, differing
          only by rendering style, would compare equal.

2010-06-29  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Unreviewed, Symbian build fix.

        Add more directories to USERINCLUDE so that they get included
        before the Symbian system headers.

        This is a workaround to some toolchain problems; bug 31273 is used to
        find a better solution.

        No new tests as there is no new functionality.

        * WebCore.pro:

2010-06-29  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Cleanup SVGRenderSupport
        https://bugs.webkit.org/show_bug.cgi?id=41347

        Remove SVGRenderBase base class from all SVG renderers. It was meant as temporary solution until all SVG renderers inherit from RenderSVGModelObject,
        though this is not going to happen. RenderSVGModelObject inherits from RenderObject, making it impossible to inherit eg. RenderSVGImage from it, as
        it already indirectly inherits from RenderObject, through RenderImage. Other examples are RenderForeignObject (RenderBlock inheritance),
        RenderSVGInlineText (RenderText inheritance) etc.

        Rename SVGRenderBase to SVGRenderSupport, just like the file is named, remove all free functions, and make them all static functions in SVGRenderSupport.
        We can still share code between all SVG renderers, but don't need a special base class for all renderers -> shrink size of all SVG renderers.

        Doesn't affect any test.

        * rendering/RenderBox.cpp: Remove localTransform() override, not needed at all.
        * rendering/RenderBox.h: Ditto.
        * rendering/RenderForeignObject.cpp: s/SVGRenderBase/SVGRenderSupport/
        (WebCore::RenderForeignObject::paint):
        (WebCore::RenderForeignObject::clippedOverflowRectForRepaint):
        (WebCore::RenderForeignObject::computeRectForRepaint):
        (WebCore::RenderForeignObject::nodeAtFloatPoint):
        (WebCore::RenderForeignObject::mapLocalToContainer):
        * rendering/RenderPath.cpp:
        (WebCore::BoundingRectStrokeStyleApplier::strokeStyle): applyStrokeStyleToContext is a static function in SVGRenderSupport now.
        (WebCore::RenderPath::paint): s/SVGRenderBase/SVGRenderSupport/
        (WebCore::RenderPath::nodeAtFloatPoint): Ditto.
        (WebCore::RenderPath::updateCachedBoundaries): Ditto.
        * rendering/RenderSVGBlock.h: Remove SVGRenderBase inheritance.
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::layout): layoutChildren is a static function in SVGRenderSupport now.
        (WebCore::RenderSVGContainer::paint): prepareToRenderSVGContent/finishRenderSVGContent are now static functions in SVGRenderSupport.
        (WebCore::RenderSVGContainer::objectBoundingBox): computeContainerBoundingBox is a static function in SVGRenderSupport now.
        (WebCore::RenderSVGContainer::strokeBoundingBox): Ditto.
        (WebCore::RenderSVGContainer::repaintRectInLocalCoordinates): Remove call to computeContainerBoundingBox, use strokeBoundingBox instead, for consistency.
        (WebCore::RenderSVGContainer::nodeAtFloatPoint): pointInClippingArea is a static function in SVGRenderSupport now.
        * rendering/RenderSVGHiddenContainer.cpp:
        (WebCore::RenderSVGHiddenContainer::layout): layoutChildren is a static function in SVGRenderSupport now.
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::paint): prepareToRenderSVGContent/finishRenderSVGContent are static functions in SVGRenderSupport now.
        (WebCore::RenderSVGImage::destroy): deregisterResource was renamed to invalidateAllResourcesOfRenderer and is a static function in SVGRenderSupport. 
        (WebCore::RenderSVGImage::nodeAtFloatPoint): pointInClippingArea is a static function in SVGRenderSupport now.
        (WebCore::RenderSVGImage::repaintRectInLocalCoordinates): intersectRepaintRectWithResources is a static function in SVGRenderSupport now.
        (WebCore::RenderSVGImage::clippedOverflowRectForRepaint): s/SVGRenderBase/SVGRenderSupport/
        (WebCore::RenderSVGImage::computeRectForRepaint): Ditto.
        (WebCore::RenderSVGImage::mapLocalToContainer): Ditto.
        * rendering/RenderSVGImage.h: Remove SVGRenderBase inheritance.
        * rendering/RenderSVGInline.cpp:
        (WebCore::RenderSVGInline::objectBoundingBox): findTextRootObject is a static function in SVGRenderSupport now.
        (WebCore::RenderSVGInline::strokeBoundingBox): Ditto.
        (WebCore::RenderSVGInline::repaintRectInLocalCoordinates): Ditto.
        (WebCore::RenderSVGInline::clippedOverflowRectForRepaint): s/SVGRenderBase/SVGRenderSupport/
        (WebCore::RenderSVGInline::computeRectForRepaint): Ditto,.
        (WebCore::RenderSVGInline::mapLocalToContainer): Ditto.
        (WebCore::RenderSVGInline::absoluteQuads): findTextRootObject is a static function in SVGRenderSupport now.
        * rendering/RenderSVGInline.h: Remove SVGRenderBase inheritance.
        * rendering/RenderSVGModelObject.cpp:
        (WebCore::RenderSVGModelObject::clippedOverflowRectForRepaint): s/SVGRenderBase/SVGRenderSupport/
        (WebCore::RenderSVGModelObject::computeRectForRepaint): Ditto.
        (WebCore::RenderSVGModelObject::mapLocalToContainer): Ditto.
        (WebCore::RenderSVGModelObject::destroy): deregisterResource was renamed to invalidateAllResourcesOfRenderer and is a static function in SVGRenderSupport.
        * rendering/RenderSVGModelObject.h: Remove SVGRenderBase inheritance.
        * rendering/RenderSVGResource.cpp:
        (WebCore::invalidatePaintingResource): Moved here from SVGRenderSupport (static inline helper function).
        (WebCore::RenderSVGResource::invalidateAllResourcesOfRenderer): Moved here from SVGRenderSupport and renamed from deregisterFromResources.
        * rendering/RenderSVGResource.h: Expose invalidateAllResourcesOfRenderer function.
        * rendering/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::createClipData): renderSubtreeToImage is a static function in SVGRenderSupport now.
        (WebCore::RenderSVGResourceClipper::hitTestClipContent): Ditto.
        * rendering/RenderSVGResourceGradient.cpp:
        (WebCore::createMaskAndSwapContextForTextGradient): findTextRootObject is a static function in SVGRenderSupport now.
        (WebCore::clipToTextMask): Ditto.
        (WebCore::RenderSVGResourceGradient::applyResource): applyStrokeStyleToContext is a static function in SVGRenderSupport now.
        (WebCore::RenderSVGResourceGradient::postApplyResource): findTextRootObject is a static function in SVGRenderSupport now.
        * rendering/RenderSVGResourceMarker.cpp:
        (WebCore::RenderSVGResourceMarker::applyViewportClip): s/SVGRenderBase/SVGRenderSupport/
        * rendering/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::createMaskImage): renderSubtreeToImage is a static function in SVGRenderSupport now.
        * rendering/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::applyResource): applyStrokeStyleToContext is a static function in SVGRenderSupport now.
        (WebCore::clampImageBufferSizeToViewport): Moved here from SVGRenderSupport.
        (WebCore::RenderSVGResourcePattern::createTileImage): renderSubtreeToImage is a static function in SVGRenderSupport now.
        * rendering/RenderSVGResourceSolidColor.cpp:
        (WebCore::RenderSVGResourceSolidColor::applyResource): applyStrokeStyleToContext is a static function in SVGRenderSupport now
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::layout): layoutChildren is a static function in SVGRenderSupport now.
        (WebCore::RenderSVGRoot::paint): prepareToRenderSVGContent/finishRenderSVGContent are now static functions in SVGRenderSupport.
        (WebCore::RenderSVGRoot::destroy): deregisterResource was renamed to invalidateAllResourcesOfRenderer and is a static function in SVGRenderSupport.
        (WebCore::RenderSVGRoot::repaintRectInLocalCoordinates): Remove call to computeContainerBoundingBox, use strokeBoundingBox instead, for consistency.
        * rendering/RenderSVGRoot.h: Remove localTransform() override, no longer needed. Remove SVGRenderBase inheritance.
        (WebCore::RenderSVGRoot::objectBoundingBox): Inlined for speeed. 
        (WebCore::RenderSVGRoot::strokeBoundingBox): computeContainerBoundingBox is a static function in SVGRenderSupport now.
        * rendering/RenderSVGText.cpp: 
        (WebCore::RenderSVGText::clippedOverflowRectForRepaint): s/SVGRenderBase/SVGRenderSupport/
        (WebCore::RenderSVGText::computeRectForRepaint): Ditto.
        (WebCore::RenderSVGText::mapLocalToContainer): Ditto.
        (WebCore::RenderSVGText::nodeAtFloatPoint): pointInClippingArea is a static function in SVGRenderSupport now.
        (WebCore::RenderSVGText::destroy): deregisterResource was renamed to invalidateAllResourcesOfRenderer and is a static function in SVGRenderSupport.
        (WebCore::RenderSVGText::repaintRectInLocalCoordinates): intersectRepaintRectWithResources is a static function in SVGRenderSupport now.
        * rendering/RenderSVGViewportContainer.cpp:
        (WebCore::RenderSVGViewportContainer::applyViewportClip): s/SVGRenderBase/SVGRenderSupport/
        (WebCore::RenderSVGViewportContainer::pointIsInsideViewportClip): pointInClippingArea is a static function in SVGRenderSupport now.
        * rendering/SVGInlineFlowBox.cpp:
        (WebCore::SVGInlineFlowBox::paint): prepareToRenderSVGContent/finishRenderSVGContent are now static functions in SVGRenderSupport.
        * rendering/SVGRenderSupport.cpp: Make it impossible to construct the class. Remove virtual destructor, made all methods static.
        (WebCore::SVGRenderSupport::clippedOverflowRectForRepaint): s/SVGRenderBase/SVGRenderSupport/
        (WebCore::SVGRenderSupport::computeRectForRepaint): Ditto.
        (WebCore::SVGRenderSupport::mapLocalToContainer): Ditto.
        (WebCore::SVGRenderSupport::prepareToRenderSVGContent): Ditto.
        (WebCore::SVGRenderSupport::finishRenderSVGContent): Ditto.
        (WebCore::SVGRenderSupport::renderSubtreeToImage): Made static.
        (WebCore::SVGRenderSupport::computeContainerBoundingBox): Ditto.
        (WebCore::SVGRenderSupport::layoutChildren): Ditto.
        (WebCore::SVGRenderSupport::isOverflowHidden): s/SVGRenderBase/SVGRenderSupport/
        (WebCore::SVGRenderSupport::intersectRepaintRectWithResources): Ditto.
        (WebCore::SVGRenderSupport::pointInClippingArea): Made static.
        (WebCore::SVGRenderSupport::dashArrayFromRenderingStyle): Ditto.
        (WebCore::SVGRenderSupport::applyStrokeStyleToContext): Ditto.
        (WebCore::SVGRenderSupport::findTextRootObject): Ditto.
        * rendering/SVGRenderSupport.h:
        * rendering/SVGRenderTreeAsText.cpp:
        (WebCore::writeStyle): dashArrayFromRenderingStyle is a static function in SVGRenderSupport now.
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::paint): s/SVGRenderBase/SVGRenderSupport/
        * rendering/SVGRootInlineBox.h: Remove SVGRenderBase inheritance.
        * svg/SVGFEImageElement.cpp: Add RenderObject.h include, otherwhise it won't build anymore.
        (WebCore::SVGFEImageElement::build): renderSubtreeToImage is a static function in SVGRenderSupport now.
        * svg/SVGStyledElement.cpp: 
        (WebCore::SVGStyledElement::svgAttributeChanged): deregisterResource was renamed to invalidateAllResourcesOfRenderer and is a static function in SVGRenderSupport.

2010-06-21  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Xan Lopez.

        [PNG decoder] direct access to jmpbuf is deprecated in libpng >= 1.4.0beta103
        https://bugs.webkit.org/show_bug.cgi?id=40907

        Define a JMPBUF macro to cope with deprecation of the jmpbuf
        attribute in libpng >= 1.4.

        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::decodingFailed):
        (WebCore::PNGImageReader::decode):
        (WebCore::PNGImageDecoder::headerAvailable):
        (WebCore::PNGImageDecoder::rowAvailable):

2010-06-29  Kristian Amlie  <kristian.amlie@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt/Symbian] Fixed deployment paths for WebKit declarative plugin.

        * WebCore.pro:

2010-06-29  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed: Chromium Win and Mac build fix.

        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::setBreakpoint):

2010-06-29  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Move PaintInfo/PaintPhase into their own headers, out of RenderObject
        https://bugs.webkit.org/show_bug.cgi?id=41342

        1) Move enums PaintPhase/PaintBehaviorFlags and the PaintBehaviour typedef from RenderObject into PaintPhase.h.
           Move PaintInfo from RenderObject into PaintInfo.h. Replace s/RenderObject::PaintInfo/PaintInfo/ throughout WebCore/.
           Also move the OverlapTestRequestMap typedef into PaintInfo.h, and replace s/RenderObject::OverlapTestRequestMap/OverlapTestRequestMap/ everywhere.

        2) Move "RenderObject* paintingRootForChildren(PaintInfo& paintInfo) const" from RenderObject to PaintInfo
           and modify it to take a renderer: "void updatePaintingRootForChildren(const RenderObject* renderer)".

        This changes a common idiom:
        -    info.paintingRoot = paintingRootForChildren(paintInfo);
        +    info.updatePaintingRootForChildren(this);

        We save resetting the paintingRoot to 0 if it was 0 already and thus do less work.

        3) Move "bool shouldPaintWithinRoot(PaintInfo& paintInfo) const" from RenderObject to PaintInfo
           and modify it to take a renderer: "bool shouldPaintWithinRoot(const RenderObject* renderer) const".

        This changes a common idiom:
        -    if (!shouldPaintWithinRoot(paintInfo))
        +    if (!paintInfo.shouldPaintWithinRoot(this))

        4) Move "void applyTransformToPaintInfo(RenderObject::PaintInfo&, const AffineTransform& localToChildTransform)"
           from SVGRenderSupport to PaintInfo and rename it to "applyTransform", guarded with ENABLE(SVG) blocks.

        This changes a common idiom:
        -    applyTransformToPaintInfo(childPaintInfo, localToParentTransform());
        +    childPaintInfo.applyTransform(localToParentTransform());

        Add PaintInfo.h / PaintPhase.h to all build systems that list headers.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * platform/android/RenderThemeAndroid.cpp:
        (WebCore::getCanvasFromInfo):
        (WebCore::RenderThemeAndroid::paintCheckbox):
        (WebCore::RenderThemeAndroid::paintButton):
        (WebCore::RenderThemeAndroid::paintRadio):
        (WebCore::RenderThemeAndroid::paintTextField):
        (WebCore::RenderThemeAndroid::paintTextArea):
        (WebCore::RenderThemeAndroid::paintSearchField):
        (WebCore::RenderThemeAndroid::paintCombo):
        (WebCore::RenderThemeAndroid::paintMenuList):
        (WebCore::RenderThemeAndroid::paintMenuListButton):
        * platform/android/RenderThemeAndroid.h:
        * platform/efl/RenderThemeEfl.cpp:
        (WebCore::RenderThemeEfl::paintThemePart):
        (WebCore::RenderThemeEfl::paintCheckbox):
        (WebCore::RenderThemeEfl::paintRadio):
        (WebCore::RenderThemeEfl::paintButton):
        (WebCore::RenderThemeEfl::paintMenuList):
        (WebCore::RenderThemeEfl::paintTextField):
        (WebCore::RenderThemeEfl::paintTextArea):
        (WebCore::RenderThemeEfl::paintSearchFieldDecoration):
        (WebCore::RenderThemeEfl::paintSearchFieldResultsButton):
        (WebCore::RenderThemeEfl::paintSearchFieldResultsDecoration):
        (WebCore::RenderThemeEfl::paintSearchFieldCancelButton):
        (WebCore::RenderThemeEfl::paintSearchField):
        * platform/efl/RenderThemeEfl.h:
        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::paintMozillaGtkWidget):
        (WebCore::RenderThemeGtk::paintCheckbox):
        (WebCore::RenderThemeGtk::paintRadio):
        (WebCore::RenderThemeGtk::paintButton):
        (WebCore::RenderThemeGtk::paintMenuList):
        (WebCore::RenderThemeGtk::paintTextField):
        (WebCore::RenderThemeGtk::paintTextArea):
        (WebCore::RenderThemeGtk::paintSearchFieldResultsButton):
        (WebCore::RenderThemeGtk::paintSearchFieldResultsDecoration):
        (WebCore::RenderThemeGtk::paintSearchFieldCancelButton):
        (WebCore::RenderThemeGtk::paintSearchField):
        (WebCore::RenderThemeGtk::paintSliderTrack):
        (WebCore::RenderThemeGtk::paintSliderThumb):
        (WebCore::RenderThemeGtk::paintMediaFullscreenButton):
        (WebCore::RenderThemeGtk::paintMediaMuteButton):
        (WebCore::RenderThemeGtk::paintMediaPlayButton):
        (WebCore::RenderThemeGtk::paintMediaSeekBackButton):
        (WebCore::RenderThemeGtk::paintMediaSeekForwardButton):
        (WebCore::RenderThemeGtk::paintMediaSliderTrack):
        (WebCore::RenderThemeGtk::paintMediaSliderThumb):
        (WebCore::RenderThemeGtk::paintProgressBar):
        * platform/gtk/RenderThemeGtk.h:
        * platform/haiku/RenderThemeHaiku.cpp:
        (WebCore::RenderThemeHaiku::paintCheckbox):
        (WebCore::RenderThemeHaiku::paintRadio):
        (WebCore::RenderThemeHaiku::paintMenuList):
        * platform/haiku/RenderThemeHaiku.h:
        * platform/qt/RenderThemeQt.cpp:
        (WebCore::StylePainter::StylePainter):
        (WebCore::RenderThemeQt::paintCheckbox):
        (WebCore::RenderThemeQt::paintRadio):
        (WebCore::RenderThemeQt::paintButton):
        (WebCore::RenderThemeQt::paintTextField):
        (WebCore::RenderThemeQt::paintTextArea):
        (WebCore::RenderThemeQt::paintMenuList):
        (WebCore::RenderThemeQt::paintMenuListButton):
        (WebCore::RenderThemeQt::paintProgressBar):
        (WebCore::RenderThemeQt::paintSliderTrack):
        (WebCore::RenderThemeQt::paintSliderThumb):
        (WebCore::RenderThemeQt::paintSearchField):
        (WebCore::RenderThemeQt::paintSearchFieldCancelButton):
        (WebCore::RenderThemeQt::paintSearchFieldDecoration):
        (WebCore::RenderThemeQt::paintSearchFieldResultsDecoration):
        (WebCore::RenderThemeQt::paintMediaFullscreenButton):
        (WebCore::RenderThemeQt::paintMediaMuteButton):
        (WebCore::RenderThemeQt::paintMediaPlayButton):
        (WebCore::RenderThemeQt::paintMediaSeekBackButton):
        (WebCore::RenderThemeQt::paintMediaSeekForwardButton):
        (WebCore::RenderThemeQt::paintMediaCurrentTime):
        (WebCore::RenderThemeQt::paintMediaVolumeSliderTrack):
        (WebCore::RenderThemeQt::paintMediaVolumeSliderThumb):
        (WebCore::RenderThemeQt::paintMediaSliderTrack):
        (WebCore::RenderThemeQt::paintMediaSliderThumb):
        * platform/qt/RenderThemeQt.h:
        * platform/wx/RenderThemeWx.cpp:
        (WebCore::RenderThemeWx::paintCheckbox):
        (WebCore::RenderThemeWx::paintRadio):
        (WebCore::RenderThemeWx::paintButton):
        (WebCore::RenderThemeWx::paintTextField):
        (WebCore::RenderThemeWx::paintMenuList):
        (WebCore::RenderThemeWx::paintMenuListButton):
        * rendering/EllipsisBox.cpp:
        (WebCore::EllipsisBox::paint):
        * rendering/EllipsisBox.h:
        * rendering/InlineBox.cpp:
        (WebCore::InlineBox::paint):
        * rendering/InlineBox.h:
        * rendering/InlineFlowBox.cpp:
        (WebCore::InlineFlowBox::paint):
        (WebCore::InlineFlowBox::paintFillLayers):
        (WebCore::InlineFlowBox::paintFillLayer):
        (WebCore::InlineFlowBox::paintBoxDecorations):
        (WebCore::InlineFlowBox::paintMask):
        (WebCore::InlineFlowBox::paintTextDecorations):
        * rendering/InlineFlowBox.h:
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint):
        * rendering/InlineTextBox.h:
        * rendering/PaintInfo.h: Added.
        (WebCore::PaintInfo::PaintInfo):
        (WebCore::PaintInfo::updatePaintingRootForChildren):
        (WebCore::PaintInfo::shouldPaintWithinRoot):
        (WebCore::PaintInfo::applyTransform):
        * rendering/PaintPhase.h: Added.
        (WebCore::):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paint):
        (WebCore::RenderBlock::paintChildren):
        (WebCore::RenderBlock::paintEllipsisBoxes):
        (WebCore::clipOutPositionedObjects):
        (WebCore::RenderBlock::layoutColumns):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paint):
        (WebCore::RenderBox::paintBoxDecorations):
        (WebCore::RenderBox::paintMask):
        * rendering/RenderFieldset.cpp:
        (WebCore::RenderFieldset::paintBoxDecorations):
        * rendering/RenderForeignObject.cpp:
        (WebCore::RenderForeignObject::paint):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::paint):
        (WebCore::performOverlapTests):
        (WebCore::RenderLayer::paintLayer):
        (WebCore::RenderLayer::paintList):
        (WebCore::RenderLayer::paintPaginatedChildLayer):
        (WebCore::RenderLayer::paintChildLayerIntoColumns):
        * rendering/RenderLayer.h:
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::paintIntoLayer):
        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::paint):
        * rendering/RenderLineBoxList.h:
        * rendering/RenderMediaControls.cpp:
        (WebCore::RenderMediaControls::paintMediaControlsPart):
        * rendering/RenderMediaControls.h:
        * rendering/RenderMediaControlsChromium.cpp:
        (WebCore::paintMediaMuteButton):
        (WebCore::paintMediaPlayButton):
        (WebCore::paintMediaSlider):
        (WebCore::paintMediaSliderThumb):
        (WebCore::paintMediaVolumeSlider):
        (WebCore::paintMediaVolumeSliderThumb):
        (WebCore::paintMediaTimelineContainer):
        (WebCore::RenderMediaControlsChromium::paintMediaControlsPart):
        * rendering/RenderMediaControlsChromium.h:
        * rendering/RenderObject.h:
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::paint):
        * rendering/RenderReplaced.cpp:
        (WebCore::RenderReplaced::paint):
        (WebCore::RenderReplaced::shouldPaint):
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::paint):
        * rendering/RenderSVGResourceMarker.cpp:
        (WebCore::RenderSVGResourceMarker::draw):
        * rendering/RenderSVGResourceMarker.h:
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::paint):
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::paint):
        * rendering/RenderScrollbarPart.cpp:
        (WebCore::RenderScrollbarPart::paintIntoRect):
        * rendering/RenderTable.cpp:
        (WebCore::RenderTable::paintObject):
        (WebCore::RenderTable::paintBoxDecorations):
        * rendering/RenderTableCell.cpp:
        (WebCore::RenderTableCell::paint):
        (WebCore::RenderTableCell::paintBackgroundsBehindCell):
        (WebCore::RenderTableCell::paintBoxDecorations):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::paint):
        (WebCore::RenderTheme::paintBorderOnly):
        (WebCore::RenderTheme::paintDecorations):
        (WebCore::RenderTheme::paintMeter):
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::paintCapsLockIndicator):
        (WebCore::RenderTheme::paintCheckbox):
        (WebCore::RenderTheme::paintRadio):
        (WebCore::RenderTheme::paintButton):
        (WebCore::RenderTheme::paintInnerSpinButton):
        (WebCore::RenderTheme::paintOuterSpinButton):
        (WebCore::RenderTheme::paintTextField):
        (WebCore::RenderTheme::paintTextArea):
        (WebCore::RenderTheme::paintMenuList):
        (WebCore::RenderTheme::paintMenuListButton):
        (WebCore::RenderTheme::paintProgressBar):
        (WebCore::RenderTheme::paintSliderTrack):
        (WebCore::RenderTheme::paintSliderThumb):
        (WebCore::RenderTheme::paintSearchField):
        (WebCore::RenderTheme::paintSearchFieldCancelButton):
        (WebCore::RenderTheme::paintSearchFieldDecoration):
        (WebCore::RenderTheme::paintSearchFieldResultsDecoration):
        (WebCore::RenderTheme::paintSearchFieldResultsButton):
        (WebCore::RenderTheme::paintMediaFullscreenButton):
        (WebCore::RenderTheme::paintMediaPlayButton):
        (WebCore::RenderTheme::paintMediaMuteButton):
        (WebCore::RenderTheme::paintMediaSeekBackButton):
        (WebCore::RenderTheme::paintMediaSeekForwardButton):
        (WebCore::RenderTheme::paintMediaSliderTrack):
        (WebCore::RenderTheme::paintMediaSliderThumb):
        (WebCore::RenderTheme::paintMediaVolumeSliderContainer):
        (WebCore::RenderTheme::paintMediaVolumeSliderTrack):
        (WebCore::RenderTheme::paintMediaVolumeSliderThumb):
        (WebCore::RenderTheme::paintMediaRewindButton):
        (WebCore::RenderTheme::paintMediaReturnToRealtimeButton):
        (WebCore::RenderTheme::paintMediaToggleClosedCaptionsButton):
        (WebCore::RenderTheme::paintMediaControlsBackground):
        (WebCore::RenderTheme::paintMediaCurrentTime):
        (WebCore::RenderTheme::paintMediaTimeRemaining):
        * rendering/RenderThemeChromiumMac.h:
        * rendering/RenderThemeChromiumMac.mm:
        (WebCore::RenderThemeChromiumMac::paintMediaPlayButton):
        (WebCore::RenderThemeChromiumMac::paintMediaMuteButton):
        (WebCore::RenderThemeChromiumMac::paintMediaSliderTrack):
        (WebCore::RenderThemeChromiumMac::paintMediaControlsBackground):
        (WebCore::RenderThemeChromiumMac::paintMediaVolumeSliderTrack):
        (WebCore::RenderThemeChromiumMac::paintMediaVolumeSliderThumb):
        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::RenderThemeChromiumSkia::paintCheckbox):
        (WebCore::RenderThemeChromiumSkia::paintRadio):
        (WebCore::paintButtonLike):
        (WebCore::RenderThemeChromiumSkia::paintButton):
        (WebCore::RenderThemeChromiumSkia::paintTextField):
        (WebCore::RenderThemeChromiumSkia::paintTextArea):
        (WebCore::RenderThemeChromiumSkia::paintSearchField):
        (WebCore::RenderThemeChromiumSkia::paintSearchFieldCancelButton):
        (WebCore::RenderThemeChromiumSkia::paintSearchFieldResultsDecoration):
        (WebCore::RenderThemeChromiumSkia::paintSearchFieldResultsButton):
        (WebCore::RenderThemeChromiumSkia::paintMediaControlsBackground):
        (WebCore::RenderThemeChromiumSkia::paintMediaSliderTrack):
        (WebCore::RenderThemeChromiumSkia::paintMediaVolumeSliderTrack):
        (WebCore::RenderThemeChromiumSkia::paintMediaSliderThumb):
        (WebCore::RenderThemeChromiumSkia::paintMediaVolumeSliderThumb):
        (WebCore::RenderThemeChromiumSkia::paintMediaPlayButton):
        (WebCore::RenderThemeChromiumSkia::paintMediaMuteButton):
        (WebCore::RenderThemeChromiumSkia::paintMenuList):
        (WebCore::RenderThemeChromiumSkia::paintMenuListButton):
        (WebCore::RenderThemeChromiumSkia::paintSliderTrack):
        (WebCore::RenderThemeChromiumSkia::paintSliderThumb):
        (WebCore::RenderThemeChromiumSkia::paintProgressBar):
        * rendering/RenderThemeChromiumSkia.h:
        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore::RenderThemeChromiumWin::paintCheckbox):
        (WebCore::RenderThemeChromiumWin::paintRadio):
        (WebCore::RenderThemeChromiumWin::paintButton):
        (WebCore::RenderThemeChromiumWin::paintTextField):
        (WebCore::RenderThemeChromiumWin::paintSliderTrack):
        (WebCore::RenderThemeChromiumWin::paintSliderThumb):
        (WebCore::RenderThemeChromiumWin::paintMenuList):
        (WebCore::RenderThemeChromiumWin::paintTextFieldInternal):
        (WebCore::RenderThemeChromiumWin::paintProgressBar):
        * rendering/RenderThemeChromiumWin.h:
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintTextField):
        (WebCore::RenderThemeMac::paintCapsLockIndicator):
        (WebCore::RenderThemeMac::paintTextArea):
        (WebCore::RenderThemeMac::paintMenuList):
        (WebCore::RenderThemeMac::paintMeter):
        (WebCore::RenderThemeMac::paintProgressBar):
        (WebCore::RenderThemeMac::paintMenuListButtonGradients):
        (WebCore::RenderThemeMac::paintMenuListButton):
        (WebCore::RenderThemeMac::paintSliderTrack):
        (WebCore::RenderThemeMac::paintSliderThumb):
        (WebCore::RenderThemeMac::paintSearchField):
        (WebCore::RenderThemeMac::paintSearchFieldCancelButton):
        (WebCore::RenderThemeMac::paintSearchFieldDecoration):
        (WebCore::RenderThemeMac::paintSearchFieldResultsDecoration):
        (WebCore::RenderThemeMac::paintSearchFieldResultsButton):
        (WebCore::getUnzoomedRectAndAdjustCurrentContext):
        (WebCore::RenderThemeMac::paintMediaFullscreenButton):
        (WebCore::RenderThemeMac::paintMediaMuteButton):
        (WebCore::RenderThemeMac::paintMediaPlayButton):
        (WebCore::RenderThemeMac::paintMediaSeekBackButton):
        (WebCore::RenderThemeMac::paintMediaSeekForwardButton):
        (WebCore::RenderThemeMac::paintMediaSliderTrack):
        (WebCore::RenderThemeMac::paintMediaSliderThumb):
        (WebCore::RenderThemeMac::paintMediaRewindButton):
        (WebCore::RenderThemeMac::paintMediaReturnToRealtimeButton):
        (WebCore::RenderThemeMac::paintMediaToggleClosedCaptionsButton):
        (WebCore::RenderThemeMac::paintMediaControlsBackground):
        (WebCore::RenderThemeMac::paintMediaCurrentTime):
        (WebCore::RenderThemeMac::paintMediaTimeRemaining):
        * rendering/RenderThemeSafari.cpp:
        (WebCore::RenderThemeSafari::paintCheckbox):
        (WebCore::RenderThemeSafari::paintRadio):
        (WebCore::RenderThemeSafari::paintButton):
        (WebCore::RenderThemeSafari::paintTextField):
        (WebCore::RenderThemeSafari::paintCapsLockIndicator):
        (WebCore::RenderThemeSafari::paintTextArea):
        (WebCore::RenderThemeSafari::paintMenuList):
        (WebCore::RenderThemeSafari::paintMenuListButtonGradients):
        (WebCore::RenderThemeSafari::paintMenuListButton):
        (WebCore::RenderThemeSafari::paintSliderTrack):
        (WebCore::RenderThemeSafari::paintSliderThumb):
        (WebCore::RenderThemeSafari::paintSearchField):
        (WebCore::RenderThemeSafari::paintSearchFieldCancelButton):
        (WebCore::RenderThemeSafari::paintSearchFieldDecoration):
        (WebCore::RenderThemeSafari::paintSearchFieldResultsDecoration):
        (WebCore::RenderThemeSafari::paintSearchFieldResultsButton):
        (WebCore::RenderThemeSafari::paintMediaFullscreenButton):
        (WebCore::RenderThemeSafari::paintMediaMuteButton):
        (WebCore::RenderThemeSafari::paintMediaPlayButton):
        (WebCore::RenderThemeSafari::paintMediaSeekBackButton):
        (WebCore::RenderThemeSafari::paintMediaSeekForwardButton):
        (WebCore::RenderThemeSafari::paintMediaSliderTrack):
        (WebCore::RenderThemeSafari::paintMediaSliderThumb):
        * rendering/RenderThemeSafari.h:
        * rendering/RenderThemeWin.cpp:
        (WebCore::RenderThemeWin::paintButton):
        (WebCore::RenderThemeWin::paintTextField):
        (WebCore::RenderThemeWin::paintMenuList):
        (WebCore::RenderThemeWin::paintMenuListButton):
        (WebCore::RenderThemeWin::paintSliderTrack):
        (WebCore::RenderThemeWin::paintSliderThumb):
        (WebCore::RenderThemeWin::paintSearchField):
        (WebCore::RenderThemeWin::paintSearchFieldCancelButton):
        (WebCore::RenderThemeWin::paintSearchFieldResultsDecoration):
        (WebCore::RenderThemeWin::paintSearchFieldResultsButton):
        (WebCore::RenderThemeWin::paintMediaFullscreenButton):
        (WebCore::RenderThemeWin::paintMediaMuteButton):
        (WebCore::RenderThemeWin::paintMediaPlayButton):
        (WebCore::RenderThemeWin::paintMediaSeekBackButton):
        (WebCore::RenderThemeWin::paintMediaSeekForwardButton):
        (WebCore::RenderThemeWin::paintMediaSliderTrack):
        (WebCore::RenderThemeWin::paintMediaSliderThumb):
        (WebCore::RenderThemeWin::paintMediaToggleClosedCaptionsButton):
        * rendering/RenderThemeWin.h:
        (WebCore::RenderThemeWin::paintCheckbox):
        (WebCore::RenderThemeWin::paintRadio):
        (WebCore::RenderThemeWin::paintTextArea):
        (WebCore::RenderThemeWin::paintSearchFieldDecoration):
        * rendering/RenderThemeWince.cpp:
        (WebCore::RenderThemeWince::paintButton):
        (WebCore::RenderThemeWince::paintTextField):
        (WebCore::RenderThemeWince::paintMenuList):
        (WebCore::RenderThemeWince::paintMenuListButton):
        (WebCore::RenderThemeWince::paintSearchField):
        (WebCore::RenderThemeWince::paintSearchFieldCancelButton):
        (WebCore::RenderThemeWince::paintSearchFieldResultsDecoration):
        (WebCore::RenderThemeWince::paintSearchFieldResultsButton):
        (WebCore::RenderThemeWince::paintSliderTrack):
        (WebCore::RenderThemeWince::paintSliderThumb):
        (WebCore::RenderThemeWince::paintMediaFullscreenButton):
        (WebCore::RenderThemeWince::paintMediaMuteButton):
        (WebCore::RenderThemeWince::paintMediaPlayButton):
        (WebCore::RenderThemeWince::paintMediaSeekBackButton):
        (WebCore::RenderThemeWince::paintMediaSeekForwardButton):
        (WebCore::RenderThemeWince::paintMediaSliderTrack):
        (WebCore::RenderThemeWince::paintMediaSliderThumb):
        * rendering/RenderThemeWince.h:
        (WebCore::RenderThemeWince::paintCheckbox):
        (WebCore::RenderThemeWince::paintRadio):
        (WebCore::RenderThemeWince::paintTextArea):
        (WebCore::RenderThemeWince::paintSearchFieldDecoration):
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::paintEllipsisBox):
        (WebCore::RootInlineBox::paintCustomHighlight):
        (WebCore::RootInlineBox::paint):
        (WebCore::RootInlineBox::fillLineSelectionGap):
        * rendering/RootInlineBox.h:
        * rendering/SVGInlineFlowBox.cpp:
        (WebCore::SVGInlineFlowBox::paint):
        * rendering/SVGInlineFlowBox.h:
        * rendering/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::paint):
        * rendering/SVGInlineTextBox.h:
        * rendering/SVGMarkerLayoutInfo.cpp:
        (WebCore::SVGMarkerLayoutInfo::drawMarkers):
        * rendering/SVGMarkerLayoutInfo.h:
        * rendering/SVGRenderSupport.cpp:
        (WebCore::SVGRenderBase::prepareToRenderSVGContent):
        (WebCore::SVGRenderBase::finishRenderSVGContent):
        (WebCore::renderSubtreeToImage):
        * rendering/SVGRenderSupport.h:
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::paint):
        * rendering/SVGRootInlineBox.h:

2010-06-29  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed. Sort Xcode project file.

        * WebCore.xcodeproj/project.pbxproj:

2010-06-29  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Provide floating-point support for text selection framework
        https://bugs.webkit.org/show_bug.cgi?id=40665

        Rename 'glyphScale' to 'horizontalGlyphStretch' upon Dans' request.
        Also guard the variables in ENABLE(SVG) blocks. Initialize variable to 1 instead of 1.0f, as that's the new style rule.

        No functional changes, thus no new tests.

        * platform/graphics/TextRun.h:
        (WebCore::TextRun::TextRun):
        (WebCore::TextRun::horizontalGlyphStretch):
        (WebCore::TextRun::setHorizontalGlyphStretch):
        (WebCore::TextRun::spacingDisabled):
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::advance):
        * rendering/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::offsetForPosition):

2010-06-29  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        REGRESSION: text-shadow CSS applied to SVG no longer works
        https://bugs.webkit.org/show_bug.cgi?id=40960

        Readd text-shadow support, this time supporting multiple shadows.
        It's not exactly like HTML, because SVG draws fill/stroke phases seperated - the png shows the difference.

        Tests: svg/css/text-shadow-multiple.xhtml

        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::applyShadowToGraphicsContext): Refactored from paintTextWithShadows(), so SVG can reuse.
        (WebCore::paintTextWithShadows): Use refactored applyShadowToGraphicsContext() function.
        * rendering/InlineTextBox.h: 
        * rendering/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::paintTextWithShadows): Added.
        (WebCore::SVGInlineTextBox::paintText): Call paintTextWithShadows() instead of directly drawing the text.
        * rendering/SVGInlineTextBox.h:

2010-06-29  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: show actual breakpoint position in UI.
        When user sets breakpoint from UI, javascript engine may actually set
        it on a different line. If so, move breakpoint to the correct position
        in frontend.
        https://bugs.webkit.org/show_bug.cgi?id=40781

        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::setBreakpoint):
        (WebCore::ScriptDebugServer::dispatchDidPause):
        * bindings/js/ScriptDebugServer.h:
        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::setBreakpoint):
        (WebCore::ScriptDebugServer::currentCallFrame):
        * bindings/v8/ScriptDebugServer.h:
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::setBreakpoint):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::didCommitLoad):
        (WebCore::InspectorController::setBreakpoint):
        (WebCore::InspectorController::removeBreakpoint):
        (WebCore::InspectorController::didParseSource):
        * inspector/InspectorController.h:
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::didSetBreakpoint):
        * inspector/InspectorFrontend.h:
        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager.prototype.setOneTimeBreakpoint):
        (WebInspector.BreakpointManager.prototype.removeOneTimeBreakpoint):
        (WebInspector.BreakpointManager.prototype.setBreakpoint):
        (WebInspector.BreakpointManager.prototype.restoredBreakpoint):
        (WebInspector.BreakpointManager.prototype.removeBreakpoint):
        (WebInspector.BreakpointManager.prototype._setBreakpoint):
        (WebInspector.BreakpointManager.prototype._removeBreakpoint):
        (WebInspector.BreakpointManager.prototype._setBreakpointOnBackend.didSetBreakpoint):
        (WebInspector.BreakpointManager.prototype._setBreakpointOnBackend):
        (WebInspector.Breakpoint.prototype.set enabled):
        (WebInspector.Breakpoint.prototype.set condition):
        * inspector/front-end/InspectorBackendStub.js:
        (.WebInspector.InspectorBackendStub.prototype.setBreakpoint):
        * inspector/front-end/ScriptView.js:
        (WebInspector.ScriptView.prototype._addBreakpoint):
        * inspector/front-end/SourceView.js:
        (WebInspector.SourceView.prototype._addBreakpoint):

2010-06-29  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Adam Barth.

        Catch toString() exceptions in all DB-related code.
        https://bugs.webkit.org/show_bug.cgi?id=41297

        * bindings/v8/custom/V8BindingMacros.h:
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::openDatabaseCallback):
        * bindings/v8/custom/V8DatabaseCustom.cpp:
        (WebCore::V8Database::changeVersionCallback):
        * bindings/v8/custom/V8DatabaseSyncCustom.cpp:
        (WebCore::V8DatabaseSync::changeVersionCallback):
        * bindings/v8/custom/V8SQLTransactionCustom.cpp:
        (WebCore::V8SQLTransaction::executeSqlCallback):
        * bindings/v8/custom/V8SQLTransactionSyncCustom.cpp:
        (WebCore::V8SQLTransactionSync::executeSqlCallback):
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        (WebCore::V8WorkerContext::openDatabaseCallback):
        (WebCore::V8WorkerContext::openDatabaseSyncCallback):

2010-06-29  Herczeg Zoltan  <zherczeg@webkit.org>

        Rubber-stamped by Nikolas Zimmermann.

        Windows build fix.
        https://bugs.webkit.org/show_bug.cgi?id=5861

        * svg/SVGFEConvolveMatrixElement.cpp:
        (WebCore::SVGFEConvolveMatrixElement::build):

2010-06-29  Zoltan Herczeg  <zherczeg@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Add ConvolveMatrix SVG filter effect
        https://bugs.webkit.org/show_bug.cgi?id=5861

        The patch was originally started by Dirk Schulze,
        and the .cpp and .h files are mostly his work.
        I updated the build systems and do some minor updates
        to the source files as well. The patch does not contain
        the implementation of the filter: this is intended,
        and will be landed in a follow-up patch.

        * Android.derived.jscbindings.mk:
        * Android.derived.v8bindings.mk:
        * Android.mk:
        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/objc/DOM.mm:
        (WebCore::createElementClassMap):
        * bindings/objc/DOMSVG.h:
        * page/DOMWindow.idl:
        * svg/SVGAllInOne.cpp:
        * svg/SVGFEConvolveMatrixElement.cpp: Added.
        (WebCore::SVGFEConvolveMatrixElement::SVGFEConvolveMatrixElement):
        (WebCore::SVGFEConvolveMatrixElement::~SVGFEConvolveMatrixElement):
        (WebCore::SVGFEConvolveMatrixElement::parseMappedAttribute):
        (WebCore::SVGFEConvolveMatrixElement::setOrder):
        (WebCore::SVGFEConvolveMatrixElement::setKernelUnitLength):
        (WebCore::SVGFEConvolveMatrixElement::build):
        * svg/SVGFEConvolveMatrixElement.h: Added.
        * svg/SVGFEConvolveMatrixElement.idl: Added.
        * svg/graphics/filters/SVGFEConvolveMatrix.cpp:
        (WebCore::FEConvolveMatrix::FEConvolveMatrix):
        (WebCore::FEConvolveMatrix::create):
        (WebCore::FEConvolveMatrix::kernelSize):
        (WebCore::FEConvolveMatrix::setKernelSize):
        (WebCore::FEConvolveMatrix::targetOffset):
        (WebCore::FEConvolveMatrix::setTargetOffset):
        (WebCore::operator<<):
        (WebCore::FEConvolveMatrix::externalRepresentation):
        * svg/graphics/filters/SVGFEConvolveMatrix.h:
        (WebCore::):
        * svg/svgattrs.in:
        * svg/svgtags.in:

2010-06-28  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        HTML5 tree builder shouldn't ASSERT on HTML5lib test suite
        https://bugs.webkit.org/show_bug.cgi?id=41335

        Sketch out the EndTag handling for InBodyMode.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processEndTag):
        * html/HTMLTreeBuilder.h:
        (WebCore::HTMLTreeBuilder::ElementStack::inScope):
        (WebCore::HTMLTreeBuilder::clearActiveFormatingElementsUpToLastMarker):
        (WebCore::HTMLTreeBuilder::generateImpliedEndTags):

2010-06-28  David Levin  <levin@chromium.org>

        Reviewed by NOBODY (chromium build fix).

        * rendering/RenderObject.h: Add missing forward declaration.

2010-06-28  Adam Barth  <abarth@webkit.org>

        Unreviewed.

        I accidently gave up my ref and tried to dereference a null pointer.
        This code is keeping an extra ref that it doesn't need, but that fact
        was somewhat hidden before.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::addChildCommon):
        (WebCore::ContainerNode::parserAddChild):
        (WebCore::ContainerNode::legacyParserAddChild):
        * dom/ContainerNode.h:

2010-06-28  Adam Barth  <abarth@webkit.org>

        Unreviewed.

        Refactor common code into addChildCommon
        https://bugs.webkit.org/show_bug.cgi?id=41326

        Eric asked that we share the common code between these codepaths.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::addChildCommon):
        (WebCore::ContainerNode::parserAddChild):
        (WebCore::ContainerNode::addChild):
        * dom/ContainerNode.h:

2010-06-28  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Implement HTMLTreeBuilder::reconstructTheActiveFormattingElements
        https://bugs.webkit.org/show_bug.cgi?id=41319

        Restructure the code to not use in-band data, which is what
        got us in trouble with a signed/unsigned mismatch before.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::indexOfFirstUnopenFormattingElement):
        (WebCore::HTMLTreeBuilder::reconstructTheActiveFormattingElements):
        * html/HTMLTreeBuilder.h:

2010-06-28  Daniel Bates  <dbates@rim.com>

        Unreviewed, attempt to fix Qt bots.

        Attempt to fix the build after changeset 62079 <http://trac.webkit.org/changeset/62079>
        (https://bugs.webkit.org/show_bug.cgi?id=41324).

        Rename some more call sites that were missed in the initial landing.

        * dom/XMLDocumentParserQt.cpp:
        (WebCore::XMLDocumentParser::parseStartElement):
        (WebCore::XMLDocumentParser::parseProcessingInstruction):
        (WebCore::XMLDocumentParser::parseCdata):
        (WebCore::XMLDocumentParser::parseComment):
        (WebCore::XMLDocumentParser::parseDtd):

2010-06-28  Daniel Bates  <dbates@rim.com>

        Unreviewed, build fix.

        Change return type of method HTMLTreeBuilder::reconstructTheActiveFormattingElements()
        from int to unsigned.

        Attempt to fix the build after changeset 62077 <https://trac.webkit.org/changeset/62077>
        (https://bugs.webkit.org/show_bug.cgi?id=41319).

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::indexOfLastOpenFormattingElementOrMarker):
        (WebCore::HTMLTreeBuilder::reconstructTheActiveFormattingElements):
        * html/HTMLTreeBuilder.h:

2010-06-28  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Rename ContainerNode::addChild to legacyParserAddChild to indicate its parser-only intended use
        https://bugs.webkit.org/show_bug.cgi?id=41324

        A bunch of places in the code were calling ContainerNode::addChild.
        I don't think they actually want to be doing that, as it has special
        form-related handling which is part of LegacyHTMLTreeBuilder.

        No functional changes, thus no tests.

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::legacyParserAddChild):
        * dom/ContainerNode.h:
        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument):
        * dom/Node.cpp:
        (WebCore::Node::legacyParserAddChild):
        * dom/Node.h:
        * html/HTMLKeygenElement.cpp:
        (WebCore::HTMLKeygenElement::HTMLKeygenElement):
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::legacyParserAddChild):
        * html/HTMLTableElement.h:
        * html/HTMLTableRowElement.cpp:
        (WebCore::HTMLTableRowElement::legacyParserAddChild):
        * html/HTMLTableRowElement.h:
        * html/HTMLTableSectionElement.cpp:
        (WebCore::HTMLTableSectionElement::legacyParserAddChild):
        * html/HTMLTableSectionElement.h:
        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::createContainingTable):
        (WebCore::HTMLViewSourceDocument::addSpanWithClassName):
        (WebCore::HTMLViewSourceDocument::addLine):
        (WebCore::HTMLViewSourceDocument::addText):
        (WebCore::HTMLViewSourceDocument::addLink):

2010-06-28  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Implement HTMLTreeBuilder::reconstructTheActiveFormattingElements
        https://bugs.webkit.org/show_bug.cgi?id=41319

        This is basically a direct transcription of HTML5 TreeBuilder spec:
         http://www.whatwg.org/specs/web-apps/current-work/multipage/parsing.html#list-of-active-formatting-elements

        This code is covered by various tests in html5lib/runner which we
        can't run yet due to other asserts.  Adam and I are working on
        getting rid of those ASSERTS so that this (and other code) will
        be better tested shortly.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::insertFormatingElement):
        (WebCore::HTMLTreeBuilder::reconstructTheActiveFormattingElements):
        * html/HTMLTreeBuilder.h:
        (WebCore::HTMLTreeBuilder::ElementStack::contains):
        (WebCore::HTMLTreeBuilder::FormatingElementEntry::FormatingElementEntry):
        (WebCore::HTMLTreeBuilder::FormatingElementEntry::):
        (WebCore::HTMLTreeBuilder::FormatingElementEntry::isMarker):
        (WebCore::HTMLTreeBuilder::FormatingElementEntry::element):
        (WebCore::HTMLTreeBuilder::FormatingElementEntry::replaceElement):

2010-06-28  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Fix ASSERT so we can run more HTML5lib tests
        https://bugs.webkit.org/show_bug.cgi?id=41325

        We can't call Node::addChild because that function contains a bunch of
        logic from the old parser.  Instead, this patch creates a new version
        of addChild that's does less validating (that's the tree builder's
        job).

        * dom/ContainerNode.cpp:
        (WebCore::ContainerNode::parserAddChild):
        * dom/ContainerNode.h:
        * dom/Node.cpp:
        (WebCore::Node::parserAddChild):
        * dom/Node.h:
        * html/HTMLTreeBuilder.h:
        (WebCore::HTMLTreeBuilder::attach):

2010-06-28  David Levin  <levin@chromium.org>

        Reviewed by NOBODY (chromium build fix).

        * bindings/v8/ScriptEventListener.h: Changed forward declaration
          to correspond to the code change doing in r62052.

2010-06-28  Brady Eidson  <beidson@apple.com>

        Reviewed by Alexey Proskuryakov.

        Support for https://bugs.webkit.org/show_bug.cgi?id=40484

        In working on adding beforeProcess, it becomes necessary for JSLazyEventListeners to always know what their
        original Node* was, even if it was a window event listener.

        For HTMLFrameSet, HTMLBody, and SVGSVG elements, a second form of createAttributeEventListener was used that
        took a Frame* argument and didn't set the original Node* on the JSLazyEventListener.

        This patch changes that form of the function to createWindowAttributeEventListener, and passes the Node* along
        for later use by the beforeProcess mechanism.

        No new tests. (No change in behavior)

        * bindings/js/ScriptEventListener.cpp:
        (WebCore::createWindowAttributeEventListener): Renamed from createAttributeEventListener, takes a Node* instead
          of a Frame*, and figures out the Frame* itself internally.
        * bindings/js/ScriptEventListener.h:

        * bindings/v8/ScriptEventListener.cpp:
        (WebCore::createWindowAttributeEventListener): Renamed from createAttributeEventListener, takes a Node* instead
          of a Frame*, and figures out the Frame* itself internally. Note that V8LazyEventListener doesn't allow us to
          pass the Element* argument in so this beforeprocess feature won't fully work on V8 builds until this is changed.
        * bindings/v8/ScriptEventListener.h:

        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::parseMappedAttribute): Use createWindowAttributeEventListener instead.
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::parseMappedAttribute): Ditto.
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::parseMappedAttribute): Ditto. Also add some missing copyright dates that `svn log` proves
          should be there.

2010-06-28  John Gregg  <johnnyg@google.com>

        Reviewed by Kent Tamura.

        add ENABLE_DIRECTORY_UPLOAD build support
        https://bugs.webkit.org/show_bug.cgi?id=41100

        * Configurations/FeatureDefines.xcconfig:
        * GNUmakefile.am:
        * WebCore.pri:

2010-06-28  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Don't use the new tree builder for fragments
        https://bugs.webkit.org/show_bug.cgi?id=41316

        We need to walk before we can run.  After this change, we can run the
        runner.html tests (with the ASSERT caveat).

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

2010-06-28  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        The new tree builder should actually finish building the tree
        https://bugs.webkit.org/show_bug.cgi?id=41314

        Again, this patch makes progress on runner.html, but I haven't removed
        the ASSERT yet.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::HTMLTreeBuilder):
        (WebCore::HTMLTreeBuilder::finished):
        * html/HTMLTreeBuilder.h:

2010-06-28  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Eric Seidel.

        Fix a race condition that can happen when using DBs in workers.
        https://bugs.webkit.org/show_bug.cgi?id=41105

        * storage/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::addOpenDatabase):
        * storage/DatabaseTracker.h:

2010-06-28  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add text nodes to the DOM
        https://bugs.webkit.org/show_bug.cgi?id=41306

        Actually add some text nodes to the DOM when parsing a document.  We're
        going to need to do something fancier here eventually, but this gets us
        past the error we're seeing currently in runner.html.

        Unfortunately, this patch "regresses" runner.html in the sense that we
        now hit an assert, but it's still an improvement...  I'll update the
        HTML5 expectations once we get past the assert.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processCharacter):
        (WebCore::HTMLTreeBuilder::insertTextNode):
        * html/HTMLTreeBuilder.h:

2010-06-28  Beth Dakin  <bdakin@apple.com>

        Build fix for non-PATH_BASED_BORDER_RADIUS_DRAWING platforms.

        * rendering/RenderBoxModelObject.cpp:

2010-06-28  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Use HTML5-conformant gradient interpolation mode
        https://bugs.webkit.org/show_bug.cgi?id=41298

        Change the Qt Gradient implementation to use ComponentInterpolation mode.

        Spec link:
        http://www.whatwg.org/specs/web-apps/current-work/#colors-and-styles

        * platform/graphics/qt/GradientQt.cpp:
        (WebCore::Gradient::platformGradient):

2010-06-28  Beth Dakin  <bdakin@apple.com>

        Reviewed by Sam Weinig.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=9197 CSS3: Borders 
        with border-radius and double, groove, or ridge styles should look 
        better

        This patch re-works border radius painting to stroke paths instead 
        of arcs. 

        Added new function clipConvexPolygon(). Added static 
        addConvexPolygonToContext so that code can be shared between 
        drawConvexPolygon() and clipConvexPolygon().
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::addConvexPolygonToContext):
        (WebCore::GraphicsContext::drawConvexPolygon):
        (WebCore::GraphicsContext::clipConvexPolygon):

        Shells of implementations on non-CG platforms.
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::clipConvexPolygon):
        * platform/graphics/haiku/GraphicsContextHaiku.cpp:
        (WebCore::GraphicsContext::clipConvexPolygon):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::clipConvexPolygon):
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::clipConvexPolygon):
        * platform/graphics/wince/GraphicsContextWince.cpp:
        (WebCore::GraphicsContext::clipConvexPolygon):
        * platform/graphics/wx/GraphicsContextWx.cpp:
        (WebCore::GraphicsContext::clipConvexPolygon):

        This new helper function determines if the inner corners of the 
        border will arch in or meet at a right angle. 
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::borderWillArcInnerEdge):

        This function is re-written so that, for each side of the border, 
        if borderWillArcInnerEdge() is true, we go down a brand new code 
        path of clipping to a convex polygon for the border side and then 
        we paint the side using the new function drawBoxSideFromPath(). If 
        borderWillArcInnerEdge() is false, then we call into the old 
        familiar drawLineForBoxSide() which relies on the rounder clip 
        rects we have set up to arch the outer edge of the border.
        (WebCore::RenderBoxModelObject::paintBorder):

        This new function does the math to figure out the convex polygon 
        to clip to in the case where we need to arch the inner edge of the 
        border. This calls into a new GraphicsContext function that is only 
        implemented on CG at this time. This is the reason we are keeping 
        around an old version of paintBorder() for now.
        (WebCore::RenderBoxModelObject::clipBorderSidePolygon):
        * rendering/RenderBoxModelObject.h:

        borderInnerRect() is a new convenience function called from 
        RenderObject and RenderBoxModelObject to determine the rect of the 
        inside edge of the border.
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::borderInnerRect):

        This new function re-works drawArcForBoxSide to draw from Paths 
        when appropriate instead of stroking arcs. 
        (WebCore::RenderObject::drawBoxSideFromPath):

        Keep this around for that do not HAVE(PATH_BASED_BORDER_RADIUS_DRAWING) until 
        GraphicsContext::clipConvexPolygon() is implemented.
        (WebCore::RenderObject::drawArcForBoxSide):
        * rendering/RenderObject.h:

        New function 
        RenderStyle::getInnerBorderRadiiForRectWithBorderWidths() gets the 
        inner radius values for a rect. It takes border widths a parameters 
        rather than using the style's border widths so that it can be used 
        in inner radius calculations for double and groove/ridge 
        calculations. The W3C corner constraining rules were moved to a 
        static function that can be called from both getBorderRadiiForRect
        () and getInnerBorderRadiiForRectWithBorderWidths().
        * rendering/style/RenderStyle.cpp:
        (WebCore::constrainCornerRadiiForRect):
        (WebCore::RenderStyle::getBorderRadiiForRect):
        (WebCore::RenderStyle::getInnerBorderRadiiForRectWithBorderWidths):
        * rendering/style/RenderStyle.h:

2010-06-28  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Add support for the progress bar tag
        https://bugs.webkit.org/show_bug.cgi?id=41014

        Add support for rendering the progress tag for WebKit GTK+.

        * GNUmakefile.am:
        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::animationRepeatIntervalForProgressBar):
        Added. Currently progress bar animations are disabled. As it looks like
        there may not be a good way to support this with Mozilla's theme drawing code.
        (WebCore::RenderThemeGtk::animationDurationForProgressBar): Ditto.
        (WebCore::RenderThemeGtk::adjustProgressBarStyle): Added.
        (WebCore::RenderThemeGtk::paintProgressBar): Added.
        * platform/gtk/RenderThemeGtk.h: Add declarations for new methods.
        * platform/gtk/gtk2drawing.c: 
        (moz_gtk_get_progress_widget): Expose the progress widget so that the chunk can be positioned properly.
        * platform/gtk/gtkdrawing.h: Added declaration for moz_gtk_get_progress_widget.

2010-06-28  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        HTML5 Regression: Crash in insert()
        https://bugs.webkit.org/show_bug.cgi?id=41281

        We need to call endIfDelayed() outside of the script nesting block
        because endIfDelayed() might call end(), which deletes the
        HTMLDocumentParser.  If we try to exit the script nesting block after
        the HTMLDocumentParser has been deleted, we'll decrement unallocated
        memory, which is bad times.

        Moving endIfDelayed outside of the script nesting block also lets us
        avoid ending if inWrite() is true.  If we're inWrite(), then there's
        folks above us on the stack who will crash of the HTMLDocumentParser is
        deallocated.  Adding this check matches the LegacyHTMLDocumentParser
        and the logic in attemptToEnd, facilitating a small refactoring of the
        common logic for improved readability.

        I don't know of any test case that changes in behavior because of this
        patch, but this bug exists on the same line of code that the reliablity
        tests crashed.  I'm not sure whether this patch will fix that crash,
        but removing bugs (even theoretical ones) seems like a good idea.

        * html/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::insert):
        (WebCore::HTMLDocumentParser::append):
        (WebCore::HTMLDocumentParser::attemptToEnd):
        (WebCore::HTMLDocumentParser::endIfDelayed):
        (WebCore::HTMLDocumentParser::resumeParsingAfterScriptExecution):
        * html/HTMLDocumentParser.h:
        (WebCore::HTMLDocumentParser::shouldDelayEnd):

2010-06-28  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Sam Weinig.

        MediaPlayerPrivate::getSupportedTypes does not return "modern" MIME types
        https://bugs.webkit.org/show_bug.cgi?id=41287
        <rdar://problem/8137402>

        No new test because getSupportedTypes is used privately by MediaPlayer.

        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::MediaPlayerPrivate::getSupportedTypes): Build hash set with both common and
        modern types.

2010-06-28  James Robinson  <jamesr@chromium.org>

        Reviewed by Darin Adler.

        REGRESSION(53790): Neopets page with mismatched elements misrenders
        https://bugs.webkit.org/show_bug.cgi?id=41181

        Misnested formatting tags require fixup in order to create a valid DOM.  Because this takes
        O(N^2) time in some cases, http://trac.webkit.org/changeset/53790 added an iteration limit
        of 5 to this algorithm to avoid hangs.  This limit is too low for neopets, but a limit of
        7 is sufficient.  This raises the limit to 10 to have a bit of breathing room.  HTML5
        defines the fixup algorithm http://www.whatwg.org/specs/web-apps/current-work/#adoptionAgency
        but doesn't specify any particular iteration limit.

        * html/LegacyHTMLTreeBuilder.cpp:

2010-06-28  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        The new tree builder needs to call attach() on elements it attaches to
        the DOM
        https://bugs.webkit.org/show_bug.cgi?id=41293

        Apparently Nodes expect to have their attach() method called when they
        are attached to the DOM.  The new tree builder is happy to oblige.
        Making this call requires some fancy footwork with RefPtr/PassRefPtr to
        avoid extra ref churn while keeping each function small.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::insertHTMLStartTagBeforeHTML):
        (WebCore::HTMLTreeBuilder::processCharacter):
        (WebCore::HTMLTreeBuilder::insertDoctype):
        (WebCore::HTMLTreeBuilder::insertComment):
        (WebCore::HTMLTreeBuilder::insertCommentOnDocument):
        (WebCore::HTMLTreeBuilder::insertElement):
        (WebCore::HTMLTreeBuilder::insertSelfClosingElement):
        (WebCore::HTMLTreeBuilder::insertScriptElement):
        * html/HTMLTreeBuilder.h:
        (WebCore::HTMLTreeBuilder::attach):

2010-06-28  Xan Lopez  <xlopez@igalia.com>

        Fix distcheck.

        * GNUmakefile.am:

2010-06-28  Kenneth Russell  <kbr@google.com>

        Reviewed by Dimitri Glazkov.

        Index validation caches buffer size information too aggressively
        https://bugs.webkit.org/show_bug.cgi?id=41092

        Test: fast/canvas/webgl/index-validation-with-resized-buffer.html

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::validateRenderingState):
         - Compute the number of valid elements each time based on the latched buffer.
        (WebCore::WebGLRenderingContext::vertexAttribPointer):
         - Do not cache the buffer size, only the attributes used to
           compute the number of required elements.
        * html/canvas/WebGLRenderingContext.h:
        (WebCore::WebGLRenderingContext::VertexAttribState::VertexAttribState):
         - Ditto.

2010-06-28  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Replace single treat-as-space characters with normal space
        https://bugs.webkit.org/show_bug.cgi?id=41278

        This keeps Qt from attempting glyph substitution and loading a bunch
        of extra fonts when encountering &nbsp; entities.

        * platform/graphics/qt/FontQt.cpp:
        (WebCore::Font::floatWidthForComplexText):

2010-06-28  Robin Cao  <robin.cao@torchmobile.com.cn>

        Reviewed by Dan Bernstein.

        canvas fillText with @font-face crashes
        https://bugs.webkit.org/show_bug.cgi?id=35486

        The font object in CanvasRenderingContext2D may become invalid at some point.
        Override recalcStyle() in HTMLCanvasElement, and update the font object from there if needed.

        A test already exists: canvas/philip/tests/2d.text.draw.fontface.repeat.html

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::recalcStyle):
        * html/HTMLCanvasElement.h:
        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::updateFont):
        * html/canvas/CanvasRenderingContext2D.h:

2010-06-28  Lucas De Marchi  <lucas.demarchi@profusion.mobi>

        Unreviewed build fix.

        [EFL] Build fix for latest version of Ecore library.
        Ecore recently changed return type of callbacks from int to Eina_Bool.

        No new functionality, so no new tests.

        * platform/efl/SharedTimerEfl.cpp:
        (WebCore::timerEvent): Return Eina_Bool instead of int.

2010-06-28  Xan Lopez  <xlopez@igalia.com>

        Fix build with GTK+ older than 2.18

        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::visibleContentRect):

2010-06-28  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Adam Barth.

        [GTK] Push NULL context on every DOM bindings entry point
        https://bugs.webkit.org/show_bug.cgi?id=39967

        Update GObject DOM bindings to push the NULL context on every API
        entry point, and update bindings test results.

        * bindings/scripts/CodeGeneratorGObject.pm:
        * bindings/scripts/test/GObject/WebKitDOMTestCallback.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestInterface.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:

2010-06-28  Martin Robinson  <martin.james.robinson@gmail.com>

        Reviewed by Adam Roben.

        [WinCairo] Text box backgrounds do not render in partially opaque layers
        https://bugs.webkit.org/show_bug.cgi?id=41113

        Tests:
         manual-tests/partially-opaque-text-input.html

        * platform/graphics/win/GraphicsContextCairoWin.cpp:
        (WebCore::GraphicsContext::releaseWindowsContext):
        When restoring a context which does not support alpha blending, manually
        set the alpha channel of the HBITMAP to fully opaque. This will effectively
        ignore the alpha channel of the HBITMAP, which is necessary because GDI
        drawing functions set the alpha value to be fully transparent (0).

2010-06-28  Martin Robinson  <martin.james.robinson@gmail.com>

        Reviewed by Adam Roben.

        [WinCairo] Rendering of themed elements on a layer with opacity produces nothing
        https://bugs.webkit.org/show_bug.cgi?id=41111

        Tests:
         manual-tests/partially-opaque-form-elements.html

        * platform/graphics/win/GraphicsContextCairoWin.cpp:
        (WebCore::GraphicsContext::releaseWindowsContext):
        Preform a cairo_save() and a cairo_restore() around code modifying the transformation
        matrix of the Cairo surface. Also set the destination coordinates before adjusting
        the transformation matrix scale, so that the destination coordinates are not scaled
        as well.

2010-06-28  Sam Magnuson  <smagnuson@netflix.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] GraphicsLayerQt delay seems unnecessary.
        https://bugs.webkit.org/show_bug.cgi?id=40846

        Test: compositing/animation/busy-indicator.html

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::GraphicsLayerQtImpl::recache):
        (WebCore::GraphicsLayerQtImpl::flushChanges):
        (WebCore::GraphicsLayerQt::setContentsToImage):
        (WebCore::GraphicsLayerQt::addAnimation):

2010-06-28  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Until now we were adding the event listeners for a given object in
        the wrap method, since that's the first moment we have accoss to
        the core WebCore object. The problem is that we only install the
        listeners that the topmost class in the class hierarchy needs (eg,
        HTMLParagrahElement for a P element), when most of the actual
        event attributes are defined in the base classes (Node, Element,
        ...).

        To fix this set the core object as a construct/write-only property
        on the wrapper GObject, and set the eventlisteners in the cGObject
        'construct' method, chaining up through all the class hierarchy
        until the end. This way we'll get all the eventlisteners defined
        in all the superclasses of our object, which is what we want.

        * bindings/gobject/WebKitDOMObject.cpp:
        (webkit_dom_object_get_property):
        (webkit_dom_object_set_property):
        (webkit_dom_object_class_init):
        * bindings/scripts/CodeGeneratorGObject.pm:
        * dom/Node.idl:

2010-06-28  Xan Lopez  <xlopez@igalia.com>

        Fix GTK+ build.

        * platform/gtk/RenderThemeGtk.cpp:

2010-06-28  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        [GTK] Does not compile with -DGSEAL_ENABLE
        https://bugs.webkit.org/show_bug.cgi?id=37851

        Fix build with GSEAL enabled.

        * GNUmakefile.am:
        * platform/gtk/GtkVersioning.h:
        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::paintMozillaGtkWidget):
        (WebCore::RenderThemeGtk::platformActiveSelectionBackgroundColor):
        (WebCore::RenderThemeGtk::platformInactiveSelectionBackgroundColor):
        (WebCore::RenderThemeGtk::platformActiveSelectionForegroundColor):
        (WebCore::RenderThemeGtk::platformInactiveSelectionForegroundColor):
        (WebCore::RenderThemeGtk::activeListBoxSelectionBackgroundColor):
        (WebCore::RenderThemeGtk::inactiveListBoxSelectionBackgroundColor):
        (WebCore::RenderThemeGtk::activeListBoxSelectionForegroundColor):
        (WebCore::RenderThemeGtk::inactiveListBoxSelectionForegroundColor):
        (WebCore::RenderThemeGtk::systemColor):
        * platform/gtk/ScrollViewGtk.cpp:
        (WebCore::ScrollView::platformRemoveChild):
        (WebCore::ScrollView::visibleContentRect):
        * platform/gtk/gtk2drawing.c:
        (ensure_toggle_button_widget):
        (ensure_combo_box_widgets):
        (ensure_combo_box_entry_widgets):
        (ensure_tree_header_cell_widget):
        (moz_gtk_button_paint):
        (moz_gtk_toggle_paint):
        (calculate_button_inner_rect):
        (calculate_arrow_rect):
        (moz_gtk_scrollbar_button_paint):
        (moz_gtk_scrollbar_trough_paint):
        (moz_gtk_scrollbar_thumb_paint):
        (moz_gtk_spin_paint):
        (moz_gtk_spin_updown_paint):
        (moz_gtk_scale_paint):
        (moz_gtk_scale_thumb_paint):
        (moz_gtk_gripper_paint):
        (moz_gtk_hpaned_paint):
        (moz_gtk_vpaned_paint):
        (moz_gtk_entry_paint):
        (moz_gtk_treeview_paint):
        (moz_gtk_tree_header_sort_arrow_paint):
        (moz_gtk_treeview_expander_paint):
        (moz_gtk_expander_paint):
        (moz_gtk_combo_box_paint):
        (moz_gtk_downarrow_paint):
        (moz_gtk_combo_box_entry_button_paint):
        (moz_gtk_container_paint):
        (moz_gtk_toggle_label_paint):
        (moz_gtk_toolbar_paint):
        (moz_gtk_toolbar_separator_paint):
        (moz_gtk_tooltip_paint):
        (moz_gtk_resizer_paint):
        (moz_gtk_frame_paint):
        (moz_gtk_progressbar_paint):
        (moz_gtk_progress_chunk_paint):
        (moz_gtk_get_tab_thickness):
        (moz_gtk_tab_paint):
        (moz_gtk_tabpanels_paint):
        (moz_gtk_tab_scroll_arrow_paint):
        (moz_gtk_menu_bar_paint):
        (moz_gtk_menu_popup_paint):
        (moz_gtk_menu_separator_paint):
        (moz_gtk_menu_item_paint):
        (moz_gtk_menu_arrow_paint):

2010-06-28  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        [GTK] Add support for GTK+3
        https://bugs.webkit.org/show_bug.cgi?id=41253

        Adapt build system for 3.x support.

        * GNUmakefile.am:

2010-06-28  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        [v8] Web Inspector: properties of scope variables are flattened while on a breakpoint.
        https://bugs.webkit.org/show_bug.cgi?id=41214

        Test: inspector/debugger-proto-property.html

        * inspector/front-end/InjectedScript.js:
        (injectedScriptConstructor): object proxy with non-empty path cannot be scope proxy.

2010-06-28  MORITA Hajime  <morrita@google.com>

        Unreviewed attempt to fix windows build.

        * page/DOMWindow.idl:

2010-06-22  MORITA Hajime  <morrita@google.com>

        Reviewed by Kent Tamura.

        <progress> should be styled with -webkit-progress-bar-value
        https://bugs.webkit.org/show_bug.cgi?id=40823

        Fixed to peek styles of the shadow node pseudo class to fallback
        to non-styled painting.
        
        * css/html.css: 
        (progress): Added defaul background-color.
        (progress::-webkit-progress-bar-value): Added defaul background-color.
        * rendering/RenderProgress.cpp:
        (WebCore::RenderProgress::shouldHaveParts):
        (WebCore::RenderProgress::updatePartsState):

        Test: fast/dom/HTMLProgressElement/progress-bar-value-pseudo-element.html
        
2010-06-28  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Kent Tamura.

        GCC suggest parentheses around && within ||
        https://bugs.webkit.org/show_bug.cgi?id=41245

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

2010-06-28  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Don't dump contents of <script> elements in LayoutTests
        https://bugs.webkit.org/show_bug.cgi?id=41277

        Apparently we need to tell each element when we start and stop parsing
        its children.  If we don't do this, we see the contents of every script
        and style element in dumpAsText LayoutTests.  (This patch is *well*
        covered by LayoutTests.)

        * html/HTMLTreeBuilder.h:
        (WebCore::HTMLTreeBuilder::ElementStack::pop):
        (WebCore::HTMLTreeBuilder::ElementStack::push):

2010-06-28  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Make it possible to test the new HTML5 TreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=41276

        Adam was concerned that someone might make their port
        depend on this setting (I guess we had some trouble with that
        with the HTML5Parser setting), so I littered the code with warnings.

        test-html5-parser now tests this code path.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::HTMLTreeBuilder):
        (WebCore::HTMLTreeBuilder::constructTreeFromToken):
        (WebCore::HTMLTreeBuilder::finished):
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h:
        (WebCore::Settings::setHTML5TreeBuilderEnabled_DO_NOT_USE):
        (WebCore::Settings::html5TreeBuilderEnabled):

2010-06-28  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Make the html5lib runner.html not assert
        https://bugs.webkit.org/show_bug.cgi?id=41273

        This patch gets us closer to being able to run the parser tests.  We
        still don't get parsing correct, but at least we don't assert.  :)

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTag):
        (WebCore::HTMLTreeBuilder::processComment):
        (WebCore::HTMLTreeBuilder::insertCommentOnDocument):
        * html/HTMLTreeBuilder.h:

2010-06-28  Eric Seidel  <eric@webkit.org>

        Unreviewed.  Attempt to fix Chromium and Qt builders.

        Add a new baseclass for XML, HTML and Text DocumentParsers to clean up DocumentParser call sites
        https://bugs.webkit.org/show_bug.cgi?id=41141

        No functional changes, thus no tests.

        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::eventHandlerLineNumber):
        (WebCore::ScriptController::eventHandlerColumnNumber):
        * dom/XMLDocumentParserQt.cpp:
        (WebCore::XMLDocumentParser::XMLDocumentParser):
        (WebCore::XMLDocumentParser::stopParsing):

2010-06-28  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add support for parsing attributes
        https://bugs.webkit.org/show_bug.cgi?id=41272

        This patch lets use parse the following document:

        <script src="data:text/javascript,alert('PASS')"></script>

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::constructTreeFromToken):
        (WebCore::HTMLTreeBuilder::insertHTMLStartTagBeforeHTML):
        (WebCore::HTMLTreeBuilder::insertScriptElement):
        (WebCore::HTMLTreeBuilder::createElement):

2010-06-28  Eric Seidel  <eric@webkit.org>

        Reviewed by Darin Adler.

        Add a new baseclass for XML, HTML and Text DocumentParsers to clean up DocumentParser call sites
        https://bugs.webkit.org/show_bug.cgi?id=41141

        By splitting ScriptableDocumentParser and DecodedDataDocumentParser
        out from DocumentParser we've made the DocumentParser and
        RawDataDocumentParser classes simpler.

        No functional change, thus no tests.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::eventHandlerLineNumber):
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::checkLoaded):
        * dom/Document.cpp:
        (WebCore::Document::scriptableDocumentParser):
        (WebCore::Document::open):
        (WebCore::Document::implicitOpen):
        (WebCore::Document::implicitClose):
        (WebCore::Document::removePendingSheet):
        * dom/Document.h:
        (WebCore::Document::parser):
        * dom/DocumentParser.cpp:
        (WebCore::DocumentParser::DocumentParser):
        * dom/DocumentParser.h:
        (WebCore::DocumentParser::asScriptableDocumentParser):
        * dom/RawDataDocumentParser.h:
        (WebCore::RawDataDocumentParser::finishWasCalled):
        * dom/ScriptableDocumentParser.cpp: Copied from WebCore/html/HTMLEntityParser.h.
        (WebCore::ScriptableDocumentParser::ScriptableDocumentParser):
        * dom/ScriptableDocumentParser.h: Added.
        (WebCore::ScriptableDocumentParser::isExecutingScript):
        (WebCore::ScriptableDocumentParser::executeScriptsWaitingForStylesheets):
        (WebCore::ScriptableDocumentParser::xssAuditor):
        (WebCore::ScriptableDocumentParser::setXSSAuditor):
        (WebCore::ScriptableDocumentParser::processingContentWrittenByScript):
        (WebCore::ScriptableDocumentParser::asScriptableDocumentParser):
        * dom/ViewportArguments.cpp:
        (WebCore::parserLineNumber):
        (WebCore::reportViewportWarning):
        * dom/XMLDocumentParser.h:
        * dom/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::XMLDocumentParser):
        * html/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::HTMLDocumentParser):
        (WebCore::HTMLDocumentParser::shouldLoadExternalScriptFromSrc):
        * html/HTMLDocumentParser.h:
        * html/LegacyHTMLDocumentParser.cpp:
        (WebCore::LegacyHTMLDocumentParser::LegacyHTMLDocumentParser):
        (WebCore::LegacyHTMLDocumentParser::parseTag):
        * html/LegacyHTMLDocumentParser.h:
        (WebCore::LegacyHTMLDocumentParser::processingContentWrittenByScript):
        * html/LegacyHTMLTreeBuilder.cpp:
        (WebCore::LegacyHTMLTreeBuilder::reportErrorToConsole):
        * loader/DocumentLoader.cpp:
        * loader/DocumentWriter.cpp:
        * loader/TextDocument.cpp:
        (WebCore::TextDocumentParser::TextDocumentParser):
        (WebCore::TextDocumentParser::finish):
        * svg/SVGDocumentExtensions.cpp:
        (WebCore::parserLineNumber):
        (WebCore::reportMessage):
        (WebCore::SVGDocumentExtensions::reportWarning):
        (WebCore::SVGDocumentExtensions::reportError):

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

        Reviewed by Mark Rowe.

        WebKit2 build exceeds address space on 32-bit Windows builders
        https://bugs.webkit.org/show_bug.cgi?id=41270

        Add all-in-one file for render-related SVG files.
        Clean up other all-in-one files by adding missing files, excluding matching files from the vcproj.
        Reduces release WebCore.lib size by 10% (160MB).

        * DerivedSources.cpp:
        * WebCore.vcproj/WebCore.vcproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * html/HTMLElementsAllInOne.cpp:
        * rendering/RenderSVGAllInOne.cpp: Added.

2010-06-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Sketch out the InBodyMode for the tree builder
        https://bugs.webkit.org/show_bug.cgi?id=41271

        This gives us some basic behavior for the InBodyMode.  I've implemented
        some of the easier logic.  The more complicated logic will be in
        subsequent patches.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTag):
        (WebCore::HTMLTreeBuilder::processEndTag):
        (WebCore::HTMLTreeBuilder::insertFormatingElement):
        (WebCore::HTMLTreeBuilder::reconstructTheActiveFormattingElements):
        * html/HTMLTreeBuilder.h:

2010-06-25  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Shinichiro Hamaji.

        Improve default value handling for page format properties.

        Default page size and orientation have been hard-coded.
        Instead, pass default page size and margins to
        WebCore::Document::pageSizeAndMarginsInPixels to handle auto page size
        and margins specified as percentages.
        Return margins instead of page rect.

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

        * WebCore.base.exp:
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyPageSizeProperty):
        (WebCore::CSSStyleSelector::pageSizeFromName):
        * css/html.css:
        (@page):
        * dom/Document.cpp:
        (WebCore::Document::pageSizeAndMarginsInPixels):
        * dom/Document.h:
        * page/PrintContext.cpp:
        (WebCore::PrintContext::pageProperty):
        (WebCore::PrintContext::pageSizeAndMarginsInPixels):
        * page/PrintContext.h:
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::pageSizeType):
        (WebCore::InheritedFlags::setPageSizeType):
        (WebCore::InheritedFlags::resetPageSizeType):
        * rendering/style/StyleRareNonInheritedData.cpp:
        (WebCore::StyleRareNonInheritedData::StyleRareNonInheritedData):
        (WebCore::StyleRareNonInheritedData::operator==):
        * rendering/style/StyleRareNonInheritedData.h:
        (WebCore::):

2010-06-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Clean up some loose ends in HTML5 tree builder
        https://bugs.webkit.org/show_bug.cgi?id=41265

        This patch cleans up a few loose ends in HTML5 tree builder.
        Technically, we could do each of these as individual patches, but that
        didn't seem worth while.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTag):
            - Add missing break before default case statement.  I don't think
              this change is observable.
        (WebCore::HTMLTreeBuilder::processComment):
            - Originally I thought that comments had special processing in the
              InHeadNoscriptMode, but it turns out that when you unwind the
              definitions, it amounts to exactly the same thing.
        (WebCore::HTMLTreeBuilder::processEndOfFile):
            - Add missing break before default case statement.  I don't think
              this change is observable.
        (WebCore::HTMLTreeBuilder::insertComment):
            - Eliminate one unnecessary ref/deref pair.
        (WebCore::HTMLTreeBuilder::insertSelfClosingElement):
            - When we insert self-closing elements, there's no reason to push
              them onto the stack of open elements just to pop them off again.
              This change saves a malloc/free pair as well as a ref/deref pair.
              Go team.
        * html/HTMLTreeBuilder.h:
            - Remove unused function.

2010-06-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Implement remaining StartTag processing for InHeadNoscriptMode
        https://bugs.webkit.org/show_bug.cgi?id=41264

        The InHeadNoscriptMode processes some start tags "as if" the tree
        builder were in the InHeadMode.  This is an idiom we'll see more of
        later.  My approach is this patch is to factor all the logic for
        processing start tags in the InHeadMode into a separate function that
        can be called from both locations.  This seems cleaner than just
        splitting out the parts that are actually used by both modes.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processStartTag):
        (WebCore::HTMLTreeBuilder::processStartTagForInHead):
        (WebCore::HTMLTreeBuilder::insertSelfClosingElement):
        * html/HTMLTreeBuilder.h:

2010-06-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add support for <title> and <style> elements
        https://bugs.webkit.org/show_bug.cgi?id=41263

        These elements use the generic RCDATA and RawText algorithms,
        respectively.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processEndTag):
        (WebCore::HTMLTreeBuilder::insertGenericRCDATAElement):
        (WebCore::HTMLTreeBuilder::insertGenericRawTextElement):

2010-06-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Actually insert Doctype elements
        https://bugs.webkit.org/show_bug.cgi?id=41262

        This code is pretty much the same as in the old tree builder.

        * html/HTMLToken.h:
        (WebCore::AtomicHTMLToken::publicIdentifier):
        (WebCore::AtomicHTMLToken::systemIdentifier):
        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::insertDoctype):

2010-06-27  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Darin Adler.

        Canvas: Ignore calls to drawImage() with non-finite parameters
        https://bugs.webkit.org/show_bug.cgi?id=38929

        This also fixes a Qt assert when using the raster graphics system.

        Spec link:
        http://www.whatwg.org/specs/web-apps/current-work/#2dcontext

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

2010-06-27  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        editing/execCommand/copy-without-selection.html fails on Qt after r61637
        https://bugs.webkit.org/show_bug.cgi?id=41025

        The problem was that when getting data back via Clipboard::getData(),
        the String::String(const char*, int) constructor was called
        with UTF-16 data.

        The solution is to use QMimeData's text() and setText() for "text/plain".

        setText() which makes sure Qt passes the string in proper format to the
        system clipboard. (The previous implementation would convert it to UTF-8)

        text() makes sure that the correct encoding is used (UTF-16) and that
        we get back whatever we originally put in there.

        * platform/qt/ClipboardQt.cpp:
        (WebCore::isTextMimeType):
        (WebCore::ClipboardQt::getData):
        (WebCore::ClipboardQt::setData):

2010-06-27  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        HTML5 tree builder should be able to execute inline scripts
        https://bugs.webkit.org/show_bug.cgi?id=41257

        This patch implements enough machinery so that we can execute inline
        scripts in extremely simple documents such as the following:

        <html>
        <script>
        alert(1);
        </script>

        To get this to work, I had to flesh out a surprising amount of the data
        structures for processing the <head>.  No tests because this is
        already covered by most LayoutTests.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::HTMLTreeBuilder):
        (WebCore::HTMLTreeBuilder::constructTreeFromToken):
        (WebCore::HTMLTreeBuilder::processStartTag):
        (WebCore::HTMLTreeBuilder::processEndTag):
        (WebCore::HTMLTreeBuilder::processCharacter):
        (WebCore::HTMLTreeBuilder::insertComment):
        (WebCore::HTMLTreeBuilder::insertElement):
        (WebCore::HTMLTreeBuilder::insertScriptElement):
        * html/HTMLTreeBuilder.h:
        (WebCore::HTMLTreeBuilder::ElementRecord::ElementRecord):
        (WebCore::HTMLTreeBuilder::ElementRecord::element):
        (WebCore::HTMLTreeBuilder::ElementRecord::next):
        (WebCore::HTMLTreeBuilder::ElementRecord::releaseNext):
        (WebCore::HTMLTreeBuilder::ElementRecord::setNext):
        (WebCore::HTMLTreeBuilder::ElementStack::pop):
        (WebCore::HTMLTreeBuilder::ElementStack::push):
        (WebCore::HTMLTreeBuilder::ElementStack::top):
        (WebCore::HTMLTreeBuilder::ElementStack::remove):
        (WebCore::HTMLTreeBuilder::currentElement):

2010-06-26  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        beforeProcess event needs to fire before inline scripts/stylesheets take effect
        <rdar://problem/8084335> and https://bugs.webkit.org/show_bug.cgi?id=40484

        This patch adds the Event, the onBeforeProcess attribute, and hooks the attribute up in a few places.
        Besides that, no change in behavior.

        Layout tests will come with the actual implementations as a followup to this patch.

        Project file nonsense:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:

        Scaffolding for the event itself:
        * dom/BeforeProcessEvent.cpp: Added.
        (WebCore::BeforeProcessEvent::text):
        (WebCore::BeforeProcessEvent::setText):
        * dom/BeforeProcessEvent.h: Added.
        (WebCore::BeforeProcessEvent::create):
        (WebCore::BeforeProcessEvent::initBeforeProcessEvent):
        (WebCore::BeforeProcessEvent::BeforeProcessEvent):
        * dom/BeforeProcessEvent.idl: Added.

        * dom/EventNames.h:

        Respect the onBeforeProcess attribute:
        * dom/Document.cpp:
        (WebCore::Document::addListenerTypeIfNeeded):
        * dom/Document.h:
        (WebCore::Document::):

        * html/HTMLAttributeNames.in:
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::parseMappedAttribute):
        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::parseMappedAttribute):

2010-06-26  Darin Adler  <darin@apple.com>

        Try to fix Chromium build by adding back function used only by Chromium WebKit.

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::defaultChecked): Added back.
        * html/HTMLInputElement.h: Added defaultChecked function.

        * html/HTMLMetaElement.cpp:
        (WebCore::HTMLMetaElement::httpEquiv): Added back.
        * html/HTMLMetaElement.h: Added httpEquiv function.

        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::defaultSelected): Added back.
        * html/HTMLOptionElement.h: Added defaultSelected function.

        * rendering/style/StyleRareNonInheritedData.h: Fixed incorrect struct vs. class
        here as seen in warnings on Chromium Windows bot.

2010-06-26  Darin Adler  <darin@apple.com>

        Try to fix Windows build by adding back function used only by Windows WebKit.

        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::label): Added back.
        * html/HTMLOptionElement.h: Added label function.

2010-06-26  Darin Adler  <darin@apple.com>

        Try to fix Qt build by adding back function used only by Qt WebKit.

        * html/HTMLMetaElement.cpp:
        (WebCore::HTMLMetaElement::content): Added back.
        * html/HTMLMetaElement.h: Added content function.

2010-06-26  Darin Adler  <darin@apple.com>

        * html/HTMLFormElement.h: Removed stray character that got in here before landing.

2010-06-26  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Add more use of reflection, remove unused functions
        https://bugs.webkit.org/show_bug.cgi?id=41255

        Also noticed that HTMLDirectoryElement was missing its create function
        and added that so the element will get the correct class.

        * html/HTMLBaseFontElement.idl: Use reflection for the size attribute
        in the Objective-C code path too.

        * html/HTMLSelectElement.idl: Use reflection for disabled and autofocus
        attributes. Also removed spaces and indenting to match other IDL files.

        * html/HTMLStyleElement.idl: Use reflection for disabled attribute.

        * html/HTMLTableCellElement.idl: Use reflection for noWrap attribute.

        * html/HTMLTextAreaElement.idl: Use reflection for disabled, autofocus,
        readOnly, and required attributes.

        * html/HTMLUListElement.idl: Use reflection for compact attribute.

        * html/HTMLDirectoryElement.cpp:
        (WebCore::HTMLDirectoryElement::HTMLDirectoryElement): Made inline.
        (WebCore::HTMLDirectoryElement::create): Added.
        * html/HTMLDirectoryElement.h:
        Added create, made constructor private, removed unused functions.

        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::parseMappedAttribute): Removed code to
        set unused m_media data member.
        * html/HTMLStyleElement.h:
        Removed unused functions and m_media data member. Also made some
        functions private.

        * html/HTMLAppletElement.cpp:
        * html/HTMLAppletElement.h:
        * html/HTMLAreaElement.cpp:
        * html/HTMLAreaElement.h:
        * html/HTMLBaseFontElement.cpp:
        * html/HTMLBaseFontElement.h:
        * html/HTMLButtonElement.cpp:
        * html/HTMLButtonElement.h:
        * html/HTMLDListElement.cpp:
        * html/HTMLDListElement.h:
        * html/HTMLDivElement.cpp:
        * html/HTMLDivElement.h:
        * html/HTMLFontElement.cpp:
        * html/HTMLFontElement.h:
        * html/HTMLFormControlElement.cpp:
        * html/HTMLFormControlElement.h:
        * html/HTMLFormElement.cpp:
        * html/HTMLFormElement.h:
        * html/HTMLFrameElement.cpp: Also removed an incorrect FIXME comment
        here after I did a little research to disprove it.
        * html/HTMLFrameElement.h:
        * html/HTMLFrameSetElement.cpp:
        * html/HTMLFrameSetElement.h:
        * html/HTMLHRElement.cpp:
        * html/HTMLHRElement.h:
        * html/HTMLHeadElement.cpp:
        * html/HTMLHeadElement.h:
        * html/HTMLHeadingElement.cpp:
        * html/HTMLHeadingElement.h:
        * html/HTMLHtmlElement.cpp:
        * html/HTMLHtmlElement.h:
        * html/HTMLImageElement.cpp:
        * html/HTMLImageElement.h:
        * html/HTMLInputElement.cpp:
        * html/HTMLInputElement.h:
        * html/HTMLIsIndexElement.cpp:
        * html/HTMLIsIndexElement.h:
        * html/HTMLLIElement.cpp:
        * html/HTMLLIElement.h:
        * html/HTMLLabelElement.cpp:
        * html/HTMLLabelElement.h:
        * html/HTMLLegendElement.cpp:
        * html/HTMLLegendElement.h:
        * html/HTMLLinkElement.cpp:
        * html/HTMLLinkElement.h:
        * html/HTMLMapElement.cpp:
        * html/HTMLMapElement.h:
        * html/HTMLMenuElement.cpp:
        * html/HTMLMenuElement.h:
        * html/HTMLMetaElement.cpp:
        * html/HTMLMetaElement.h:
        * html/HTMLModElement.cpp:
        * html/HTMLModElement.h:
        * html/HTMLOListElement.cpp:
        * html/HTMLOListElement.h:
        * html/HTMLObjectElement.cpp:
        * html/HTMLObjectElement.h:
        * html/HTMLOptGroupElement.cpp:
        * html/HTMLOptGroupElement.h:
        * html/HTMLOptionElement.cpp:
        * html/HTMLOptionElement.h:
        * html/HTMLParagraphElement.cpp:
        * html/HTMLParagraphElement.h:
        * html/HTMLParamElement.cpp:
        * html/HTMLParamElement.h:
        * html/HTMLPlugInElement.cpp:
        * html/HTMLPlugInElement.h:
        * html/HTMLPreElement.cpp:
        * html/HTMLPreElement.h:
        * html/HTMLQuoteElement.cpp:
        * html/HTMLQuoteElement.h:
        * html/HTMLScriptElement.cpp:
        * html/HTMLScriptElement.h:
        * html/HTMLTableCaptionElement.cpp:
        * html/HTMLTableCaptionElement.h:
        * html/HTMLTableCellElement.cpp:
        * html/HTMLTableCellElement.h:
        * html/HTMLTableColElement.cpp:
        * html/HTMLTableColElement.h:
        * html/HTMLTableElement.cpp:
        * html/HTMLTableElement.h:
        * html/HTMLTableRowElement.cpp:
        * html/HTMLTableRowElement.h:
        * html/HTMLTextAreaElement.cpp:
        * html/HTMLTextAreaElement.h:
        * html/HTMLUListElement.cpp:
        * html/HTMLUListElement.h:
        * html/HTMLVideoElement.cpp:
        * html/HTMLVideoElement.h:
        Removed unused functions.

2010-06-26  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Adam Barth.

        Exclude line numbers for sources which are not from the network.
        https://bugs.webkit.org/show_bug.cgi?id=41060

        * html/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::write):

2010-06-25  Antonio Gomes  <tonikitoo@webkit.org>

        Unreviewed complementary fix for r61818. It added StaticHashSetListNode.cpp|h to the system,
        but did not added it to chromium build system.

        * WebCore.gypi:

2010-06-26  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: ScripsPanel.prototype.editScriptSource uses old addBreakpoint signature.

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

        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager.prototype.removeBreakpoint):
        (WebInspector.Breakpoint.prototype.set enabled):
        (WebInspector.Breakpoint.prototype.set condition):
        * inspector/front-end/Object.js:
        (WebInspector.Object.prototype.addEventListener):
        (WebInspector.Object.prototype.removeEventListener):
        (WebInspector.Object.prototype.removeAllListeners):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.editScriptSource.mycallback):
        (WebInspector.ScriptsPanel.prototype.editScriptSource):

2010-06-26  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Dimitri Glazkov.

        Add a guarded window.performance.timing binding which is disabled by default.
        https://bugs.webkit.org/show_bug.cgi?id=38924

        This is where Web Timing support will be implemented. Web Timing is a
        draft spec for exposing load times to web pages. It will be enabled
        once the spec and implementaiton are solidified. See:
        http://dev.w3.org/2006/webapi/WebTiming/

        No new tests because guarded behind a #DEFINE. Will add tests as
        functionality is landed.

        * Android.mk:
        * CMakeLists.txt:
        * Configurations/FeatureDefines.xcconfig:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::clear):
        (WebCore::DOMWindow::performance):
        * page/DOMWindow.h:
        (WebCore::DOMWindow::optionalPerformance):
        * page/DOMWindow.idl:
        * page/NavigationTiming.cpp: Added.
        (WebCore::NavigationTiming::NavigationTiming):
        (WebCore::NavigationTiming::frame):
        (WebCore::NavigationTiming::disconnectFrame):
        (WebCore::NavigationTiming::navigationStart):
        * page/NavigationTiming.h: Added.
        (WebCore::NavigationTiming::create):
        * page/NavigationTiming.idl: Added.
        * page/Performance.cpp: Added.
        (WebCore::Performance::Performance):
        (WebCore::Performance::frame):
        (WebCore::Performance::disconnectFrame):
        (WebCore::Performance::timing):
        * page/Performance.h: Added.
        (WebCore::Performance::create):
        * page/Performance.idl: Added.

2010-06-25  Zhenyao Mo  <zmo@google.com>

        Reviewed by Dimitri Glazkov.

        activeTexture wrongly generates error with legal input.
        https://bugs.webkit.org/show_bug.cgi?id=41227

        Test: fast/canvas/webgl/texture-active-bind.html

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::activeTexture): Fix the upper limit test for test units.

2010-06-25  Johnny Ding  <jnd@chromium.org>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=41061
        Make sure Chromium's ScriptController::processingUserGesture follows the JSC's behavior.
        Set right value in UserGestureIndicator when handling events in PopupMenuList in chromium.

        Test: fast/events/popup-when-select-change.html

        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::processingUserGesture):
        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupContainer::handleMouseDownEvent):
        (WebCore::PopupContainer::handleMouseMoveEvent):
        (WebCore::PopupContainer::handleMouseReleaseEvent):
        (WebCore::PopupContainer::handleWheelEvent):
        (WebCore::PopupContainer::handleKeyEvent):

2010-06-25  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Eric Seidel.

        Make PendingScript hold a CachedResourceClient open for its lifetime
        https://bugs.webkit.org/show_bug.cgi?id=40968

        This replaces the mechanism introduced in r61374 with a simpler
        appraoch for preventing unexpected purges: always keep a client open.
        This approach will allow deferred scripts to add a client after
        the resource may have already been loaded without having to worry about
        the buffer being purged in the meantime.

        No new tests because making a CachedResource purse itself is not
        testable from a LayoutTest.

        * html/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::watchForLoad):
        (WebCore::HTMLDocumentParser::notifyFinished):
        * html/HTMLScriptRunner.cpp:
        (WebCore::HTMLScriptRunner::~HTMLScriptRunner):
        (WebCore::HTMLScriptRunner::sourceFromPendingScript):
        (WebCore::HTMLScriptRunner::isPendingScriptReady):
        (WebCore::HTMLScriptRunner::executePendingScript):
        (WebCore::HTMLScriptRunner::watchForLoad):
        (WebCore::HTMLScriptRunner::stopWatchingForLoad):
        (WebCore::HTMLScriptRunner::executeScriptsWaitingForLoad):
        (WebCore::HTMLScriptRunner::requestScript):
        (WebCore::HTMLScriptRunner::PendingScript::~PendingScript):
        (WebCore::HTMLScriptRunner::PendingScript::releaseElementAndClear):
        (WebCore::HTMLScriptRunner::PendingScript::setCachedScript):
        (WebCore::HTMLScriptRunner::PendingScript::cachedScript):
        * html/HTMLScriptRunner.h:
        (WebCore::HTMLScriptRunner::PendingScript::PendingScript):
        (WebCore::HTMLScriptRunner::PendingScript::watchingForLoad):
        (WebCore::HTMLScriptRunner::PendingScript::setWatchingForLoad):
        (WebCore::HTMLScriptRunner::PendingScript::notifyFinished):
        * html/HTMLScriptRunnerHost.h:

2010-06-25  Zhenyao Mo  <zmo@google.com>

        Reviewed by Dimitri Glazkov.

        getUniform will not work for fetching uniform array elements
        https://bugs.webkit.org/show_bug.cgi?id=34508

        Test: fast/canvas/webgl/gl-uniform-arrays.html

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::attachShader): Generate correct errors.
        (WebCore::WebGLRenderingContext::getUniform): Dealing with array elements.
        (WebCore::WebGLRenderingContext::useProgram): Deal with program==null.
        (WebCore::WebGLRenderingContext::validateProgram): Generate correct errors.
        * platform/graphics/mac/GraphicsContext3DMac.mm:
        (WebCore::GraphicsContext3D::useProgram): Deal with program==null.

2010-06-25  Zhenyao Mo  <zmo@google.com>

        Reviewed by Dimitri Glazkov.

        Bring set/get state functions to GLES2 conformance
        https://bugs.webkit.org/show_bug.cgi?id=41095

        Tests: fast/canvas/webgl/gl-enable-enum-test.html
               fast/canvas/webgl/gl-enum-tests.html

        * html/canvas/WebGLRenderingContext.cpp: Check input parameters according to GLES2 spec.
        (WebCore::WebGLRenderingContext::blendEquation):
        (WebCore::WebGLRenderingContext::blendEquationSeparate):
        (WebCore::WebGLRenderingContext::disable):
        (WebCore::WebGLRenderingContext::enable):
        (WebCore::WebGLRenderingContext::hint):
        (WebCore::WebGLRenderingContext::isEnabled):
        (WebCore::WebGLRenderingContext::pixelStorei):
        (WebCore::WebGLRenderingContext::validateBlendEquation):
        (WebCore::WebGLRenderingContext::validateCapability):
        * html/canvas/WebGLRenderingContext.h: Add helper function declaration.

2010-06-25  Sterling Swigart  <sswigart@google.com>

        Reviewed by David Levin.

        Callback code generation fixed so that now string parameters are converted to JSString
        using the jsString method instead of the toJS method which would not compile.
        https://bugs.webkit.org/show_bug.cgi?id=41119
        
        * bindings/scripts/CodeGeneratorJS.pm: Now generates jsString for String parameters in callbacks.
        * bindings/scripts/test/JS/JSTestCallback.cpp: Fixed test for above.
        (WebCore::JSTestCallback::callbackWithClass2Param): Ditto.

2010-06-25  Zhenyao Mo  <zmo@google.com>

        Reviewed by Dimitri Glazkov.

        A buffer should be bound to one target in its lifetime
        https://bugs.webkit.org/show_bug.cgi?id=41108

        Test: fast/canvas/webgl/buffer-bind-test.html

        * html/canvas/WebGLBuffer.cpp:
        (WebCore::WebGLBuffer::WebGLBuffer): Init target to 0. 
        (WebCore::WebGLBuffer::associateBufferData): Remove target parameter, use one byteLength member.
        (WebCore::WebGLBuffer::associateBufferSubData): Ditto.
        (WebCore::WebGLBuffer::byteLength): Ditto.
        (WebCore::WebGLBuffer::setTarget): Set target.
        * html/canvas/WebGLBuffer.h: Cache target in the WebGLBuffer object, use one byteLength member.
        (WebCore::WebGLBuffer::getTarget):
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::bindBuffer): Check if a buffer is bound to another target; set buffer object internal target.
        (WebCore::WebGLRenderingContext::bufferData): Remove target parameter and use the WebGLBuffer cached target instead.
        (WebCore::WebGLRenderingContext::bufferSubData): Ditto.
        (WebCore::WebGLRenderingContext::validateElementArraySize): Ditto.
        (WebCore::WebGLRenderingContext::validateIndexArrayConservative): Ditto.
        (WebCore::WebGLRenderingContext::vertexAttribPointer): Ditto.

2010-06-25  Dean Jackson  <dino@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=41188
        Animations should not require 0% and 100% keyframes

        When we are generating the animation lists in CSSStyleSelector,
        rather than bail if we notice that "from" or "to" are missing, we
        now generate synthetic keyframes for those cases.

        Tests: animations/missing-from-to-transforms.html
               animations/missing-from-to.html
               WebCore/manual-tests/animation-with-transition.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::styleForKeyframe):
                Moved individual keyframe generation into a new function.
        (WebCore::CSSStyleSelector::keyframeStylesForAnimation):
                Call the new function above for regular keyframes, and
                also check for missing keyframes and generate them if
                necessary.
        * css/CSSStyleSelector.h:

2010-06-25  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        We should parse <html>
        https://bugs.webkit.org/show_bug.cgi?id=41239

        This patch is hard to test, but I think this patch lets us parse a
        document consisting of only an <html> start tag.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::constructTreeFromToken):
        (WebCore::HTMLTreeBuilder::insertHTMLStartTagBeforeHTML):
        (WebCore::HTMLTreeBuilder::insertHTMLStartTagInBody):
        (WebCore::HTMLTreeBuilder::processStartTag):
        (WebCore::HTMLTreeBuilder::processDefaultForBeforeHTMLMode):
        * html/HTMLTreeBuilder.h:
        (WebCore::HTMLTreeBuilder::ElementStack::push):

2010-06-25  Dan Bernstein  <mitz@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/8000667> Certain text is repeated before and after a line break

        Test: fast/text/bidi-explicit-embedding-past-end.html

        * platform/text/BidiResolver.h:
        (WebCore::::createBidiRunsForLine): Committing explicit embedding past the end of the range
        creates BidiRuns up to the end of the range, so at that point, we can stop iterating.

2010-06-25  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Move decoding into DocumentParser to further simplify RawDataDocumentParser and DocumentWriter
        https://bugs.webkit.org/show_bug.cgi?id=41202

        Hit the Windoze with the compile bat.

        * WebCore.vcproj/WebCore.vcproj:

2010-06-25  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        HTMLTreeBuilder should branch first on token type and then on insertion mode
        https://bugs.webkit.org/show_bug.cgi?id=41232

        This is different than how the spec is written, but it lets us remove a
        lot of redudancy in the algorithm.  We might even want to pull some of
        the branches on token name outside the insertion mode branch, but I'll
        leave that for a future patch.

        Although this looks like a big patch, it's mostly just a mechanical
        switch permutation.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::constructTreeFromToken):
        (WebCore::HTMLTreeBuilder::processToken):
        (WebCore::HTMLTreeBuilder::processDoctypeToken):
        (WebCore::HTMLTreeBuilder::processStartTag):
        (WebCore::HTMLTreeBuilder::processEndTag):
        (WebCore::HTMLTreeBuilder::processComment):
        (WebCore::HTMLTreeBuilder::processCharacter):
        (WebCore::HTMLTreeBuilder::processEndOfFile):
        (WebCore::HTMLTreeBuilder::processDefaultForInitialMode):
        (WebCore::HTMLTreeBuilder::processDefaultForBeforeHTMLMode):
        (WebCore::HTMLTreeBuilder::processDefaultForBeforeHeadMode):
        (WebCore::HTMLTreeBuilder::processDefaultForInHeadMode):
        (WebCore::HTMLTreeBuilder::processDefaultForInHeadNoscriptMode):
        (WebCore::HTMLTreeBuilder::processDefaultForAfterHeadMode):
        * html/HTMLTreeBuilder.h:

2010-06-25  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Tree builder doesn't need to return a Node
        https://bugs.webkit.org/show_bug.cgi?id=41225

        The old tree builder returned the newly inserted Node, but the new tree
        builder doesn't need to do that as far as I can tell.  Removing the
        return value cuts down on a bunch of accounting.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::passTokenToLegacyParser):
        (WebCore::HTMLTreeBuilder::constructTreeFromToken):
        (WebCore::HTMLTreeBuilder::processToken):
        (WebCore::HTMLTreeBuilder::insertDoctype):
        (WebCore::HTMLTreeBuilder::insertComment):
        (WebCore::HTMLTreeBuilder::insertGenericRCDATAElement):
        (WebCore::HTMLTreeBuilder::insertGenericRawTextElement):
        (WebCore::HTMLTreeBuilder::insertScriptElement):
        * html/HTMLTreeBuilder.h:

2010-06-25  Zhenyao Mo  <zmo@google.com>

        Reviewed by Dimitri Glazkov.

        getParameter(COLOR_WRITEMASK) needs to return Array
        https://bugs.webkit.org/show_bug.cgi?id=40437

        * bindings/js/JSWebGLRenderingContextCustom.cpp: Handling bool array.
        (WebCore::toJS):
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp: Handling bool array.
        (WebCore::toV8Object):
        * html/canvas/WebGLGetInfo.cpp: Handling bool array.
        (WebCore::WebGLGetInfo::WebGLGetInfo):
        (WebCore::WebGLGetInfo::getBoolArray):
        * html/canvas/WebGLGetInfo.h: Handling bool array.
        (WebCore::WebGLGetInfo::):
        * html/canvas/WebGLRenderingContext.cpp: Handling bool array.
        (WebCore::WebGLRenderingContext::getParameter):
        (WebCore::WebGLRenderingContext::getBooleanArrayParameter):
        * html/canvas/WebGLRenderingContext.h: Handling bool array.

2010-06-25  Evan Stade  <estade@chromium.org>

        Reviewed by Darin Fisher.

        [chromium linux] Improve look of scrollbars
        https://bugs.webkit.org/show_bug.cgi?id=35775

        This will affect layout pixel tests, which will need to be rebaselined.

        * platform/Scrollbar.cpp: need the buttons to be invalidated when the
        thumb moves as they paint differently if the thumb is at the top or
        bottom
        (WebCore::Scrollbar::updateThumbPosition):
        (WebCore::Scrollbar::updateThumbProportion):
        * platform/chromium/ScrollbarThemeChromium.cpp:
        (WebCore::ScrollbarThemeChromium::trackRect): share code between
        linux/windows
        * platform/chromium/ScrollbarThemeChromiumLinux.cpp:
        (WebCore::ScrollbarThemeChromiumLinux::scrollbarThickness):
        (WebCore::outlineColor): up the contrast
        (WebCore::ScrollbarThemeChromiumLinux::paintButton): add custom button
        drawing implementation
        (WebCore::ScrollbarThemeChromiumLinux::buttonSize): add buttons
        * platform/chromium/ScrollbarThemeChromiumWin.cpp: share code between
        linux/windows
        * rendering/RenderThemeChromiumLinux.cpp: improve stock colors to get
        better contrast and integration with stock chrome theme

2010-06-25  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Move decoding into DocumentParser to further simplify RawDataDocumentParser and DocumentWriter
        https://bugs.webkit.org/show_bug.cgi?id=41202

        The silly thing about this patch is that none of the
        RawDataDocumentParser subclasses actually use any of the
        data passed to them via appendBytes.

        This makes the relationship between DocumentWriter and
        DocumentParser slightly more confusing, however I think this
        DocumentParser API is slightly nicer.

        Next step is to split DecodedDataDocumentParser out from
        DocumentParser, and then the base DocumentParser won't know
        anything about decoding or SegmentedString.

        No functional change, thus no tests.

        * WebCore.xcodeproj/project.pbxproj:
        * dom/DocumentParser.h:
        * dom/RawDataDocumentParser.h:
        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::replaceDocument):
        (WebCore::DocumentWriter::createDecoderIfNeeded):
        (WebCore::DocumentWriter::reportDataRecieved):
        (WebCore::DocumentWriter::addData):
        * loader/DocumentWriter.h:
        * loader/ImageDocument.cpp:
        (WebCore::ImageDocumentParser::appendBytes):
        * loader/MediaDocument.cpp:
        (WebCore::MediaDocumentParser::appendBytes):
        * loader/PluginDocument.cpp:
        (WebCore::PluginDocumentParser::appendBytes):
        * loader/SinkDocument.cpp:
        (WebCore::SinkDocumentParser::SinkDocumentParser):
        (WebCore::SinkDocumentParser::appendBytes):
        (WebCore::SinkDocument::createParser):

2010-06-25  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Split DocumentParser::write into separate append and insert calls
        https://bugs.webkit.org/show_bug.cgi?id=41197

        Unfortunately this is still somewhat confusing as
        "insert" means "insert this data at the current
        insertion point and run the parser synchronously
        unless we're in a nested write call" and "append"
        means "append this data to the end and run the
        parser if not in a nested call or until possibly yielding".

        This at least makes clearer which document parsers implement
        which behavior, and paves the way for moving the decoding
        logic into DocumentParser from DocumentWriter.

        No functional changes, thus no tests.

        * dom/Document.cpp:
        (WebCore::Document::write):
        * dom/DocumentParser.h:
        * dom/RawDataDocumentParser.h:
        (WebCore::RawDataDocumentParser::insert):
        (WebCore::RawDataDocumentParser::append):
        * dom/XMLDocumentParser.cpp:
        (WebCore::XMLDocumentParser::insert):
        (WebCore::XMLDocumentParser::append):
        * dom/XMLDocumentParser.h:
        * dom/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::resumeParsing):
        * html/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::insert):
        (WebCore::HTMLDocumentParser::append):
        (WebCore::HTMLDocumentParser::parseDocumentFragment):
        * html/HTMLDocumentParser.h:
        * html/LegacyHTMLDocumentParser.cpp:
        (WebCore::LegacyHTMLDocumentParser::insert):
        (WebCore::LegacyHTMLDocumentParser::append):
        * html/LegacyHTMLDocumentParser.h:
        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::replaceDocument):
        (WebCore::DocumentWriter::addData):
        * loader/FTPDirectoryDocument.cpp:
        (WebCore::FTPDirectoryDocumentParser::FTPDirectoryDocumentParser):
        (WebCore::FTPDirectoryDocumentParser::loadDocumentTemplate):
        (WebCore::FTPDirectoryDocumentParser::append):
        * loader/TextDocument.cpp:
        (WebCore::TextDocumentParser::insert):
        (WebCore::TextDocumentParser::append):
        (WebCore::TextDocumentParser::finish):

2010-06-25  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by Darin Fisher.

        [chromium] Add new stubs for querying platform drag-and-drop and copy-and-paste data.

        This change adds new stubs for querying for data in a clipboard or drag operation. This is
        so adding support for more data types in clipboard/drag operations doesn't become
        increasingly expensive, since we currently copy all the drag data we need every time a new
        web drop target is entered. It also adds a new mechanism to write back to the system
        clipboard that isn't tied to one data type.

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

        No new tests since we're just adding new ChromiumBridge APIs. When we switch to it, it will
        be covered by the existing tests.

        * platform/chromium/ChromiumBridge.h:
        * platform/chromium/PasteboardPrivate.h:
        (WebCore::PasteboardPrivate::):

2010-06-25  Mario Sanchez Prada  <msanchez@igalia.com>

        Reviewed by Xan Lopez.

        [Gtk] Implement atk_table_get_column_header
        https://bugs.webkit.org/show_bug.cgi?id=30896

        Implemented get_column_header and modified get_row_header
        accordingly to keep them both coherent among themselves.
        Based on a previous patch by Joanmarie Diggs.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (webkit_accessible_table_get_column_header):
        (webkit_accessible_table_get_row_header):

2010-06-29  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Pasteboard code does not take into account the nil character when getting and setting markup/netscape-url data
        https://bugs.webkit.org/show_bug.cgi?id=41221

        Take into account null-terminator when getting and setting markup and
        Netscape URL pasteboard types. This means that if the selection data
        contains the null terminator, it won't be included in the final String.
        When setting the pasteboard data the null terminator is now included to
        match the behavior of other applications.

        * platform/gtk/PasteboardHelper.cpp:
        (WebCore::PasteboardHelper::getClipboardContents):
        Create the markup string after using g_strndup to protect against non-null-terminated
        strings. Use String::fromUTF8 here to ensure that the string is not longer than the
        first null-terminator. Also fix a small indentation issue.
        (WebCore::PasteboardHelper::fillSelectionData):
        Always include the null-terminator when setting pasteboard data manually. This matches
        the behavior of other browser applications.

2010-06-25  Sam Magnuson  <smagnuson@netflix.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] When any geometry change happens to a node it will resize the
        backing cache
        https://bugs.webkit.org/show_bug.cgi?id=40378

        Continue to grow the cache, but never toss it. When the pixmap
        cache gets too big it will be lost and created at the right size
        next time.

        No new tests: this is an optimization.

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::GraphicsLayerQtImpl::recache):
        (WebCore::GraphicsLayerQtImpl::paint):
        (WebCore::GraphicsLayerQtImpl::flushChanges):

2010-06-25  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=41019
        Canvas: Remember verified clean origins for drawImage()

        Made CanvasRenderingContext2D cache the KURLs of clean origins
        for fast repeated lookup.

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::checkOrigin):
        * html/canvas/CanvasRenderingContext2D.h:

2010-06-25  Robert Hogan  <robert@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] HTTP 307 after a 303 after a POST re-sends POST data from the original request

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

        Qt needs to use ResourceRequest::request()->httpMethod()) in order to determine
        the appropriate method for a 307 redirect request.

        When deciding if it needs to override a POST method with a GET method during a
        redirect chain, QNetworkReplyHandler needs to check the HTTP method stored
        in ResourceRequest::request()->httpMethod(). This will always contain the
        original request method in a redirect chain and, more importantly, is the
        method that will be used for the request created from the redirect
        if it is not overridden.

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

2010-06-25  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        Removed a one-line method that only had one internal caller.

        * rendering/RenderBlock.h: Removed bidiReorderLine()
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::layoutInlineChildren): Moved the implementation of
        bidiReorderLine() inline here.

2010-06-25  Nate Chapin  <japhet@chromium.org>

        Reviewed by Adam Barth.

        Take a KURL parameter in Document's constructor.
        This will remove the one case where Document::url() 
        and FrameLoader::url() are not equal, allowing us to
        remove FrameLoader::url().

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

        Refactor only, no new tests.

        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument): Take a KURL and pass it through to Document.
        (WebCore::DOMImplementation::createHTMLDocument):
        * dom/DOMImplementation.h:
        * dom/Document.cpp:
        (WebCore::Document::Document): Call setURL() if a frame or a non-empty KURL is specified.
        (WebCore::Document::initSecurityContext): m_url is now initialized, so use it instead
            of m_frame->loader()->url() for initializing the SecurityOrigin.
        * dom/Document.h:
        (WebCore::Document::create):
        (WebCore::Document::createXHTML):
        * html/HTMLDocument.cpp:
        * html/HTMLDocument.h: Add KURL parameter to create() and constructor.
        * html/HTMLViewSourceDocument.cpp:
        * html/HTMLViewSourceDocument.h: Add KURL parameter to create() and constructor.
        * loader/CachedFont.cpp:
        (WebCore::CachedFont::ensureSVGFontData):
        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::createDocument): Take a KURL and pass it through to Document.
        (WebCore::DocumentWriter::begin): Pass existing url parameter to constructors, and remove
            redundant Document::setURL() call.
        * loader/DocumentWriter.h:
        * loader/FTPDirectoryDocument.cpp:
        * loader/FTPDirectoryDocument.h: Add KURL parameter to create() and constructor.
        * loader/ImageDocument.cpp:
        * loader/ImageDocument.h: Add KURL parameter to create() and constructor.
        * loader/MediaDocument.cpp:
        * loader/MediaDocument.h: Add KURL parameter to create() and constructor.
        * loader/PlaceholderDocument.h: Add KURL parameter to create() and constructor.
        * loader/PluginDocument.cpp:
        * loader/PluginDocument.h: Add KURL parameter to create() and constructor.
        * loader/SinkDocument.cpp:
        * loader/SinkDocument.h: Add KURL parameter to create() and constructor.
        * loader/TextDocument.cpp:
        * loader/TextDocument.h: Add KURL parameter to create() and constructor.
        * svg/SVGDocument.cpp:
        * svg/SVGDocument.h: Add KURL parameter to create() and constructor.
        * xml/DOMParser.cpp:
        (WebCore::DOMParser::parseFromString):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::responseXML):
        * xml/XSLTProcessor.cpp:
        (WebCore::XSLTProcessor::createDocumentFromSource):

2010-06-25  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r61812.
        http://trac.webkit.org/changeset/61812
        https://bugs.webkit.org/show_bug.cgi?id=41216

        breaks Chromium workers tests (Requested by mnaganov on
        #webkit).

        * storage/AbstractDatabase.cpp:
        * storage/AbstractDatabase.h:
        * storage/Database.cpp:
        (WebCore::Database::databaseInfoTableName):
        (WebCore::guidMutex):
        (WebCore::guidToVersionMap):
        (WebCore::updateGuidVersionMap):
        (WebCore::guidToDatabaseMap):
        (WebCore::databaseVersionKey):
        (WebCore::DatabaseCreationCallbackTask::create):
        (WebCore::DatabaseCreationCallbackTask::performTask):
        (WebCore::DatabaseCreationCallbackTask::DatabaseCreationCallbackTask):
        (WebCore::Database::openDatabase):
        (WebCore::Database::Database):
        (WebCore::Database::openAndVerifyVersion):
        (WebCore::retrieveTextResultFromDatabase):
        (WebCore::Database::getVersionFromDatabase):
        (WebCore::setTextValueInDatabase):
        (WebCore::Database::setVersionInDatabase):
        (WebCore::Database::versionMatchesExpected):
        (WebCore::Database::close):
        (WebCore::Database::disableAuthorizer):
        (WebCore::Database::enableAuthorizer):
        (WebCore::Database::setAuthorizerReadOnly):
        (WebCore::Database::lastActionChangedDatabase):
        (WebCore::Database::lastActionWasInsert):
        (WebCore::Database::resetDeletes):
        (WebCore::Database::hadDeletes):
        (WebCore::guidForOriginAndName):
        (WebCore::Database::resetAuthorizer):
        (WebCore::Database::performOpenAndVerify):
        (WebCore::Database::performCreationCallback):
        (WebCore::Database::version):
        (WebCore::Database::setExpectedVersion):
        (WebCore::Database::stringIdentifier):
        (WebCore::Database::displayName):
        (WebCore::Database::estimatedSize):
        (WebCore::Database::fileName):
        * storage/Database.h:
        (WebCore::Database::scriptExecutionContext):
        (WebCore::Database::opened):
        (WebCore::Database::isNew):
        (WebCore::Database::databaseDebugName):
        * storage/DatabaseAuthorizer.cpp:
        (WebCore::DatabaseAuthorizer::DatabaseAuthorizer):
        (WebCore::DatabaseAuthorizer::denyBasedOnTableName):
        * storage/DatabaseAuthorizer.h:
        (WebCore::DatabaseAuthorizer::create):
        * storage/DatabaseSync.cpp:
        (WebCore::DatabaseSync::databaseInfoTableName):
        (WebCore::DatabaseSync::openDatabaseSync):
        (WebCore::DatabaseSync::DatabaseSync):
        (WebCore::DatabaseSync::~DatabaseSync):
        (WebCore::DatabaseSync::version):
        (WebCore::DatabaseSync::changeVersion):
        (WebCore::DatabaseSync::transaction):
        (WebCore::DatabaseSync::scriptExecutionContext):
        * storage/DatabaseSync.h:
        (WebCore::DatabaseSync::databaseDebugName):
        * storage/DatabaseTask.cpp:
        (WebCore::DatabaseOpenTask::DatabaseOpenTask):
        (WebCore::DatabaseOpenTask::doPerformTask):
        * storage/DatabaseTask.h:
        (WebCore::DatabaseOpenTask::create):

2010-06-25  Lei Zheng  <lzheng@chromium.org>

        Reviewed by Dimitri Glazkov.

        Add a flag to the ResourceResponse for tracking if a request was fetched when
        Alternate-protocol is available.
        https://bugs.webkit.org/show_bug.cgi?id=41001

        No new tests. (This is just a setter and getter.)

        * platform/network/chromium/ResourceResponse.h:
        (WebCore::ResourceResponse::ResourceResponse):
        (WebCore::ResourceResponse::wasAlternateProtocolAvailable):
        (WebCore::ResourceResponse::setWasAlternateProtocolAvailable):

2010-06-25  Lyon Chen  <liachen@rim.com>

        Reviewed by Darin Adler.

        InspectorCSSStore.cpp is not surrounded with ENABLE(INSPECTOR)
        https://bugs.webkit.org/show_bug.cgi?id=41004

        Surround InspectorCSSStore.cpp code with ENABLE(INSPECTOR) so it will not
        break the build when INSPECTOR is disabled.

        * inspector/InspectorCSSStore.cpp:

2010-06-25  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] WebGL: missing file
        https://bugs.webkit.org/show_bug.cgi?id=40998

        Added a missing file to WebCore.pro

        No new tests; build fix

        * WebCore.pro:

2010-06-25  Adam Roben  <aroben@apple.com>

        Windows build fix

        * WebCore.vcproj/WebCore.vcproj: Added a missing </File> tag.

2010-06-25  Alex Milowski  <alex@milowski.com>

        Reviewed by Kenneth Rohde Christiansen.

        This patch changes the vertical alignment to rely upon baseline
        alignment for all MathML rendering.  This fixes a number of layout
        issues and the implementation is much more clean.

        Also, this patch adds a horizontal green line in the debug layout
        so you can see the top padding of any RenderMathMLBlock instance.

        Test: mathml/presentation/row-alignment.xhtml

        * css/mathml.css:
        * mathml/RenderMathMLBlock.cpp:
        * mathml/RenderMathMLFraction.cpp:
        * mathml/RenderMathMLFraction.h:
        * mathml/RenderMathMLOperator.cpp:
        * mathml/RenderMathMLOperator.h:
        * mathml/RenderMathMLRoot.cpp:
        * mathml/RenderMathMLRow.cpp:
        * mathml/RenderMathMLRow.h:
        * mathml/RenderMathMLSquareRoot.cpp:
        * mathml/RenderMathMLSubSup.cpp:
        * mathml/RenderMathMLUnderOver.cpp:

2010-06-25  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Can't see source when hitting debugger statement in evaled source
        https://bugs.webkit.org/show_bug.cgi?id=41058

        Test: inspector/debugger-pause-in-eval-script.html

        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::sourceParsed): use lexical global object to figure out
        where the script is compiled. Otherwise scripts typed in Web Inspector console will
        be treated as ones evaluated in the context of Web Inspector and won't appear in the
        scripts list.
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::didParseSource): cache script sources for eval's too.

2010-06-25  Lucas De Marchi  <lucas.demarchi@profusion.mobi>

        Reviewed by Kenneth Rohde Christiansen.

        [EFL] Use a descriptive string in FileChooser when multiple files can
        be selected.
        https://bugs.webkit.org/show_bug.cgi?id=40943

        EFL port has no tests yet, so no new tests.

        * platform/efl/FileChooserEfl.cpp:
        (WebCore::FileChooser::basenameForWidth):

2010-06-25  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        SVG Text Highlighting not yet supported (in Safari)
        https://bugs.webkit.org/show_bug.cgi?id=41200

        Add text match marker highlighting support for SVG text - searching for SVG text in Safari now paints the nice yellow highlighting rect, and the
        white rectangles for all text matches. Behaves exactly like HTML text, but respecting SVGs per-character/per-chunk transformations,
        allowing to highlight textPaths, tspans with absolute per-character positions etc..

        Only manually testable, thus no new tests.

        * rendering/InlineBox.h: Expose calculateBoundaries() in non-SVG builds as well, now used by InlineTextBox too.
        * rendering/InlineTextBox.h: Add calculateBoundaries(), which will be used to refactor some code in RenderText, see below.
        (WebCore::InlineTextBox::calculateBoundaries): Just return a IntRect(x(), y(), width(), height()) here.
        (WebCore::RenderObject::isSVGInlineText):
        * rendering/RenderSVGInlineText.h:
        (WebCore::RenderSVGInlineText::isSVGInlineText): Return true for isSVGInlineText(), return false for isSVGText() (default in RenderObject.h)
        * rendering/RenderSVGRoot.cpp:
        (WebCore::RenderSVGRoot::paint): Only paint box decorations in PaintPhase(Child)BlockBackground, exit afterwards just like RenderBlock does.
                                         Otherwise the white text match marker rectangle gets drawn over the yellow highlight that Safari draws. 
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::paint): Accept a new painting phase: PaintPhaseSelection, used by Safari when drawing the yellow highlight rect.
        * rendering/RenderText.cpp:
        (WebCore::RenderText::absoluteQuads): Use calculateBoundaries() instead of IntRect(x(), y(), width(), height()). SVG provides different boundaries here.
        (WebCore::RenderText::absoluteQuadsForRange): Ditto. This is the main change, leading to correct text highlight placement.
        * rendering/SVGInlineFlowBox.cpp: Add assertion that painting is not disabled, for consistency. Change paint phase assertion to include PaintPhaseSelection.
        (WebCore::SVGInlineFlowBox::paint):
        * rendering/SVGInlineTextBox.cpp:
        (WebCore::SVGInlineTextBox::selectionRectForTextChunkPart): Refactored from selectionRect(), to share code between selectionRect/computeTextMatchMarkerRect.
        (WebCore::SVGInlineTextBox::selectionRect): Use new helper function selectionRectForTextChunkPart().
        (WebCore::SVGInlineTextBox::paint): Ditto. Call new computeTextMatchMarkerRect() function.
        (WebCore::SVGInlineTextBox::computeTextMatchMarkerRect): Implemented similar to HTML, but respecting SVGs concept of text chunk parts.
        (WebCore::SVGInlineTextBox::paintText): In PaintPhaseSelection, only paint selected text, not anything before/after the selection start/end.
        (WebCore::SVGInlineTextBox::calculateBoundaries): Early exit, if m_chunkTransformation is identity.
        * rendering/SVGInlineTextBox.h: Added "bool paintSelectedTextOnly" to paintText() and add new computeTextMatchMarkerRect(RenderStyle*) function.
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBox::paint): Change paint phase assertion to include PaintPhaseSelection.

2010-06-25  John Gregg  <johnnyg@google.com>

        Reviewed by Darin Fisher.

        Notification should expose ltr/rtl as TextDirection, not String
        https://bugs.webkit.org/show_bug.cgi?id=40871

        No new tests; existing test covers this, just renaming a method.

        * notifications/Notification.h:
        (WebCore::Notification::direction):

2010-06-25  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r61842.
        http://trac.webkit.org/changeset/61842
        https://bugs.webkit.org/show_bug.cgi?id=41208

        It broke Windows build (Requested by Ossy_ on #webkit).

        * ForwardingHeaders/wtf/win/OwnPtrWin.h: Removed.

2010-06-25  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Darin Adler.

        Remove unneeded whitespace from svgtags.in.
        https://bugs.webkit.org/show_bug.cgi?id=40912

        make_names.pl throws an error at non-empty lines
        when using cl.exe as preprocessor.

        * svg/svgtags.in:

2010-06-25  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Rob Buis.

        Split up isSVGText() in isSVGText() / isSVGInlineText()
        https://bugs.webkit.org/show_bug.cgi?id=41204

        Introduce isSVGInlineText(), to provide a safe mechanism to differentiate between RenderSVGText / RenderSVGInlineText.
        No change in functionality, thus no new tests.

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::shouldPreserveNewline): s/isSVGText/isSVGInlineText/
        (WebCore::RenderBlock::findNextLineBreak): Ditto.
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isSVGInlineText): Return false, by default.
        * rendering/RenderSVGInlineText.h:
        (WebCore::RenderSVGInlineText::isSVGInlineText): Return true here, don't return true anymore for isSVGText().
        * rendering/RenderText.cpp:
        (WebCore::RenderText::setTextInternal): s/isSVGText/isSVGInlineText/
        * rendering/RenderTreeAsText.cpp: Remove hack, now that we can properly differentiate between RenderSVGText / RenderSVGInlineText.
        (WebCore::write):

2010-06-25  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Adam Barth.

        Change OwnPtrCommon to include platform-specific headers
        https://bugs.webkit.org/show_bug.cgi?id=40279

        Adding new type to OwnPtrCommon needlessly causes all ports to do full rebuilds.
        Change OwnPtrCommon to include platform-specific headers to avoid all ports rebuilds.

        * ForwardingHeaders/wtf/win: Added.
        * ForwardingHeaders/wtf/win/OwnPtrWin.h: Added.

2010-06-25  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Adam Barth.

        Implement TextCodecs for WinCE port.
        https://bugs.webkit.org/show_bug.cgi?id=32169
        Originally written by Yong Li <yong.li@torchmobile.com>

        * platform/graphics/FontCache.h:
        * platform/graphics/wince/FontCacheWince.cpp:
        (WebCore::FontCache::getMultiLanguageInterface):
        * platform/text/wince/TextCodecWinCE.cpp: Added.
        (WebCore::codePageCharsets):
        (WebCore::knownCharsets):
        (WebCore::supportedCharsets):
        (WebCore::languageManager):
        (WebCore::addCharset):
        (WebCore::LanguageManager::LanguageManager):
        (WebCore::getCodePage):
        (WebCore::newTextCodecWinCE):
        (WebCore::TextCodecWinCE::TextCodecWinCE):
        (WebCore::TextCodecWinCE::~TextCodecWinCE):
        (WebCore::TextCodecWinCE::registerBaseEncodingNames):
        (WebCore::TextCodecWinCE::registerBaseCodecs):
        (WebCore::TextCodecWinCE::registerExtendedEncodingNames):
        (WebCore::TextCodecWinCE::registerExtendedCodecs):
        (WebCore::getCodePageFlags):
        (WebCore::findFirstNonAsciiCharacter):
        (WebCore::decode):
        (WebCore::TextCodecWinCE::decode):
        (WebCore::TextCodecWinCE::encode):
        (WebCore::TextCodecWinCE::enumerateSupportedEncodings):
        * platform/text/wince/TextCodecWinCE.h: Added.

2010-06-24  Rob Buis  <rwlbuis@gmail.com>

        Reviewed by Dirk Schulze.

        Bug 40880 - SVG properties fill and stroke do not accept system colors
        https://bugs.webkit.org/show_bug.cgi?id=40880

        Handle css system colors in fill and stroke properties.

        Test: svg/css/rect-system-color.xhtml

        * css/CSSParser.cpp: Remove comment and unneeded if condition
        (WebCore::CSSParser::parseValue):
        * css/SVGCSSParser.cpp: Allow css system colors
        (WebCore::CSSParser::parseSVGValue):

2010-06-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Make DocumentParser API private on subclasses to catch misuse bugs
        https://bugs.webkit.org/show_bug.cgi?id=41186

        This already found one bug:
        https://bugs.webkit.org/show_bug.cgi?id=41187

        Added a new HTMLDocumentParaser::parseDocumentFragment so that
        DocumentFragment.cpp does not need to use private methods.

        * dom/DocumentFragment.cpp:
        (WebCore::DocumentFragment::parseHTML):
        * dom/XMLDocumentParser.h:
        (WebCore::XMLDocumentParser::setIsXHTMLDocument):
        (WebCore::XMLDocumentParser::isXHTMLDocument):
        (WebCore::XMLDocumentParser::setIsXHTMLMPDocument):
        (WebCore::XMLDocumentParser::isXHTMLMPDocument):
        * html/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::parseDocumentFragment):
        * html/HTMLDocumentParser.h:
        * html/LegacyHTMLDocumentParser.cpp:
        (WebCore::LegacyHTMLDocumentParser::parseDocumentFragment):
        * html/LegacyHTMLDocumentParser.h:
        (WebCore::LegacyHTMLDocumentParser::forceSynchronous):
        (WebCore::LegacyHTMLDocumentParser::processingContentWrittenByScript):
        * html/LegacyHTMLTreeBuilder.cpp:
        (WebCore::LegacyHTMLTreeBuilder::reportErrorToConsole):
        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::replaceDocument):
        * loader/TextDocument.cpp:

2010-05-28  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Gustavo Noronha.

        [GStreamer] multiple video sink support
        https://bugs.webkit.org/show_bug.cgi?id=39472

        Playbin2 video-sink is now a bin containing a tee element capable
        of dispatching the buffers to multiple video sinks. By default
        only our webkit video sink is used. This will allow
        GStreamerGWorld to add support for autovideosink in the future.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::MediaPlayerPrivateGStreamer::MediaPlayerPrivateGStreamer):
        (WebCore::MediaPlayerPrivateGStreamer::~MediaPlayerPrivateGStreamer):
        (WebCore::MediaPlayerPrivateGStreamer::naturalSize):
        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin):
        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:

2010-06-24  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Sketch out AfterHeadMode for tree builder
        https://bugs.webkit.org/show_bug.cgi?id=41191

        This mode is fairly similar to the others.  I needed to change some of
        the types around w.r.t. Nodes/Elements.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::HTMLTreeBuilder):
        (WebCore::HTMLTreeBuilder::processToken):
        (WebCore::HTMLTreeBuilder::insertElement):
        * html/HTMLTreeBuilder.h:
        (WebCore::HTMLTreeBuilder::ElementStack::push):
        (WebCore::HTMLTreeBuilder::ElementStack::remove):

2010-06-24  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Sketch out InHeadNoscriptMode for tree builder
        https://bugs.webkit.org/show_bug.cgi?id=41189

        Lots of notImplemented() calls in this state.  I need to figure how to
        delegate handling of a token from one state to another.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processToken):

2010-06-24  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Sketch out InHeadMode for tree builder
        https://bugs.webkit.org/show_bug.cgi?id=41184

        This state is relatively straightforward.  We introduce the stack of
        open elements to track that notion in the spec.  The old tree builder
        has a nice data structure for that, which we'll probably steal, but I'd
        like to see what the full API is first.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processToken):
        (WebCore::HTMLTreeBuilder::insertCharacter):
        (WebCore::HTMLTreeBuilder::insertGenericRCDATAElement):
        (WebCore::HTMLTreeBuilder::insertGenericRawTextElement):
        (WebCore::HTMLTreeBuilder::insertScriptElement):
        * html/HTMLTreeBuilder.h:
        (WebCore::HTMLTreeBuilder::ElementStack::pop):
        (WebCore::HTMLTreeBuilder::ElementStack::top):

2010-06-24  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Sketch out BeforeHeadMode tree builder state
        https://bugs.webkit.org/show_bug.cgi?id=41183

        This makes procesToken recursive, which might not be the best idea.
        Also, we can now make fake AtomicHTMLTokens for use by the algorithm.

        * html/HTMLToken.h:
        (WebCore::AtomicHTMLToken::AtomicHTMLToken):
        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processToken):
        (WebCore::HTMLTreeBuilder::insertElement):
        * html/HTMLTreeBuilder.h:

2010-06-22 Antonio Gomes <tonikitoo@webkit.org>

        Reviewed by David Hyatt.

        Add a NodeList-derivated wrapper class for a ListHashSet.
        https://bugs.webkit.org/show_bug.cgi?id=41081

        StaticHashSetList will work as a wrapper to ListHashSet objects that are
        aimed to be exposed to the DOM.

        As a use case, the rect based HitTest (bug 40197) will store the retrieved nodes
        in a ListHashSet. It is going to be exposed to the DOM through are nodesFromRect
        of Document returning a NodeList (i.e. StatisHashSetList) wrapping a ListHashSet.

        No new tests.

2010-06-24  Cris Neckar  <cdn@chromium.org>

        Reviewed by Darin Fisher.

        [Chromium] Out of bounds write in WebCore::PNGImageDecoder::rowAvailable
        https://bugs.webkit.org/show_bug.cgi?id=40798

        Catches error in row callback for libPNG when extra rows are returned.

        Test: fast/images/png-extra-row-crash.html

        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageDecoder::rowAvailable):

2010-06-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Clean up and document DocumentWriter::replaceDocument code path
        https://bugs.webkit.org/show_bug.cgi?id=41182

        No functional changes, thus no tests.

        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::replaceDocument):
         - Remove comment which could be misleading.

2010-06-23  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Adam Barth.

        Implementing DatabaseSync::openDatabaseSync().
        https://bugs.webkit.org/show_bug.cgi?id=40607

        Moved some common code from Database to AbstractDatabase. Made
        performOpenAndVerify() virtual, since DatabaseSync doesn't need to
        interact with DatabaseThread. Removed the m_creationCallback
        field, since it's only needed in the openDatabase{Sync} methods.

        * storage/AbstractDatabase.cpp:
        (WebCore::retrieveTextResultFromDatabase):
        (WebCore::setTextValueInDatabase):
        (WebCore::guidMutex):
        (WebCore::guidToVersionMap):
        (WebCore::updateGuidVersionMap):
        (WebCore::guidToDatabaseMap):
        (WebCore::guidForOriginAndName):
        (WebCore::AbstractDatabase::databaseInfoTableName):
        (WebCore::AbstractDatabase::AbstractDatabase):
        (WebCore::AbstractDatabase::closeDatabase):
        (WebCore::AbstractDatabase::version):
        (WebCore::AbstractDatabase::performOpenAndVerify):
        (WebCore::AbstractDatabase::scriptExecutionContext):
        (WebCore::AbstractDatabase::securityOrigin):
        (WebCore::AbstractDatabase::stringIdentifier):
        (WebCore::AbstractDatabase::displayName):
        (WebCore::AbstractDatabase::estimatedSize):
        (WebCore::AbstractDatabase::fileName):
        (WebCore::AbstractDatabase::databaseVersionKey):
        (WebCore::AbstractDatabase::getVersionFromDatabase):
        (WebCore::AbstractDatabase::setVersionInDatabase):
        (WebCore::AbstractDatabase::versionMatchesExpected):
        (WebCore::AbstractDatabase::setExpectedVersion):
        (WebCore::AbstractDatabase::disableAuthorizer):
        (WebCore::AbstractDatabase::enableAuthorizer):
        (WebCore::AbstractDatabase::setAuthorizerReadOnly):
        (WebCore::AbstractDatabase::lastActionChangedDatabase):
        (WebCore::AbstractDatabase::lastActionWasInsert):
        (WebCore::AbstractDatabase::resetDeletes):
        (WebCore::AbstractDatabase::hadDeletes):
        (WebCore::AbstractDatabase::resetAuthorizer):
        * storage/AbstractDatabase.h:
        (WebCore::AbstractDatabase::opened):
        (WebCore::AbstractDatabase::isNew):
        (WebCore::AbstractDatabase::databaseDebugName):
        * storage/Database.cpp:
        (WebCore::DatabaseCreationCallbackTask::create):
        (WebCore::DatabaseCreationCallbackTask::performTask):
        (WebCore::DatabaseCreationCallbackTask::DatabaseCreationCallbackTask):
        (WebCore::Database::openDatabase):
        (WebCore::Database::Database):
        (WebCore::Database::version):
        (WebCore::Database::openAndVerifyVersion):
        (WebCore::Database::close):
        (WebCore::Database::stop):
        (WebCore::Database::performOpenAndVerify):
        * storage/Database.h:
        (WebCore::Database::sqliteDatabase):
        * storage/DatabaseAuthorizer.cpp:
        (WebCore::DatabaseAuthorizer::create):
        (WebCore::DatabaseAuthorizer::DatabaseAuthorizer):
        (WebCore::DatabaseAuthorizer::denyBasedOnTableName):
        * storage/DatabaseAuthorizer.h:
        * storage/DatabaseSync.cpp:
        (WebCore::DatabaseSync::openDatabaseSync):
        (WebCore::DatabaseSync::DatabaseSync):
        (WebCore::DatabaseSync::changeVersion):
        (WebCore::DatabaseSync::transaction):
        (WebCore::DatabaseSync::markAsDeletedAndClose):
        (WebCore::CloseSyncDatabaseOnContextThreadTask::create):
        (WebCore::CloseSyncDatabaseOnContextThreadTask::performTask):
        (WebCore::CloseSyncDatabaseOnContextThreadTask::CloseSyncDatabaseOnContextThreadTask):
        (WebCore::DatabaseSync::closeImmediately):
        * storage/DatabaseSync.h:
        * storage/DatabaseTask.cpp:
        (WebCore::DatabaseOpenTask::DatabaseOpenTask):
        (WebCore::DatabaseOpenTask::doPerformTask):
        * storage/DatabaseTask.h:
        (WebCore::DatabaseOpenTask::create):

2010-06-24  Steve Falkenburg  <sfalken@apple.com>

        Windows build fix.

        * platform/network/cf/AuthenticationCF.h:

2010-06-24  Martin Robinson  <mrobinson@igalia.com>

        Unreviewed. Build fix.

        Fix the build after r61798.

        * platform/gtk/PasteboardHelper.cpp:
        (WebCore::PasteboardHelper::getClipboardContents):

2010-06-24  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Brady Eidson.

        https://bugs.webkit.org/show_bug.cgi?id=41178
        Timed refresh in subframes isn't stopped when going into b/f cache

        Test: fast/history/timed-refresh-in-cached-frame.html

        * history/CachedFrame.cpp: (WebCore::CachedFrame::CachedFrame): Top frame's stopLoading()
        won't help cached subframes; stop loading from here.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopLoading): Don't stop loading in child frames. This didn't work
        for cached frames due to frame tree having been already desonstructed, and it's not necessary
        in non-cached case because stopLoading() will be called for subframes via
        FrameLoader::detachFromParent() and closeURL().
        (WebCore::FrameLoader::pageHidden): This was a second code path that dispatched pagehide
        event - it's no longer needed, because everything goes through FrameLoader::stopLoading().
        (WebCore::FrameLoader::commitProvisionalLoad): Don't call pageHidden(), the code for adding
        frame to b/f cache will do everything.

        * loader/FrameLoader.h: Removed pageHidden().

2010-06-24  Eric Seidel  <eric@webkit.org>

        Unreviewed. Fix the build.  I am a bad man.

        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::replaceDocument):

2010-06-24  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        Build fix for building against GTK+ 3.x.

        No new tests as functionality has not changed.

        * platform/gtk/GtkVersioning.h:
        * platform/gtk/PasteboardHelper.cpp:
        (WebCore::PasteboardHelper::getClipboardContents):
        (WebCore::PasteboardHelper::fillSelectionData):

2010-06-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Clean up and document DocumentWriter::replaceDocument code path
        https://bugs.webkit.org/show_bug.cgi?id=41182

        No functional change, thus no test.

        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::replaceDocument):
        * loader/DocumentWriter.h:

2010-06-24  Jer Noble  <jer.noble@apple.com>

        Reviewed by Eric Carlson.

        Full-screened content doesn't keep the display on: Safari not grabbing a power assertion?
        https://bugs.webkit.org/show_bug.cgi?id=40939
        rdar://problem/7996172
        
        Export -[MediaElement playbackRate];
        
        * WebCore.Video.exp:

2010-06-21  Evan Martin  <evan@chromium.org>

        Reviewed by Adam Barth.

        [chromium] overlapping characters in complex text
        https://bugs.webkit.org/show_bug.cgi?id=40966

        We need to clear all the buffers we hand to Harfbuzz before we use them.
        While I'm here, refactor the code slightly to make its behavior more
        clear and correct (previously, we would repeatedly double our buffer
        size when we could have just sized it correctly on the second try).

        * platform/graphics/chromium/FontLinux.cpp:
        (WebCore::TextRunWalker::TextRunWalker):
        (WebCore::TextRunWalker::nextScriptRun):
        (WebCore::TextRunWalker::createGlyphArrays):
        (WebCore::TextRunWalker::shapeGlyphs):

2010-06-24  Adele Peterson  <adele@apple.com>

        Reviewed by Sam Weinig.

        Updated fix for <rdar://problem/8093680> "Paste and Match Style" should fire paste events
        https://bugs.webkit.org/show_bug.cgi?id=41085

        Covered by existing tests.

        * editing/EditorCommand.cpp:
        (WebCore::executePasteAsPlainText): Added.
        (WebCore::createCommandMap): Added pasteAsPlainText command.

2010-06-24  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Sketch out BeforeHTMLMode state
        https://bugs.webkit.org/show_bug.cgi?id=41133

        In this patch, we switch the TreeBuidler over to using AtomicHTMLTokens
        and sketch out another state.  These states don't actually do anything
        yet, I'm still just getting the structure of the spec into the code so
        we can implement the details incrementally.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::constructTreeFromToken):
        (WebCore::HTMLTreeBuilder::processToken):
        (WebCore::HTMLTreeBuilder::insertDoctype):
        (WebCore::HTMLTreeBuilder::insertComment):
        * html/HTMLTreeBuilder.h:
        (WebCore::HTMLTreeBuilder::parseError):

2010-06-24  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add AtomicHTMLToken
        https://bugs.webkit.org/show_bug.cgi?id=41131

        We need an atomized version of the token for use in the tree builder.
        Eventually, we should make the existing HTMLToken an internal detail of
        the HTMLTokenizer.  This new AtomicHTMLToken should be also be more
        easily cached between the preload scanner and the tree builder.

        * html/HTMLToken.h:
        (WebCore::AtomicHTMLToken::AtomicHTMLToken):
        (WebCore::AtomicHTMLToken::type):
        (WebCore::AtomicHTMLToken::name):
        (WebCore::AtomicHTMLToken::selfClosing):
        (WebCore::AtomicHTMLToken::attributes):
        (WebCore::AtomicHTMLToken::characters):
        (WebCore::AtomicHTMLToken::comment):
        (WebCore::AtomicHTMLToken::publicIdentifier):
        (WebCore::AtomicHTMLToken::systemIdentifier):
        (WebCore::AtomicHTMLToken::forceQuirks):
        * html/HTMLTreeBuilder.cpp:
        (WebCore::convertToOldStyle):
        (WebCore::HTMLTreeBuilder::passTokenToLegacyParser):

2010-06-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Add RawDataDocumentParser to get rid of a bunch of copy/paste code in DocumentParser subclasses
        https://bugs.webkit.org/show_bug.cgi?id=41136

        I think this is likely far from the final design,
        however this is almost entirely minus lines which is a
        good thing.

        The original authors of these DocumentParser subclasses
        seem to have just copied the files whole, as they all
        had the same includes, many of which were unnecessary for
        some of the files.

        I think eventually the FrameLoader will call a virtual
        DocumentParser::appendData which will in turn decode
        and call another write/appendData call.  In the case
        of these RawDataDocumentParsers, they will just override
        the low-level appendData call instead of needing
        DocumentWriter to have a special if based on
        DocumentParser::wantsRawData.

        No functional change, thus no tests.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/DocumentParser.h:
        (WebCore::DocumentParser::writeRawData):
        * loader/ImageDocument.cpp:
        (WebCore::ImageDocumentParser::ImageDocumentParser):
        (WebCore::ImageDocumentParser::finish):
        * loader/MediaDocument.cpp:
        (WebCore::MediaDocumentParser::MediaDocumentParser):
        (WebCore::MediaDocumentParser::writeRawData):
        * loader/PluginDocument.cpp:
        (WebCore::PluginDocumentParser::PluginDocumentParser):
        * loader/SinkDocument.cpp:
        (WebCore::SinkDocument::createParser):

2010-06-23  Peter Kasting  <pkasting@google.com>

        Reviewed by Adam Barth.

        REGRESSION (r61619): Memory corruption in open-source ICO decoder
        https://bugs.webkit.org/show_bug.cgi?id=41107

        * platform/image-decoders/bmp/BMPImageReader.cpp:
        (WebCore::BMPImageReader::processInfoHeader): Fix memory corruption.
        * platform/image-decoders/ico/ICOImageDecoder.cpp:
        (WebCore::ICOImageDecoder::processDirectoryEntries): Handle sizing failure correctly (though failure should be impossible).

2010-06-24  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r61783.
        http://trac.webkit.org/changeset/61783
        https://bugs.webkit.org/show_bug.cgi?id=41179

        Caused a couple of test failures (Requested by japhet on
        #webkit).

        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument):
        (WebCore::DOMImplementation::createHTMLDocument):
        * dom/DOMImplementation.h:
        * dom/Document.cpp:
        (WebCore::Document::Document):
        (WebCore::Document::initSecurityContext):
        * dom/Document.h:
        (WebCore::Document::create):
        (WebCore::Document::createXHTML):
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::HTMLDocument):
        * html/HTMLDocument.h:
        (WebCore::HTMLDocument::create):
        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::HTMLViewSourceDocument):
        * html/HTMLViewSourceDocument.h:
        (WebCore::HTMLViewSourceDocument::create):
        * loader/CachedFont.cpp:
        (WebCore::CachedFont::ensureSVGFontData):
        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::createDocument):
        (WebCore::DocumentWriter::begin):
        * loader/DocumentWriter.h:
        * loader/FTPDirectoryDocument.cpp:
        (WebCore::FTPDirectoryDocument::FTPDirectoryDocument):
        * loader/FTPDirectoryDocument.h:
        (WebCore::FTPDirectoryDocument::create):
        * loader/ImageDocument.cpp:
        (WebCore::ImageDocument::ImageDocument):
        * loader/ImageDocument.h:
        (WebCore::ImageDocument::create):
        * loader/MediaDocument.cpp:
        (WebCore::MediaDocument::MediaDocument):
        * loader/MediaDocument.h:
        (WebCore::MediaDocument::create):
        * loader/PlaceholderDocument.h:
        (WebCore::PlaceholderDocument::create):
        (WebCore::PlaceholderDocument::PlaceholderDocument):
        * loader/PluginDocument.cpp:
        (WebCore::PluginDocument::PluginDocument):
        * loader/PluginDocument.h:
        (WebCore::PluginDocument::create):
        * loader/SinkDocument.cpp:
        (WebCore::SinkDocument::SinkDocument):
        * loader/SinkDocument.h:
        (WebCore::SinkDocument::create):
        * loader/TextDocument.cpp:
        (WebCore::TextDocument::TextDocument):
        * loader/TextDocument.h:
        (WebCore::TextDocument::create):
        * svg/SVGDocument.cpp:
        (WebCore::SVGDocument::SVGDocument):
        * svg/SVGDocument.h:
        (WebCore::SVGDocument::create):
        * xml/DOMParser.cpp:
        (WebCore::DOMParser::parseFromString):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::responseXML):
        * xml/XSLTProcessor.cpp:
        (WebCore::XSLTProcessor::createDocumentFromSource):

2010-06-24  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Small code cleanup in RenderThemeGtk
        https://bugs.webkit.org/show_bug.cgi?id=40989

        Reduce the amount of duplicated code slightly and prepare this section for
        future improvements, such as sharing the clipping rectangle calculation with
        the slow path.

        No new tests as functionality has not changed.

        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::paintMozillaGtkWidget): Small code cleanup.

2010-06-24  Nate Chapin  <japhet@chromium.org>

        Reviewed by Adam Barth.

        Take a KURL parameter in Document's constructor.
        This will remove the one case where Document::url() 
        and FrameLoader::url() are not equal, allowing us to
        remove FrameLoader::url().

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

        Refactor only, no new tests.

        * dom/DOMImplementation.cpp:
        (WebCore::DOMImplementation::createDocument): Take a KURL and pass it through to Document.
        (WebCore::DOMImplementation::createHTMLDocument):
        * dom/DOMImplementation.h:
        * dom/Document.cpp:
        (WebCore::Document::Document): Call setURL() for non-empty KURL input parameters.
        (WebCore::Document::initSecurityContext): m_url is now initialized, so use it instead
            of m_frame->loader()->url() for initializing the SecurityOrigin.
        * dom/Document.h:
        (WebCore::Document::create):
        (WebCore::Document::createXHTML):
        * html/HTMLDocument.cpp:
        * html/HTMLDocument.h: Add KURL parameter to create() and constructor.
        * html/HTMLViewSourceDocument.cpp:
        * html/HTMLViewSourceDocument.h: Add KURL parameter to create() and constructor.
        * loader/CachedFont.cpp:
        (WebCore::CachedFont::ensureSVGFontData):
        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::createDocument): Take a KURL and pass it through to Document.
        (WebCore::DocumentWriter::begin): Pass existing url parameter to constructors, and remove
            redundant Document::setURL() call.
        * loader/DocumentWriter.h:
        * loader/FTPDirectoryDocument.cpp:
        * loader/FTPDirectoryDocument.h: Add KURL parameter to create() and constructor.
        * loader/ImageDocument.cpp:
        * loader/ImageDocument.h: Add KURL parameter to create() and constructor.
        * loader/MediaDocument.cpp:
        * loader/MediaDocument.h: Add KURL parameter to create() and constructor.
        * loader/PlaceholderDocument.h: Add KURL parameter to create() and constructor.
        * loader/PluginDocument.cpp:
        * loader/PluginDocument.h: Add KURL parameter to create() and constructor.
        * loader/SinkDocument.cpp:
        * loader/SinkDocument.h: Add KURL parameter to create() and constructor.
        * loader/TextDocument.cpp:
        * loader/TextDocument.h: Add KURL parameter to create() and constructor.
        * svg/SVGDocument.cpp:
        * svg/SVGDocument.h: Add KURL parameter to create() and constructor.
        * xml/DOMParser.cpp:
        (WebCore::DOMParser::parseFromString):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::responseXML):
        * xml/XSLTProcessor.cpp:
        (WebCore::XSLTProcessor::createDocumentFromSource):

2010-06-24  Brady Eidson  <beidson@apple.com>

        Reviewed by Sam Weinig.

        <rdar://problem/8044645> and https://bugs.webkit.org/show_bug.cgi?id=41082

        Webarchives will null main resource cause a repro crash.

        Test: webarchive/loading/mainresource-null-mimetype-crash.html

        * loader/archive/cf/LegacyWebArchive.cpp:
        (WebCore::LegacyWebArchive::createResource): Fail to create the archive resource if the main resource's
          mime type is null.

2010-06-24  Damian Kaleta  <dkaleta@apple.com>

        Reviewed by Sam Weinig.

        Provide a way to obtain the rendered rectangle for box elements.

        * WebCore.base.exp: Export the symbol so we can see it in WebKit.
        * dom/Node.cpp:
        (WebCore::Node::renderRect): Added new ethod that will return a rendered rectangle for box elements.
        * dom/Node.h: Ditto.

2010-06-24  Vangelis Kokkevis  <vangelis@chromium.org>

        Reviewed by Darin Fisher.

        [Chromium] Create specialized classes for Transform,
        Image and WebGL layers to replace the rather monolithic LayerChromium class.
        Layers can now own the GL texture they use for backing store and a different
        shading program can be used by the compositor for each layer type. WebGL layers
        are not yet hooked up to GraphicsContext3D.
        https://bugs.webkit.org/show_bug.cgi?id=41106

        * WebCore.gypi:
        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::GraphicsLayerChromium):
        (WebCore::GraphicsLayerChromium::setContentsToImage):
        (WebCore::GraphicsLayerChromium::updateLayerPreserves3D):
        * platform/graphics/chromium/GraphicsLayerChromium.h:
        (WebCore::GraphicsLayerChromium::):
        * platform/graphics/chromium/ImageLayerChromium.cpp: Added.
        (WebCore::ImageLayerChromium::create):
        (WebCore::ImageLayerChromium::ImageLayerChromium):
        (WebCore::ImageLayerChromium::setContents):
        (WebCore::ImageLayerChromium::updateTextureContents):
        * platform/graphics/chromium/ImageLayerChromium.h: Added.
        (WebCore::ImageLayerChromium::drawsContent):
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::create):
        (WebCore::LayerChromium::LayerChromium):
        (WebCore::LayerChromium::updateTextureContents):
        (WebCore::LayerChromium::updateTextureRect):
        * platform/graphics/chromium/LayerChromium.h:
        (WebCore::LayerChromium::drawsContent):
        (WebCore::LayerChromium::ownsTexture):
        (WebCore::LayerChromium::textureId):
        (WebCore::LayerChromium::setShaderProgramId):
        (WebCore::LayerChromium::shaderProgramId):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::createLayerShader):
        (WebCore::ShaderProgram::ShaderProgram):
        (WebCore::LayerRendererChromium::LayerRendererChromium):
        (WebCore::LayerRendererChromium::~LayerRendererChromium):
        (WebCore::LayerRendererChromium::useShaderProgram):
        (WebCore::LayerRendererChromium::drawTexturedQuad):
        (WebCore::LayerRendererChromium::drawLayers):
        (WebCore::LayerRendererChromium::drawDebugBorder):
        (WebCore::LayerRendererChromium::updateLayersRecursive):
        (WebCore::LayerRendererChromium::drawLayer):
        (WebCore::LayerRendererChromium::bindCommonAttribLocations):
        (WebCore::LayerRendererChromium::initializeSharedGLObjects):
        * platform/graphics/chromium/LayerRendererChromium.h:
        (WebCore::LayerRendererChromium::):
        * platform/graphics/chromium/TransformLayerChromium.cpp: Added.
        (WebCore::TransformLayerChromium::create):
        (WebCore::TransformLayerChromium::TransformLayerChromium):
        * platform/graphics/chromium/TransformLayerChromium.h: Added.
        (WebCore::TransformLayerChromium::drawsContent):
        * platform/graphics/chromium/WebGLLayerChromium.cpp: Added.
        (WebCore::WebGLLayerChromium::WebGLLayerChromium):
        (WebCore::WebGLLayerChromium::textureId):
        (WebCore::WebGLLayerChromium::updateTextureContents):
        (WebCore::WebGLLayerChromium::setContext):
        * platform/graphics/chromium/WebGLLayerChromium.h: Added.
        (WebCore::WebGLLayerChromium::drawsContent):
        (WebCore::WebGLLayerChromium::ownsTexture):
        (WebCore::WebGLLayerChromium::shaderProgramId):
        (WebCore::WebGLLayerChromium::setShaderProgramId):

2010-06-24  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.
 
        Web Inspector: Inspector cleanup + better DevTools alignment with Inspector.

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

        - Removed a bunch of unused methods from all over the place
        - Added client callbacks for states surviving navigation
        - Implemented more user-friendly stub for InspectorFrontendHost.platform

        * inspector/InspectorClient.h:
        (WebCore::InspectorClient::resourceTrackingWasEnabled):
        (WebCore::InspectorClient::resourceTrackingWasDisabled):
        (WebCore::InspectorClient::timelineProfilerWasStarted):
        (WebCore::InspectorClient::timelineProfilerWasStopped):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::enableResourceTracking):
        (WebCore::InspectorController::disableResourceTracking):
        (WebCore::InspectorController::ensureSettingsLoaded):
        (WebCore::InspectorController::startTimelineProfiler):
        (WebCore::InspectorController::stopTimelineProfiler):
        * inspector/InspectorFrontend.cpp:
        * inspector/InspectorFrontend.h:
        * inspector/front-end/InspectorBackendStub.js:
        * inspector/front-end/InspectorFrontendHostStub.js:
        (.WebInspector.InspectorFrontendHostStub.prototype.platform):

2010-06-23  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=41099
        Assertion failure: !m_suspended when XMLHttpRequest fails

        This was a general problem with load failure timer not being deferred.

        Test: manual-tests/xhr-failure-behind-alert.html

        * manual-tests/xhr-failure-behind-alert.html: Added.

        * platform/network/ResourceHandle.cpp:
        (WebCore::ResourceHandle::fireFailure): Added an empty case for NoFailure. Reset
        m_scheduledFailureType to NoFailure when firing.
        (WebCore::ResourceHandle::setDefersLoading): Stop failure timer when deferring, restart when
        un-deferring loads.

        * platform/network/ResourceHandle.h: Renamed m_failureType to m_scheduledFailureType to
        make it clear that it is only set when a timer is scheduled.

        * platform/network/ResourceHandleInternal.h:
        (WebCore::ResourceHandleInternal::ResourceHandleInternal): Initialize m_scheduledFailureType
        to NoFailure, so that we can look at it when un-deferring loads.

        * platform/network/android/ResourceHandleAndroid.cpp:
        (WebCore::ResourceHandle::platformSetDefersLoading):
        * platform/network/cf/ResourceHandleCFNet.cpp:
        (WebCore::ResourceHandle::platformSetDefersLoading):
        * platform/network/curl/ResourceHandleCurl.cpp:
        (WebCore::ResourceHandle::platformSetDefersLoading):
        * platform/network/mac/ResourceHandleMac.mm:
        (WebCore::ResourceHandle::platformSetDefersLoading):
        * platform/network/qt/ResourceHandleQt.cpp:
        (WebCore::ResourceHandle::platformSetDefersLoading):
        * platform/network/soup/ResourceHandleSoup.cpp:
        Platform specific parts of setDefersLoading() are now in a separate function.

2010-06-24  Pavel Feldman  <pfeldman@chromium.org>

        Not reviewed: revert 61766.

        * inspector/InspectorClient.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::enableResourceTracking):
        (WebCore::InspectorController::disableResourceTracking):
        (WebCore::InspectorController::ensureSettingsLoaded):
        (WebCore::InspectorController::startTimelineProfiler):
        (WebCore::InspectorController::stopTimelineProfiler):
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::setAttachedWindow):
        * inspector/InspectorFrontend.h:
        * inspector/front-end/InspectorBackendStub.js:
        (.WebInspector.InspectorBackendStub.prototype.setAttachedWindowHeight):
        * inspector/front-end/InspectorFrontendHostStub.js:
        (.WebInspector.InspectorFrontendHostStub.prototype.platform):

2010-06-23  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Inspector cleanup + better DevTools alignment with Inspector.
        
        https://bugs.webkit.org/show_bug.cgi?id=41094

        - Removed a bunch of unused methods from all over the place
        - Added client callbacks for states surviving navigation
        - Implemented more user-friendly stub for InspectorFrontendHost.platform

        * inspector/InspectorClient.h:
        (WebCore::InspectorClient::resourceTrackingWasEnabled):
        (WebCore::InspectorClient::resourceTrackingWasDisabled):
        (WebCore::InspectorClient::timelineProfilerWasStarted):
        (WebCore::InspectorClient::timelineProfilerWasStopped):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::enableResourceTracking):
        (WebCore::InspectorController::disableResourceTracking):
        (WebCore::InspectorController::ensureSettingsLoaded):
        (WebCore::InspectorController::startTimelineProfiler):
        (WebCore::InspectorController::stopTimelineProfiler):
        * inspector/InspectorFrontend.cpp:
        * inspector/InspectorFrontend.h:
        * inspector/front-end/InspectorBackendStub.js:
        * inspector/front-end/InspectorFrontendHostStub.js:
        (.WebInspector.InspectorFrontendHostStub.prototype.platform):

2010-06-24  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Inspector & SVG Text have problems, kids of RenderSVGText are not properly placed.
        https://bugs.webkit.org/show_bug.cgi?id=41143

        Simplify code path taken for SVG text in InspectorController, take the code path currently only used for RenderInline,
        that just calls absoluteQuads(), and displays the result. Refactored code that all SVG renderers (except RenderSVGRoot)
        take this code path -> highlighting now works as expected.

        Don't use absoluteClippedOverlowRect() in the various RenderSVG*::absoluteQuads() methods, as we're loosing floating-point precision.
        Instead use localToAbsoluteQuad(strokeBoundingBox()) in order to highlight the unclipped, unfiltered, etc.. region that this renderer would paint.

        No new tests, as this is only manual testable - at least I didn't find any Inspector-Highlighting tests, if someone knows please mail me.

        * inspector/InspectorController.cpp:
        (WebCore::drawHighlightForLineBoxesOrSVGRenderer):
        (WebCore::InspectorController::drawNodeHighlight):
        * rendering/RenderSVGBlock.cpp:
        (WebCore::RenderSVGBlock::absoluteRects): ASSERT_NOT_REACHED() here. SVG should only be inspected through absoluteQuads().
        * rendering/RenderSVGBlock.h: Add absoluteRects() in this base class for RenderForeignObject/RenderSVGText.
        * rendering/RenderSVGHiddenContainer.cpp: Remove absoluteRects() - RenderSVGModelObject already has it.
        * rendering/RenderSVGHiddenContainer.h: Ditto.
        * rendering/RenderSVGImage.cpp: 
        (WebCore::RenderSVGImage::absoluteRects): ASSERT_NOT_REACHED() here.
        (WebCore::RenderSVGImage::absoluteQuads): Don't use absoluteClippedOverlowRect() but localToAbsoluteQuad(repaintRectInLocalCoordinates()).
        * rendering/RenderSVGImage.h:
        (WebCore::RenderSVGImage::objectBoundingBox): Inlined
        * rendering/RenderSVGInline.cpp: 
        (WebCore::RenderSVGInline::absoluteQuads): Take RenderSVGText translation into account, allows inspecting <tspan>/<tref> etc.
        * rendering/RenderSVGInline.h:
        * rendering/RenderSVGModelObject.cpp: 
        (WebCore::RenderSVGModelObject::absoluteRects): ASSERT_NOT_REACHED() here.
        (WebCore::RenderSVGModelObject::absoluteQuads): Don't use absoluteClippedOverlowRect() but localToAbsoluteQuad(repaintRectInLocalCoordinates()).
        * rendering/RenderSVGModelObject.h:
        * rendering/RenderSVGRoot.cpp: Fix typo in license s/aint/along. Need to touch this file in order to let Mac build.
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::mapLocalToContainer): Remove hack, which moved the transformState by x()/y(). Not needed anymore.
        (WebCore::RenderSVGText::absoluteQuads): Proper implementation, respecting x/y translation.
        * rendering/RenderSVGText.h: Reorder some functions. 
        * rendering/SVGRenderSupport.h: Removed last virtual function strokeBoundingBox().

2010-06-24  Kent Tamura  <tkent@chromium.org>

        Unreviewed. Build fix for Tiger.

        * platform/mac/ThemeMac.mm:
        (WebCore::setControlSize):

2010-06-24  Kent Tamura  <tkent@chromium.org>

        Unreviewed. Build fix for Tiger.

        * platform/mac/ThemeMac.mm:
        (WebCore::setControlSize):
        (WebCore::ThemeMac::inflateControlPaintRect):

2010-06-24  Kent Tamura  <tkent@chromium.org>

        Unreviewed.  Build fix for Chromium Mac.

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

2010-06-24  Simon Hausmann  <simon.hausmann@nokia.com>

        Unreviewed Symbian build fix.

        The QML WebKit integration needs to be part of QtWebKit.sis

        * WebCore.pro: Deploy qmlwebkitplugin.dll.

2010-06-24  Satish Sampath  <satish@chromium.org>

        Reviewed by Kent Tamura.

        Add a speech button to input elements, no rendering or actions yet.

        Speech Input: Add a speech button to text input element (no rendering or actions yet)
        https://bugs.webkit.org/show_bug.cgi?id=40925

        No new tests. Will create a layout test in a subsequent patch.

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::pseudoId):
        (WebCore::nameToPseudoTypeMap):
        (WebCore::CSSSelector::extractPseudoType):
        * css/CSSSelector.h:
        (WebCore::CSSSelector::):
        * css/CSSValueKeywords.in:
        * css/html.css:
        (input::-webkit-input-speech-button):
        * dom/InputElement.h:
        * html/HTMLAttributeNames.in:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::isSpeechEnabled):
        * html/HTMLInputElement.h:
        * platform/ThemeTypes.h:
        (WebCore::):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::nodeAtPoint):
        (WebCore::RenderTextControlSingleLine::forwardEvent):
        (WebCore::RenderTextControlSingleLine::styleDidChange):
        (WebCore::RenderTextControlSingleLine::hasControlClip):
        (WebCore::RenderTextControlSingleLine::controlClipRect):
        (WebCore::RenderTextControlSingleLine::textBlockWidth):
        (WebCore::RenderTextControlSingleLine::preferredContentWidth):
        (WebCore::RenderTextControlSingleLine::adjustControlHeightBasedOnLineHeight):
        (WebCore::RenderTextControlSingleLine::createSubtreeIfNeeded):
        (WebCore::RenderTextControlSingleLine::createSpeechButtonStyle):
        (WebCore::RenderTextControlSingleLine::clientPaddingRight):
        * rendering/RenderTextControlSingleLine.h:
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle):
        (WebCore::RenderTheme::paint):
        (WebCore::RenderTheme::paintBorderOnly):
        (WebCore::RenderTheme::paintDecorations):
        * rendering/TextControlInnerElements.cpp:
        (WebCore::InputFieldSpeechButtonElement::InputFieldSpeechButtonElement):
        (WebCore::InputFieldSpeechButtonElement::create):
        (WebCore::InputFieldSpeechButtonElement::defaultEventHandler):
        * rendering/TextControlInnerElements.h:
        * rendering/style/RenderStyleConstants.h:
        (WebCore::):

2010-06-24  Kent Tamura  <tkent@chromium.org>

        Reviewed by Adam Barth.

        [Mac] The upper button of <input type=number> has no visual effect on click
        https://bugs.webkit.org/show_bug.cgi?id=38380

        Because we have no ways to draw an NSStepperCell with its up button
        highlighted, use HIThemeDrawButton() instead.

        Test: platform/mac/fast/forms/input-appearance-spinbutton-up.html

        * platform/mac/ThemeMac.mm:
        (WebCore::controlSizeFromPixelSize):
          New function. Made from a part of setControlSize().
        (WebCore::setControlSize):
        (WebCore::convertControlStatesToThemeDrawState):
        (WebCore::paintStepper): Use HITheme API instead of NSStepperCell.
        (WebCore::ThemeMac::inflateControlPaintRect):
          Use controlSizeFromPixelSize().

2010-06-24  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: implement layout tests for debugger
        https://bugs.webkit.org/show_bug.cgi?id=40774

        Test: inspector/debugger-pause-on-debugger-statement.html

        * bindings/js/ScriptDebugServer.cpp: remove unused obsolete code that deals with global listeners.
        (WebCore::ScriptDebugServer::ScriptDebugServer):
        (WebCore::ScriptDebugServer::removeListener):
        (WebCore::ScriptDebugServer::dispatchFunctionToListeners):
        (WebCore::ScriptDebugServer::pauseIfNeeded):
        (WebCore::ScriptDebugServer::didAddListener):
        (WebCore::ScriptDebugServer::didRemoveListener):
        * bindings/js/ScriptDebugServer.h:
        * platform/mac/EventLoopMac.mm:
        (WebCore::EventLoop::cycle): wait at most 10ms for new event, otherwise layout tests would
        hang because in their case there may be no events ever.

2010-06-24  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Yury Semikhatsky.

        Fixed evaluation & logging of null values in console.
        Changed handling of null and undefined in ScriptValue::toString()
        to match JSC bindings (i.e. "null" and "undefined" instead of "").
        https://bugs.webkit.org/show_bug.cgi?id=40980

        * bindings/v8/ScriptValue.cpp:
        (WebCore::ScriptValue::toString):
        * inspector/front-end/InjectedScript.js:
        (injectedScriptConstructor):

2010-06-24  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: live edit doesn't work when resource tracking is off
        https://bugs.webkit.org/show_bug.cgi?id=41076

        * inspector/front-end/ScriptView.js:
        (WebInspector.ScriptView.prototype._sourceIDForLine): implement this method for ScriptView,
        it's needed for editLine to work.

2010-06-23  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Sketch out InitialMode of HTML5 tree builder
        https://bugs.webkit.org/show_bug.cgi?id=41126

        Transliterated from the spec.  Currently doesn't do anything.  Mostly
        an experiment to see where this goes.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::processToken):
        (WebCore::HTMLTreeBuilder::insertDoctype):
        (WebCore::HTMLTreeBuilder::insertComment):
        * html/HTMLTreeBuilder.h:

2010-06-23  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add all the HTML5 tree builder insertion modes
        https://bugs.webkit.org/show_bug.cgi?id=41124

        These are just copied verbatim from the spec.  No tests because these
        don't do anything yet.

        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::HTMLTreeBuilder):
        (WebCore::HTMLTreeBuilder::passTokenToLegacyParser):
        * html/HTMLTreeBuilder.h:
        (WebCore::HTMLTreeBuilder::):

2010-06-23  Eric Seidel  <eric@webkit.org>

        Unreviewed.  Fix namespace indent.  Just whitespace changes.

        * dom/DocumentParser.h:
        (WebCore::DocumentParser::~DocumentParser):
        (WebCore::DocumentParser::isExecutingScript):
        (WebCore::DocumentParser::stopParsing):
        (WebCore::DocumentParser::processingData):
        (WebCore::DocumentParser::wantsRawData):
        (WebCore::DocumentParser::writeRawData):
        (WebCore::DocumentParser::wellFormed):
        (WebCore::DocumentParser::lineNumber):
        (WebCore::DocumentParser::columnNumber):
        (WebCore::DocumentParser::executeScriptsWaitingForStylesheets):
        (WebCore::DocumentParser::htmlTreeBuilder):
        (WebCore::DocumentParser::asHTMLDocumentParser):
        (WebCore::DocumentParser::inViewSourceMode):
        (WebCore::DocumentParser::setInViewSourceMode):
        (WebCore::DocumentParser::document):
        (WebCore::DocumentParser::xssAuditor):
        (WebCore::DocumentParser::setXSSAuditor):
        (WebCore::DocumentParser::DocumentParser):

2010-06-23  Eric Seidel  <eric@webkit.org>

        Unreviewed.  Speculative build fix for Qt.

        Move Document* down onto DocumentParser, since every DocumentParser needs one.
        https://bugs.webkit.org/show_bug.cgi?id=41117

        XMLDocumentParserQt is a huge pile of donkey barf.
        I can't believe I ever r+'d the creation of this pile of
        copy/paste code.

        I clearly missed removing m_doc from this code as well and thus
        broke Qt.

        We really need to fix both XMLDocumentParserLibxml2 and
        XMLDocumentParserQt not to be so poorly abstracted so
        that if we're going to have two of them they can at least
        share some code.

        * dom/XMLDocumentParserQt.cpp:
        (WebCore::XMLDocumentParser::XMLDocumentParser):
        (WebCore::XMLDocumentParser::~XMLDocumentParser):
        (WebCore::XMLDocumentParser::doWrite):
        (WebCore::XMLDocumentParser::doEnd):
        (WebCore::XMLDocumentParser::parse):
        (WebCore::XMLDocumentParser::startDocument):
        (WebCore::XMLDocumentParser::parseStartElement):
        (WebCore::XMLDocumentParser::parseEndElement):
        (WebCore::XMLDocumentParser::parseProcessingInstruction):
        (WebCore::XMLDocumentParser::parseCdata):
        (WebCore::XMLDocumentParser::parseComment):
        (WebCore::XMLDocumentParser::parseDtd):

2010-06-23  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Move Document* down onto DocumentParser, since every DocumentParser needs one.
        https://bugs.webkit.org/show_bug.cgi?id=41117

        This eliminated the need for document() on HTMLDocumentParser.
        This paves the way for more code sharing between various
        DocumentParser subclasses.

        * dom/DocumentParser.h:
        (WebCore::DocumentParser::inViewSourceMode):
        (WebCore::DocumentParser::setInViewSourceMode):
        (WebCore::DocumentParser::document):
        (WebCore::DocumentParser::DocumentParser):
        * dom/XMLDocumentParser.cpp:
        (WebCore::XMLDocumentParser::isWMLDocument):
        (WebCore::XMLDocumentParser::pushCurrentNode):
        (WebCore::XMLDocumentParser::popCurrentNode):
        (WebCore::XMLDocumentParser::clearCurrentNodeStack):
        (WebCore::XMLDocumentParser::enterText):
        (WebCore::XMLDocumentParser::end):
        (WebCore::XMLDocumentParser::insertErrorMessageBlock):
        * dom/XMLDocumentParser.h:
        * dom/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::XMLDocumentParser):
        (WebCore::XMLDocumentParser::~XMLDocumentParser):
        (WebCore::XMLDocumentParser::doWrite):
        (WebCore::XMLDocumentParser::startElementNs):
        (WebCore::XMLDocumentParser::endElementNs):
        (WebCore::XMLDocumentParser::processingInstruction):
        (WebCore::XMLDocumentParser::cdataBlock):
        (WebCore::XMLDocumentParser::comment):
        (WebCore::XMLDocumentParser::startDocument):
        (WebCore::XMLDocumentParser::internalSubset):
        (WebCore::XMLDocumentParser::initializeParserContext):
        (WebCore::XMLDocumentParser::doEnd):
        * html/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::HTMLDocumentParser):
        * html/HTMLDocumentParser.h:
        * html/LegacyHTMLDocumentParser.cpp:
        (WebCore::LegacyHTMLDocumentParser::LegacyHTMLDocumentParser):
        (WebCore::LegacyHTMLDocumentParser::begin):
        (WebCore::LegacyHTMLDocumentParser::scriptHandler):
        (WebCore::LegacyHTMLDocumentParser::scriptExecution):
        (WebCore::LegacyHTMLDocumentParser::parseTag):
        (WebCore::LegacyHTMLDocumentParser::continueProcessing):
        (WebCore::LegacyHTMLDocumentParser::willWriteHTML):
        (WebCore::LegacyHTMLDocumentParser::didWriteHTML):
        (WebCore::LegacyHTMLDocumentParser::write):
        (WebCore::LegacyHTMLDocumentParser::stopParsing):
        (WebCore::LegacyHTMLDocumentParser::timerFired):
        (WebCore::LegacyHTMLDocumentParser::end):
        (WebCore::LegacyHTMLDocumentParser::processToken):
        (WebCore::LegacyHTMLDocumentParser::processDoctypeToken):
        (WebCore::LegacyHTMLDocumentParser::executeScriptsWaitingForStylesheets):
        (WebCore::LegacyHTMLDocumentParser::executeExternalScriptsIfReady):
        (WebCore::LegacyHTMLDocumentParser::executeExternalScriptsTimerFired):
        * html/LegacyHTMLDocumentParser.h:
        * loader/ImageDocument.cpp:
        (WebCore::ImageDocumentParser::ImageDocumentParser):
        (WebCore::ImageDocumentParser::imageDocument):
        (WebCore::ImageDocumentParser::write):
        (WebCore::ImageDocumentParser::writeRawData):
        (WebCore::ImageDocumentParser::finish):
        (WebCore::ImageDocumentParser::finishWasCalled):
        (WebCore::ImageDocumentParser::isWaitingForScripts):
        (WebCore::ImageDocument::createParser):
        * loader/MediaDocument.cpp:
        (WebCore::MediaDocumentParser::MediaDocumentParser):
        (WebCore::MediaDocumentParser::createDocumentStructure):
        (WebCore::MediaDocumentParser::finish):
        (WebCore::MediaDocumentParser::finishWasCalled):
        * loader/PluginDocument.cpp:
        (WebCore::PluginDocumentParser::PluginDocumentParser):
        (WebCore::PluginDocumentParser::createDocumentStructure):
        (WebCore::PluginDocumentParser::writeRawData):
        (WebCore::PluginDocumentParser::finish):
        (WebCore::PluginDocumentParser::finishWasCalled):
        * loader/SinkDocument.cpp:
        (WebCore::SinkDocumentParser::SinkDocumentParser):
        * loader/TextDocument.cpp:
        (WebCore::TextDocumentParser::TextDocumentParser):
        (WebCore::TextDocumentParser::write):
        (WebCore::TextDocumentParser::finish):
        (WebCore::TextDocumentParser::finishWasCalled):

2010-06-23  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Start to clean up DocumentParser interface
        https://bugs.webkit.org/show_bug.cgi?id=41114

        The first of many cleanups needed to the DocumentParser
        interface.  Rename executingScript() to isExecutingScript()
        and make it return a bool instead of an int.  Also added a
        FIXME to XMLDocumentParser about implementing it and did
        some minor other cleanup to the XMLDocumentParser header.

        No functional change, thus no tests.

        * dom/Document.cpp:
        (WebCore::Document::open):
        * dom/DocumentParser.h:
        (WebCore::DocumentParser::isExecutingScript):
        * dom/XMLDocumentParser.h:
        (WebCore::XMLDocumentParser::wellFormed):
        * html/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::attemptToEnd):
        (WebCore::HTMLDocumentParser::endIfDelayed):
        (WebCore::HTMLDocumentParser::isExecutingScript):
        * html/HTMLDocumentParser.h:
        * html/LegacyHTMLDocumentParser.h:
        (WebCore::LegacyHTMLDocumentParser::isExecutingScript):

2010-06-22  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Simon Fraser.

        Implement IDL attribute for HTML5 hidden
        https://bugs.webkit.org/show_bug.cgi?id=41039

        Test: fast/html/hidden-attr-dom.html

        * html/HTMLElement.idl: Just add to the IDL file. [Reflect] takes
        care of the rest.

2010-06-23  Joanmarie Diggs  <joanmarie.diggs@gmail.com>

        Reviewed by Chris Fleizach.

        [Gtk] nameFromChildren is obsolete
        https://bugs.webkit.org/show_bug.cgi?id=36128

        Look to the AtkText interface implemented by the objects in
        question.

        Test: platform/gtk/accessibility/name-from-label.html

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (webkit_accessible_get_name):
        (webkit_accessible_table_get_column_description):
        (webkit_accessible_table_get_row_description):

2010-06-23  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Kent Tamura.

        [BREWMP] Port FileSystem
        https://bugs.webkit.org/show_bug.cgi?id=34323

        Port FileSystem with IFileMgr interface.

        * platform/FileSystem.h:
        * platform/brew/FileSystemBrew.cpp: Added.
        (WebCore::getFileSize):
        (WebCore::getFileModificationTime):
        (WebCore::fileExists):
        (WebCore::deleteFile):
        (WebCore::deleteEmptyDirectory):
        (WebCore::pathByAppendingComponent):
        (WebCore::fileSystemRepresentation):
        (WebCore::canonicalPath):
        (WebCore::makeAllDirectories):
        (WebCore::homeDirectoryPath):
        (WebCore::pathGetFileName):
        (WebCore::directoryName):
        (WebCore::openTemporaryFile):
        (WebCore::closeFile):
        (WebCore::writeToFile):
        (WebCore::unloadModule):
        (WebCore::listDirectory):

2010-06-23  Alexendar Pavlov  <apavlov@chromium.org>

        Reviewed by David Hyatt.

        Swap checks in Position::isCandidate so that the less expensive
        nodeIsUserSelectNode  (node && node->renderer() &&
        node->renderer()->style()->userSelect() == SELECT_NONE) came first.

        (Was Web Inspector: Hangup when expanding elements with enormous
        text node content in Elements panel).

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

        * dom/Position.cpp:
        (WebCore::Position::isCandidate):
        * dom/PositionIterator.cpp:
        (WebCore::PositionIterator::isCandidate):

2010-06-23  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Kent Tamura.

        [BREWMP] Add PopupMenu implementation
        https://bugs.webkit.org/show_bug.cgi?id=40226

        Delegate PopupMenu handling to ChromeClientBrew.

        * page/brew/ChromeClientBrew.h: Added.
        * platform/PopupMenu.h:
        * platform/brew/PopupMenuBrew.cpp: Added.
        (WebCore::PopupMenu::PopupMenu):
        (WebCore::PopupMenu::~PopupMenu):
        (WebCore::PopupMenu::show):
        (WebCore::PopupMenu::hide):
        (WebCore::PopupMenu::updateFromElement):
        (WebCore::PopupMenu::itemWritingDirectionIsNatural):

2010-06-23  Kenneth Russell  <kbr@google.com>

        Reviewed by Dimitri Glazkov.

        Implement format conversions in texImage2D and texSubImage2D taking HTML data
        https://bugs.webkit.org/show_bug.cgi?id=40319

        Generalized code supporting premultiplication of alpha and
        vertical flip to pack texture data into requested format and type.
        Handled incoming image data of various formats, RGBA and BGRA in
        particular, both to reduce the number of temporary copies during
        texture upload and to support premultiplying alpha for the
        texImage2D and texSubImage2D entry points taking ArrayBufferView
        in a subsequent bug. Added test case exercising all combinations
        of format/type combinations, premultiplication of alpha, and
        Image/ImageData upload. (Incorporated pnglib.js under
        fast/canvas/webgl/resources/ to be able to generate Image elements
        programmatically.) Tested in Safari on Mac OS X and in Chromium on
        Mac OS X, Windows and Linux.

        Test: fast/canvas/webgl/tex-image-with-format-and-type.html

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::readPixels):
        (WebCore::WebGLRenderingContext::texImage2DImpl):
        (WebCore::WebGLRenderingContext::texImage2D):
        (WebCore::WebGLRenderingContext::texSubImage2DImpl):
        (WebCore::WebGLRenderingContext::texSubImage2D):
        (WebCore::WebGLRenderingContext::validateTexFuncFormatAndType):
        (WebCore::WebGLRenderingContext::validateTexFuncParameters):
        * platform/graphics/GraphicsContext3D.cpp:
        (WebCore::GraphicsContext3D::computeFormatAndTypeParameters):
        (WebCore::GraphicsContext3D::extractImageData):
        (WebCore::GraphicsContext3D::flipVertically):
        (WebCore::doUnpackingAndPacking):
        (WebCore::doPacking):
        (WebCore::GraphicsContext3D::packPixels):
        * platform/graphics/GraphicsContext3D.h:
        (WebCore::GraphicsContext3D::):
        * platform/graphics/cg/GraphicsContext3DCG.cpp:
        (WebCore::GraphicsContext3D::getImageData):
        * platform/graphics/mac/GraphicsContext3DMac.mm:
        (WebCore::narrowInternalFormat):
        (WebCore::GraphicsContext3D::texImage2D):
        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3D::getImageData):
        * platform/graphics/skia/GraphicsContext3DSkia.cpp:
        (WebCore::GraphicsContext3D::getImageData):

2010-06-23  Stephen White  <senorblanco@chromium.org>

        Unreviewed; correcting bad patch.

        In my haste to land r61710, I mistakenly landed the wrong version, in
        which a chunk of code was moved.  This patch moves that chunk of code
        to where it was in the patch that was reviewed.  Mea culpa.

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::ImageQualityController::shouldPaintAtLowQuality):

2010-06-23  Stephen White  <senorblanco@chromium.org>

        Reviewed by David Hyatt.

        This is a tweak to the resize algorithm introduced in r61341, and
        is a fix for the regression described in
        https://bugs.webkit.org/show_bug.cgi?id=41036

        The goal is to bring back the some of old behaviour, without regressing
        too much of the performance gains in r61341.

        The old algorithm was:
        - on first resize, draw in high quality and record the paint time
        - if we've already drawn at this size, use the same quality as last time
        - on subsequent resizes, if the resize occurs within X ms of the
          previous one, draw at low quality and set a timer (one timer per
          image).
        - when each timer expires, draw that image at high quality

        The r61341 algorithm was:  
        - on first resize, draw the image in low quality, add it to a list of
          resized images, and set a timer (one timer for all images)
        - when the timer expires, redraw all resized images in high quality

        The new algorithm is:
        - on first resize, if no other animated resizes are outstanding, draw in
          high quality and set the timer (one timer for all images)
        - if any images have been resized to two different sizes in the last
          X ms, draw all resized images in low quality and kick the timer
          forward
        - when the timer expires, if any animated resizes occured, redraw all
          resized images in high quality, and reset the flag

        This should cause GUIMark and the IE9 demos to have good performance 
        after the first frame, while other pages with only static resizes
        should be unaffected.

        * rendering/RenderBoxModelObject.cpp:
        Change the LastPaintTimeMap to a LastPaintSizeMap:  we now record the
        last size an image was resized to, rather than the time it was painted
        (the time actually became redundant in r61341 when I added the
        check for m_timer.isActive():  we only care if anything is resizing
        while the timer is active).
        (WebCore::ImageQualityController::ImageQualityController):
        Add an initializer for the m_animatedResizeIsActive flag.
        (WebCore::ImageQualityController::objectDestroyed):
        Reset the m_animatedResizeIsActive flag if this was the last object
        in the list.
        (WebCore::ImageQualityController::highQualityRepaintTimerFired):
        Only repaint all the images if there was an animated resize (otherwise,
        everything is already high quality).
        (WebCore::ImageQualityController::shouldPaintAtLowQuality):
        Implement the above algorithm.

2010-06-23  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Kenneth Rohde Christiansen.

        Bad cast after DOM mutation in RenderMenuList
        https://bugs.webkit.org/show_bug.cgi?id=40828
 
        Firing the onchange event on select which changes its size > 1 causes the select
        object to change from a menulist to a listbox. However, when propogating the events,
        we do a bad cast assuming the object will remain a menulist. Added proper checks to
        make sure we check the renderer after the onchange is fired and propogate the event
        based on correct object type.

        Test: fast/events/select-onchange-crash.html

        * dom/SelectElement.cpp:
        (WebCore::SelectElement::setSelectedIndex):

2010-06-23  Andy Estes  <aestes@apple.com>

        Reviewed by Alexey Proskuryakov.
        
        <rdar://problem/8107855> Prevent a crash in WebCore when removing an
        object element with an invalid data URL in in a listener to its
        beforeload event.
        https://bugs.webkit.org/show_bug.cgi?id=41054

        Tests: fast/dom/beforeload/remove-bad-object-in-beforeload-listener.html

        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::renderFallbackContent): Exit early if the
        object element is not in the document.
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::RenderEmbeddedObject::updateWidget): If RenderWidget::destroy()
        was called during processing of onbeforeload, do not proceed with loading
        the object.

2010-06-23  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        [gtk] web fonts not loaded properly in scribd html5 reader
        https://bugs.webkit.org/show_bug.cgi?id=38758

        Drop filling the pattern with default values, because this
        restricts the matching more than we want.

        * platform/graphics/cairo/FontCacheCairo.cpp:
        (WebCore::FontCache::createFontPlatformData):

2010-06-23  Gustavo Noronha Silva  <gustavo.noronha@collabora.co.uk>

        Reviewed by Xan Lopez.

        [gtk] web fonts not loaded properly in scribd html5 reader
        https://bugs.webkit.org/show_bug.cgi?id=38758

        Also special-case `sans' amd `mono', which are aliases commonly
        used in GTK+ applications.

        * platform/graphics/cairo/FontCacheCairo.cpp:
        (WebCore::isWellKnownFontName):

2010-06-23  Justin Schuh  <jschuh@chromium.org>

        Unreviewed, rolling out r61695.
        http://trac.webkit.org/changeset/61695
        https://bugs.webkit.org/show_bug.cgi?id=40798

        61695 broke all the Linux builds.

        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageDecoder::rowAvailable):

2010-06-23  Kevin Ollivier  <kevino@theolliviers.com>

        Reviewed by Darin Adler.

        Fix PluginViewNone.cpp compilation for ports that also compile PluginView.cpp
        https://bugs.webkit.org/show_bug.cgi?id=37939

        * plugins/PluginViewNone.cpp:
        (WebCore::PluginView::handleFocusInEvent):
        (WebCore::PluginView::handleFocusOutEvent):
        (WebCore::PluginView::keepAlive):
        (WebCore::PluginView::privateBrowsingStateChanged):
        (WebCore::PluginView::setJavaScriptPaused):

2010-06-23  Cris Neckar  <cdn@chromium.org>

        Reviewed by Darin Fisher.

        [Chromium] Out of bounds write in WebCore::PNGImageDecoder::rowAvailable
        https://bugs.webkit.org/show_bug.cgi?id=40798

        Catches error in row callback for libPNG when extra rows are returned.

        Test: fast/images/png-extra-row-crash.html

        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageDecoder::rowAvailable):

2010-06-23  James Robinson  <jamesr@chromium.org>

        Reviewed by Dan Bernstein.

        Do not set needsLayout when the style attribute changes on an SVG element
        https://bugs.webkit.org/show_bug.cgi?id=40366

        SVGSVGElement::svgAttributeChanged was incorrectly calling renderer()->setNeedsLayout(true)
        whenever the styleAttr changed on its element.  This could happen during layout in some
        circumstances due to lazy style attribute synchronization.  When it did, it could cause the
        layout flags to become inconsistent.  See the test case for details.

        Changes to an element's style attribute always mark an element as needing layout anyway so
        this call was redundant.

        Test: fast/repaint/svg-layout-root-style-attr-update.html

        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::isKnownAttribute):

2010-06-23  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        r61215 broke Acid3
        https://bugs.webkit.org/show_bug.cgi?id=41034
        
        The code added in r61215, which tests whether the root renderer will fill
        the entire viewport, should not run for subframes. So bail from
        RenderView::paintBoxDecorations() if document()->ownerElement() is not null.
        The old code was trying to do this by checking 'elt', but that ends up as 
        null after the for loop above.
        
        We can also bail early if the is no FrameView().

        Test: fast/frames/paint-iframe-background.html

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

2010-06-23  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: do not reset profiles panel on navigation.

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

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::didCommitLoad):
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::resetProfilesPanel):
        * inspector/InspectorFrontend.h:
        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel):
        (WebInspector.ProfilesPanel.prototype.populateInterface):
        (WebInspector.ProfilesPanel.prototype.profilerWasDisabled):
        (WebInspector.ProfilesPanel.prototype._reset):
        (WebInspector.ProfilesPanel.prototype._clearProfiles):
        * inspector/front-end/inspector.js:
        (WebInspector.resetProfilesPanel):

2010-06-23  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: InspectorController should be added only once as ScriptDebugListener to
        ScriptDebugServer.
        https://bugs.webkit.org/show_bug.cgi?id=41070

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::disconnectFrontend):
        (WebCore::InspectorController::enableDebuggerFromFrontend):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel): don't call InspectorBackend.enableDebugger if debugger is always enabled,
        InspectorController will do this on its side when the front end is connected.

2010-06-23  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Clear breakpoints before restoring them, not after.
        https://bugs.webkit.org/show_bug.cgi?id=41071

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::enableDebuggerFromFrontend):

2010-06-23  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Do not render the full frame when there is some elements with fixed positioning
        https://bugs.webkit.org/show_bug.cgi?id=33150

        Do not render the full frame when there is some elements with fixed positioning
        https://bugs.webkit.org/show_bug.cgi?id=33150

        The frame view take into acount the list of fixed object when scrolling
        the view. If the number of object is lower than a certain threshold, the pixel
        are blitted, and the invalidated area updated.

        * page/FrameView.cpp:
        (WebCore::FrameView::addFixedObject):
        (WebCore::FrameView::removeFixedObject):
        (WebCore::FrameView::scrollContentsFastPath):
        * page/FrameView.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::scrollContents):
        (WebCore::ScrollView::scrollContentsFastPath):
        * platform/ScrollView.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::repaintRectIncludingDescendants):
        * rendering/RenderLayer.h:
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::styleWillChange):

2010-06-23  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Fix displaying of several CPU profiles with the same name.

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

        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfileGroupSidebarTreeElement.prototype.onselect):

2010-06-23  Adam Barth  <abarth@webkit.org>

        Unreviewed.  clean-header-guards that were made dirty by recent
        renames.

        * html/HTMLDocumentParser.h:
        * html/HTMLPreloadScanner.h:
        * html/HTMLTokenizer.h:
        * html/HTMLTreeBuilder.h:
        * html/LegacyHTMLDocumentParser.h:
        * html/LegacyHTMLTreeBuilder.h:
        * html/LegacyPreloadScanner.h:

2010-06-23  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Rename LegacyHTMLTreeConstructor to LegacyHTMLTreeBuilder
        https://bugs.webkit.org/show_bug.cgi?id=41053

        There was some debate about whether to call this class (and the
        non-legacy version) "tree builder" or "tree constructor".  Maciej
        pointed out that other implementations (including Mozilla and HTML5Lib)
        call it a tree builder.  The path of least resistance seems to be call
        it that for now.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        * dom/DocumentParser.h:
        (WebCore::DocumentParser::htmlTreeConstructor):
        * html/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::htmlTreeConstructor):
        * html/HTMLDocumentParser.h:
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::removedFromTree):
        * html/HTMLInputElement.cpp:
        * html/HTMLMeterElement.cpp:
        * html/HTMLProgressElement.cpp:
        * html/HTMLTreeBuilder.cpp:
        (WebCore::HTMLTreeBuilder::HTMLTreeBuilder):
        * html/HTMLTreeBuilder.h:
        (WebCore::HTMLTreeBuilder::legacyTreeConstructor):
        * html/LegacyHTMLDocumentParser.cpp:
        (WebCore::LegacyHTMLDocumentParser::LegacyHTMLDocumentParser):
        * html/LegacyHTMLDocumentParser.h:
        (WebCore::LegacyHTMLDocumentParser::htmlTreeConstructor):
        * html/LegacyHTMLTreeBuilder.cpp: Copied from WebCore/html/LegacyHTMLTreeConstructor.cpp.
        (WebCore::LegacyHTMLTreeBuilder::LegacyHTMLTreeBuilder):
        (WebCore::LegacyHTMLTreeBuilder::~LegacyHTMLTreeBuilder):
        (WebCore::LegacyHTMLTreeBuilder::reset):
        (WebCore::LegacyHTMLTreeBuilder::setCurrent):
        (WebCore::LegacyHTMLTreeBuilder::limitDepth):
        (WebCore::LegacyHTMLTreeBuilder::insertNodeAfterLimitDepth):
        (WebCore::LegacyHTMLTreeBuilder::parseToken):
        (WebCore::LegacyHTMLTreeBuilder::parseDoctypeToken):
        (WebCore::LegacyHTMLTreeBuilder::insertNode):
        (WebCore::LegacyHTMLTreeBuilder::handleError):
        (WebCore::LegacyHTMLTreeBuilder::textCreateErrorCheck):
        (WebCore::LegacyHTMLTreeBuilder::commentCreateErrorCheck):
        (WebCore::LegacyHTMLTreeBuilder::headCreateErrorCheck):
        (WebCore::LegacyHTMLTreeBuilder::bodyCreateErrorCheck):
        (WebCore::LegacyHTMLTreeBuilder::framesetCreateErrorCheck):
        (WebCore::LegacyHTMLTreeBuilder::formCreateErrorCheck):
        (WebCore::LegacyHTMLTreeBuilder::isindexCreateErrorCheck):
        (WebCore::LegacyHTMLTreeBuilder::selectCreateErrorCheck):
        (WebCore::LegacyHTMLTreeBuilder::ddCreateErrorCheck):
        (WebCore::LegacyHTMLTreeBuilder::dtCreateErrorCheck):
        (WebCore::LegacyHTMLTreeBuilder::rpCreateErrorCheck):
        (WebCore::LegacyHTMLTreeBuilder::rtCreateErrorCheck):
        (WebCore::LegacyHTMLTreeBuilder::nestedCreateErrorCheck):
        (WebCore::LegacyHTMLTreeBuilder::nestedPCloserCreateErrorCheck):
        (WebCore::LegacyHTMLTreeBuilder::nestedStyleCreateErrorCheck):
        (WebCore::LegacyHTMLTreeBuilder::tableCellCreateErrorCheck):
        (WebCore::LegacyHTMLTreeBuilder::tableSectionCreateErrorCheck):
        (WebCore::LegacyHTMLTreeBuilder::noembedCreateErrorCheck):
        (WebCore::LegacyHTMLTreeBuilder::noframesCreateErrorCheck):
        (WebCore::LegacyHTMLTreeBuilder::noscriptCreateErrorCheck):
        (WebCore::LegacyHTMLTreeBuilder::pCloserCreateErrorCheck):
        (WebCore::LegacyHTMLTreeBuilder::pCloserStrictCreateErrorCheck):
        (WebCore::LegacyHTMLTreeBuilder::mapCreateErrorCheck):
        (WebCore::LegacyHTMLTreeBuilder::getNode):
        (WebCore::LegacyHTMLTreeBuilder::allowNestedRedundantTag):
        (WebCore::LegacyHTMLTreeBuilder::processCloseTag):
        (WebCore::LegacyHTMLTreeBuilder::isHeadingTag):
        (WebCore::LegacyHTMLTreeBuilder::isInline):
        (WebCore::LegacyHTMLTreeBuilder::isResidualStyleTag):
        (WebCore::LegacyHTMLTreeBuilder::isAffectedByResidualStyle):
        (WebCore::LegacyHTMLTreeBuilder::handleResidualStyleCloseTagAcrossBlocks):
        (WebCore::LegacyHTMLTreeBuilder::reopenResidualStyleTags):
        (WebCore::LegacyHTMLTreeBuilder::pushBlock):
        (WebCore::LegacyHTMLTreeBuilder::popBlock):
        (WebCore::LegacyHTMLTreeBuilder::popOneBlockCommon):
        (WebCore::LegacyHTMLTreeBuilder::popOneBlock):
        (WebCore::LegacyHTMLTreeBuilder::moveOneBlockToStack):
        (WebCore::LegacyHTMLTreeBuilder::checkIfHasPElementInScope):
        (WebCore::LegacyHTMLTreeBuilder::popInlineBlocks):
        (WebCore::LegacyHTMLTreeBuilder::freeBlock):
        (WebCore::LegacyHTMLTreeBuilder::createHead):
        (WebCore::LegacyHTMLTreeBuilder::handleIsindex):
        (WebCore::LegacyHTMLTreeBuilder::startBody):
        (WebCore::LegacyHTMLTreeBuilder::finished):
        (WebCore::LegacyHTMLTreeBuilder::reportErrorToConsole):
        * html/LegacyHTMLTreeBuilder.h: Copied from WebCore/html/LegacyHTMLTreeConstructor.h.
        * html/LegacyHTMLTreeConstructor.cpp: Removed.
        * html/LegacyHTMLTreeConstructor.h: Removed.
        * html/StepRange.cpp:
        * html/ValidityState.cpp:
        * rendering/RenderSlider.cpp:

2010-06-23  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Rename the preload scanners
        https://bugs.webkit.org/show_bug.cgi?id=41052

        Renames PreloadScanner to LegacyPreloadScanner because this code is now
        off by default.  Also, rename HTML5PreloadScanner to
        HTMLPreloadScanner.  We're not calling it PreloadScanner because we've
        factored out the CSSPreloadScanner and the HTMLPreloadScanner from the
        original PreloadScanner.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTML5PreloadScanner.cpp: Removed.
        * html/HTML5PreloadScanner.h: Removed.
        * html/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::pumpTokenizer):
        * html/HTMLDocumentParser.h:
        * html/HTMLPreloadScanner.cpp: Copied from WebCore/html/HTML5PreloadScanner.cpp.
        (WebCore::HTMLPreloadScanner::HTMLPreloadScanner):
        (WebCore::HTMLPreloadScanner::appendToEnd):
        (WebCore::HTMLPreloadScanner::scan):
        (WebCore::HTMLPreloadScanner::processToken):
        (WebCore::HTMLPreloadScanner::scanningBody):
        * html/HTMLPreloadScanner.h: Copied from WebCore/html/HTML5PreloadScanner.h.
        * html/LegacyHTMLDocumentParser.cpp:
        (WebCore::LegacyHTMLDocumentParser::scriptHandler):
        (WebCore::LegacyHTMLDocumentParser::scriptExecution):
        * html/LegacyHTMLDocumentParser.h:
        * html/LegacyPreloadScanner.cpp: Copied from WebCore/html/PreloadScanner.cpp.
        (WebCore::LegacyPreloadScanner::LegacyPreloadScanner):
        (WebCore::LegacyPreloadScanner::~LegacyPreloadScanner):
        (WebCore::LegacyPreloadScanner::begin):
        (WebCore::LegacyPreloadScanner::end):
        (WebCore::LegacyPreloadScanner::reset):
        (WebCore::LegacyPreloadScanner::scanningBody):
        (WebCore::LegacyPreloadScanner::write):
        (WebCore::LegacyPreloadScanner::clearLastCharacters):
        (WebCore::LegacyPreloadScanner::rememberCharacter):
        (WebCore::LegacyPreloadScanner::lastCharactersMatch):
        (WebCore::LegacyPreloadScanner::consumeEntity):
        (WebCore::LegacyPreloadScanner::tokenize):
        (WebCore::LegacyPreloadScanner::processAttribute):
        (WebCore::LegacyPreloadScanner::emitCharacter):
        (WebCore::LegacyPreloadScanner::tokenizeCSS):
        (WebCore::LegacyPreloadScanner::emitTag):
        (WebCore::LegacyPreloadScanner::emitCSSRule):
        * html/LegacyPreloadScanner.h: Copied from WebCore/html/PreloadScanner.h.
        * html/PreloadScanner.cpp: Removed.
        * html/PreloadScanner.h: Removed.
        * page/XSSAuditor.cpp:
        (WebCore::XSSAuditor::decodeHTMLEntities):

2010-06-23  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Yet more HTML5 => HTML renames
        https://bugs.webkit.org/show_bug.cgi?id=41051

        This patch renames HTML5DocumentParser to HTMLDocumentParser and
        HTML5TreeBuilder to HTMLTreeBuilder.  There was some discussion about
        whether to use the name HTMLTreeBuilder or HTMLTreeConstructor, but
        tree builder seems to be the dominate name in other implementations.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/DocumentFragment.cpp:
        (WebCore::DocumentFragment::parseHTML):
        * html/HTML5DocumentParser.cpp: Removed.
        * html/HTML5DocumentParser.h: Removed.
        * html/HTML5PreloadScanner.cpp:
        (WebCore::HTML5PreloadScanner::scan):
        (WebCore::HTML5PreloadScanner::processToken):
        * html/HTML5TreeBuilder.cpp: Removed.
        * html/HTML5TreeBuilder.h: Removed.
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::createParser):
        * html/HTMLDocumentParser.cpp: Copied from WebCore/html/HTML5DocumentParser.cpp.
        (WebCore::HTMLDocumentParser::HTMLDocumentParser):
        (WebCore::HTMLDocumentParser::~HTMLDocumentParser):
        (WebCore::HTMLDocumentParser::begin):
        (WebCore::HTMLDocumentParser::stopParsing):
        (WebCore::HTMLDocumentParser::processingData):
        (WebCore::HTMLDocumentParser::pumpTokenizerIfPossible):
        (WebCore::HTMLDocumentParser::isScheduledForResume):
        (WebCore::HTMLDocumentParser::resumeParsingAfterYield):
        (WebCore::HTMLDocumentParser::runScriptsForPausedTreeConstructor):
        (WebCore::HTMLDocumentParser::pumpTokenizer):
        (WebCore::HTMLDocumentParser::willPumpLexer):
        (WebCore::HTMLDocumentParser::didPumpLexer):
        (WebCore::HTMLDocumentParser::write):
        (WebCore::HTMLDocumentParser::end):
        (WebCore::HTMLDocumentParser::attemptToEnd):
        (WebCore::HTMLDocumentParser::endIfDelayed):
        (WebCore::HTMLDocumentParser::finish):
        (WebCore::HTMLDocumentParser::finishWasCalled):
        (WebCore::HTMLDocumentParser::executingScript):
        (WebCore::HTMLDocumentParser::inScriptExecution):
        (WebCore::HTMLDocumentParser::lineNumber):
        (WebCore::HTMLDocumentParser::columnNumber):
        (WebCore::HTMLDocumentParser::htmlTreeConstructor):
        (WebCore::HTMLDocumentParser::isWaitingForScripts):
        (WebCore::HTMLDocumentParser::resumeParsingAfterScriptExecution):
        (WebCore::HTMLDocumentParser::watchForLoad):
        (WebCore::HTMLDocumentParser::stopWatchingForLoad):
        (WebCore::HTMLDocumentParser::shouldLoadExternalScriptFromSrc):
        (WebCore::HTMLDocumentParser::notifyFinished):
        (WebCore::HTMLDocumentParser::executeScriptsWaitingForStylesheets):
        (WebCore::HTMLDocumentParser::script):
        * html/HTMLDocumentParser.h: Copied from WebCore/html/HTML5DocumentParser.h.
        * html/HTMLParserScheduler.cpp:
        (WebCore::HTMLParserScheduler::HTMLParserScheduler):
        * html/HTMLParserScheduler.h:
        * html/HTMLTreeBuilder.cpp: Copied from WebCore/html/HTML5TreeBuilder.cpp.
        (WebCore::HTMLTreeBuilder::HTMLTreeBuilder):
        (WebCore::HTMLTreeBuilder::~HTMLTreeBuilder):
        (WebCore::HTMLTreeBuilder::handleScriptStartTag):
        (WebCore::HTMLTreeBuilder::handleScriptEndTag):
        (WebCore::HTMLTreeBuilder::takeScriptToProcess):
        (WebCore::HTMLTreeBuilder::adjustedLexerState):
        (WebCore::HTMLTreeBuilder::passTokenToLegacyParser):
        (WebCore::HTMLTreeBuilder::constructTreeFromToken):
        (WebCore::HTMLTreeBuilder::processToken):
        (WebCore::HTMLTreeBuilder::finished):
        (WebCore::HTMLTreeBuilder::isScriptingFlagEnabled):
        * html/HTMLTreeBuilder.h: Copied from WebCore/html/HTML5TreeBuilder.h.

2010-06-23  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        More HTML5 => HTML renames
        https://bugs.webkit.org/show_bug.cgi?id=41049

        This patch renames HTML5ScriptRunner, HTML5ScriptRunnerHost, and
        HTML5Token to remove the "5" from their names.  These clases aren't
        specific to HTML5 and will be used going forward.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/CSSPreloadScanner.cpp:
        (WebCore::CSSPreloadScanner::scan):
        * html/CSSPreloadScanner.h:
        * html/HTML5DocumentParser.cpp:
        (WebCore::HTML5DocumentParser::HTML5DocumentParser):
        (WebCore::HTML5DocumentParser::notifyFinished):
        * html/HTML5DocumentParser.h:
        * html/HTML5PreloadScanner.cpp:
        (WebCore::HTMLNames::PreloadTask::PreloadTask):
        (WebCore::HTMLNames::PreloadTask::processAttributes):
        (WebCore::HTML5PreloadScanner::processToken):
        * html/HTML5PreloadScanner.h:
        * html/HTML5ScriptRunner.cpp: Removed.
        * html/HTML5ScriptRunner.h: Removed.
        * html/HTML5ScriptRunnerHost.h: Removed.
        * html/HTML5Token.h: Removed.
        * html/HTML5TreeBuilder.cpp:
        (WebCore::convertToOldStyle):
        (WebCore::HTML5TreeBuilder::handleScriptEndTag):
        (WebCore::HTML5TreeBuilder::passTokenToLegacyParser):
        (WebCore::HTML5TreeBuilder::constructTreeFromToken):
        (WebCore::HTML5TreeBuilder::processToken):
        * html/HTML5TreeBuilder.h:
        * html/HTMLScriptRunner.cpp: Copied from WebCore/html/HTML5ScriptRunner.cpp.
        (WebCore::HTMLScriptRunner::HTMLScriptRunner):
        (WebCore::HTMLScriptRunner::~HTMLScriptRunner):
        (WebCore::HTMLScriptRunner::sourceFromPendingScript):
        (WebCore::HTMLScriptRunner::isPendingScriptReady):
        (WebCore::HTMLScriptRunner::executePendingScript):
        (WebCore::HTMLScriptRunner::executeScript):
        (WebCore::HTMLScriptRunner::hasScriptsWaitingForLoad):
        (WebCore::HTMLScriptRunner::watchForLoad):
        (WebCore::HTMLScriptRunner::stopWatchingForLoad):
        (WebCore::HTMLScriptRunner::execute):
        (WebCore::HTMLScriptRunner::haveParsingBlockingScript):
        (WebCore::HTMLScriptRunner::executeParsingBlockingScripts):
        (WebCore::HTMLScriptRunner::executeScriptsWaitingForLoad):
        (WebCore::HTMLScriptRunner::executeScriptsWaitingForStylesheets):
        (WebCore::HTMLScriptRunner::requestScript):
        (WebCore::HTMLScriptRunner::runScript):
        * html/HTMLScriptRunner.h: Copied from WebCore/html/HTML5ScriptRunner.h.
        * html/HTMLScriptRunnerHost.h: Copied from WebCore/html/HTML5ScriptRunnerHost.h.
        (WebCore::HTMLScriptRunnerHost::~HTMLScriptRunnerHost):
        * html/HTMLToken.h: Copied from WebCore/html/HTML5Token.h.
        (WebCore::HTMLToken::HTMLToken):
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::nextToken):
        (WebCore::HTMLTokenizer::emitCharacter):
        (WebCore::HTMLTokenizer::emitCurrentToken):
        (WebCore::HTMLTokenizer::shouldEmitBufferedCharacterToken):
        * html/HTMLTokenizer.h:

2010-06-23  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Rename HTML5EntityParser to HTMLEntityParser
        https://bugs.webkit.org/show_bug.cgi?id=41048

        Mostly the result of do-webcore-rename, but I tweaked the header guard
        and the name of the free function.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTML5EntityParser.cpp: Removed.
        * html/HTML5EntityParser.h: Removed.
        * html/HTMLEntityParser.cpp: Copied from WebCore/html/HTML5EntityParser.cpp.
        (WebCore::consumeHTMLEntity):
        * html/HTMLEntityParser.h: Copied from WebCore/html/HTML5EntityParser.h.
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::processEntity):
        (WebCore::HTMLTokenizer::nextToken):

2010-06-22  Yuta Kitamura  <yutak@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Add a new class that stores information about WebSocket handshake response.

        In the future, instances of the new class will be passed to the Web Inspector
        so that it will be able to display information about WebSocket handshake
        response.

        WebSocket: Add WebSocketHandshakeResponse
        https://bugs.webkit.org/show_bug.cgi?id=38728

        Test: websocket/tests/handshake-fail-by-no-cr.html

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * websockets/WebSocketHandshake.cpp:
        (WebCore::trimConsoleMessage):
        (WebCore::WebSocketHandshake::readServerHandshake):
        (WebCore::WebSocketHandshake::serverHandshakeResponse):
        (WebCore::WebSocketHandshake::readStatusLine): Moved from extractResponseCode.
        Add more error checks and make error messages more descriptive.
        (WebCore::WebSocketHandshake::readHTTPHeaders):
        (WebCore::WebSocketHandshake::processHeaders):
        * websockets/WebSocketHandshake.h:
        * websockets/WebSocketHandshakeResponse.cpp: Added.
        (WebCore::WebSocketHandshakeResponse::ChallengeResponse::ChallengeResponse):
        (WebCore::WebSocketHandshakeResponse::ChallengeResponse::set):
        (WebCore::WebSocketHandshakeResponse::WebSocketHandshakeResponse):
        (WebCore::WebSocketHandshakeResponse::~WebSocketHandshakeResponse):
        (WebCore::WebSocketHandshakeResponse::statusCode):
        (WebCore::WebSocketHandshakeResponse::setStatusCode):
        (WebCore::WebSocketHandshakeResponse::statusText):
        (WebCore::WebSocketHandshakeResponse::setStatusText):
        (WebCore::WebSocketHandshakeResponse::headerFields):
        (WebCore::WebSocketHandshakeResponse::addHeaderField):
        (WebCore::WebSocketHandshakeResponse::clearHeaderFields):
        (WebCore::WebSocketHandshakeResponse::challengeResponse):
        (WebCore::WebSocketHandshakeResponse::setChallengeResponse):
        * websockets/WebSocketHandshakeResponse.h: Added.

2010-06-23  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Shinichiro Hamaji.

        Implement page format data programming interface.
        The final goal is to implement CSS Paged Media Module Level 3 (http://dev.w3.org/csswg/css3-page/).
        To begin with, this change adds methods to know:
        - if page box is visible,
        - the page area rectangle, and
        - preferred page size.

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

        Test: printing/page-format-data.html

        * WebCore.base.exp:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseSizeParameter):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):
        (WebCore::CSSStyleSelector::applyPageSizeProperty):
        (WebCore::CSSStyleSelector::pageSizeFromName):
        (WebCore::CSSStyleSelector::mmLength):
        (WebCore::CSSStyleSelector::inchLength):
        * css/CSSStyleSelector.h:
        * css/html.css:
        (@page):
        * dom/Document.cpp:
        (WebCore::Document::isPageBoxVisible):
        (WebCore::Document::pageAreaRectInPixels):
        (WebCore::Document::preferredPageSizeInPixels):
        * dom/Document.h:
        * page/PrintContext.cpp:
        (WebCore::PrintContext::isPageBoxVisible):
        (WebCore::PrintContext::pageAreaRectInPixels):
        (WebCore::PrintContext::preferredPageSizeInPixels):
        * page/PrintContext.h:
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::pageSize):
        (WebCore::InheritedFlags::setPageSize):
        * rendering/style/StyleRareNonInheritedData.h:

2010-06-23  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Rename lexer and m_lexer to tokenizer and m_tokenizer, respectively
        https://bugs.webkit.org/show_bug.cgi?id=41046

        This is a follow up to the recent HTML5Lexer => HTMLTokenizer rename.

        * html/HTML5DocumentParser.cpp:
        (WebCore::HTML5DocumentParser::HTML5DocumentParser):
        (WebCore::HTML5DocumentParser::begin):
        (WebCore::HTML5DocumentParser::pumpLexer):
        (WebCore::HTML5DocumentParser::willPumpLexer):
        (WebCore::HTML5DocumentParser::didPumpLexer):
        (WebCore::HTML5DocumentParser::lineNumber):
        (WebCore::HTML5DocumentParser::columnNumber):
        * html/HTML5DocumentParser.h:
        * html/HTML5PreloadScanner.cpp:
        (WebCore::HTML5PreloadScanner::scan):
        (WebCore::HTML5PreloadScanner::processToken):
        * html/HTML5PreloadScanner.h:
        * html/HTML5TreeBuilder.cpp:
        (WebCore::HTML5TreeBuilder::HTML5TreeBuilder):
        (WebCore::HTML5TreeBuilder::handleScriptStartTag):
        (WebCore::HTML5TreeBuilder::passTokenToLegacyParser):
        * html/HTML5TreeBuilder.h:
        * html/HTMLTokenizer.h:
        * html/LegacyHTMLDocumentParser.h:

2010-06-23  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Eric Seidel.

        Reproducible crash in com.apple.WebCore 0x01ed3784 WebCore::RenderLineBoxList::appendLineBox(WebCore::InlineFlowBox*) + 36
        https://bugs.webkit.org/show_bug.cgi?id=40953

        REGRESSION (r58209-58231): Memory corruption with invalid SVG
        https://bugs.webkit.org/show_bug.cgi?id=40173

        Fix several crashes, all related to <foreignObject> and/or invalid SVG documents.
        - Only allow <svg> nodes, as direct children of a <foreignObject>, not any other "partial" SVG content.
        - Assure to create RenderSVGRoot objects for <svg> nodes in <foreignObject>, treat them as "outermost SVG elements".
        - Never allow any partial SVG content to appear in any document. Only <svg> elements are allowed.

        Tests: svg/custom/bug45331.svg
               svg/foreignObject/disallowed-svg-nodes-as-direct-children.svg
               svg/foreignObject/no-crash-with-svg-content-in-html-document.svg
               svg/foreignObject/svg-document-as-direct-child.svg
               svg/foreignObject/svg-document-in-html-document.svg
               svg/foreignObject/text-tref-02-b.svg

        * dom/Element.cpp: Added childShouldCreateRenderer, with ENABLE(SVG) guards.
        (WebCore::Element::childShouldCreateRenderer): Only create a renderer for a SVG child, if we're a SVG element, or if the child is a <svg> element.
        * dom/Element.h: Added childShouldCreateRenderer, with ENABLE(SVG) guards.
        * svg/SVGForeignObjectElement.cpp:
        (WebCore::SVGForeignObjectElement::childShouldCreateRenderer): Disallow arbitary SVG content, only <svg> elements are allowed as direct children of a <foreignObject>
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::isOutermostSVG): Be sure to create RenderSVGRoot objects for <svg> elements inside <foreignObject>

2010-06-22  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Rename HTML5Lexer to HTMLTokenizer
        https://bugs.webkit.org/show_bug.cgi?id=41045

        This might be slightly confusing given that the old class was called
        HTMLTokenizer, but it matches the terminology in the HTML5 spec.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTML5DocumentParser.cpp:
        (WebCore::HTML5DocumentParser::HTML5DocumentParser):
        (WebCore::HTML5DocumentParser::pumpLexer):
        * html/HTML5DocumentParser.h:
        * html/HTML5Lexer.cpp: Removed.
        * html/HTML5Lexer.h: Removed.
        * html/HTML5PreloadScanner.cpp:
        (WebCore::HTML5PreloadScanner::processToken):
        * html/HTML5PreloadScanner.h:
        * html/HTML5TreeBuilder.cpp:
        (WebCore::HTML5TreeBuilder::HTML5TreeBuilder):
        (WebCore::HTML5TreeBuilder::handleScriptStartTag):
        (WebCore::HTML5TreeBuilder::adjustedLexerState):
        * html/HTML5TreeBuilder.h:
        * html/HTMLTokenizer.cpp: Copied from WebCore/html/HTML5Lexer.cpp.
        (WebCore::HTMLNames::isEndTagBufferingState):
        (WebCore::HTMLTokenizer::HTMLTokenizer):
        (WebCore::HTMLTokenizer::~HTMLTokenizer):
        (WebCore::HTMLTokenizer::reset):
        (WebCore::HTMLTokenizer::processEntity):
        (WebCore::HTMLTokenizer::nextToken):
        (WebCore::HTMLTokenizer::temporaryBufferIs):
        (WebCore::HTMLTokenizer::addToPossibleEndTag):
        (WebCore::HTMLTokenizer::isAppropriateEndTag):
        (WebCore::HTMLTokenizer::emitCharacter):
        (WebCore::HTMLTokenizer::emitCodePoint):
        (WebCore::HTMLTokenizer::emitParseError):
        (WebCore::HTMLTokenizer::emitCurrentToken):
        (WebCore::HTMLTokenizer::shouldEmitBufferedCharacterToken):
        * html/HTMLTokenizer.h: Copied from WebCore/html/HTML5Lexer.h.

2010-06-22  Simon Hausmann  <simon.hausmann@nokia.com>

        Unreviewed Qt/Symbian build fix.

        Fix "make clean" to not try to execute clean commands for
        the extra targets we use to simulate "make install".

        * WebCore.pro: Use no_clean in CONFIG of extra compilers.

2010-06-22  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Run clean-header-guards to fix some header guards
        https://bugs.webkit.org/show_bug.cgi?id=41044

        No functional changes, thus no tests.

        This entire change was generated by running
        clean-header-guards, and then reverting changes
        to files which shouldn't be changed.  Those which
        are left all should be updated.

        Some of these changes are just fixing 755 permissions
        to be 644, since it seems various files have the wrong
        execute bit which don't need it.  clean-header-guards
        made those (welcome) permission fixes unintentionally.

        * bindings/v8/custom/V8HTMLAudioElementConstructor.h:
        * bindings/v8/custom/V8HTMLImageElementConstructor.h:
        * bindings/v8/custom/V8HTMLOptionElementConstructor.h:
        * dom/Touch.h:
        * dom/TouchList.h:
        * dom/XMLDocumentParser.h:
        * dom/XMLDocumentParserScope.h:
        * html/HTML5DocumentParser.h:
        * html/LegacyHTMLTreeConstructor.h:
        * loader/CrossOriginPreflightResultCache.h:
        * page/OriginAccessEntry.h:
        * page/win/FrameWin.h:
        * platform/ThreadTimers.h:
        * platform/chromium/KeyboardCodes.h:
        * platform/graphics/chromium/FontPlatformDataChromiumWin.h:
        * platform/graphics/chromium/FontUtilsChromiumWin.h:
        * platform/graphics/filters/FEBlend.h:
        * platform/graphics/filters/FEColorMatrix.h:
        * platform/graphics/filters/FEComponentTransfer.h:
        * platform/graphics/filters/FEComposite.h:
        * platform/graphics/gstreamer/DataSourceGStreamer.h:
        * platform/graphics/gstreamer/VideoSinkGStreamer.h:
         - I checked, this crazy define was not referenced
           anywhere else.  It's safe to change the name. :)
        * platform/graphics/haiku/FontPlatformData.h:
        * platform/graphics/qt/FontCustomPlatformData.h:
        * platform/graphics/skia/SkiaFontWin.h:
        * platform/graphics/win/GraphicsLayerCACF.h:
        * platform/graphics/win/QTMovieWinTimer.h:
        * platform/graphics/win/RefCountedGDIHandle.h:
        * platform/graphics/win/WebLayer.h:
        * platform/graphics/win/WebTiledLayer.h:
        * platform/graphics/wince/FontPlatformData.h:
        * platform/graphics/wx/FontPlatformData.h:
        * platform/network/CredentialStorage.h:
        * platform/network/cf/FormDataStreamCFNet.h:
        * platform/network/curl/FormDataStreamCurl.h:
        * platform/network/qt/DnsPrefetchHelper.h:
        * platform/network/qt/QNetworkReplyHandler.h:
        * platform/win/PlatformScrollBar.h:
        * plugins/PluginDatabase.h:
        * plugins/PluginPackage.h:
        * plugins/PluginStream.h:
        * plugins/qt/PluginContainerQt.h:
        * plugins/symbian/npinterface.h:
        * rendering/RenderSelectionInfo.h:
        * rendering/SVGRenderSupport.h:
        * storage/IDBObjectStoreImpl.h:
        * svg/animation/SMILTimeContainer.h:
        * wml/WMLErrorHandling.h:

2010-06-22  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Rename HTMLDocumentParser to LegacyHTMLDocumentParser
        https://bugs.webkit.org/show_bug.cgi?id=41043

        As requested by Darin Adler.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::checkLoaded):
        * dom/Document.cpp:
        (WebCore::Document::write):
        * dom/DocumentFragment.cpp:
        * dom/DocumentParser.h:
        (WebCore::DocumentParser::asHTMLDocumentParser):
        * dom/XMLDocumentParserLibxml2.cpp:
        * dom/XMLDocumentParserQt.cpp:
        * html/HTML5Lexer.h:
        (WebCore::HTML5Lexer::columnNumber):
        * html/HTML5TreeBuilder.cpp:
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::createParser):
        * html/HTMLDocumentParser.cpp: Removed.
        * html/HTMLDocumentParser.h: Removed.
        * html/HTMLFormControlElement.cpp:
        * html/HTMLParserScheduler.cpp:
        (WebCore::parserChunkSize):
        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::createParser):
        (WebCore::HTMLViewSourceDocument::addViewSourceToken):
        * html/HTMLViewSourceDocument.h:
        * html/LegacyHTMLDocumentParser.cpp: Copied from WebCore/html/HTMLDocumentParser.cpp.
        (WebCore::LegacyHTMLDocumentParser::LegacyHTMLDocumentParser):
        (WebCore::LegacyHTMLDocumentParser::reset):
        (WebCore::LegacyHTMLDocumentParser::begin):
        (WebCore::LegacyHTMLDocumentParser::setForceSynchronous):
        (WebCore::LegacyHTMLDocumentParser::processListing):
        (WebCore::LegacyHTMLDocumentParser::parseNonHTMLText):
        (WebCore::LegacyHTMLDocumentParser::scriptHandler):
        (WebCore::LegacyHTMLDocumentParser::scriptExecution):
        (WebCore::LegacyHTMLDocumentParser::parseComment):
        (WebCore::LegacyHTMLDocumentParser::parseServer):
        (WebCore::LegacyHTMLDocumentParser::parseProcessingInstruction):
        (WebCore::LegacyHTMLDocumentParser::parseText):
        (WebCore::LegacyHTMLDocumentParser::parseEntity):
        (WebCore::LegacyHTMLDocumentParser::parseDoctype):
        (WebCore::LegacyHTMLDocumentParser::parseTag):
        (WebCore::LegacyHTMLDocumentParser::continueProcessing):
        (WebCore::LegacyHTMLDocumentParser::advance):
        (WebCore::LegacyHTMLDocumentParser::willWriteHTML):
        (WebCore::LegacyHTMLDocumentParser::didWriteHTML):
        (WebCore::LegacyHTMLDocumentParser::write):
        (WebCore::LegacyHTMLDocumentParser::stopParsing):
        (WebCore::LegacyHTMLDocumentParser::processingData):
        (WebCore::LegacyHTMLDocumentParser::timerFired):
        (WebCore::LegacyHTMLDocumentParser::end):
        (WebCore::LegacyHTMLDocumentParser::finish):
        (WebCore::LegacyHTMLDocumentParser::finishWasCalled):
        (WebCore::LegacyHTMLDocumentParser::processToken):
        (WebCore::LegacyHTMLDocumentParser::processDoctypeToken):
        (WebCore::LegacyHTMLDocumentParser::~LegacyHTMLDocumentParser):
        (WebCore::LegacyHTMLDocumentParser::enlargeBuffer):
        (WebCore::LegacyHTMLDocumentParser::enlargeScriptBuffer):
        (WebCore::LegacyHTMLDocumentParser::executeScriptsWaitingForStylesheets):
        (WebCore::LegacyHTMLDocumentParser::notifyFinished):
        (WebCore::LegacyHTMLDocumentParser::executeExternalScriptsIfReady):
        (WebCore::LegacyHTMLDocumentParser::executeExternalScriptsTimerFired):
        (WebCore::LegacyHTMLDocumentParser::continueExecutingExternalScripts):
        (WebCore::LegacyHTMLDocumentParser::isWaitingForScripts):
        (WebCore::LegacyHTMLDocumentParser::setSrc):
        (WebCore::parseLegacyHTMLDocumentFragment):
        * html/LegacyHTMLDocumentParser.h: Copied from WebCore/html/HTMLDocumentParser.h.
        (WebCore::LegacyHTMLDocumentParser::asHTMLDocumentParser):
        * html/LegacyHTMLTreeConstructor.cpp:
        (WebCore::LegacyHTMLTreeConstructor::reportErrorToConsole):
        * html/LegacyHTMLTreeConstructor.h:
        * loader/FTPDirectoryDocument.cpp:
        (WebCore::FTPDirectoryDocumentParser::FTPDirectoryDocumentParser):
        (WebCore::FTPDirectoryDocumentParser::loadDocumentTemplate):
        (WebCore::FTPDirectoryDocumentParser::finish):
        * page/XSSAuditor.h:

2010-06-22  Shinichiro Hamaji  <hamaji@chromium.org>

        Unreviewed attempt to fix the windows build.

        Split out HTML5DocumentParser yield/resume logic into a separate class
        https://bugs.webkit.org/show_bug.cgi?id=41018

        * WebCore.vcproj/WebCore.vcproj:

2010-06-22  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Split out HTML5DocumentParser yield/resume logic into a separate class
        https://bugs.webkit.org/show_bug.cgi?id=41018

        The HTML5DocumentParser is just the coordinator, and shouldn't have
        any real parsing logic of his own.  Continuing along that path, I'm
        moving the when-to-yield/resume logic out into a separate class.

        I could have create a new HTMLParserSchedulerHost virtual interface
        to allow the HTMLParserScheduler to talk back to the
        HTML5DocumentParser, but instead I just exposed the one method it
        needs (resumeParsing()) as a public method.  Since no code besides
        HTMLDocument (and DocumentFrament) ever should know about the
        HTML5DocumentParser DocumentParser subclass, no class should ever
        see the resumeParsing() method anyway.

        Most of this change is just moving code from HTML5DocumentParser
        to the new HTMLParserScheduler.

        Some of this change is wrapping previous direct access to
        m_continueNextChunkTimer.isActive() with isScheduledForResume().

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTML5DocumentParser.cpp:
        (WebCore::HTML5DocumentParser::HTML5DocumentParser):
        (WebCore::HTML5DocumentParser::stopParsing):
        (WebCore::HTML5DocumentParser::processingData):
        (WebCore::HTML5DocumentParser::pumpLexerIfPossible):
        (WebCore::HTML5DocumentParser::isScheduledForResume):
        (WebCore::HTML5DocumentParser::resumeParsing):
        (WebCore::HTML5DocumentParser::pumpLexer):
        (WebCore::HTML5DocumentParser::end):
        (WebCore::HTML5DocumentParser::attemptToEnd):
        (WebCore::HTML5DocumentParser::endIfDelayed):
        * html/HTML5DocumentParser.h:
        (WebCore::HTML5DocumentParser::document):
         - Exposed for HTMLParserScheduler.
        * html/HTMLParserScheduler.cpp: Added.
        (WebCore::parserTimeLimit): Moved from HTML5DocumentParser.
        (WebCore::parserChunkSize): ditto.
        (WebCore::HTMLParserScheduler::HTMLParserScheduler):
        (WebCore::HTMLParserScheduler::~HTMLParserScheduler):
        (WebCore::isLayoutTimerActive):
        (WebCore::HTMLParserScheduler::continueNextChunkTimerFired):
         - Moved from HTML5DocumentParser.
        * html/HTMLParserScheduler.h: Added.
        (WebCore::HTMLParserScheduler::PumpSession::PumpSession):
         - Moved from HTML5DocumentParser.
        (WebCore::HTMLParserScheduler::shouldContinueParsing):
        (WebCore::HTMLParserScheduler::isScheduledForResume):

2010-06-22  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: move nodeByPath from InjectedScript to InspectorBackend.

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

        * inspector/InjectedScriptHost.cpp:
        * inspector/InjectedScriptHost.h:
        * inspector/InjectedScriptHost.idl:
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::pushNodeByPathToFrontend):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::pushNodeByPathToFrontend):
        (WebCore::InspectorDOMAgent::nodeForPath):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::didPushNodeByPathToFrontend):
        * inspector/InspectorFrontend.h:
        * inspector/front-end/DOMAgent.js:
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.setDocument):
        * inspector/front-end/InjectedScript.js:
        * inspector/front-end/InjectedScriptAccess.js:

2010-06-22  David Levin  <levin@chromium.org>

        Reviewed by Alexey Proskuryakov.

        REGRESSION: (r47291): Upload progress events are not fired for simple cross-site XHR.
        https://bugs.webkit.org/show_bug.cgi?id=39029

        Specifically, WebKit should fire upload events if one or more event listeners are
        registered on the XMLHttpRequestUpload object when send is called in an async manner.

        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::createRequest): Allow upload events to be fired when there are
        handlers for them in the cross-origin simple request case.

2010-06-22  Kent Tamura  <tkent@chromium.org>

        Reviewed by Adam Barth.

        Fix uninitialized SubframeLoader::m_containsPlugins
        https://bugs.webkit.org/show_bug.cgi?id=41035

        * loader/SubframeLoader.cpp:
        (WebCore::SubframeLoader::SubframeLoader):
         Initialize m_containsPlugins with false.

2010-06-22  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Adam Barth.

        Add BlobBuilder.idl to expose BlobBuilder interface
        https://bugs.webkit.org/show_bug.cgi?id=40593

        (Resubmitting with the correct file set.)

        BlobBuilder is defined in FileAPI's FileWriter spec.
        (http://dev.w3.org/2009/dap/file-system/file-writer.html)

        Also removes the ENABLE_FILE_WRITER ifdef guard for BlobBuilder.

        Tests: http/tests/local/blob/send-data-blob.html
               http/tests/local/blob/send-hybrid-blob.html
               http/tests/local/blob/send-sliced-data-blob.html

        * Android.derived.jscbindings.mk:
        * Android.derived.v8bindings.mk:
        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/BlobBuilder.cpp:
        (WebCore::BlobBuilder::append):
        * html/BlobBuilder.h:
        * html/BlobBuilder.idl: Added.
        * page/DOMWindow.idl:

2010-06-22  Kent Tamura  <tkent@chromium.org>

        Unreviewed, build fix for r61648.

        * platform/graphics/GraphicsContext3D.h:

2010-06-22  Vangelis Kokkevis  <vangelis@chromium.org>

        Reviewed by Kent Tamura.

        Define GraphicsContext3D::platformLayer() for all remaining (non PLATFORM(MAC))
        ports to get RenderLayerBacking.cpp compiling again.
        https://bugs.webkit.org/show_bug.cgi?id=41026

        * platform/graphics/GraphicsContext3D.h:
        (WebCore::GraphicsContext3D::platformLayer):

2010-06-22  Eric Seidel  <eric@webkit.org>

        Unreviewed.  Rolling out http://trac.webkit.org/changeset/61638
        made a few tests crash.

        Make PendingScript hold a CachedResourceClient open for its lifetime
        https://bugs.webkit.org/show_bug.cgi?id=40968

        * html/HTML5DocumentParser.cpp:
        (WebCore::HTML5DocumentParser::watchForLoad):
        (WebCore::HTML5DocumentParser::notifyFinished):
        * html/HTML5ScriptRunner.cpp:
        (WebCore::HTML5ScriptRunner::~HTML5ScriptRunner):
        (WebCore::HTML5ScriptRunner::sourceFromPendingScript):
        (WebCore::HTML5ScriptRunner::isPendingScriptReady):
        (WebCore::HTML5ScriptRunner::executePendingScript):
        (WebCore::HTML5ScriptRunner::hasScriptsWaitingForLoad):
        (WebCore::HTML5ScriptRunner::watchForLoad):
        (WebCore::HTML5ScriptRunner::stopWatchingForLoad):
        (WebCore::HTML5ScriptRunner::executeScriptsWaitingForLoad):
        (WebCore::HTML5ScriptRunner::executeScriptsWaitingForStylesheets):
        (WebCore::HTML5ScriptRunner::requestScript):
        * html/HTML5ScriptRunner.h:
        (WebCore::HTML5ScriptRunner::PendingScript::):
        (WebCore::HTML5ScriptRunner::PendingScript::PendingScript):
        (WebCore::HTML5ScriptRunner::PendingScript::watchingForLoad):
        * html/HTML5ScriptRunnerHost.h:

2010-06-22  Adele Peterson  <adele@apple.com>

        Reviewed by Darin Adler.

        Fix for Crash when the renderer for the button in <input type="number"> goes away during event handling
        https://bugs.webkit.org/show_bug.cgi?id=41013

        Test: fast/forms/input-number-crash.html

        * rendering/TextControlInnerElements.cpp: (WebCore::SpinButtonElement::defaultEventHandler):
        Nil check the RenderBox since its possible the renderer has gone away during event handling.

2010-06-22  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Eric Seidel.

        Pull script line number from DocumentParser instead of pushing it to ScriptController
        https://bugs.webkit.org/show_bug.cgi?id=40649

        This approach is cleaner and improves WebCore/benchmarks/parser/html-parser.html by ~2%.

        Tests: fast/js/script-line-number.html

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::ScriptController):
        (WebCore::ScriptController::eventHandlerLineNumber):
        * bindings/js/ScriptController.h:
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::eventHandlerLineNumber):
        (WebCore::ScriptController::eventHandlerColumnNumber):
        * bindings/v8/ScriptController.h:
        * bindings/v8/ScriptEventListener.cpp:
        (WebCore::createAttributeEventListener):
        * bindings/v8/V8Proxy.h:
        * dom/XMLDocumentParserLibxml2.cpp:
        (WebCore::XMLDocumentParser::startElementNs):
        * html/HTML5DocumentParser.cpp:
        (WebCore::HTML5DocumentParser::pumpLexer):
        * html/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::processToken):

2010-06-22  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Eric Seidel.

        Make PendingScript hold a CachedResourceClient open for its lifetime
        https://bugs.webkit.org/show_bug.cgi?id=40968

        This replaces the mechanism introduced in r61374 with a simpler
        approach from preventing unexpected purges; always keep a client open.
        This will approach will allow deferred scripts to add a client after
        the resource may have already been loaded without having to worry about
        the buffer being purged in the meantime.

        No new tests because making a CachedResource purge itself is not
        testable from a LayoutTest.

        * html/HTML5DocumentParser.cpp:
        (WebCore::HTML5DocumentParser::watchForLoad):
        (WebCore::HTML5DocumentParser::notifyFinished):
        * html/HTML5ScriptRunner.cpp:
        (WebCore::HTML5ScriptRunner::~HTML5ScriptRunner):
        (WebCore::HTML5ScriptRunner::sourceFromPendingScript):
        (WebCore::HTML5ScriptRunner::isPendingScriptReady):
        (WebCore::HTML5ScriptRunner::executePendingScript):
        (WebCore::HTML5ScriptRunner::watchForLoad):
        (WebCore::HTML5ScriptRunner::stopWatchingForLoad):
        (WebCore::HTML5ScriptRunner::executeScriptsWaitingForLoad):
        (WebCore::HTML5ScriptRunner::executeScriptsWaitingForStylesheets):
        (WebCore::HTML5ScriptRunner::requestScript):
        * html/HTML5ScriptRunner.h:
        (WebCore::HTML5ScriptRunner::PendingScript::PendingScript):
        (WebCore::HTML5ScriptRunner::PendingScript::~PendingScript):
        (WebCore::HTML5ScriptRunner::PendingScript::setCachedScript):
        (WebCore::HTML5ScriptRunner::PendingScript::cachedScript):
        (WebCore::HTML5ScriptRunner::PendingScript::notifyFinished):
        * html/HTML5ScriptRunnerHost.h:

2010-06-22  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Fragment parsing needs to go through the HTML5 Parser code path
        https://bugs.webkit.org/show_bug.cgi?id=40645

        Added a new HTML5DocumentParser::parseHTMLDocumentFragment
        codepath which optionally calls through to the old fragment
        parsing path, now renamed parseLegacyHTMLDocumentFragment.

        * dom/Element.cpp:
        (WebCore::Element::createContextualFragment):
         - Use document()->createDocumentFragment() instead
           of DocumentFragment::create() to match other callers
           (and not depend on DocumentFragment.h).
         - Update call to parseHTMLDocumentFragment to use the new
           HTML5 parser codepath.
        * dom/MappedAttributeEntry.h:
         - Add a FIXME about this horrible enum placement.
           Sadly this will cause a world-rebuild for everyone.
        * html/HTML5DocumentParser.cpp:
        (WebCore::HTML5DocumentParser::HTML5DocumentParser):
        (WebCore::HTML5DocumentParser::runScriptsForPausedTreeConstructor):
         - The main pumpLexer function has gotten to large.  Move the script
           running logic into this new function.
         - Handle the case where we have no m_scriptRunner (fragment case).
        (WebCore::HTML5DocumentParser::pumpLexer):
         - Use new runScriptsForPausedTreeConstructor().
        (WebCore::HTML5DocumentParser::executingScript):
        (WebCore::HTML5DocumentParser::inScriptExecution):
         - New function to handle the case where m_scriptRunner is null.
        (WebCore::HTML5DocumentParser::resumeParsingAfterScriptExecution):
         - Use inScriptExecution() instead of m_scriptRunner->inScriptExecution().
        (WebCore::HTML5DocumentParser::executeScript): ditto.
        (WebCore::HTML5DocumentParser::notifyFinished): ditto.
        (WebCore::HTML5DocumentParser::executeScriptsWaitingForStylesheets): ditto.
        (WebCore::shouldUseLegacyParser):
         - Helper function to check the html5ParserEnabled() setting.
        (WebCore::HTML5DocumentParser::parseHTMLDocumentFragment):
         - Run HTML5DocumentParser in fragment mode, or optionally run
           the legacy parser if !html5ParserEnabled().
        * html/HTML5DocumentParser.h:
        * html/HTML5TreeBuilder.cpp:
        (WebCore::HTML5TreeBuilder::HTML5TreeBuilder):
        (WebCore::HTML5TreeBuilder::passTokenToLegacyParser):
         - Implement the FragmentScriptingNotAllowed hack for platform/Pasteboard.
        * html/HTML5TreeBuilder.h:
        * html/HTMLDocumentParser.cpp:
        (WebCore::parseLegacyHTMLDocumentFragment):
         - Renamed from parseHTMLDocumentFragment
        * html/HTMLDocumentParser.h:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::insertAdjacentHTML):
         - Call HTML5DocumentParser::parseHTMLDocumentFragment.
        * platform/mac/PasteboardMac.mm:
        (WebCore::Pasteboard::documentFragment): ditto.
        * xml/XSLTProcessor.cpp:
        (WebCore::createFragmentFromSource): ditto.

2010-06-22  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=40643
        
        Final phase of moving ownership of WebGLLayer to GraphicsContext3D.
        As it turns out, I still have to have a separate CGLContextObj for
        rendering because Core Animation composites in a separate thread,
        so we need to disconnect WebGL rendering from CA compositing. But
        this change is still worthwhile because it reduces dependencies
        and makes it easier to port WebGL to other platforms.
        
        No new tests since this is just restructuring and the current tests
        are all still valid and do a sufficient test of WebGL functionality.

        * platform/graphics/GraphicsContext3D.h:
        (WebCore::GraphicsContext3D::platformLayer):
        * platform/graphics/GraphicsLayer.h:
        (WebCore::GraphicsLayer::setContentsToWebGL):
        (WebCore::GraphicsLayer::setWebGLNeedsDisplay):
        * platform/graphics/mac/GraphicsContext3DMac.mm: Add creation of WebGLLayer
        (WebCore::GraphicsContext3D::GraphicsContext3D):
        * platform/graphics/mac/GraphicsLayerCA.h:
        (WebCore::GraphicsLayerCA::):
        * platform/graphics/mac/GraphicsLayerCA.mm: Handle setting of WebGLLayer as content the same as for MediaLayer. Also changed WebGL related names for clarity
        (WebCore::GraphicsLayerCA::GraphicsLayerCA):
        (WebCore::GraphicsLayerCA::commitLayerChangesBeforeSublayers):
        (WebCore::GraphicsLayerCA::updateContentsWebGLLayer):
        (WebCore::GraphicsLayerCA::setContentsToWebGL):
        (WebCore::GraphicsLayerCA::setWebGLNeedsDisplay):
        * platform/graphics/mac/WebGLLayer.h:
        * platform/graphics/mac/WebGLLayer.mm: Got rid of storage for context and texture, now just store GraphicsContext3D and get them from there when needed
        (-[WebGLLayer copyCGLPixelFormatForDisplayMask:]):
        (-[WebGLLayer copyCGLContextForPixelFormat:]):
        (-[WebGLLayer drawInCGLContext:pixelFormat:forLayerTime:displayTime:]):
        (-[WebGLLayer copyImageSnapshotWithColorSpace:]):
        * rendering/RenderLayerBacking.cpp: Changed init of WebGL contentsLayer to pass WebGLLayer rather than GraphicsContext3D
        (WebCore::RenderLayerBacking::updateGraphicsLayerConfiguration):
        (WebCore::RenderLayerBacking::rendererContentChanged):

2010-06-22  Darin Adler  <darin@apple.com>

        Reviewed by Dave Hyatt.

        * html/HTMLTableCellElement.cpp:
        (WebCore::HTMLTableCellElement::parseMappedAttribute): Removed incorrect FIXME comments.

2010-06-22  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        <rdar://problem/8119403> REGRESSION (r61548): PLT is almost 1.5% slower, Google page cycler slower
        https://bugs.webkit.org/show_bug.cgi?id=41012

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::computeHorizontalPositionsForLine): Removed a redundant statement that was
        left over in the original patch and resulted in double the calls to RenderText::width() here.
        (WebCore::RenderBlock::findNextLineBreak): Changed the order of evaluating conditions for a
        potential speedup.

2010-06-22  Darin Adler  <darin@apple.com>

        Reviewed by Alexey Proskuryakov.

        Alexey asked me to take out the autorelease pools because he believes
        that there is no code that should be running using Objective-C
        autorelease. Most likely, the code that is triggering these stderr
        messages is incorrect, and that bug should be fixed instead.

        * workers/WorkerRunLoop.cpp:
        (WebCore::WorkerRunLoop::run): Roll out use of AutodrainedPool.

2010-06-22  Darin Adler  <darin@apple.com>

        Reviewed by Brady Eidson.

        Fix autorelease problem seen when running worker regression tests.
        We were seeing logs to stderr saying autorelease was used without
        an autorelease pool being set up.

        * workers/WorkerRunLoop.cpp:
        (WebCore::WorkerRunLoop::run): Use an AutodrainedPool as the file
        thread, icon database, and database thread do. No effect on platforms
        other than Mac.

2010-06-22  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        AX: If an element that is a continuation is removed, its parent tree is not notified appropriately that their children have changed
        https://bugs.webkit.org/show_bug.cgi?id=41000

        Test: accessibility/removed-continuation-element-causes-crash.html

        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::updateChildrenIfNecessary):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::childrenChanged):
        (WebCore::AccessibilityRenderObject::addChildren):
        * accessibility/AccessibilityRenderObject.h:

2010-06-22  Peter Kasting  <pkasting@google.com>

        Reviewed by Adam Barth.

        Override setFailed() in each image decoder to clean up any temporary
        objects.
        https://bugs.webkit.org/show_bug.cgi?id=35411
        
        In a few cases, we need to be careful to avoid deleting objects until
        after they're no longer needed.  These cases usually mean some jumping
        through hoops, to the detriment of code simplicity.

        No layout tests because this does not change the visible output of
        decoding in any way.

        * platform/image-decoders/ImageDecoder.h:
        (WebCore::ImageDecoder::setData):
        * platform/image-decoders/bmp/BMPImageDecoder.cpp:
        (WebCore::BMPImageDecoder::setFailed):
        (WebCore::BMPImageDecoder::decode):
        * platform/image-decoders/bmp/BMPImageDecoder.h:
        * platform/image-decoders/bmp/BMPImageReader.cpp:
        (WebCore::BMPImageReader::decodeBMP):
        (WebCore::BMPImageReader::readInfoHeaderSize):
        (WebCore::BMPImageReader::processInfoHeader):
        (WebCore::BMPImageReader::readInfoHeader):
        (WebCore::BMPImageReader::processBitmasks):
        (WebCore::BMPImageReader::processColorTable):
        (WebCore::BMPImageReader::processRLEData):
        (WebCore::BMPImageReader::processNonRLEData):
        * platform/image-decoders/bmp/BMPImageReader.h:
        (WebCore::BMPImageReader::):
        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::setFailed):
        (WebCore::GIFImageDecoder::decode):
        * platform/image-decoders/gif/GIFImageDecoder.h:
        * platform/image-decoders/ico/ICOImageDecoder.cpp:
        (WebCore::ICOImageDecoder::setFailed):
        (WebCore::ICOImageDecoder::decode):
        * platform/image-decoders/ico/ICOImageDecoder.h:
        * platform/image-decoders/jpeg/JPEGImageDecoder.cpp:
        (WebCore::JPEGImageReader::decode):
        (WebCore::JPEGImageDecoder::setFailed):
        (WebCore::JPEGImageDecoder::decode):
        * platform/image-decoders/jpeg/JPEGImageDecoder.h:
        * platform/image-decoders/png/PNGImageDecoder.cpp:
        (WebCore::PNGImageReader::decode):
        (WebCore::PNGImageDecoder::PNGImageDecoder):
        (WebCore::PNGImageDecoder::setFailed):
        (WebCore::PNGImageDecoder::headerAvailable):
        (WebCore::PNGImageDecoder::decode):
        * platform/image-decoders/png/PNGImageDecoder.h:

2010-06-04  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Remove side effects of form submission and prepare FormDataBuilder for splitting up.
        https://bugs.webkit.org/show_bug.cgi?id=40184

        Refactoring, covered by existing tests.

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::prepareFormSubmission):
            * Changed to use new accessors on FormDataBuilder;
            * Simplified the logic around action URL;
            * Removed form submission side effect of element's enctype property being updated when
                submitting a mailto form;
            * Removed unnecessary updating of action URL for mailto forms.
        (WebCore::HTMLFormElement::submit): Moved action URL check into prepareFormSubmission.
        (WebCore::HTMLFormElement::parseMappedAttribute): Updated to use new methods on FormDataBuilder.
        * html/HTMLFormElement.h: Removed decls for isMailtoForm and dataEncoding methods;
            moved m_target and m_url to FormDataBuilder.
        * platform/network/FormData.cpp:
        (WebCore::FormData::appendDOMFormData): Removed unnecessary instantiation of FormDataBuilder.
        * platform/network/FormDataBuilder.cpp:
        (WebCore::FormDataBuilder::parseAction): Moved from HTMLFormControl.
        * platform/network/FormDataBuilder.h:
        (WebCore::FormDataBuilder::action): Ditto.
        (WebCore::FormDataBuilder::target): Ditto.
        (WebCore::FormDataBuilder::setTarget): Ditto.

2010-06-22  Yuta Kitamura  <yutak@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Fix WebSocketHandshakeRequest so that it fits the new handshake protocol.

        The new WebSocket specification (draft 76 and later) allows a browser to
        send header fields in arbitrary order. Thus we can use a HTTPHeaderMap to
        store header fields instead of Vector of pairs of a field name and
        a field value.

        This patch also does refactoring of WebSocketHandshakeRequest class
        to make it simpler and easier to use.

        Fix WebSocketHandshakeRequest so that it fits the new handshake protocol
        https://bugs.webkit.org/show_bug.cgi?id=39864

        No new tests, because there is no functional change.

        * websockets/WebSocketHandshake.cpp:
        (WebCore::WebSocketHandshake::clientHandshakeRequest):
        * websockets/WebSocketHandshakeRequest.cpp:
        (WebCore::WebSocketHandshakeRequest::Key3::Key3):
        (WebCore::WebSocketHandshakeRequest::Key3::set):
        (WebCore::WebSocketHandshakeRequest::WebSocketHandshakeRequest):
        (WebCore::WebSocketHandshakeRequest::requestMethod):
        (WebCore::WebSocketHandshakeRequest::url):
        (WebCore::WebSocketHandshakeRequest::addHeaderField):
        (WebCore::WebSocketHandshakeRequest::headerFields):
        (WebCore::WebSocketHandshakeRequest::key3):
        (WebCore::WebSocketHandshakeRequest::setKey3):
        * websockets/WebSocketHandshakeRequest.h:

2010-06-20  MORITA Hajime  <morrita@google.com>

        Reviewed by Kent Tamura.

        <meter> should be yellow when  min < value < low < optimum
        https://bugs.webkit.org/show_bug.cgi?id=40824
        
        Fixed a wrong conditional on HTMLMeterElement::gaugeRegion().
        
        * html/HTMLMeterElement.cpp:
        (WebCore::HTMLMeterElement::gaugeRegion):

        Tests: fast/dom/HTMLMeterElement/meter-appearances-capacity.html
               fast/dom/HTMLMeterElement/meter-optimums.html

2010-06-22  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Follow the HTML5 spec more closely w.r.t. when to save the insertion point
        https://bugs.webkit.org/show_bug.cgi?id=40976

        The spec always increments the nesting level and saves the insertion
        point at the same time.  In this patch, we now do those operations
        packaged as a RAII.

        As a side effect, the test case below no longer ASSERTs.  (The output
        is wrong, but we'll get to that next.)

        Test: fast/tokenizer/write-on-load.html

        * html/HTML5ScriptRunner.cpp:
        (WebCore::NestScript::NestScript):
        (WebCore::NestScript::~NestScript):
        (WebCore::HTML5ScriptRunner::executePendingScript):
        (WebCore::HTML5ScriptRunner::executeScript):
        (WebCore::HTML5ScriptRunner::requestScript):
        (WebCore::HTML5ScriptRunner::runScript):
        * html/HTMLInputStream.h:

2010-06-22  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Expose HTMLInputStream to ScriptRunner so that ScriptRunner can save the insertion point itself
        https://bugs.webkit.org/show_bug.cgi?id=40975

        This saves us having to call back into the HTML5DocumentParser each
        time we need to save the insertion point.  This prepares us for another
        place we need to save the insertion point.

        * html/HTML5DocumentParser.cpp:
        * html/HTML5DocumentParser.h:
        (WebCore::HTML5DocumentParser::inputStream):
        * html/HTML5ScriptRunner.cpp:
        (WebCore::HTML5ScriptRunner::executeScript):
        (WebCore::HTML5ScriptRunner::requestScript):
        * html/HTML5ScriptRunnerHost.h:

2010-06-22  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Move HTMLInputStream to its own file
        https://bugs.webkit.org/show_bug.cgi?id=40974

        No new tests, just code motion.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTML5DocumentParser.h:

2010-06-21  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Save the insertion point before beforeload events
        https://bugs.webkit.org/show_bug.cgi?id=40973

        We need to save the insertion point before dispatching the beforeload
        event in case someone decides to document.write during beforeload.
        Prior to this patch, such writes would pump the lexer too much and
        tokenize the rest of the document before executing the script.

        * html/HTML5DocumentParser.cpp:
        (WebCore::HTML5DocumentParser::dispatchBeforeLoad):
        * html/HTML5DocumentParser.h:
        * html/HTML5ScriptRunner.cpp:
        (WebCore::HTML5ScriptRunner::requestScript):
        * html/HTML5ScriptRunnerHost.h:

2010-06-21  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        document.write from BeforeLoad should not assert
        https://bugs.webkit.org/show_bug.cgi?id=40971

        We're setting the parse blocking script too early.  It's not actually
        blocking parsing yet.

        Test: fast/tokenizer/write-before-load.html

        * html/HTML5ScriptRunner.cpp:
        (WebCore::HTML5ScriptRunner::requestScript):

2010-06-21  Chris Fleizach  <cfleizach@apple.com>

        No review. QT build fix again.

        AX: VoiceOver does not announce WAI-ARIA state change of aria-expanded
        https://bugs.webkit.org/show_bug.cgi?id=40927

        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::postNotification):

2010-06-21  Chris Fleizach  <cfleizach@apple.com>

        No review. QT build fix.

        AX: VoiceOver does not announce WAI-ARIA state change of aria-expanded
        https://bugs.webkit.org/show_bug.cgi?id=40927

        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::postNotification):

2010-06-21  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        AX: VoiceOver does not announce WAI-ARIA state change of aria-expanded
        https://bugs.webkit.org/show_bug.cgi?id=40927

        Test: platform/mac/accessibility/aria-expanded-notifications.html

        * accessibility/AXObjectCache.cpp:
        (WebCore::AXObjectCache::handleAriaExpandedChange):
        * accessibility/AXObjectCache.h:
        (WebCore::AXObjectCache::handleAriaExpandedChange):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::handleAriaExpandedChanged):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::handleAriaExpandedChanged):
        * accessibility/AccessibilityRenderObject.h:
        * accessibility/mac/AXObjectCacheMac.mm:
        (WebCore::AXObjectCache::postPlatformNotification):
        * dom/Element.cpp:
        (WebCore::Element::updateAfterAttributeChanged):

2010-06-21  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r61585.
        http://trac.webkit.org/changeset/61585
        https://bugs.webkit.org/show_bug.cgi?id=40950

        It broke builds (Requested by kinuko on #webkit).

        * Android.derived.jscbindings.mk:
        * Android.derived.v8bindings.mk:
        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/BlobBuilder.cpp:
        (WebCore::BlobBuilder::appendString):
        (WebCore::BlobBuilder::appendBlob):
        * html/BlobBuilder.h:
        * page/DOMWindow.idl:

2010-06-21  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Adam Barth.

        Add BlobBuilder.idl to expose BlobBuilder interface
        https://bugs.webkit.org/show_bug.cgi?id=40593

        BlobBuilder is defined in FileAPI's FileWriter spec.
        (http://dev.w3.org/2009/dap/file-system/file-writer.html)

        Also removes the ENABLE_FILE_WRITER ifdef guard for BlobBuilder.

        Tests: http/tests/local/blob/send-data-blob.html
               http/tests/local/blob/send-hybrid-blob.html
               http/tests/local/blob/send-sliced-data-blob.html

        * Android.derived.jscbindings.mk:
        * Android.derived.v8bindings.mk:
        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/BlobBuilder.cpp:
        (WebCore::BlobBuilder::append):
        * html/BlobBuilder.h:
        * html/BlobBuilder.idl: Added.
        * page/DOMWindow.idl:

2010-06-21  Nate Chapin  <japhet@chromium.org>

        Reviewed by Adam Barth.

        FrameLoader cleanup: Split high level subframe and plugin
        loading functions into a separate class.
        https://bugs.webkit.org/show_bug.cgi?id=40453

        Refactor only, no new tests.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.base.exp:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/DOMImplementation.cpp:
        * history/PageCache.cpp:
        * html/HTMLFrameElementBase.cpp:
        * html/HTMLMediaElement.cpp:
        * loader/FrameLoader.cpp:
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::subframeLoader):
        * loader/PluginDocument.cpp:
        * loader/SubframeLoader.cpp: Added.
        (WebCore::SubframeLoader::SubframeLoader):
        (WebCore::toPlugInElement):
        (WebCore::SubframeLoader::clear):
        (WebCore::SubframeLoader::requestFrame):
        (WebCore::SubframeLoader::requestObject):
        (WebCore::FrameLoader::loadMediaPlayerProxyPlugin):
        (WebCore::SubframeLoader::createJavaAppletWidget):
        (WebCore::SubframeLoader::loadSubframe):
        (WebCore::SubframeLoader::allowPlugins):
        (WebCore::SubframeLoader::shouldUsePlugin):
        (WebCore::SubframeLoader::loadPlugin):
        (WebCore::SubframeLoader::completeURL):
        * loader/SubframeLoader.h: Added.
        (WebCore::SubframeLoader::containsPlugins):
        * page/Page.cpp:
        * page/XSSAuditor.h:
        * platform/graphics/wince/MediaPlayerProxy.cpp:
        * plugins/MimeType.cpp:
        * rendering/RenderApplet.cpp:
        * rendering/RenderEmbeddedObject.cpp:

2010-06-21  Nate Chapin  <japhet@chromium.org>

        Unreviewed, build fix.

        Bad merge, left a reference to m_committedFirstRealDocumentLoad in
        http://trac.webkit.org/changeset/61568.

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

2010-06-21  Nate Chapin  <japhet@chromium.org>

        Reviewed by Adam Barth.

        Remove a couple of FrameLoader's unused boolean members
        (m_receivedData, m_cancellingWithLoadInProcess) and merge
        several more into a single state machine called FrameLoaderStateMachine
        (m_firstLayoutDone, m_creatingInitialEmptyDocument,
        m_isDisplayingInitialEmptyDocument, m_committedFirstRealDocumentLoad).

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

        Refactor only, so no new tests.

        * WebCore.base.exp:
        * WebCore.xcodeproj/project.pbxproj:
        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::createDocument):
        (WebCore::DocumentWriter::begin):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::FrameLoader):
        (WebCore::FrameLoader::init):
        (WebCore::FrameLoader::stopLoading):
        (WebCore::FrameLoader::didOpenURL):
        (WebCore::FrameLoader::didExplicitOpen):
        (WebCore::FrameLoader::clear):
        (WebCore::FrameLoader::didBeginDocument):
        (WebCore::FrameLoader::finishedParsing):
        (WebCore::FrameLoader::provisionalLoadStarted):
        (WebCore::FrameLoader::logCanCachePageDecision):
        (WebCore::FrameLoader::logCanCacheFrameDecision):
        (WebCore::FrameLoader::frameHasLoaded):
        (WebCore::FrameLoader::commitProvisionalLoad):
        (WebCore::FrameLoader::transitionToCommitted):
        (WebCore::FrameLoader::finishedLoadingDocument):
        (WebCore::FrameLoader::checkLoadCompleteForThisFrame):
        (WebCore::FrameLoader::didFirstLayout):
        (WebCore::FrameLoader::frameLoadCompleted):
        (WebCore::FrameLoader::dispatchDidCommitLoad):
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::stateMachine):
        * loader/FrameLoaderStateMachine.cpp: Added.
        * loader/FrameLoaderStateMachine.h: Added.
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::restoreScrollPositionAndViewState):
        (WebCore::HistoryController::saveDocumentState):
        * loader/ProgressTracker.cpp:
        (WebCore::ProgressTracker::incrementProgress):
        * loader/RedirectScheduler.cpp:
        (WebCore::RedirectScheduler::scheduleLocationChange):
        (WebCore::RedirectScheduler::scheduleFormSubmission):

2010-06-21  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix. Fix header includes for ENABLE(DATABASE)

        * bindings/js/JSExceptionBase.cpp:

2010-06-21  Anders Carlsson  <andersca@apple.com>

        Fix clang++ build.

        * loader/FormSubmission.h:

2010-06-21  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        Add a missing include in AsyncImageResizer.h

        * html/AsyncImageResizer.h: Added the IntSize include.

2010-06-21  Adam Roben  <aroben@apple.com>

        Call NotifyAddrChange again each time we are notified of a change

        NotifyAddrChange only notifies you of a single change. If you want to
        listen for subsequent changes, you have to call it again.

        Fixes <http://webkit.org/b/33004> NetworkStateNotifier ignores all
        state changes after the first.

        No test possible, as we don't have a way to modify the system's
        network adapters when running tests.

        Reviewed by Anders Carlsson.

        * platform/network/win/NetworkStateNotifierWin.cpp:
        (WebCore::NetworkStateNotifier::addrChangeCallback): Call
        registerForAddressChange as soon as we're notified of an address
        change, so we'll also get notified of the *next* address change. I
        added the call here instead of in addressChanged (which is called
        later on the main thread) to minimize the time between the callback
        and registering again (so that we won't miss changes that happen in
        rapid succession).

2010-06-21  Dan Bernstein  <mitz@apple.com>

        Release build fix

        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::tryHyphenating):

2010-06-21  Dan Bernstein  <mitz@apple.com>

        Windows build fix

        * WebCore.vcproj/WebCore.vcproj: Fixed a typo.

2010-06-21  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        CSS3: Implement the 'hyphens' and 'hyphenate-character' properties
        https://bugs.webkit.org/show_bug.cgi?id=10228

        Tests: fast/text/hyphenate-character.html
               fast/text/hyphens.html

        Added -webkit-hyphens and -webkit-hyphenate-character as specified in
        <http://www.w3.org/TR/2010/WD-css3-gcpm-20100608/#hyphenation>.

        * Android.mk: Added Hyphenation.cpp.
        * CMakeLists.txt: Ditto.
        * GNUmakefile.am: Added Hyphenation.{cpp,h}.
        * WebCore.base.exp: Exported wkGetHyphenationLocationBeforeIndex().
        * WebCore.gypi: Added Hyphenation.{cpp,h}.
        * WebCore.pro: Added Hyphenation.{cpp,h}.
        * WebCore.vcproj/WebCore.vcproj: Added Hyphenation.{cpp,h}.
        * WebCore.xcodeproj/project.pbxproj: Added Hyphenation.{cpp,h}.
        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getPropertyCSSValue): Added the -webkit-hyphenate-character
        and -webkit-hyphens cases.
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue): Validate values for the new properties.
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue): Added. Maps from a Hyphens value to an identifier.
        (WebCore::CSSPrimitiveValue::operator Hyphens): Added. Maps from an identifier to a Hyphens value.
        * css/CSSPropertyNames.in: Added -webkit-hyphenate-character and -webkit-hyphens.
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty): Apply the new properties to the RenderStyle.
        * css/CSSValueKeywords.in:
        * platform/mac/WebCoreSystemInterface.h: Added wkGetHyphenationLocationBeforeIndex.
        * platform/mac/WebCoreSystemInterface.mm: Ditto.
        * platform/text/CharacterNames.h: Added the hyphen character.
        * platform/text/Hyphenation.cpp: Added.
        (WebCore::lastHyphenLocation): Added this default implementation for platforms that do not implement
        hyphenation yet. It calls notImplemented() and returns 0.
        * platform/text/Hyphenation.h: Added.
        * platform/text/cf/HyphenationCF.cpp: Added.
        (WebCore::lastHyphenLocation): Returns the last hyphenation location occurring in the given string before
        the given index. Uses the current search locale (which is based on the top language preference of the user)
        for hyphenation.
        * platform/text/mac/HyphenationMac.mm: Added.
        (WebCore::lastHyphenLocation): Returns the last hyphenation location occurring in the given string before
        the given index. Returns 0 if the current search locale is not "en", because the platform only knows how to
        hyphenate English.
        * rendering/BidiRun.h:
        (WebCore::BidiRun::BidiRun): Added a boolean member, m_hasHyphen, and initialized it to false in the constructor.
        * rendering/InlineBox.h:
        (WebCore::InlineBox::InlineBox): Renamed m_hasEllipsisBox to m_hasEllipsisBoxOrHyphen, because this bit is now
        shared by two subclass: RootInlineBox uses it for hasEllipsisBox(), while InlineTextBox uses it for hasHyphen().
        * rendering/InlineTextBox.cpp:
        (WebCore::adjustCharactersAndLengthForHyphen): Added this helper function to get the hyphen string from the style
        and return a UChar* and length for the concatenation of the given text with the hyphen string.
        (WebCore::InlineTextBox::selectionRect): If the selected range touches the end and the box has a hyphen,
        compute the width of the text with the hyphen string concatenated to it.
        (WebCore::InlineTextBox::paint): If the box has a hyphen, draw the text with the hyphen string concatenated to it.
        (WebCore::InlineTextBox::paintSelection): Similarly concatenate the hyphen string.
        * rendering/InlineTextBox.h:
        (WebCore::InlineTextBox::hasHyphen): Added this accessor.
        (WebCore::InlineTextBox::setHasHyphen): Ditto.
        * rendering/RenderBlock.h:
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::constructLine): Copy the m_hasHyphen flag from the run to its text box.
        (WebCore::RenderBlock::computeHorizontalPositionsForLine): Add the width of the hyphen string when computing the
        width of a box that has a hyphen.
        (WebCore::RenderBlock::layoutInlineChildren): If the line was hyphenated, set the m_hasHyphen flag on the
        logically last run.
        (WebCore::tryHyphenating): Added this helper function which checks if a piece of text that does not fit on the
        line could be hyphenated such that the part before the hyphen, including the hyphen, would fit. Given the amount
        of space remaining on the line, it finds the longest prefix that can fit in the remaining space (which leaving room for
        the hyphen), and then checks for a hyphenation location within that prefix.
        (WebCore::RenderBlock::findNextLineBreak): In the 'hyphens: none' case, prevent line breaks at soft hyphens.
        In the 'hyphens: auto' case, try hyphenating when a word will not fit in the remaining space on the line.
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::detachEllipsisBox): Changed to use hasEllipsisBox() and setHasEllipsisBox().
        (WebCore::RootInlineBox::clearTruncation): Ditto.
        (WebCore::RootInlineBox::placeEllipsis): Ditto.
        (WebCore::RootInlineBox::paintEllipsisBox): Ditto.
        (WebCore::RootInlineBox::nodeAtPoint): Ditto.
        (WebCore::RootInlineBox::ellipsisBox): Ditto.
        * rendering/RootInlineBox.h:
        (WebCore::RootInlineBox::hasEllipsisBox): Added this accessor.
        (WebCore::RootInlineBox::setHasEllipsisBox): Ditto.
        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::diff): Return a layout hint if the hyphens setting or hyphenate-character differs.
        (WebCore::RenderStyle::hyphenString): Added. For hyphenate-character: auto, returns the hyphen character.
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::hyphens): Added this accessor.
        (WebCore::InheritedFlags::hyphenateCharacter): Ditto.
        (WebCore::InheritedFlags::setHyphens): Ditto.
        (WebCore::InheritedFlags::setHyphenateCharacter): Ditto.
        (WebCore::InheritedFlags::initialHyphens): Added. Returns HyphensManual.
        (WebCore::InheritedFlags::initialHyphenateCharacter): Added. Returns the null string, corresponding to
        a value of 'auto'.
        * rendering/style/RenderStyleConstants.h:
        Added a Hyphens enum.
        * rendering/style/StyleRareInheritedData.cpp:
        (WebCore::StyleRareInheritedData::StyleRareInheritedData): Initialize and copy the new members.
        (WebCore::StyleRareInheritedData::operator==): Compare the new members.
        * rendering/style/StyleRareInheritedData.h: Added two new members: hyphens and hyphenateCharacter.

2010-06-03  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Plumb FormSubmission through to ScheduledFormSubmission.
        https://bugs.webkit.org/show_bug.cgi?id=40137

        No behavior change, covered by existing tests.

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::prepareFormSubmission): Moved creation of action URL
            instance here from FrameLoader::submit, because it makes more sense here,
            also added a FIXME to investigate existing code later.
        * loader/FormSubmission.cpp:
        (WebCore::FormSubmission::FormSubmission): Changed action to be a KURL, not a String.
        (WebCore::FormSubmission::create): Ditto.
        (WebCore::FormSubmission::populateFrameLoadRequest): Added, moving the logic from
            FrameLoader::submit closer to the data.
        * loader/FormSubmission.h:
        (WebCore::FormSubmission::action): Changed type to KURL.
        (WebCore::FormSubmission::clearTarget): Added.
        (WebCore::FormSubmission::referrer): Added.
        (WebCore::FormSubmission::setReferrer): Added.
        (WebCore::FormSubmission::origin): Added.
        (WebCore::FormSubmission::setOrigin): Added.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::submitForm): Cleaned up to make it more about decision-making,
            not data manipulation.
        * loader/RedirectScheduler.cpp:
        (WebCore::ScheduledFormSubmission::ScheduledFormSubmission): Changed to accept FormSubmission as argument.
        (WebCore::ScheduledFormSubmission::fire): Changed to use FormSubmission.
        (WebCore::RedirectScheduler::scheduleFormSubmission): Removed assert that no longer makes sense,
            changed to use FormSubmission.
        * loader/RedirectScheduler.h: Updated ScheduledFormSubmission decl to hold FormSubmission ref.

2010-06-21  Satish Sampath  <satish@chromium.org>

        Reviewed by Steve Block.

        Speech Input Patch 0: Added compilation argument to conditionally compile pending patches.
        https://bugs.webkit.org/show_bug.cgi?id=40878

        No new tests are needed, because there is no new functionality.

        * Configurations/FeatureDefines.xcconfig:
        * GNUmakefile.am:
        * WebCore.pri:

2010-06-21  Hans Wennborg  <hans@chromium.org>

        Reviewed by Jeremy Orlow.

        Delete DOM storage databases when they are empty.
        https://bugs.webkit.org/show_bug.cgi?id=40767

        Even if a page clears its local storage, the database file for it stays around,
        and there is currently no mechanism that deletes them.

        After doing the "final sync" of a storage area, the StorageAreaSyncMaster should
        see if the database is empty, and in that case delete it.

        Tests:
         manual-tests/localstorage-empty-database.html

        * manual-tests/localstorage-empty-database.html:
        Added link to clear local storage for testing that the file is removed.
        * storage/LocalStorageTask.cpp:
        (WebCore::LocalStorageTask::LocalStorageTask):
        Added local storage task type DeleteEmptyDatabase.
        (WebCore::LocalStorageTask::performTask):
        Ditto.
        * storage/LocalStorageTask.h:
        (WebCore::LocalStorageTask::):
        Ditto.
        (WebCore::LocalStorageTask::createDeleteEmptyDatabase):
        Ditto.
        * storage/StorageAreaSync.cpp:
        (WebCore::StorageAreaSync::scheduleFinalSync):
        When scheduling final sync, also schedule DeleteEmptyDatabase.
        (WebCore::StorageAreaSync::sync):
        Return early if final sync has nothing to sync.
        (WebCore::StorageAreaSync::deleteEmptyDatabase):
        Added function to check if a database is empty and in that case delete it.
        * storage/StorageAreaSync.h:
        Ditto.
        * storage/StorageSyncManager.cpp:
        (WebCore::StorageSyncManager::scheduleDeleteEmptyDatabase):
        Added function for scheduling DeleteEmptyDatabase task.
        * storage/StorageSyncManager.h:
        Ditto.

2010-06-21  Balazs Kelemen  <kb@inf.u-szeged.hu>

        Reviewed by Simon Hausmann.

        [Qt] Avoid unnecessary image conversion in RGBA32Buffer::zeroFill()
        https://bugs.webkit.org/show_bug.cgi?id=40910

        * platform/image-decoders/qt/RGBA32BufferQt.cpp:
        (WebCore::RGBA32Buffer::zeroFill):

2010-06-21  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Decode images directly to QPixmap
        https://bugs.webkit.org/show_bug.cgi?id=40797

        Decode images to QPixmap directly instead of QImage when possible.
        RGBA32Buffer transforms the pixmap back to image if
        necessary.

        This improve the performance with certain graphic system, and
        can reduce memory usage.

        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::setData):
        (WebCore::ImageDecoderQt::internalHandleCurrentImage):
        * platform/image-decoders/ImageDecoder.h:
        (WebCore::RGBA32Buffer::getAddr):
        * platform/image-decoders/qt/RGBA32BufferQt.cpp:
        (WebCore::RGBA32Buffer::clear):
        (WebCore::RGBA32Buffer::zeroFill):
        (WebCore::RGBA32Buffer::copyBitmapData):
        (WebCore::RGBA32Buffer::setSize):
        (WebCore::RGBA32Buffer::asNewNativeImage):
        (WebCore::RGBA32Buffer::setPixmap):

2010-06-20  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Adam Barth.

        Adding the SQLException class which will be used to report sync DB errors.
        https://bugs.webkit.org/show_bug.cgi?id=40607

        * Android.derived.jscbindings.mk:
        * Android.derived.v8bindings.mk:
        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::setDOMException):
        * bindings/js/JSExceptionBase.cpp:
        (WebCore::toExceptionBase):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::setDOMException):
        * bindings/v8/V8Proxy.h:
        * dom/ExceptionCode.cpp:
        (WebCore::):
        (WebCore::getExceptionCodeDescription):
        * dom/ExceptionCode.h:
        (WebCore::):
        * page/DOMWindow.idl:
        * storage/SQLException.h: Added.
        (WebCore::SQLException::create):
        (WebCore::SQLException::):
        (WebCore::SQLException::SQLException):
        * storage/SQLException.idl: Added.

2010-06-20  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        [v8] Web Inspector: don't add ScriptDebugServer as v8 listener if browser exposes
        v8 debugging protocol.
        https://bugs.webkit.org/show_bug.cgi?id=40844

        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::ScriptDebugServer):
        (WebCore::ScriptDebugServer::addListener):
        (WebCore::ScriptDebugServer::setEnabled):
        (WebCore::ScriptDebugServer::isDebuggerAlwaysEnabled):
        * bindings/v8/ScriptDebugServer.h:

2010-06-20  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed build fix.

        [EFL] Build break for r61527
        https://bugs.webkit.org/post_bug.cgi 

        * CMakeLists.txt: Add loader/FormSubmission.cpp

2010-06-20  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Remove bogus const qualifiers.

        * platform/mac/PasteboardHelper.h:

2010-06-20  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Kent Tamura.

        Buildfix for NotificationCenter.h.
        https://bugs.webkit.org/show_bug.cgi?id=40890

        ScriptExecutionContext::completeURL is used in header,
        but ScriptExecutionContext.h wasn't included.

        * notifications/NotificationCenter.h:

2010-06-20  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Eric Seidel.

        Recognize async attribute on HTML script tags.
        https://bugs.webkit.org/show_bug.cgi?id=39026

        This does not implement async behavior, it only parses the async
        attribute for HTML script tags. SVG script tags continue to not
        support the async attribute.

        Tests: fast/dom/HTMLScriptElement/script-async-attr.html
               svg/dom/SVGScriptElement/script-async-attr.svg

        * dom/ScriptElement.cpp:
        (WebCore::ScriptElementData::isAsynchronous):
        (WebCore::ScriptElementData::isDeferred):
        * dom/ScriptElement.h:
        * html/HTMLAttributeNames.in:
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::async):
        (WebCore::HTMLScriptElement::setAsync):
        (WebCore::HTMLScriptElement::defer):
        (WebCore::HTMLScriptElement::asyncAttributeValue):
        (WebCore::HTMLScriptElement::deferAttributeValue):
        * html/HTMLScriptElement.h:
        * html/HTMLScriptElement.idl:
        * svg/SVGScriptElement.cpp:
        (WebCore::SVGScriptElement::asyncAttributeValue):
        (WebCore::SVGScriptElement::deferAttributeValue):
        * svg/SVGScriptElement.h:

2010-06-20  Nikita Vasilyev  <me@elv1s.ru>

        Reviewed by Joseph Pecoraro.

        Web Inspector: Auto-completion for CSS property names in Styles pane
        https://bugs.webkit.org/show_bug.cgi?id=17374

        Added autocompletion for CSS properties. A suggestion for a property
        shows when you type. You can also cycle through known property names
        using the Up and Down arrow keys.

        * WebCore.gypi:
        * inspector/front-end/CSSCompletions.js: Added.
        (WebInspector.CSSCompletions):
        (WebInspector.CSSCompletions.startsWith):
        (WebInspector.CSSCompletions.firstStartsWith):
        (WebInspector.CSSCompletions._firstIndexOfPrefix):
        (WebInspector.CSSCompletions.next):
        (WebInspector.CSSCompletions.previous):
        (WebInspector.CSSCompletions._closest):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertyTreeElement.prototype):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:
        * inspector/front-end/utilities.js:
        (Text.prototype.select):
        ():

2010-06-14  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Introduce FormSubmission, the structure representing a form submission.
        https://bugs.webkit.org/show_bug.cgi?id=40084

        No change in functionality, covered by existing tests.

        * GNUmakefile.am: Added FormSubmission.h/cpp.
        * WebCore.gypi: Ditto.
        * WebCore.pro: Ditto.
        * WebCore.vcproj/WebCore.vcproj: Ditto.
        * WebCore.xcodeproj/project.pbxproj: Ditto.
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::prepareFormSubmission): Renamed prepareFormData to prepareFormSubmission,
            added code for populating a FormSubmission instance, moved the loop of accumulating text input
            values into this functions (it belongs here logically).
        (WebCore::HTMLFormElement::submit): Modified to use prepareFormSubmission.
        * html/HTMLFormElement.h:
        * loader/FormSubmission.cpp: Added.
        * loader/FormSubmission.h: Added.
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::submitForm): Modified to use FormSubmission. Stopped plumbing further to keep
            the patch size down.
        * loader/FrameLoader.h: Modified submitForm signature.

2010-06-20  Joseph Pecoraro  <joepeck@webkit.org>

        Unreviewed rollout r61506, because it made 1 test crash.

        Causes crash. Will approach the solution in a different way.

2010-06-20  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: Should Autocomplete Style Properties
        https://bugs.webkit.org/show_bug.cgi?id=38448

        This Autocompletes style properties when in the console.

        * inspector/front-end/InjectedScript.js:
        (injectedScriptConstructor):

2010-06-20  Robert Hogan  <robert@webkit.org>

        Reviewed by Simon Hausmann.

        [Qt] NPP_SetWindow seems to not be called when TestNetscapePlugin is moved

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

        setNPWindowIfNeeded() is called on paint() in PluginViewQt, which doesn't
        work for DRT. So call it if we are in DRT mode and the window geometry
        has changed.

        Unskips plugins/reentrant-update-widget-positions.html

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

2010-06-19  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Adam Barth.

        Persist V8's ScriptData to the memory cache.
        https://bugs.webkit.org/show_bug.cgi?id=38661

        This stores V8's ScriptData in the memory cache and also causes the
        network platform layer to be notified of the available cacheable
        metadata.

        Chromium's morejs benchmark showed a ~7% improvement when this was
        originally submitted (before it had to be rolled back).

        Test: fast/js/parser-high-byte-character.html

        * bindings/v8/ScriptSourceCode.h:
        (WebCore::ScriptSourceCode::ScriptSourceCode):
        (WebCore::ScriptSourceCode::cachedScript):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::compileScript):
        (WebCore::V8Proxy::precompileScript):
        (WebCore::V8Proxy::evaluate):
        * bindings/v8/V8Proxy.h:

2010-06-19  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Kent Tamura.

        [BREWMP] Port SocketStream
        https://bugs.webkit.org/show_bug.cgi?id=39671

        Port SocketStream with BREW MP's ISocket interface.

        * platform/network/brew/SocketStreamError.h: Added.
        (WebCore::SocketStreamError::SocketStreamError):
        * platform/network/brew/SocketStreamHandle.h: Added.
        (WebCore::SocketStreamHandle::create):
        * platform/network/brew/SocketStreamHandleBrew.cpp: Added.
        (WebCore::socketStreamConnectCallback):
        (WebCore::getHostByNameCallback):
        (WebCore::socketReadableCallback):
        (WebCore::networkManager):
        (WebCore::SocketStreamHandlePrivate::SocketStreamHandlePrivate):
        (WebCore::SocketStreamHandlePrivate::~SocketStreamHandlePrivate):
        (WebCore::SocketStreamHandlePrivate::socketConnected):
        (WebCore::SocketStreamHandlePrivate::socketReadyRead):
        (WebCore::SocketStreamHandlePrivate::connect):
        (WebCore::SocketStreamHandlePrivate::send):
        (WebCore::SocketStreamHandlePrivate::close):
        (WebCore::SocketStreamHandlePrivate::socketClosed):
        (WebCore::SocketStreamHandlePrivate::socketError):
        (WebCore::SocketStreamHandle::SocketStreamHandle):
        (WebCore::SocketStreamHandle::~SocketStreamHandle):
        (WebCore::SocketStreamHandle::platformSend):
        (WebCore::SocketStreamHandle::platformClose):
        (WebCore::SocketStreamHandle::didReceiveAuthenticationChallenge):
        (WebCore::SocketStreamHandle::receivedCredential):
        (WebCore::SocketStreamHandle::receivedRequestToContinueWithoutCredential):
        (WebCore::SocketStreamHandle::receivedCancellation):
        * platform/network/brew/SocketStreamHandlePrivate.h: Added.

2010-06-19  Nikita Vasilyev  <me@elv1s.ru>

        Reviewed by Pavel Feldman.

        Web Inspector: Prevent from copying "filename.css" in Styles pane
        https://bugs.webkit.org/show_bug.cgi?id=40420

        * inspector/front-end/Section.js:
        (WebInspector.Section.prototype.set subtitle):
        (WebInspector.Section.prototype.get subtitleAsText):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylePropertiesSection):
        * inspector/front-end/inspector.css:
        (.styles-section .subtitle::before, .styles-section .subtitle a::before):

2010-06-19  Alex Milowski  <alex@milowski.com>

        Reviewed by Darin Adler.

        A fix for a change in https://bugs.webkit.org/show_bug.cgi?id=39941 
        that caused a compile error in MathML.
        https://bugs.webkit.org/show_bug.cgi?id=40827

        * mathml/MathMLElement.cpp:
        (WebCore::MathMLElement::MathMLElement):

2010-06-19  Kartikaya Gupta  <kagupta@rim.com>

        Reviewed by Nikolas Zimmermann.

        CPP bindings missing some APIs
        https://bugs.webkit.org/show_bug.cgi?id=40570

        Add missing C++ DOM API bindings. Specifically:
        - NodeFilter callback support
        - Missing custom method implementations in HTMLCollection and HTMLOptionsCollection
        - Missing EventTarget static type-determination methods
        - Fix CPP binding generator to not generate d-ptrs for classes that extend EventTarget and just use the parent's d-ptr instead
        - Switch binding generator to use DOMWindow instead of AbstractView so that necessary W3C-defined methods (e.g. getComputedStyle) are accessible.

        * bindings/cpp/WebDOMDOMWindowCustom.cpp: Added.
        (WebDOMDOMWindow::addEventListener):
        (WebDOMDOMWindow::removeEventListener):
        * bindings/cpp/WebDOMEventTarget.cpp:
        (toWebKit):
        * bindings/cpp/WebDOMEventTarget.h:
        * bindings/cpp/WebDOMHTMLCollectionCustom.cpp: Added.
        (WebDOMHTMLCollection::item):
        (WebDOMHTMLCollection::namedItem):
        * bindings/cpp/WebDOMHTMLOptionsCollectionCustom.cpp: Added.
        (WebDOMHTMLOptionsCollection::length):
        (WebDOMHTMLOptionsCollection::setLength):
        * bindings/cpp/WebDOMNodeFilterCustom.cpp: Added.
        (WebDOMNodeFilter::acceptNode):
        (toWebKit):
        * bindings/cpp/WebNativeNodeFilterCondition.cpp: Added.
        (WebNativeNodeFilterCondition::WebNativeNodeFilterCondition):
        (WebNativeNodeFilterCondition::~WebNativeNodeFilterCondition):
        (WebNativeNodeFilterCondition::acceptNode):
        * bindings/cpp/WebNativeNodeFilterCondition.h: Added.
        (WebNativeNodeFilterCondition::create):
        * bindings/scripts/CodeGeneratorCPP.pm:
        * dom/NodeFilter.idl:
        * page/DOMWindow.idl:

2010-06-19  Vangelis Kokkevis  <vangelis@chromium.org>

        Reviewed by Dimitri Glazkov.

        [chromium] Adding a conditional gyp dependency for the WebCore target to 
        the gles2_c_lib which is required by the gpu compositor. The dependency will
        only kick in if the accelerated_compositing path is enabled.
        https://bugs.webkit.org/show_bug.cgi?id=40801

        * WebCore.gyp/WebCore.gyp:

2010-06-19  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Platform plugin's multi-select does not take OptGroup into account
        https://bugs.webkit.org/show_bug.cgi?id=40718

        In multi-select elements, optgroup elements are counted in the index calculation,
        but in single-select they are not. Keep the same logic even when NO_LISTBOX_RENDERING
        is enabled.
        Added tests to the existing manual test, as testing this requires a special build, in which
        NO_LISTBOX_RENDERING is enabled.

        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::listBoxSelectItem):
        * manual-tests/no-listbox-rendering.html:
        * rendering/RenderMenuList.cpp:
        (WebCore::RenderMenuList::listBoxSelectItem):

2010-06-19  Thomas Van Lenten  <thomasvl@chromium.org>

        Reviewed by David Levin.

        Warnings from -Wextra in a Chromium Mac build
        1. checks of unsigned >= 0
        2. enumeral and non-enumeral type in conditional expression
        3. copy ctors that don't call the super copy ctor or ctor
        No functionality change so no new tests.

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

        * platform/chromium/ChromiumDataObject.cpp:
        (WebCore::ChromiumDataObject::ChromiumDataObject):
        * platform/chromium/ThemeChromiumMac.mm:
        (WebCore::updateStates):
        * rendering/RenderThemeChromiumMac.mm:
        (WebCore::RenderThemeChromiumMac::updateActiveState):

2010-06-19  Ben Murdoch  <benm@google.com>

        Reviewed by Pavel Feldman.

        Fix build break with inspector disabled.
        https://bugs.webkit.org/show_bug.cgi?id=40790

        Replace a #include with a forward declaration.

        Fixing a build break so no new tests required.

        * inspector/InspectorController.h: Forward declare InspectorValue
           rather than #including its header which has its content guarded
           out.

2010-06-19  Zhe Su  <suzhe@chromium.org>

        Reviewed by Darin Fisher.

        [chromium]Refactor input method related APIs.
        https://bugs.webkit.org/show_bug.cgi?id=40608

        No new tests are needed, because there is no new functionality.

        * page/FocusController.cpp:
        (WebCore::FocusController::setFocusedNode):

2010-06-19  George Wright  <gwright@rim.com>

        Reviewed by George Staikos.

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

        Make setWapInputFormat() public again as CSSStyleSelector.cpp calls this when WCSS is enabled.

        * html/HTMLInputElement.h:
        (WebCore::HTMLInputElement::data):

2010-06-02  Robert Hogan  <robert@webkit.org>

        Reviewed by Adam Barth.

        [Qt] Support evaluateScriptInIsolatedWorld()

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

        getOwnPropertyNames() crashes if PropertyNameArray is size 0. This change allows
        http/tests/world-reuse.html and didClearWindowObject.html to fail instead of crash.

        * WebCore.pro: Add qwebscriptworld.*
        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::convertValueToQVariant):

2010-06-19  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Eric Seidel.

        Some very minor cleanups for HTML5 Parser
        https://bugs.webkit.org/show_bug.cgi?id=40638

        No new tests because no new functionality.

        * html/HTML5DocumentParser.cpp:
        (WebCore::): Make ctor explicit.
        * html/HTML5DocumentParser.h:
        (WebCore::HTML5DocumentParser::InsertionPointRecord::InsertionPointRecord): Make ctor explicit.
        * html/HTML5Lexer.cpp:
        (WebCore::HTMLNames::isEndTagBufferingState): Use switch to generate an efficient table with single branch.
        * html/HTML5Token.h:
        (WebCore::HTML5Token::forceQuirks): Add const.
        * html/HTML5TreeBuilder.h:
        (WebCore::HTML5TreeBuilder::isPaused): Add const.

2010-06-18  Aaron Boodman  <aa@chromium.org>

        Remove WebKit::WebDocument::isXHTMLDocument.
        https://bugs.webkit.org/show_bug.cgi?id=40815

        * dom/Document.h: remove isXHTML() getter.

2010-06-19  Aaron Boodman  <aa@chromium.org>

        Unreviewed, rolling out r61466.
        http://trac.webkit.org/changeset/61466
        https://bugs.webkit.org/show_bug.cgi?id=40816

        Landed wrong change

        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::initContextIfNeeded):
        * bindings/v8/V8DOMWindowShell.h:

2010-06-18  Aaron Boodman  <aa@chromium.org>

        WebKit API: Undo static hooks into V8 when WebKit is shut down.
        https://bugs.webkit.org/show_bug.cgi?id=40816

        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::initContextIfNeeded):
        (WebCore::V8DOMWindowShell::initializeV8IfNeeded):
        (WebCore::V8DOMWindowShell::uninitializeV8IfNeeded):
        * bindings/v8/V8DOMWindowShell.h:

2010-06-18  Jessie Berlin  <jberlin@webkit.org>

        Reviewed by Darin Adler.

        Bug 19509 - Database Tables in the Inspector should be sortable
        https://bugs.webkit.org/show_bug.cgi?id=19509

        * inspector/front-end/StoragePanel.js:
        (WebInspector.StoragePanel.prototype.dataGridForResult):
        Make each column in the DataGrid sortable.
        (WebInspector.StoragePanel.prototype._sortDataGrid.comparator):
        Make sure to sort numeric columns by their numeric values, instead of lexicographically.
        (WebInspector.StoragePanel.prototype._sortDataGrid):
        Sort the entries in the DataGrid based on the selected column.

2010-06-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Oliver Hunt.

        More clang++ warning fixes.

        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::restoreAttachedWindowHeight):
        * platform/graphics/mac/FontPlatformData.h:
        * platform/graphics/mac/WebLayer.mm:
        (-[CALayer _descriptionWithPrefix:]):

2010-06-18  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        * WebCore.gyp/WebCore.gyp: Modified inclusion rule in to actually add WebSystemInterface.mm.

2010-06-18  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        * WebCore.gyp/WebCore.gyp: Renamed WebSystemInterface.m to WebSystemInterface.mm.

2010-06-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Make WebCoreSystemInterface.h a C++ only header
        https://bugs.webkit.org/show_bug.cgi?id=40867

        * platform/mac/WebCoreSystemInterface.h:

2010-06-18  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Adam Barth.

        Convert column span from an unsigned short type to an unsigned int
        type. Fixes a divide-by-zero crash arising from using a zero colspan
        value coming from a narrow cast of an int to an unsigned short.
        https://bugs.webkit.org/show_bug.cgi?id=40812

        Test: fast/table/zero-colspan-crash.html

        * rendering/RenderTable.h: Change span from unsigned short to unsigned int.
        * rendering/RenderTableSection.cpp: Fix a compiler warning with comparing
          unsigned int with signed int. Value of an unsigned int here cannot be
          greater than maximum positive value of a signed int.
        (WebCore::RenderTableSection::addCell):

2010-06-18  Ananth Jasty  <ext-ananth.jasty@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Text spacing miscalculation when using wordSpacing.
        https://bugs.webkit.org/show_bug.cgi?id=40483

        Removed wordSpacing compensation in FontQt whitespace width
        calculation. The QFontMetrics::width() overload that takes
        a character does not take QFont's word spacing into account.

        * platform/graphics/qt/FontQt.cpp:
        (WebCore::Font::floatWidthForComplexText):

2010-06-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Get rid of PluginDataMac.mm and use the plug-in strategy instead
        https://bugs.webkit.org/show_bug.cgi?id=40860

        * WebCore.xcodeproj/project.pbxproj:
        * page/mac/WebCoreViewFactory.h:
        * plugins/PluginData.cpp:
        (WebCore::PluginData::refresh):
        (WebCore::PluginData::initPlugins):
        * plugins/PluginStrategy.h:
        * plugins/mac/PluginDataMac.mm: Removed.

2010-06-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Fix some (not all) clang++ warnings.

        * dom/Position.h:
        (WebCore::lastOffsetInNode):
        * editing/CompositeEditCommand.cpp:
        (WebCore::CompositeEditCommand::deleteInsignificantText):
        * loader/appcache/ApplicationCache.cpp:
        (WebCore::ApplicationCache::resourceForRequest):
        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::ComplexTextController::offsetForPosition):
        (WebCore::ComplexTextController::collectComplexTextRuns):
        * platform/network/CredentialStorage.cpp:
        (WebCore::protectionSpaceMapKeyFromURL):
        * rendering/style/StyleRareNonInheritedData.h:

2010-06-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Dan Bernstein.

        Add stubbed out WebPlatformStrategies class to WebKit.
        https://bugs.webkit.org/show_bug.cgi?id=40851

        * WebCore.base.exp:
        * platform/PlatformStrategies.cpp:
        * platform/PlatformStrategies.h:
        (WebCore::PlatformStrategies::~PlatformStrategies):

2010-06-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Fix build errors when building with clang++.

        * loader/archive/cf/LegacyWebArchiveMac.mm:
        Move the const qualifier to the right place.

        * page/EditorClient.h:
        * platform/Pasteboard.h:
        Use @class when forward declaring Objective-C classes in Objective-C.

2010-06-18  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Geoff Garen.

        https://bugs.webkit.org/show_bug.cgi?id=40852
        <rdar://problem/8105498> Limit simultaneous DNS prefetch request number (40852)

        No change in functionality, so no tests.

        We still queue up to 64 names, but only make up to 8 requests at once. If there are names
        remaining in queue, we retry after a short timeout (which is easier than posting
        notifications from client callback).

        * platform/network/cf/DNSCFNet.cpp:
        (WebCore::DNSResolveQueue::add):
        (WebCore::DNSResolveQueue::fired):

2010-06-18  Zhenyao Mo  <zmo@google.com>

        Reviewed by Simon Fraser.

        WebGL demos show bad flicker
        https://bugs.webkit.org/show_bug.cgi?id=38560

        * platform/graphics/mac/GraphicsContext3DMac.mm:
        (WebCore::GraphicsContext3D::prepareTexture): Move ensureContext() out of if-block so it's always executed.

2010-06-18  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Add PlatformStrategies and PluginStrategy classes.
        https://bugs.webkit.org/show_bug.cgi?id=40850

        * WebCore.xcodeproj/project.pbxproj:
        * platform/PlatformStrategies.cpp: Added.
        (WebCore::PlatformStrategies::~PlatformStrategies):
        (WebCore::platformStrategies):
        (WebCore::setPlatformStrategies):
        * platform/PlatformStrategies.h: Added.
        (WebCore::PlatformStrategies::pluginStrategy):
        (WebCore::PlatformStrategies::PlatformStrategies):
        * plugins/PluginData.cpp:
        * plugins/PluginStrategy.h: Added.
        (WebCore::PluginStrategy::~PluginStrategy):

2010-06-18  Martin Robinson  <mrobinson@igalia.com>

        Unreviewed.

        Fix the GTK+ build after r61413 and 61379.

        * bindings/scripts/CodeGeneratorGObject.pm:
        Produce a g_value_set that uses getterExpressionPrefix instead of the raw getter.
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        (webkit_dom_test_obj_get_property): Update expected test results.

2010-06-18  Leandro Pereira  <leandro@profusion.mobi>

        [EFL] Unreviewed build fix.

        * CMakeLists.txt: Add inspector/ScriptBreakpoint.cpp.

2010-06-18  Andy Estes  <aestes@apple.com>

        Rubber-stamped by Sam Weinig.

        Update copyright header.

        * html/HTMLLinkElement.h:

2010-06-17  Andy Estes  <aestes@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/8091385> Prevent a crash in WebCore when removing a stylesheet link element in
        in a listener to its beforeload event.
        https://bugs.webkit.org/show_bug.cgi?id=40742
        
        Postpone loading of link elements until after they have been inserted into the DOM and
        attached. This prevents DOM mutations triggered by beforeload handlers from firing in the
        midst of DOM insertion, which can lead to assertion failures and crashes.

        Test: fast/dom/beforeload/remove-link-in-beforeload-listener.html

        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::HTMLLinkElement): Initialize m_shouldProcessAfterAttach to false.
        (WebCore::HTMLLinkElement::processCallback): Add a static callback function which calls
        HTMLLinkElement::process().
        (WebCore::HTMLLinkElement::insertedIntoDocument): Instead of calling process() directly, set
        m_shouldProcessAfterAttach to true to indicate that process() should be called after attach().
        (WebCore::HTMLLinkElement::removedFromDocument): Set m_shouldProcessAfterAttach to false.
        (WebCore::HTMLLinkElement::attach): If m_shouldProcessAfterAttach is true, register
        HTMLLinkElement::processCallback() as a post-attach callback.
        * html/HTMLLinkElement.h: Add m_shouldProcessAfterAttach.
        (WebCore::HTMLLinkElement::canLazyAttach): Override canLazyAttach() to return false to
        indicate that a full attach should be performed.  This ensures the post-attach callbacks are
        fired.

2010-06-18  Chris Fleizach  <cfleizach@apple.com>

        Unreviewed. Windows build fix.

        AX: presentational role needs to be inherited by required elements
        https://bugs.webkit.org/show_bug.cgi?id=40132

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::inheritsPresentationalRole):

2010-06-18  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by David Kilzer.

        AX: presentational role needs to be inherited by required elements
        https://bugs.webkit.org/show_bug.cgi?id=40132

        Test: platform/mac/accessibility/inherited-presentational-lists.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnored):
        (WebCore::AccessibilityRenderObject::inheritsPresentationalRole):
        * accessibility/AccessibilityRenderObject.h:
        (WebCore::AccessibilityRenderObject::node):

2010-06-18  Darin Adler  <darin@apple.com>

        Fix GTK build after reflection change.

        * bindings/scripts/CodeGeneratorGObject.pm: Changed code
        that emits setters to convey the correct type of the attribute.
        The GObject code generator takes a different approach to attributes
        than the others, so it's hacked a bit to make it more like them.
        We should find a way to share more code between the different generators.

        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        Updated to expect correct results.

2010-06-18  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed: Qt build fix.

        * inspector/InspectorController.cpp:

2010-06-18  Justin Garcia  <justin.garcia@apple.com>

        Reviewed by Ojan Vafai.

        https://bugs.webkit.org/show_bug.cgi?id=39798
        No selection change notification for editing operation that doesn't change the selection's DOM position
        
        Some editing operations change the selection visually without affecting its position within 
        the DOM.  This was previously known to occur for certain typing commands, but it can also 
        occur for some Pastes and changes to block style.

        * editing/Editor.cpp:
        (WebCore::Editor::appliedEditing):
        (WebCore::Editor::unappliedEditing):
        (WebCore::Editor::reappliedEditing):
        (WebCore::Editor::changeSelectionAfterCommand):
        * editing/Editor.h:

2010-06-18  Gyuyoung Kim  <gyuyoung.kim@samsung.com>

        Unreviewed build fix.

        [EFL] Build break on Debug build.
        https://bugs.webkit.org/show_bug.cgi?id=40810

        * CMakeLists.txt: Add CSSPreloadScanner.cpp

2010-06-18  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: persist breakpoints in inspector settings.
        https://bugs.webkit.org/show_bug.cgi?id=14190

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::setSessionSettings):
        (WebCore::InspectorController::didCommitLoad):
        (WebCore::InspectorController::setBreakpoint):
        (WebCore::InspectorController::removeBreakpoint):
        (WebCore::InspectorController::didParseSource):
        (WebCore::InspectorController::breakpointsSettingKey):
        (WebCore::InspectorController::loadBreakpoints):
        (WebCore::InspectorController::saveBreakpoints):
        * inspector/InspectorController.h:
        * inspector/InspectorValues.cpp:
        (WebCore::InspectorValue::parseJSON):
        * inspector/InspectorValues.h:
        * inspector/ScriptBreakpoint.cpp: Added.
        (WebCore::ScriptBreakpoint::sourceBreakpointsFromInspectorObject):
        (WebCore::ScriptBreakpoint::inspectorObjectFromSourceBreakpoints):
        * inspector/ScriptBreakpoint.h:
        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager.prototype.addBreakpoint):
        (WebInspector.BreakpointManager.prototype.restoredBreakpoint):
        (WebInspector.BreakpointManager.prototype.breakpointsForSourceID):
        (WebInspector.BreakpointManager.prototype.breakpointsForURL):
        (WebInspector.BreakpointManager.prototype._addBreakpoint):
        * inspector/front-end/inspector.js:
        (WebInspector.restoredBreakpoint):

2010-06-18  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Implement additional DOM attribute reflection for bindings
        https://bugs.webkit.org/show_bug.cgi?id=39936

        - Added support for [Reflect] for long, unsigned long, and boolean
          attributes.
        - Fixed code that set attributes like this: <video controls="controls">
          to instead set them like this: <video controls>.
        - Added lots more uses of [Reflect].
        - Removed now-unneeded [ConvertFromString].
        - Made [Reflect] imply [ConvertNullToNullString] so we can get rid
          of most uses of the latter.
        - Made [Reflect] automatically lowercase the name of the reflected
          content attribute to minimize the need to specify a custom content
          attribute name.

        One thing this patch does *not* do is remove the unneeded functions
        in the various DOM classes that are no longer used by the bindings.
        We should do that in a followup.

        * bindings/scripts/CodeGenerator.pm: Added new functions so code
        can be shared across bindings, GetterExpressionPrefix and
        SetterExpressionPrefix. We can do a lot more refactoring like
        this in the future.

        * bindings/scripts/CodeGeneratorCPP.pm: Removed unneeded
        ConvertFromString handling, changed to use the new
        GetterExpressionPrefix and SetterExpressionPrefix functions
        to better handle reflected DOM attributes.

        * bindings/scripts/CodeGeneratorGObject.pm: Removed unneeded
        ConvertFromString handling, changed to use the new
        GetterExpressionPrefix and SetterExpressionPrefix functions
        to better handle reflected DOM attributes. Fixed a few things
        in the output so the .cpp file will have more WebKit style.
        The .h file should be GTK style, but the .cpp file can be the
        standard WebKit style eventually.

        * bindings/scripts/CodeGeneratorJS.pm: Changed to use the new
        GetterExpressionPrefix and SetterExpressionPrefix functions
        and removed a now-unneeded IsSVGAnimatedType special case since
        the new functions take care of it. Made reflected attributes
        automatically convert null to the null string without a
        separate ConvertNullToNullString attribute.

        * bindings/scripts/CodeGeneratorObjC.pm: Changed to use the new
        GetterExpressionPrefix and SetterExpressionPrefix functions
        and removed a now-unneeded IsSVGAnimatedType special case since
        the new functions take care of it. Redid the special cases for
        ownerDocument and for operator to fit better with the new code
        paths. Removed unneeded ConvertFromString handling.

        * bindings/scripts/CodeGeneratorV8.pm: Changed to use the new
        GetterExpressionPrefix and SetterExpressionPrefix functions
        and removed a now-unneeded IsSVGAnimatedType special case since
        the new functions take care of it. Made reflected attributes
        automatically convert null to the null string without a
        separate ConvertNullToNullString attribute.

        * bindings/scripts/test/TestObj.idl: Added some test cases for
        content attribute reflection and for exceptions in string-typed
        attributes.

        * bindings/scripts/test/CPP/WebKitDOMTestObj.cpp: Updated.
        * bindings/scripts/test/CPP/WebKitDOMTestObj.h: Ditto.
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp: Ditto.
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h: Ditto.
        * bindings/scripts/test/JS/JSTestObj.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestObj.h: Ditto.
        * bindings/scripts/test/ObjC/DOMTestObj.h: Ditto.
        * bindings/scripts/test/ObjC/DOMTestObj.mm: Ditto.
        * bindings/scripts/test/V8/V8TestObj.cpp: Ditto.

        * dom/Element.cpp:
        (WebCore::Element::getIntegralAttribute): Added.
        (WebCore::Element::setIntegralAttribute): Added.
        (WebCore::Element::getUnsignedIntegralAttribute): Added.
        (WebCore::Element::setUnsignedIntegralAttribute): Added.
        * dom/Element.h: Added new attribute get/set functions for bindings.

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::isURLAttribute): Added. Returns true for
        srcAttr.
        * html/HTMLMediaElement.h: Added isURLAttribute.

        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::isURLAttribute): Changed to call
        HTMLMediaElement::isURLAttribute before checking for posterAttr.

        * html/HTMLAnchorElement.idl:
        * html/HTMLAppletElement.idl:
        * html/HTMLAreaElement.idl:
        * html/HTMLBRElement.idl:
        * html/HTMLBaseElement.idl:
        * html/HTMLBaseFontElement.idl:
        * html/HTMLBlockquoteElement.idl:
        * html/HTMLBodyElement.idl:
        * html/HTMLButtonElement.idl:
        * html/HTMLDListElement.idl:
        * html/HTMLDirectoryElement.idl:
        * html/HTMLDivElement.idl:
        * html/HTMLElement.idl:
        * html/HTMLEmbedElement.idl:
        * html/HTMLFontElement.idl:
        * html/HTMLFormElement.idl:
        * html/HTMLFrameElement.idl:
        * html/HTMLFrameSetElement.idl:
        * html/HTMLHRElement.idl:
        * html/HTMLHeadElement.idl:
        * html/HTMLHeadingElement.idl:
        * html/HTMLHtmlElement.idl:
        * html/HTMLIFrameElement.idl:
        * html/HTMLImageElement.idl:
        * html/HTMLInputElement.idl:
        * html/HTMLIsIndexElement.idl:
        * html/HTMLLIElement.idl:
        * html/HTMLLabelElement.idl:
        * html/HTMLLegendElement.idl:
        * html/HTMLLinkElement.idl:
        * html/HTMLMapElement.idl:
        * html/HTMLMediaElement.idl:
        * html/HTMLMenuElement.idl:
        * html/HTMLMetaElement.idl:
        * html/HTMLModElement.idl:
        * html/HTMLOListElement.idl:
        * html/HTMLObjectElement.idl:
        * html/HTMLOptGroupElement.idl:
        * html/HTMLOptionElement.idl:
        * html/HTMLParagraphElement.idl:
        * html/HTMLParamElement.idl:
        * html/HTMLPreElement.idl:
        * html/HTMLQuoteElement.idl:
        * html/HTMLScriptElement.idl:
        * html/HTMLStyleElement.idl:
        * html/HTMLTableCaptionElement.idl:
        * html/HTMLTableCellElement.idl:
        * html/HTMLTableColElement.idl:
        * html/HTMLTableElement.idl:
        * html/HTMLTableRowElement.idl:
        * html/HTMLTableSectionElement.idl:
        * html/HTMLTextAreaElement.idl:
        * html/HTMLUListElement.idl:
        * html/HTMLVideoElement.idl:
        * svg/SVGElement.idl:
        Added more uses of [Reflect]. Got rid of uses of [ConvertNullToNullString] that
        are now unneeded since [Reflect] now implies that. Changed formatting to be
        simpler and consistent without all the lining up and multiple lines.

2010-06-17  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Dimitri Glazkov.

        Remove some unnecessary checks that cause compiler warnings.
        https://bugs.webkit.org/show_bug.cgi?id=40772

        * bindings/v8/custom/V8SQLResultSetRowListCustom.cpp:
        (WebCore::V8SQLResultSetRowList::itemCallback):
        * bindings/v8/npruntime.cpp:

2010-06-18  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Implement 'takeHeapSnapshot' in InspectorController.

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

        * bindings/js/ScriptProfiler.h:
        (WebCore::ScriptProfiler::takeHeapSnapshot):
        * bindings/v8/ScriptProfiler.cpp:
        (WebCore::ScriptProfiler::takeHeapSnapshot):
        * bindings/v8/ScriptProfiler.h:
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::takeHeapSnapshot):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::takeHeapSnapshot):
        * inspector/InspectorController.h:

2010-06-18  Dan Bernstein  <mitz@apple.com>

        Reviewed by Anders Carlsson.

        REGRESSION (r61379?): Assertion failure in Element::getURLAttribute() when accessing the src attribute of a script element
        https://bugs.webkit.org/show_bug.cgi?id=40831

        Test: fast/dom/HTMLScriptElement/isURLAttribute.html

        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::isURLAttribute): Check for the 'src' attribute.

2010-06-18  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r61405.
        http://trac.webkit.org/changeset/61405
        https://bugs.webkit.org/show_bug.cgi?id=40838

        broke chromium mac compile (Requested by tonyg-cr1 on
        #webkit).

        * bindings/v8/ScriptSourceCode.h:
        (WebCore::ScriptSourceCode::ScriptSourceCode):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::compileScript):
        (WebCore::V8Proxy::evaluate):
        * bindings/v8/V8Proxy.h:

2010-06-18  Zhenyao Mo  <zmo@google.com>

        Reviewed by Dimitri Glazkov.

        Fix WebGLRenderingContext helper functions find{Texture/Renderbuffer/Buffer}
        https://bugs.webkit.org/show_bug.cgi?id=40176

        * html/canvas/WebGLBuffer.cpp: Remove constructor with existing name.
        * html/canvas/WebGLBuffer.h: Ditto.
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getVertexAttrib): Use findBuffer instead of creating a new WebGLBuffer.
        (WebCore::WebGLRenderingContext::findTexture): Deal with name == 0 case and return raw pointer.
        (WebCore::WebGLRenderingContext::findRenderbuffer): Ditto.
        (WebCore::WebGLRenderingContext::findBuffer): Find WebGLBuffer object using given name.
        * html/canvas/WebGLRenderingContext.h: Add findBuffer function declaration, change return type to raw pointer.

2010-06-18  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by David Levin.

        Persist V8's ScriptData to the memory cache.
        https://bugs.webkit.org/show_bug.cgi?id=38661

        This stores V8's ScriptData in the memory cache and also causes the
        network platform layer to be notified of the available cacheable
        metadata.

        Chromium's morejs benchmark showed a ~7% improvement when this was
        originally submitted (before it had to be rolled back).

        Test: fast/js/parser-high-byte-character.html

        * bindings/v8/ScriptSourceCode.h:
        (WebCore::ScriptSourceCode::ScriptSourceCode):
        (WebCore::ScriptSourceCode::cachedScript):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::compileScript):
        (WebCore::V8Proxy::precompileScript):
        (WebCore::V8Proxy::evaluate):
        * bindings/v8/V8Proxy.h:

2010-06-18  Anton Muhin  <antonm@chromium.org>

        Reviewed by Dimitri Glazkov.

        [v8] Finish migration to new named property query API
        https://bugs.webkit.org/show_bug.cgi?id=40771
        Remove definition which allowed gradual transition to new API.
        See https://bugs.webkit.org/show_bug.cgi?id=40303 for first phase.

        * config.h:

2010-06-17  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: bring XHR console records back.
        - adds "Enable XHR Monitor" / "Disable XHR Monitor" actions to the console's context menu
        - make the chosen option persist in the settings.

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

        * English.lproj/localizedStrings.js:
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::disableSearchingForNode):
        (WebCore::InspectorBackend::enableMonitoringXHR):
        (WebCore::InspectorBackend::disableMonitoringXHR):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::setMonitoringXHR):
        (WebCore::InspectorController::didLoadResourceFromMemoryCache):
        (WebCore::InspectorController::identifierForInitialRequest):
        (WebCore::InspectorController::resourceRetrievedByXMLHttpRequest):
        (WebCore::InspectorController::ensureSettingsLoaded):
        * inspector/InspectorController.h:
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::monitoringXHRWasEnabled):
        (WebCore::InspectorFrontend::monitoringXHRWasDisabled):
        * inspector/InspectorFrontend.h:
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype._handleContextMenuEvent):
        (WebInspector.ConsoleView.prototype._registerShortcuts):
        * inspector/front-end/InjectedScript.js:
        (injectedScriptConstructor.):
        * inspector/front-end/InspectorBackendStub.js:
        (.WebInspector.InspectorBackendStub):
        (.WebInspector.InspectorBackendStub.prototype.enableMonitoringXHR):
        (.WebInspector.InspectorBackendStub.prototype.disableMonitoringXHR):
        * inspector/front-end/inspector.js:
        (WebInspector.monitoringXHRWasEnabled):
        (WebInspector.monitoringXHRWasDisabled):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::didFinishLoading):

2010-06-18  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Modernize SVG Text code, following the HTML design
        https://bugs.webkit.org/show_bug.cgi?id=40663

        SVG Text does not support subpixel positioning
        https://bugs.webkit.org/show_bug.cgi?id=12172

        RenderSVGText can't do partial repaints
        https://bugs.webkit.org/show_bug.cgi?id=15386

        HTML and SVG need to share more text painting code
        https://bugs.webkit.org/show_bug.cgi?id=15644

        Rewrite SVG Text rendering, only keeping the layout of the actual characters/chunks as it was.
        We're now drawing SVG Text very similar to HTML Text, utilizing the SVGInlineFlowBox/SVGInlineTextBox structure,
        instead of painting all text content of a <text> element from the SVGRootInlineBox, as it was the last years.

        Rough overview of the changes:
        - Partial repainting support for text selections (startPos/endPos are respected), no more redrawing of the whole <text> content while selecting
        - Subpixel positioning (near pixel-perfect rendering for all W3C tests that contain text, finally!)
          -> much better textPath results, characters now align as expected, as all rounding hacks are disabled for SVG text runs, and subpixel precision is used while painting
        - No more custom handling of selection, the standard methods offsetFromPosition() / selectionRectForText() are used instead.
        - Selection works as expected on stretched/squeezed text (lengthAdjust="spacingAndGlyphs"), takes 'includePartialGlyphs' into account - just like HTML text
        - Correct text decoration drawing (proper with and positions and rendering-order, underline/overline before text, strike-through afterwards)
        - Proper sizing of all InlineBoxes, starting from the SVGRootInlineBox, down to every single flow & text box
          -> correct DRT results, no more weird negative offsets of text runs, etc. Looks exactly like the HTML text test results.
        - Rewritten SVGTextContentElement API to take per-character / per-chunk transformations into account.
        - Speeeeeed! Drawing is much faster now.

        Add 24 new testcases covering basic selection features and the SVGTextContentElement API. Each test draws a half-opaque red rectangle, calculated using
        SVGTextContentElement API to highlight the area that is supposed to be selected. Then eventSender API is utilized to move the mouse to the calculated
        start origin, holding it down and moving it to the end position.

        A detailed list of tests that show progression, can be found in the corresponding LayoutTests/ChangeLog.
        Note that this requires a rebaselining of all SVG tests containing text elements.

        Tests: svg/hixie/text/001.xml (moved from svg/hixie/text/001-broken.xml)
               svg/text/lengthAdjust-text-metrics.html
               svg/text/select-textLength-spacing-squeeze-1.svg
               svg/text/select-textLength-spacing-squeeze-2.svg
               svg/text/select-textLength-spacing-squeeze-3.svg
               svg/text/select-textLength-spacing-squeeze-4.svg
               svg/text/select-textLength-spacing-stretch-1.svg
               svg/text/select-textLength-spacing-stretch-2.svg
               svg/text/select-textLength-spacing-stretch-3.svg
               svg/text/select-textLength-spacing-stretch-4.svg
               svg/text/select-textLength-spacingAndGlyphs-squeeze-1.svg
               svg/text/select-textLength-spacingAndGlyphs-squeeze-2.svg
               svg/text/select-textLength-spacingAndGlyphs-squeeze-3.svg
               svg/text/select-textLength-spacingAndGlyphs-squeeze-4.svg
               svg/text/select-textLength-spacingAndGlyphs-stretch-1.svg
               svg/text/select-textLength-spacingAndGlyphs-stretch-2.svg
               svg/text/select-textLength-spacingAndGlyphs-stretch-3.svg
               svg/text/select-textLength-spacingAndGlyphs-stretch-4.svg
               svg/text/select-x-list-1.svg
               svg/text/select-x-list-2.svg
               svg/text/select-x-list-3.svg
               svg/text/select-x-list-4.svg
               svg/text/select-x-list-with-tspans-1.svg
               svg/text/select-x-list-with-tspans-2.svg
               svg/text/select-x-list-with-tspans-3.svg
               svg/text/select-x-list-with-tspans-4.svg

        * rendering/InlineBox.h: Remove not needed isInlineBox() method.
        (WebCore::InlineBox::isInlineTextBox): Constify this method.
        (WebCore::InlineBox::isSVGInlineTextBox): Added, with ENABLE(SVG) guards, just like the existing isSVGRootInlineBox().
        (WebCore::InlineBox::isSVGRootInlineBox): Constify this method.
        (WebCore::InlineBox::calculateBoundaries): Added, with ENABLE(SVG) guards, used to calculate the whole boundaries of a InlineText/FlowBox, only used in SVG text.
        * rendering/InlineFlowBox.h: Devirtualize placeBoxesHorizontally(), SVG no more overrides it.
        * rendering/InlineTextBox.h: Virtualize selectionStartEnd() - SVGInlineTextBox needs to change start/endPositions based on the current text chunk part that it's rendering.
                                     SVGTextChunkLayoutInfo.h contains a detailed documentation what a SVGTextChunk/SVGTextChunkPart is, and why they are necessary.
        (WebCore::InlineTextBox::isInlineTextBox): Constify this method.
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::forceLayoutInlineChildren): Add helper method, used only by RenderSVGText, to use a simplified layout strategy, which is a big speed win.
        * rendering/RenderBlockLineLayout.cpp:
        (WebCore::RenderBlock::computeHorizontalPositionsForLine): Remove all isSVGText() special cases, as this function is not called anymore for SVG text.
        (WebCore::RenderBlock::layoutInlineChildren): Don't call computeHorizontalPositionsForLine() for SVG text. computePerCharacterLayoutInformation() overrides it anyway.
        * rendering/RenderSVGInline.cpp: Remove custom absoluteRects/absoluteQuads code, all shared with RenderInline now.
        (WebCore::RenderSVGInline::clippedOverflowRectForRepaint): Added, forward to SVGRenderBase, just like all other non-text SVG renderers do.
        (WebCore::RenderSVGInline::computeRectForRepaint): Ditto.
        (WebCore::RenderSVGInline::mapLocalToContainer): Ditto
        * rendering/RenderSVGInline.h: 
        * rendering/RenderSVGInlineText.cpp: Remove destroy() hack, which called setNeedsLayoutAndPrefWidthsRecalc/repaint on destruction.
                                             As repaint rects work properly now, this hack is no longer necessary, it was only hiding the real problem.
        (WebCore::RenderSVGInlineText::styleDidChange): Don't skip RenderText::styleDidChange() anymore, which automatically schedules layout changes for us.
        (WebCore::RenderSVGInlineText::localCaretRect): Remove outdated comment, localCaretRect() is not yet needed in SVG text code.
        * rendering/RenderSVGInlineText.h: Remove custom absoluteRects/absoluteQuads/selectionRectForRepaint/positionForPoint/destroy/computeRectForRepaint* code, all shared with RenderText now.
        * rendering/RenderSVGText.cpp: 
        (WebCore::RenderSVGText::mapLocalToContainer): Take x/y translation into account, but do NOT include in localToParentTransform(), as that would affect rendering.
        (WebCore::RenderSVGText::layout): Use super-simplified layout strategy, removing a lot of uncessary stuff done by RenderBlock, that SVG does not need.
        (WebCore::RenderSVGText::absoluteRects): Remove dead-code, retreving the RenderSVGRoot* object, not necessary since a longer time.
        (WebCore::RenderSVGText::absoluteQuads): Ditto.
        (WebCore::RenderSVGText::paint): Early exit if we're not in PaintPhaseForeground/PaintPhaseSelfOutline. We're not interessted in other phases.
        (WebCore::RenderSVGText::strokeBoundingBox): Fix stroke width calculation, no need to special case SVGFonts.
        * rendering/RenderSVGText.h: Remove updateFirstLineBlock/updateFirstLetter overrides, the new RenderSVGText::layout() code, doesn't use these methods at all.
                                     We asked RenderBlock to layout before, which was calling updateFirstLetter & co, this is gone now, as it was all not needed.
        (WebCore::RenderSVGText::objectBoundingBox): Directly return the frameRect here, inlined for speed.
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::verticallyAlignBoxes): Early-exit if we're a SVGRootInlineBox. SVG handles this on its own.
        * rendering/RootInlineBox.h: Devirtualize verticallyAlignBoxes(), SVG no longer overrides it. Remove virtual computePerCharacterLayoutInformation() method, only lives in SVGRootInlineBox now.
        * rendering/SVGCharacterData.h: Remove no longer needed SVGTextDecorationInfo.
        * rendering/SVGCharacterLayoutInfo.cpp: Don't pass a reference to a Vector<SVGChar> to SVGCharacterLayoutInfo, let it create it.
        (WebCore::SVGCharacterLayoutInfo::SVGCharacterLayoutInfo):
        * rendering/SVGCharacterLayoutInfo.h:
        * rendering/SVGInlineFlowBox.cpp: 
        (WebCore::SVGInlineFlowBox::paint): Ask children to paint.
        (WebCore::SVGInlineFlowBox::calculateBoundaries): Calculate boundaries by uniting all direct children boundaries.
        * rendering/SVGInlineFlowBox.h: Remove placeBoxesHorizontally, which does not get called anymore, and does not need to be overriden.
        * rendering/SVGInlineTextBox.cpp: 
        (WebCore::SVGInlineTextBox::SVGInlineTextBox): Don't use abbrevations for variable names, initialize new member variables.
        (WebCore::SVGInlineTextBox::measureCharacter): New helper function extracted from buildLayoutInformation, replacing calculateGlyphWidth/Height.
        (WebCore::SVGInlineTextBox::offsetForPosition): Implement this method by utilizing Font::offsetForPosition(), but respecting the text chunk parts.
        (WebCore::SVGInlineTextBox::positionForOffset): No change here, still not used.
        (WebCore::SVGInlineTextBox::selectionRect): Rewritten, utilizing Font::selectionRectForText(), taking text chunk parts into account, and the supplied startPos/endPos.
        (WebCore::SVGInlineTextBox::paint): Rewritten, to handle paint servers much more elegant, than the old solution. See code for details, too much to explain here.
        (WebCore::SVGInlineTextBox::acquirePaintingResource): Helper function, used from paint().
        (WebCore::SVGInlineTextBox::releasePaintingResource): Ditto.
        (WebCore::SVGInlineTextBox::prepareGraphicsContextForTextPainting): Ditto.
        (WebCore::SVGInlineTextBox::restoreGraphicsContextAfterTextPainting): Ditto.
        (WebCore::SVGInlineTextBox::constructTextRun): Helper function centralizing the creation of a TextRun object, used to draw/measure SVG text.
        (WebCore::SVGInlineTextBox::mapStartEndPositionsIntoChunkPartCoordinates): Important helper function, mapping a startPos/endPos from InlineTextBox
                                                                                   coordinate space to the SVGInlineTextBox, respecting the current text chunk part.
        (WebCore::SVGInlineTextBox::selectionStartEnd): Call InlineTextBox::selectionStartEnd(), and apply post fixes when m_currentChunkPart is set. (called when painting a selected chunk part)
        (WebCore::positionOffsetForDecoration): Refactored from old paintDecoration() code.
        (WebCore::thicknessForDecoration): Ditto.
        (WebCore::findRenderObjectDefininingTextDecoration): Ditto.
        (WebCore::SVGInlineTextBox::paintDecoration): Ditto. (Can not share the code with HTML, as we need floating point precision, and directly call fillRect, instead of drawHighlightForText.)
        (WebCore::SVGInlineTextBox::paintDecorationWithStyle): Ditto.
        (WebCore::SVGInlineTextBox::paintSelection): New method, painting text selections with floating-point precision.
        (WebCore::SVGInlineTextBox::paintText): New method, painting text with floating-point precision, correctly handling selected text, removing the need for special SVG text sub-paint phases.
                                                (GlyphFill/StrokeSelectionPhase, GlyphFill/StrokePhase)
        (WebCore::SVGInlineTextBox::buildLayoutInformation): Use new measureCharacter() helper function, renamed some variables, to avoid abbrevations.
        (WebCore::SVGInlineTextBox::calculateGlyphBoundaries): Rewritten to use new measureCharacter() helper function.
        (WebCore::SVGInlineTextBox::calculateBoundaries): Rewritten to take text chunk parts into account, serves as central method used to layout InlineBoxes (see SVGRootInlineBox.)
        * rendering/SVGInlineTextBox.h:
        (WebCore::SVGInlineTextBox::isSVGInlineTextBox): Added.
        (WebCore::SVGInlineTextBox::setHeight): Rename variable, to avoid abbrevations.
        (WebCore::SVGInlineTextBox::chunkTransformation): New helper function, returning the transformation, that gets applied to the complete text chunk, if any.
        (WebCore::SVGInlineTextBox::setChunkTransformation): New helper function used by SVGRrootInlineBox, to set the chunk transformation, during text chunk part propagation phase.
        (WebCore::SVGInlineTextBox::addChunkPartInformation): Ditto.
        (WebCore::SVGInlineTextBox::svgTextChunkParts): Ditto.
        * rendering/SVGRootInlineBox.cpp: Virtually rewritten, to be designed more like HTMLs RootInlineBox, diving into children for painting.
        (WebCore::SVGRootInlineBox::paint): Ask children to paint, nothing more. No more traversing through the SVGTextChunks, figuring out which part to render, this is done in layout phase now.
        (WebCore::SVGRootInlineBox::computePerCharacterLayoutInformation): Completly redesigned, see SVGTextChunkLayoutInfo.h for a high-level overview.
        (WebCore::SVGRootInlineBox::buildLayoutInformation): Just small cleanups, nothing changed here.
        (WebCore::SVGRootInlineBox::layoutChildBoxes): New helper function, extracted from old layoutInlineBoxes().
        (WebCore::SVGRootInlineBox::layoutRootBox): Ditto.
        (WebCore::SVGRootInlineBox::propagateTextChunkPartInformation): Key-concept of the new design, builds "text chunk parts" and propagates that knownledge to all child SVGInlineTextBoxes.
        * rendering/SVGRootInlineBox.h:
        (WebCore::SVGRootInlineBox::isSVGRootInlineBox): Constified method.
        (WebCore::SVGRootInlineBox::setHeight): Change variable name, to avoid abbrevations.
        * rendering/SVGTextChunkLayoutInfo.cpp: Remove if 0, enable compilation.
        * rendering/SVGTextChunkLayoutInfo.h: Add large comment explaining text chunk parts, the key concept of the new design. Remove SVGTextChunkWalker & friends, no longer used.
        (WebCore::SVGTextChunkPart::SVGTextChunkPart):
        (WebCore::SVGTextChunkPart::isValid):
        (WebCore::SVGTextChunk::SVGTextChunk):
        (WebCore::SVGTextChunkLayoutInfo::SVGTextChunkLayoutInfo):
        (WebCore::SVGTextChunkLayoutInfo::textChunks):
        * rendering/SVGTextLayoutUtilities.cpp:
        (WebCore::cummulatedWidthOfInlineBoxCharacterRange):
        (WebCore::cummulatedHeightOfInlineBoxCharacterRange):
        (WebCore::svgTextRunForInlineTextBox): Disable rounding hacks, explain parameters with comments, why they have which values.
        * rendering/SVGTextLayoutUtilities.h: Remove SVGTextPaintSubphase and SVGTextPaintInfo.
        * rendering/SVGTextQuery.cpp: Remove if 0, enable compilation.
        * rendering/SVGTextQuery.h: Ditto.
        * svg/SVGStyledElement.cpp: Very important change! Do not treat CSS attributes as recognized attributes, that would lead to setNeedsLayout() calls, reducing performance!
                                    This hack existed, as we were not dealing with text updates correctly, now that RenderSVGInlineText::styleDidChange is fixed, it's no longer necessary.
        (WebCore::SVGStyledElement::isKnownAttribute):
        * svg/SVGTextContentElement.cpp: Completely remove the SVGTextContentElement API, that manually traversed all text chunks, instead use the new SVGTextQuery API.
        (WebCore::SVGTextContentElement::getNumberOfChars):
        (WebCore::SVGTextContentElement::getComputedTextLength):
        (WebCore::SVGTextContentElement::getSubStringLength):
        (WebCore::SVGTextContentElement::getStartPositionOfChar):
        (WebCore::SVGTextContentElement::getEndPositionOfChar):
        (WebCore::SVGTextContentElement::getExtentOfChar):
        (WebCore::SVGTextContentElement::getRotationOfChar):
        (WebCore::SVGTextContentElement::getCharNumAtPosition):
        * svg/SVGTextElement.cpp: Very important change! Do not calls setNeedsLayout() on RenderSVGText, if childrenChanged() has been called.
        * svg/SVGTextElement.h: Completly remove childrenChanged() - no longer necessary, updates work as expected without it now.

2010-06-18  Lucas De Marchi  <lucas.demarchi@profusion.mobi>

        Reviewed by David Levin.

        Fix compilation when filters are disabled. Revision r60689
        changed the signature of SVGRenderBase::prepareToRenderSVGContent()
        but didn't change the unsused parameters when filters are disabled.
        https://bugs.webkit.org/show_bug.cgi?id=40625

        No new tests. Compilation fix.

        * rendering/SVGRenderSupport.cpp:
        (WebCore::SVGRenderBase::prepareToRenderSVGContent):

2010-06-18  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        noAccess url schemes block access to inline stylesheets
        https://bugs.webkit.org/show_bug.cgi?id=32309

        Instead of using baseURL() to grab the security context we should just
        use finalURL directly.  When I wrote the original patch that added this
        security check, finalURL didn't exist yet.

        If finalURL is an empty URL, that means we generated the style sheet
        from text that didn't have a URL.  It would be slightly safer to store
        a bit on CSSStyleSheet indicating whether it came from an inline style
        sheet, but I think this check is fairly accurate.

        Test: http/tests/security/data-url-inline.css.html

        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::cssRules):

2010-06-18  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Remove unneeded custom code for WebSocket.send
        https://bugs.webkit.org/show_bug.cgi?id=38180

        We don't appear to require a custom binding here.  The old function was
        wacky in two ways:

        1) It required all of its arguments.

        2) If the toString of its argument threw, it would catch the exception
           and re-throw a different exception.

        I've kept the first behavior but changed the second (and documented it
        with a test).

        Test: websocket/tests/send-throw.html

        * bindings/js/JSWebSocketCustom.cpp:
        * bindings/v8/custom/V8WebSocketCustom.cpp:
        * websockets/WebSocket.idl:

2010-06-15  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Adam Barth.

        Move isAvailable()/setIsAvailable() from Database/DatabaseSync to AbstractDatabase.
        https://bugs.webkit.org/show_bug.cgi?id=39041

        * WebCore.base.exp
        * bindings/generic/RuntimeEnabledFeatures.cpp:
        (WebCore::RuntimeEnabledFeatures::openDatabaseEnabled):
        (WebCore::RuntimeEnabledFeatures::openDatabaseSyncEnabled):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::openDatabase):
        * storage/AbstractDatabase.cpp:
        (WebCore::AbstractDatabase::isAvailable):
        (WebCore::AbstractDatabase::setIsAvailable):
        * storage/AbstractDatabase.h:
        * storage/Database.cpp:
        * storage/Database.h:
        * storage/DatabaseSync.cpp:
        * storage/DatabaseSync.h:
        * workers/WorkerContext.cpp:
        (WebCore::WorkerContext::openDatabase):
        (WebCore::WorkerContext::openDatabaseSync):
        * workers/WorkerContext.h:

2010-06-18  Adam Barth  <abarth@webkit.org>

        Rubber-stamped by Eric Seidel.

        Fix the namespace indent for HTML5Lexer.  This patch changes
        white-space only.

        * html/HTML5Lexer.h:
        (WebCore::HTML5Lexer::):
        (WebCore::HTML5Lexer::lineNumber):
        (WebCore::HTML5Lexer::columnNumber):
        (WebCore::HTML5Lexer::state):
        (WebCore::HTML5Lexer::setState):
        (WebCore::HTML5Lexer::skipLeadingNewLineForListing):
        (WebCore::HTML5Lexer::InputStreamPreprocessor::InputStreamPreprocessor):
        (WebCore::HTML5Lexer::InputStreamPreprocessor::nextInputCharacter):
        (WebCore::HTML5Lexer::InputStreamPreprocessor::peek):
        (WebCore::HTML5Lexer::InputStreamPreprocessor::advance):

2010-06-18  Fumitoshi Ukai  <ukai@chromium.org>

        Unreviewed test breakage fix.

        WebSocket: resume should not process buffer if already processing.
        https://bugs.webkit.org/show_bug.cgi?id=39340

        MessageLoop runs in main thread, so we don't need to use timer in worker thread.
        Also, we should not use Timer in worker thread.

        * websockets/ThreadableWebSocketChannelClientWrapper.h:
        (WebCore::ThreadableWebSocketChannelClientWrapper::resume):
        (WebCore::ThreadableWebSocketChannelClientWrapper::ThreadableWebSocketChannelClientWrapper):

2010-06-17  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r61379.
        http://trac.webkit.org/changeset/61379
        https://bugs.webkit.org/show_bug.cgi?id=40813

        Broke multiple tests on all platforms (Requested by tkent on
        #webkit).

        * bindings/scripts/CodeGenerator.pm:
        * bindings/scripts/CodeGeneratorCPP.pm:
        * bindings/scripts/CodeGeneratorGObject.pm:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorObjC.pm:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/scripts/test/CPP/WebDOMTestObj.cpp:
        (WebDOMTestObj::attrWithException):
        (WebDOMTestObj::setAttrWithException):
        (WebDOMTestObj::attrWithSetterException):
        (WebDOMTestObj::attrWithGetterException):
        (WebDOMTestObj::setAttrWithGetterException):
        * bindings/scripts/test/CPP/WebDOMTestObj.h:
        * bindings/scripts/test/GObject/WebKitDOMTestCallback.cpp:
        (webkit_dom_test_callback_callback_with_class1param):
        (webkit_dom_test_callback_callback_with_class2param):
        (webkit_dom_test_callback_callback_with_non_bool_return_type):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        (webkit_dom_test_obj_void_method):
        (webkit_dom_test_obj_void_method_with_args):
        (webkit_dom_test_obj_int_method):
        (webkit_dom_test_obj_int_method_with_args):
        (webkit_dom_test_obj_obj_method):
        (webkit_dom_test_obj_obj_method_with_args):
        (webkit_dom_test_obj_method_that_requires_all_args):
        (webkit_dom_test_obj_method_that_requires_all_args_and_throws):
        (webkit_dom_test_obj_serialized_value):
        (webkit_dom_test_obj_method_with_exception):
        (webkit_dom_test_obj_with_dynamic_frame):
        (webkit_dom_test_obj_with_dynamic_frame_and_arg):
        (webkit_dom_test_obj_with_dynamic_frame_and_optional_arg):
        (webkit_dom_test_obj_with_dynamic_frame_and_user_gesture):
        (webkit_dom_test_obj_with_dynamic_frame_and_user_gesture_asad):
        (webkit_dom_test_obj_with_script_state_void):
        (webkit_dom_test_obj_with_script_state_obj):
        (webkit_dom_test_obj_with_script_state_void_exception):
        (webkit_dom_test_obj_with_script_state_obj_exception):
        (webkit_dom_test_obj_with_script_execution_context):
        (webkit_dom_test_obj_method_with_optional_arg):
        (webkit_dom_test_obj_method_with_non_optional_arg_and_optional_arg):
        (webkit_dom_test_obj_method_with_non_optional_arg_and_two_optional_args):
        (webkit_dom_test_obj_get_read_only_int_attr):
        (webkit_dom_test_obj_get_read_only_string_attr):
        (webkit_dom_test_obj_get_read_only_test_obj_attr):
        (webkit_dom_test_obj_get_int_attr):
        (webkit_dom_test_obj_set_int_attr):
        (webkit_dom_test_obj_get_long_long_attr):
        (webkit_dom_test_obj_set_long_long_attr):
        (webkit_dom_test_obj_get_unsigned_long_long_attr):
        (webkit_dom_test_obj_set_unsigned_long_long_attr):
        (webkit_dom_test_obj_get_string_attr):
        (webkit_dom_test_obj_set_string_attr):
        (webkit_dom_test_obj_get_test_obj_attr):
        (webkit_dom_test_obj_set_test_obj_attr):
        (webkit_dom_test_obj_get_attr_with_exception):
        (webkit_dom_test_obj_set_attr_with_exception):
        (webkit_dom_test_obj_get_attr_with_setter_exception):
        (webkit_dom_test_obj_set_attr_with_setter_exception):
        (webkit_dom_test_obj_get_attr_with_getter_exception):
        (webkit_dom_test_obj_set_attr_with_getter_exception):
        (webkit_dom_test_obj_get_script_string_attr):
        (webkit_dom_test_obj_get_conditional_attr1):
        (webkit_dom_test_obj_set_conditional_attr1):
        (webkit_dom_test_obj_get_conditional_attr2):
        (webkit_dom_test_obj_set_conditional_attr2):
        (webkit_dom_test_obj_get_conditional_attr3):
        (webkit_dom_test_obj_set_conditional_attr3):
        (webkit_dom_test_obj_get_description):
        (webkit_dom_test_obj_get_id):
        (webkit_dom_test_obj_set_id):
        (webkit_dom_test_obj_get_hash):
        (webkit_dom_test_obj_set_property):
        (webkit_dom_test_obj_get_property):
        (webkit_dom_test_obj_class_init):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::):
        (WebCore::jsTestObjAttrWithException):
        (WebCore::jsTestObjAttrWithSetterException):
        (WebCore::jsTestObjAttrWithGetterException):
        (WebCore::setJSTestObjAttrWithException):
        (WebCore::setJSTestObjAttrWithGetterException):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod):
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.mm:
        (-[DOMTestObj attrWithException]):
        (-[DOMTestObj setAttrWithException:]):
        (-[DOMTestObj attrWithSetterException]):
        (-[DOMTestObj attrWithGetterException]):
        (-[DOMTestObj setAttrWithGetterException:]):
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjInternal::attrWithExceptionAttrGetter):
        (WebCore::TestObjInternal::attrWithExceptionAttrSetter):
        (WebCore::TestObjInternal::attrWithSetterExceptionAttrGetter):
        (WebCore::TestObjInternal::attrWithGetterExceptionAttrGetter):
        (WebCore::TestObjInternal::attrWithGetterExceptionAttrSetter):
        (WebCore::TestObjInternal::overloadedMethodCallback):
        (WebCore::):
        * dom/Element.cpp:
        * dom/Element.h:
        * html/HTMLAnchorElement.idl:
        * html/HTMLAppletElement.idl:
        * html/HTMLAreaElement.idl:
        * html/HTMLBRElement.idl:
        * html/HTMLBaseElement.idl:
        * html/HTMLBaseFontElement.idl:
        * html/HTMLBlockquoteElement.idl:
        * html/HTMLBodyElement.idl:
        * html/HTMLButtonElement.idl:
        * html/HTMLDListElement.idl:
        * html/HTMLDirectoryElement.idl:
        * html/HTMLDivElement.idl:
        * html/HTMLElement.idl:
        * html/HTMLEmbedElement.idl:
        * html/HTMLFontElement.idl:
        * html/HTMLFormElement.idl:
        * html/HTMLFrameElement.idl:
        * html/HTMLFrameSetElement.idl:
        * html/HTMLHRElement.idl:
        * html/HTMLHeadElement.idl:
        * html/HTMLHeadingElement.idl:
        * html/HTMLHtmlElement.idl:
        * html/HTMLIFrameElement.idl:
        * html/HTMLImageElement.idl:
        * html/HTMLInputElement.idl:
        * html/HTMLIsIndexElement.idl:
        * html/HTMLLIElement.idl:
        * html/HTMLLabelElement.idl:
        * html/HTMLLegendElement.idl:
        * html/HTMLLinkElement.idl:
        * html/HTMLMapElement.idl:
        * html/HTMLMediaElement.idl:
        * html/HTMLMenuElement.idl:
        * html/HTMLMetaElement.idl:
        * html/HTMLModElement.idl:
        * html/HTMLOListElement.idl:
        * html/HTMLObjectElement.idl:
        * html/HTMLOptGroupElement.idl:
        * html/HTMLOptionElement.idl:
        * html/HTMLParagraphElement.idl:
        * html/HTMLParamElement.idl:
        * html/HTMLPreElement.idl:
        * html/HTMLQuoteElement.idl:
        * html/HTMLScriptElement.idl:
        * html/HTMLStyleElement.idl:
        * html/HTMLTableCaptionElement.idl:
        * html/HTMLTableCellElement.idl:
        * html/HTMLTableColElement.idl:
        * html/HTMLTableElement.idl:
        * html/HTMLTableRowElement.idl:
        * html/HTMLTableSectionElement.idl:
        * html/HTMLTextAreaElement.idl:
        * html/HTMLUListElement.idl:
        * html/HTMLVideoElement.idl:
        * svg/SVGElement.idl:

2010-06-17  Rob Buis  <rwlbuis@gmail.com>

        Reviewed by Dave Hyatt.

        CSS3 "Property is declared twice in rule" test fails
        https://bugs.webkit.org/show_bug.cgi?id=36282

        Filter out duplicate properties in style declaration.

        Test: fast/css/duplicate-property-in-rule.html

        * css/CSSMutableStyleDeclaration.cpp: Filter out duplicate properties
        (WebCore::CSSMutableStyleDeclaration::CSSMutableStyleDeclaration):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue): Discard negative padding values
        * css/CSSStyleSelector.cpp: Remove negative padding check
        (WebCore::CSSStyleSelector::applyProperty):

2010-06-17  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Implement additional DOM attribute reflection for bindings
        https://bugs.webkit.org/show_bug.cgi?id=39936

        - Added support for [Reflect] for long, unsigned long, and boolean
          attributes.
        - Fixed code that set attributes like this: <video controls="controls">
          to instead set them like this: <video controls>.
        - Added lots more uses of [Reflect].
        - Removed now-unneeded [ConvertFromString].
        - Made [Reflect] imply [ConvertNullToNullString] so we can get rid
          of most uses of the latter.
        - Made [Reflect] automatically lowercase the name of the reflected
          content attribute to minimize the need to specify a custom content
          attribute name.

        One thing this patch does *not* do is remove the unneeded functions
        in the various DOM classes that are no longer used by the bindings.
        We should do that in a followup.

        * bindings/scripts/CodeGenerator.pm: Added new functions so code
        can be shared across bindings, GetterExpressionPrefix and
        SetterExpressionPrefix. We can do a lot more refactoring like
        this in the future.

        * bindings/scripts/CodeGeneratorCPP.pm: Removed unneeded
        ConvertFromString handling, changed to use the new
        GetterExpressionPrefix and SetterExpressionPrefix functions
        to better handle reflected DOM attributes.

        * bindings/scripts/CodeGeneratorGObject.pm: Removed unneeded
        ConvertFromString handling, changed to use the new
        GetterExpressionPrefix and SetterExpressionPrefix functions
        to better handle reflected DOM attributes. Fixed a few things
        in the output so the .cpp file will have more WebKit style.
        The .h file should be GTK style, but the .cpp file can be the
        standard WebKit style eventually.

        * bindings/scripts/CodeGeneratorJS.pm: Changed to use the new
        GetterExpressionPrefix and SetterExpressionPrefix functions
        and removed a now-unneeded IsSVGAnimatedType special case since
        the new functions take care of it. Made reflected attributes
        automatically convert null to the null string without a
        separate ConvertNullToNullString attribute.

        * bindings/scripts/CodeGeneratorObjC.pm: Changed to use the new
        GetterExpressionPrefix and SetterExpressionPrefix functions
        and removed a now-unneeded IsSVGAnimatedType special case since
        the new functions take care of it. Redid the special cases for
        ownerDocument and for operator to fit better with the new code
        paths. Removed unneeded ConvertFromString handling.

        * bindings/scripts/CodeGeneratorV8.pm: Changed to use the new
        GetterExpressionPrefix and SetterExpressionPrefix functions
        and removed a now-unneeded IsSVGAnimatedType special case since
        the new functions take care of it. Made reflected attributes
        automatically convert null to the null string without a
        separate ConvertNullToNullString attribute.

        * bindings/scripts/test/TestObj.idl: Added some test cases for
        content attribute reflection and for exceptions in string-typed
        attributes.

        * bindings/scripts/test/CPP/WebKitDOMTestObj.cpp: Updated.
        * bindings/scripts/test/CPP/WebKitDOMTestObj.h: Ditto.
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp: Ditto.
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h: Ditto.
        * bindings/scripts/test/JS/JSTestObj.cpp: Ditto.
        * bindings/scripts/test/JS/JSTestObj.h: Ditto.
        * bindings/scripts/test/ObjC/DOMTestObj.h: Ditto.
        * bindings/scripts/test/ObjC/DOMTestObj.mm: Ditto.
        * bindings/scripts/test/V8/V8TestObj.cpp: Ditto.

        * dom/Element.cpp:
        (WebCore::Element::getIntegralAttribute): Added.
        (WebCore::Element::setIntegralAttribute): Added.
        (WebCore::Element::getUnsignedIntegralAttribute): Added.
        (WebCore::Element::setUnsignedIntegralAttribute): Added.
        * dom/Element.h: Added new attribute get/set functions for bindings.

        * html/HTMLAnchorElement.idl:
        * html/HTMLAppletElement.idl:
        * html/HTMLAreaElement.idl:
        * html/HTMLBRElement.idl:
        * html/HTMLBaseElement.idl:
        * html/HTMLBaseFontElement.idl:
        * html/HTMLBlockquoteElement.idl:
        * html/HTMLBodyElement.idl:
        * html/HTMLButtonElement.idl:
        * html/HTMLDListElement.idl:
        * html/HTMLDirectoryElement.idl:
        * html/HTMLDivElement.idl:
        * html/HTMLElement.idl:
        * html/HTMLEmbedElement.idl:
        * html/HTMLFontElement.idl:
        * html/HTMLFormElement.idl:
        * html/HTMLFrameElement.idl:
        * html/HTMLFrameSetElement.idl:
        * html/HTMLHRElement.idl:
        * html/HTMLHeadElement.idl:
        * html/HTMLHeadingElement.idl:
        * html/HTMLHtmlElement.idl:
        * html/HTMLIFrameElement.idl:
        * html/HTMLImageElement.idl:
        * html/HTMLInputElement.idl:
        * html/HTMLIsIndexElement.idl:
        * html/HTMLLIElement.idl:
        * html/HTMLLabelElement.idl:
        * html/HTMLLegendElement.idl:
        * html/HTMLLinkElement.idl:
        * html/HTMLMapElement.idl:
        * html/HTMLMediaElement.idl:
        * html/HTMLMenuElement.idl:
        * html/HTMLMetaElement.idl:
        * html/HTMLModElement.idl:
        * html/HTMLOListElement.idl:
        * html/HTMLObjectElement.idl:
        * html/HTMLOptGroupElement.idl:
        * html/HTMLOptionElement.idl:
        * html/HTMLParagraphElement.idl:
        * html/HTMLParamElement.idl:
        * html/HTMLPreElement.idl:
        * html/HTMLQuoteElement.idl:
        * html/HTMLScriptElement.idl:
        * html/HTMLStyleElement.idl:
        * html/HTMLTableCaptionElement.idl:
        * html/HTMLTableCellElement.idl:
        * html/HTMLTableColElement.idl:
        * html/HTMLTableElement.idl:
        * html/HTMLTableRowElement.idl:
        * html/HTMLTableSectionElement.idl:
        * html/HTMLTextAreaElement.idl:
        * html/HTMLUListElement.idl:
        * html/HTMLVideoElement.idl:
        * svg/SVGElement.idl:
        Added more uses of [Reflect]. Got rid of uses of [ConvertNullToNullString] that
        are now unneeded since [Reflect] now implies that. Changed formatting to be
        simpler and consistent without all the lining up and multiple lines.

2010-06-17  MORITA Hajime  <morrita@google.com>

        Unreviewd, fixed a build break.

        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::pseudoId):

2010-06-16  MORITA Hajime  <morrita@google.com>

        Reviewed by Kent Tamura.

        <meter> should allow styling for each gauge-level and component
        https://bugs.webkit.org/show_bug.cgi?id=40280

        - Introduced following new pseudo classes for <meter> element.
        
          - -webkit-meter-horizontal-bar
          - -webkit-meter-vertical-bar
          - -webkit-meter-horizontal-optimum-value
          - -webkit-meter-vertical-optimum-value
          - -webkit-meter-horizontal-suboptimal-value
          - -webkit-meter-vertical-suboptimal-value
          - -webkit-meter-horizontal-even-less-good-value
          - -webkit-meter-vertical-even-less-good-value
        
        - Introduced 2 shadow nodes for RenderMeter to handle CSS styling. 
          one for bar part and another for value part.
        - Removed RenderTheme::paintMeter() implementation because it can be
          handled by styled painting without RenderTheme.
        - Pulled RenderIndicator up to super class from RenderProgress,
          then make RenderMeter a subclass of it.
        - Moved shadow related methods from RenderProgress to ShadowBlockElement
          to share it with RenderMeter.
        - Added rules for html.css for new pseudo classes.
        
        Tests: fast/dom/HTMLMeterElement/meter-styles-changing-pseudo.html
               fast/dom/HTMLMeterElement/meter-styles.html

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::pseudoId):
        (WebCore::nameToPseudoTypeMap):
        (WebCore::CSSSelector::extractPseudoType):
        * css/CSSSelector.h:
        (WebCore::CSSSelector::):
        * css/html.css:
        (meter::-webkit-meter-horizontal-bar):
        (meter::-webkit-meter-vertical-bar):
        (meter::-webkit-meter-horizontal-optimum-value):
        (meter::-webkit-meter-horizontal-suboptimal-value):
        (meter::-webkit-meter-horizontal-even-less-good-value):
        (meter::-webkit-meter-vertical-optimum-value):
        (meter::-webkit-meter-vertical-suboptimal-value):
        (meter::-webkit-meter-vertical-even-less-good-value):
        * rendering/RenderIndicator.cpp: Added.
        (WebCore::RenderIndicator::RenderIndicator):
        (WebCore::RenderIndicator::~RenderIndicator):
        (WebCore::RenderIndicator::layout):
        (WebCore::RenderIndicator::styleDidChange):
        (WebCore::RenderIndicator::updateFromElement):
        (WebCore::RenderIndicator::hasParts):
        (WebCore::RenderIndicator::requestLayoutForParts):
        * rendering/RenderIndicator.h: Added.
        (WebCore::RenderIndicator::requiresForcedStyleRecalcPropagation):
        * rendering/RenderMeter.cpp:
        (WebCore::RenderMeter::RenderMeter):
        (WebCore::RenderMeter::~RenderMeter):
        (WebCore::RenderMeter::layoutParts): Added.
        (WebCore::RenderMeter::shouldHaveParts): Added.
        (WebCore::RenderMeter::valueRatio): Added.
        (WebCore::RenderMeter::barPartRect): Added.
        (WebCore::RenderMeter::valuePartRect): Added.
        (WebCore::RenderMeter::isHorizontal): Added.
        (WebCore::RenderMeter::valuePseudoId): Added.
        (WebCore::RenderMeter::barPseudoId): Added.
        (WebCore::RenderMeter::updatePartsState): Added.
        * rendering/RenderMeter.h:
        * rendering/RenderProgress.cpp:
        (WebCore::RenderProgress::RenderProgress):
        (WebCore::RenderProgress::updateFromElement):
        (WebCore::RenderProgress::paint):
        (WebCore::RenderProgress::layoutParts): Added.
        (WebCore::RenderProgress::shouldHaveParts): Added.
        (WebCore::RenderProgress::updatePartsState):
        (WebCore::RenderProgress::valuePartRect):
        * rendering/RenderProgress.h:
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::isControlStyled):
        (WebCore::RenderTheme::paintMeter):
        * rendering/RenderTheme.h:
        (WebCore::RenderTheme::supportsMeter): Added.
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::supportsMeter): Added.
        * rendering/ShadowElement.cpp:
        (WebCore::ShadowBlockElement::layoutAsPart): Added.
        (WebCore::ShadowBlockElement::updateStyleForPart): Added.
        (WebCore::ShadowBlockElement::createForPart): Added.
        (WebCore::ShadowBlockElement::createStyleForPart): Added.
        (WebCore::ShadowBlockElement::partShouldHaveStyle): Added.
        * rendering/ShadowElement.h:
        * rendering/style/RenderStyleConstants.h:
        (WebCore::):

2010-06-17  Fumitoshi Ukai  <ukai@chromium.org>

        Reviewed by Alexey Proskuryakov.

        WebSocket: resume should not process buffer if already processing.
        https://bugs.webkit.org/show_bug.cgi?id=39340

        Test: websocket/tests/alert-in-event-handler.html

        While running an event handler of WebSocket object, it may be suspended
        and resumed in various reason. e.g. alert() will suspend/resume
        ActiveDOM objects. In chromium, sending IPC message would also
        suspend/resume ActiveDOM objects.
        If resume process pending buffer in this case, another event might
        be fired while running the initial event handler.
        Thus, resume should not process pending buffer immediately.
        Pending buffer would be processed after the current task has been
        finished.

        * websockets/ThreadableWebSocketChannelClientWrapper.h:
        * websockets/WebSocketChannel.cpp:
        (WebCore::WebSocketChannel::WebSocketChannel):
        (WebCore::WebSocketChannel::resume):
         Just set one shot timer for resumeTimerFired() if not yet set.
        (WebCore::WebSocketChannel::resumeTimerFired):
         Process pending event after resume was called.
        * websockets/WebSocketChannel.h:

2010-06-17  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        REGRESSION(HTML5 parser): editing/selection/leave-requested-block.html can fail or crash
        https://bugs.webkit.org/show_bug.cgi?id=40764

        HTML5ScriptRunner was careful to only call CachedResource::addClient
        for cases where the resource was not already loaded.  This was to
        avoid getting synchronous notifyFinished callbacks from inside
        addClient.  (The old HTMLDocumentParser also has hacks to work around
        addClient's synchronous notifyFinished behavior for already-loaded
        resources as well.)

        It turns out that CachedResource will mark itself as purgeable if it
        has no clients, thus it could have its data cleared (but itself not
        deleted) in the case where we yield back to the runloop to wait for
        CSS to load before executing the loaded script.

        The fix is to act more like the old parser and always call addClient
        on every CachedScript we load.  But unlike the old parser, we're
        careful not to re-enter from addClient -> notifyFinished
        using guards in HTML5DocumentParser::watchForLoad.

        I do not know how to make a CachedResource purge itself
        from a LayoutTest, so this is not currently testable.
        If anyone knows how I'm happy to make a test.

        * html/HTML5DocumentParser.cpp:
        (WebCore::HTML5DocumentParser::watchForLoad):
         - It is now expected to call watchForLoad with a loaded script.
        (WebCore::HTML5DocumentParser::notifyFinished):
         - Now that watchForLoad is called with loaded scripts, notifyFinished
           may be be called from addClient, thus we may be in the middle of
           script execution when it's called.  It's OK.  We pass the call
           along to HTML5ScriptRunner::executeScriptsWaitingForLoad
           and it knows how to ignore the call in that case.
        * html/HTML5DocumentParser.h:
         - Document these member variables more.
        * html/HTML5ScriptRunner.cpp:
        (WebCore::HTML5ScriptRunner::~HTML5ScriptRunner):
        (WebCore::HTML5ScriptRunner::executePendingScript):
        (WebCore::HTML5ScriptRunner::hasScriptsWaitingForLoad):
        (WebCore::HTML5ScriptRunner::watchForLoad):
         - Set the pending script to RegisteringForWatch state before
           watching and WatchingForLoad after.
        (WebCore::HTML5ScriptRunner::stopWatchingForLoad):
         - Set the pending script to NotWatchingForLoad.
        (WebCore::HTML5ScriptRunner::executeScriptsWaitingForLoad):
         - Assert that callers checked hasScriptsWaitingForLoad()
        (WebCore::HTML5ScriptRunner::requestScript):
        * html/HTML5ScriptRunner.h:
        (WebCore::HTML5ScriptRunner::PendingScript::):
        (WebCore::HTML5ScriptRunner::PendingScript::PendingScript):
        (WebCore::HTML5ScriptRunner::PendingScript::watchingForLoad):
        * html/HTML5ScriptRunnerHost.h:
         - Document the new expectations of watchForLoad

2010-06-17  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Eric Seidel.

        Prevent HTML5PreloadScanner from loading resources in <noscript> tags.
        https://bugs.webkit.org/show_bug.cgi?id=40779

        No new tests. Will create a layout test in a subsequent patch.

        * html/HTML5PreloadScanner.cpp:
        (WebCore::HTML5PreloadScanner::processToken):
        * html/HTML5TreeBuilder.cpp:
        (WebCore::HTML5TreeBuilder::adjustedLexerState):
        (WebCore::HTML5TreeBuilder::passTokenToLegacyParser):
        (WebCore::HTML5TreeBuilder::isScriptingFlagEnabled):
        * html/HTML5TreeBuilder.h:

2010-06-17  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        HTML5PreloadScanner parses <script> in DataState
        https://bugs.webkit.org/show_bug.cgi?id=40804

        The ScriptDataState is handled separately from the rest of the lexer
        state changes because it's more complicted in the tree builder.  The
        easiest thing is to just handle it separately in the preloader too.

        * html/HTML5PreloadScanner.cpp:
        (WebCore::HTML5PreloadScanner::processToken):

2010-06-17  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add CSS scanning to HTML5PreloadScanner
        https://bugs.webkit.org/show_bug.cgi?id=40802

        This patch just cribs the CSS preload scanning algorithm from the old
        preload scanner.  We also invented a way of testing the preload
        scanner.

        Tests: fast/preloader/image.html
               fast/preloader/link.html
               fast/preloader/script.html
               fast/preloader/style.html

        * Android.mk:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/CSSPreloadScanner.cpp: Added.
        (WebCore::isWhitespace):
        (WebCore::CSSPreloadScanner::CSSPreloadScanner):
        (WebCore::CSSPreloadScanner::reset):
        (WebCore::CSSPreloadScanner::scan):
        (WebCore::CSSPreloadScanner::tokenize):
        (WebCore::CSSPreloadScanner::emitRule):
        * html/CSSPreloadScanner.h: Added.
        (WebCore::CSSPreloadScanner::):
        * html/HTML5PreloadScanner.cpp:
        (WebCore::HTML5PreloadScanner::HTML5PreloadScanner):
        (WebCore::HTML5PreloadScanner::processToken):
        (WebCore::HTML5PreloadScanner::scanningBody):
        * html/HTML5PreloadScanner.h:

2010-06-17  Abhishek Arya  <inferno@chromium.org>

        Reviewed by David Kilzer.

        (Landed by Dirk Pranke).

        Check for a null frame before setting drag selection.
        https://bugs.webkit.org/show_bug.cgi?id=38893
        Same Layout test as https://bugs.webkit.org/show_bug.cgi?id=37168.

        Test: editing/pasteboard/drag-drop-iframe-refresh-crash.html  

        Note that you need to run the test manually 20-30 times for the crash
        to reproduce.

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

2010-06-17  Benjamin Poulain  <benjamin.poulain@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Get rid of the the unused imageSize of ImageDecoderQt::internalHandleCurrentImage()
        https://bugs.webkit.org/show_bug.cgi?id=40620

        Remove an unused variable.

        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::internalHandleCurrentImage):

2010-06-17  Jeremy Moskovich  <jeremy@chromium.org>

        Reviewed by Darin Fisher.

        [Chromium API] Implement WebSandboxSupport on OS X and add stubs to allow
        OOP loading of fonts.

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

        * platform/chromium/ChromiumBridge.h: Add prototype for loadFont()

2010-06-17  Nicolas Weber  <thakis@chromium.org>

        Reviewed by Eric Seidel.

        Fix various warnings that are reported when building with clang
        https://bugs.webkit.org/show_bug.cgi?id=40503

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::labelElementContainer):
        * accessibility/AccessibilityTableCell.cpp:
        (WebCore::AccessibilityTableCell::parentTable):
        * bindings/v8/NPV8Object.cpp:
        (WebCore::npObjectTypeInfo):
        * bindings/v8/custom/V8HTMLAudioElementConstructor.cpp:
        (WebCore::):
        * bindings/v8/custom/V8HTMLImageElementConstructor.cpp:
        (WebCore::):
        * bindings/v8/custom/V8HTMLOptionElementConstructor.cpp:
        (WebCore::):
        * css/CSSStyleSheet.h:
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::getNamedElements):
        * inspector/InspectorValues.cpp:
        (WebCore::InspectorObject::getObject):
        (WebCore::InspectorObject::getArray):
        * page/animation/AnimationBase.h:
        * platform/graphics/BitmapImage.h:
        (WTF::):
        * platform/graphics/mac/FontPlatformData.h:
        * rendering/RenderBlock.h:
        * rendering/RootInlineBox.cpp:
        (WebCore::RootInlineBox::ellipsisBox):
        * storage/StorageNamespaceImpl.cpp:
        (WebCore::StorageNamespaceImpl::storageArea):

2010-06-17  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Pavel Feldman.

        Add ENABLE(INSPECTOR) guard for m_sessionSettings
        https://bugs.webkit.org/show_bug.cgi?id=40611

        Build fix.

        * inspector/InspectorController.h:

2010-06-17  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Add FIXME to explain HTMLDocumentParser's forceSynchronous bool
        https://bugs.webkit.org/show_bug.cgi?id=40609

        No functional change, just adding comment.

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

2010-06-13  Robert Hogan  <robert@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        WebCore EventHandler needs to take account of onLoad events 
        fired before layout() complete

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

        WebCore 'cheats' by firing onLoad events before the frame's layout
        has been performed. This can result in event listeners performing
        operations that depend on the document's final layout, such as
        scrolling operations.

        When scrolling a frameview in eventhandler ensure the layout is complete.

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

2010-06-16  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Dimitri Glazkov.

        Add the error codes defined in the async DB spec to SQLError.idl and SQLError.h.
        https://bugs.webkit.org/show_bug.cgi?id=40748

        Test: storage/sql-error-codes.html

        * storage/SQLError.h:
        (WebCore::SQLError::):
        * storage/SQLError.idl:
        * storage/SQLStatement.cpp:
        (WebCore::SQLStatement::execute):
        (WebCore::SQLStatement::setDatabaseDeletedError):
        (WebCore::SQLStatement::setVersionMismatchedError):
        (WebCore::SQLStatement::setFailureDueToQuota):
        (WebCore::SQLStatement::lastExecutionFailedDueToQuota):
        * storage/SQLTransaction.cpp:
        (WebCore::SQLTransaction::openTransactionAndPreflight):
        (WebCore::SQLTransaction::deliverTransactionCallback):
        (WebCore::SQLTransaction::handleCurrentStatementError):
        (WebCore::SQLTransaction::deliverStatementCallback):
        (WebCore::SQLTransaction::postflightAndCommit):

2010-06-17  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Jian Li.

        Fix CRLF ending conversion in StringBlobItem.
        https://bugs.webkit.org/show_bug.cgi?id=40736
        Also: fix referencing uninitialized member bug and slice length bug
        in hybrid blob case.

        Tests will be added when we add BlobBuilder jsc bindings.

        * platform/BlobItem.cpp:
        (WebCore::StringBlobItem::convertToCString):
        (WebCore::DataRangeBlobItem::DataRangeBlobItem):

2010-06-17  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, rolling out r61340.
        http://trac.webkit.org/changeset/61340
        https://bugs.webkit.org/show_bug.cgi?id=36282

        Broke several editing tests.

        * css/CSSMutableStyleDeclaration.cpp:
        (WebCore::CSSMutableStyleDeclaration::CSSMutableStyleDeclaration):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applyProperty):

2010-06-17  Jian Li  <jianli@chromium.org>

        Reviewed by David Levin.

        Add optional contentType parameter to Blob.slice per latest File API spec.
        https://bugs.webkit.org/show_bug.cgi?id=40647

        Tested by http/tests/local/resources/send-sliced-dragged-file.html.

        * html/Blob.cpp:
        (WebCore::Blob::slice):
        * html/Blob.h:
        * html/Blob.idl:

2010-06-17  Jesus Sanchez-Palencia  <jesus@webkit.org>, Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        [Qt] QtWebKit does not support viewport meta tag
        https://bugs.webkit.org/show_bug.cgi?id=39902

        Add windowRect() to page client.

        * platform/qt/QWebPageClient.h:

2010-06-17  Stephen White  <senorblanco@chromium.org>

        Reviewed by David Levin.

        Fix for slow multiple animated resize issue.
        https://bugs.webkit.org/show_bug.cgi?id=38233

        The timer-based resize quality approach implemented in
        http://trac.webkit.org/changeset/34210 is a good idea, but doesn't
        scale to multiple images with animated resizes.  This fix unifies all
        outstanding resize timers into a single timer, and removes the "use
        last quality" check (which doesn't work when images are overlapping). 
        It also refactors the copy of this code implemented in
        RenderBoxModelObject in http://trac.webkit.org/changeset/53949.

        This improves Safari performance for the following IE9 platform demos on my C2D MacPro (10.5):
        http://ie.microsoft.com/testdrive/Performance/01FlyingImages/Default.html (4->60fps)
        http://ie.microsoft.com/testdrive/Performance/10FlickrExplorer/Default.html (3->16fps)
        http://ie.microsoft.com/testdrive/Performance/11BrowserFlip/Default.html (9->60fps)

        * rendering/RenderBoxModelObject.cpp:
        (WebCore::ImageQualityController::ImageQualityController):
        Unify all timers into a single timer, rename RenderBoxModelScaleObserver
        to ImageQualityController, and remove the resize quality "stickness",
        since it doesn't work with multiple outstanding resizes.
        (WebCore::ImageQualityController::objectDestroyed):
        gImages global is now m_lastPaintTimeMap member.
        (WebCore::ImageQualityController::highQualityRepaintTimerFired):
        Function made non-static; repaint all pending resizes (not just one).
        (WebCore::ImageQualityController::restartTimer):
        Added function to restart timer at 1.05x threshold.
        (WebCore::imageQualityController):
        Static function to return singleton.
        (WebCore::ImageQualityController::shouldPaintAtLowQuality):
        Use m_lastPaintTimeMap, not gImages global.  Implement new timer
        algorithm.  Remove resize "stickiness".
        (WebCore::RenderBoxModelObject::shouldPaintAtLowQuality):
        Implement shouldPaintAtLowQuality, which pulls out "this" and passes
        the call to the ImageQualityController.
        (WebCore::RenderBoxModelObject::~RenderBoxModelObject):
        Call ImageQualityController singleton's objectDestroyed() instead of
        old static function.
        (WebCore::RenderBoxModelObject::paintFillLayerExtended):
        Modify shouldPaintAtLowQuality() call to match new class name and
        function signature.
        * rendering/RenderBoxModelObject.h:
        Expose shouldPaintAtLowQuality as a member function.
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::~RenderImage):
        No need to call objectDestroyed() here anymore, since the
        RenderBoxModelObject destructor will do this for us.
        (WebCore::RenderImage::paintIntoRect):
        Rip out RenderImageScaleObserver, and call
        RenderBoxModelObject::shouldPaintAtLowQuality() instead.

2010-06-17  Rob Buis  <rwlbuis@gmail.com>

        Reviewed by Dave Hyatt.

        CSS3 "Property is declared twice in rule" test fails
        https://bugs.webkit.org/show_bug.cgi?id=36282

        Filter out duplicate properties in style declaration.

        Test: fast/css/duplicate-property-in-rule.html

        * css/CSSMutableStyleDeclaration.cpp: Filter out duplicate properties
        (WebCore::CSSMutableStyleDeclaration::CSSMutableStyleDeclaration):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseValue): Discard negative padding values
        * css/CSSStyleSelector.cpp: Remove negative padding check
        (WebCore::CSSStyleSelector::applyProperty):

2010-06-17  Kenneth Russell  <kbr@google.com>

        Reviewed by Dimitri Glazkov.

        Clean up error conditions for Typed Arrays
        https://bugs.webkit.org/show_bug.cgi?id=40755

        * bindings/js/JSArrayBufferCustom.cpp:
        (WebCore::JSArrayBufferConstructor::constructJSArrayBuffer):
         - Fixed handling of NaN/+inf/-inf lengths. Throw RangeError for too-large or negative lengths.
        * bindings/js/JSArrayBufferViewHelper.h:
        (WebCore::constructArrayBufferView):
         - Changed all error code paths to throw exceptions. Clarified exception types.
        * bindings/js/JSFloat32ArrayCustom.cpp:
        (WebCore::JSFloat32ArrayConstructor::constructJSFloat32Array):
         - Removed throwing of INDEX_SIZE_ERROR, delegating responsibility to constructArrayBufferView.
        * bindings/js/JSInt16ArrayCustom.cpp:
        (WebCore::JSInt16ArrayConstructor::constructJSInt16Array):
         - Removed throwing of INDEX_SIZE_ERROR, delegating responsibility to constructArrayBufferView.
        * bindings/js/JSInt32ArrayCustom.cpp:
        (WebCore::JSInt32ArrayConstructor::constructJSInt32Array):
         - Removed throwing of INDEX_SIZE_ERROR, delegating responsibility to constructArrayBufferView.
        * bindings/js/JSInt8ArrayCustom.cpp:
        (WebCore::JSInt8ArrayConstructor::constructJSInt8Array):
         - Removed throwing of INDEX_SIZE_ERROR, delegating responsibility to constructArrayBufferView.
        * bindings/js/JSUint16ArrayCustom.cpp:
        (WebCore::JSUint16ArrayConstructor::constructJSUint16Array):
         - Removed throwing of INDEX_SIZE_ERROR, delegating responsibility to constructArrayBufferView.
        * bindings/js/JSUint32ArrayCustom.cpp:
        (WebCore::JSUint32ArrayConstructor::constructJSUint32Array):
         - Removed throwing of INDEX_SIZE_ERROR, delegating responsibility to constructArrayBufferView.
        * bindings/js/JSUint8ArrayCustom.cpp:
        (WebCore::JSUint8ArrayConstructor::constructJSUint8Array):
         - Removed throwing of INDEX_SIZE_ERROR, delegating responsibility to constructArrayBufferView.
        * bindings/v8/custom/V8ArrayBufferCustom.cpp:
        (WebCore::V8ArrayBuffer::constructorCallback):
         - Fixed handling of NaN/+inf/-inf lengths. Throw RangeError for too-large or negative lengths.
           Clarified exception types.
        * bindings/v8/custom/V8ArrayBufferViewCustom.h:
        (WebCore::constructWebGLArray):
         - Clarified exception types and throwing of exceptions along all error code paths.
        * html/canvas/TypedArrayBase.h:
        (WebCore::TypedArrayBase::create):
         - Added necessary null checks during allocation.

2010-06-17  Shu Chang  <chang.shu@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Fix the link error on symbian with ENABLE_JIT=0.
        1. Add "#if ENABLE(JIT)" in the header file;
        2. Put feature enable/disable logic to a common.pri so
        that both JavaScriptCore.pri and WebCore.pri can share.

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

        * WebCore.pri:

2010-06-17  Kenneth Russell  <kbr@google.com>

        Reviewed by Oliver Hunt.

        Differences in error reporting for overloaded methods causing fast/canvas/webgl/texImageTest.html to fail
        https://bugs.webkit.org/show_bug.cgi?id=40750

        Added V8Proxy::throwTypeError() and throwSyntaxError for parity
        with JSC::throwTypeError() and throwSyntaxError. Changed
        CodeGeneratorV8.pm to use throwTypeError for overload resolution
        failures. Revised CodeGeneratorJS.pm to use throwVMTypeError
        instead of manual call to JSValue::encode. Deleted now-unnecessary
        Chromium expectations for fast/canvas/webgl/texImageTest.html.

        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::throwTypeError):
        (WebCore::V8Proxy::throwSyntaxError):
        * bindings/v8/V8Proxy.h:

2010-06-17  Darin Fisher  <darin@chromium.org>

        Reviewed by Brady Eidson.

        If Page::goToItem is passed a HistoryItem that is the current item,
        then the page should be loaded again.

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

        * loader/HistoryController.cpp:
        (WebCore::HistoryController::recursiveGoToItem): Add a check to
        recursiveGoToItem that matches the one in FrameLoader::loadItem.

2010-06-17  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Kent Tamura.

        [BREWMP] Build fix for DragDataBrew
        https://bugs.webkit.org/show_bug.cgi?id=40610

        http://trac.webkit.org/changeset/60957 was not applied to DragDataBrew.cpp.
        Add FilenameConversionPolicy argument to DragData::containsURL and DragData::asURL.

        * platform/brew/DragDataBrew.cpp:
        (WebCore::DragData::containsURL):
        (WebCore::DragData::asURL):

2010-06-17  Zhenyao Mo  <zmo@google.com>

        Reviewed by David Levin.

        Rename internalformat to internalFormat
        https://bugs.webkit.org/show_bug.cgi?id=40149

        * html/canvas/WebGLFramebuffer.cpp: Rename internalformat to internalFormat.
        (WebCore::WebGLFramebuffer::getColorBufferFormat):
        * html/canvas/WebGLRenderbuffer.cpp: Ditto.
        (WebCore::WebGLRenderbuffer::WebGLRenderbuffer):
        * html/canvas/WebGLRenderbuffer.h: Ditto.
        (WebCore::WebGLRenderbuffer::setInternalFormat):
        (WebCore::WebGLRenderbuffer::getInternalFormat):
        * html/canvas/WebGLRenderingContext.cpp: Ditto.
        (WebCore::WebGLRenderingContext::copyTexImage2D):
        (WebCore::WebGLRenderingContext::copyTexSubImage2D):
        (WebCore::WebGLRenderingContext::framebufferRenderbuffer):
        (WebCore::WebGLRenderingContext::getRenderbufferParameter):
        (WebCore::WebGLRenderingContext::renderbufferStorage):
        (WebCore::WebGLRenderingContext::texImage2DBase):
        (WebCore::WebGLRenderingContext::isTexInternalFormatColorBufferCombinationValid):
        * html/canvas/WebGLRenderingContext.h: Ditto.
        * html/canvas/WebGLTexture.cpp: Ditto.
        (WebCore::WebGLTexture::WebGLTexture):
        * html/canvas/WebGLTexture.h: Ditto.
        (WebCore::WebGLTexture::setInternalFormat):
        (WebCore::WebGLTexture::getInternalFormat):

2010-06-17  Zhenyao Mo  <zmo@google.com>

        Reviewed by David Levin.

        Remove input parameter validation for "level" upper limit in *tex* functions
        https://bugs.webkit.org/show_bug.cgi?id=40603

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::validateTexFuncParameters): Don't check for "level" upper limit.

2010-06-17  Lucas De Marchi  <lucas.demarchi@profusion.mobi>

        Reviewed by Eric Seidel.

        Clean EFL header files in order to diminish the compilation time with
        EFL from subversion. We remove the EFL includes from header files and use
        forward declarations, including the headers in correspondent source
        files when needed. This causes only the needed source files to be
        recompiled in case a new version of EFL is installed instead of
        triggering a recompilation of almost all WebCore/WebKit.
        https://bugs.webkit.org/show_bug.cgi?id=40575

        No new functionalities, so no new tests.

        * CMakeListsEfl.txt:
        * platform/PlatformKeyboardEvent.h: forward declaration.
        * platform/PlatformMouseEvent.h: forward declaration and change method
        signature to not require enum.
        * platform/PlatformWheelEvent.h: forward declaration.
        * platform/Widget.h: forward declaration.
        * platform/efl/PlatformKeyboardEventEfl.cpp: include needed header.
        * platform/efl/PlatformMouseEventEfl.cpp:
        (WebCore::PlatformMouseEvent::setClickCount): change method signature
        as mentioned above.
        * platform/efl/PlatformWheelEventEfl.cpp: include needed header.
        * platform/efl/RenderThemeEfl.cpp: include needed header
        * platform/efl/RenderThemeEfl.h: forward declaration.
        * platform/efl/ScrollbarEfl.cpp: include needed header.
        * platform/efl/ScrollbarEfl.h: forward declaration.
        * platform/efl/WidgetEfl.cpp: include needed header.
        * platform/graphics/FloatRect.h: remove unused method.
        * platform/graphics/Icon.h: forward declaration.
        * platform/graphics/IntRect.h: remove unused method.
        * platform/graphics/efl/FloatRectEfl.cpp: Removed. This file was
        implementing an unused method.
        * platform/graphics/efl/IntRectEfl.cpp: Removed. This file was
        implementing an unused method.

2010-06-17  Alex Milowski  <alex@milowski.com>

        Reviewed by Darin Adler.

        Fixed a compile error in the paint() methods by making them use the
        new visitedDependentColor() method.
        https://bugs.webkit.org/show_bug.cgi?id=40327

        * mathml/RenderMathMLRoot.cpp:
        (WebCore::RenderMathMLRoot::paint):
        (WebCore::RenderMathMLRoot::layout): Fixed a crash where every child 
        was assumed to be a RenderMathMLBlock instance when that isn't the 
        case.  Also, layout() needed to mark the index for layout before 
        calling layout() on the index.
        * mathml/RenderMathMLSquareRoot.cpp:
        (WebCore::RenderMathMLSquareRoot::paint):

2010-06-17  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Use adoptRef and create functions in more code paths
        https://bugs.webkit.org/show_bug.cgi?id=40760

        This helps prepare for an assertion that fires if you ref or destroy an
        object before calling adoptRef on it. That will help us catch mistakes
        that can lead to storage leaks.

        * WebCore.base.exp: Updated export now that Frame::create is not an
        inline function.

        * css/CSSInitialValue.h:
        (WebCore::CSSInitialValue::createExplicit): Use create.
        (WebCore::CSSInitialValue::createImplicit): Ditto.
        (WebCore::CSSInitialValue::create): Added.

        * css/CSSPrimitiveValue.cpp:
        (WebCore::CSSPrimitiveValue::createUncachedIdentifier): Added.
        (WebCore::CSSPrimitiveValue::createUncachedColor): Added.
        (WebCore::CSSPrimitiveValue::createUncached): Added.
        (WebCore::CSSPrimitiveValue::createIdentifier): Use createUncachedIdentifier
        instead of using new directly.
        (WebCore::CSSPrimitiveValue::createColor): Use createUncachedColor instead
        of using new directly.
        (WebCore::CSSPrimitiveValue::create): Use createdUncached instead of using
        new directly.
        * css/CSSPrimitiveValue.h: Declare the new functions above.

        * css/CSSStyleSelector.cpp:
        (WebCore::loadFullDefaultStyle): Deref simpleDefaultStyleSheet instead of
        explicitly deleting it.

        * loader/SubresourceLoader.cpp:
        (WebCore::SubresourceLoader::SubresourceLoader): Move the call to
        addSubresourceLoader out of here.
        (WebCore::SubresourceLoader::create): Move it in here. This makes it so
        we don't ref the loader before finishing its creation and calling adoptRef.

        * page/Frame.cpp:
        (WebCore::Frame::Frame): Move the call to setMainFrame out of here.
        Also refactor the code so an assertion is easier to read.
        (WebCore::Frame::create): Move the call to setMainFrame in here.
        This makes it so we don't ref the frame before finishing its creation
        and calling adoptRef.
        * page/Frame.h: Made the create function non-inline.

        * platform/text/BidiContext.cpp:
        (WebCore::BidiContext::createUncached): Added.
        (WebCore::BidiContext::create): Call createUncached instead of callling
        new directly.
        * platform/text/BidiContext.h: Declare createUncached.

        * rendering/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::buildPrimitives): Use PassRefPtr and
        RefPtr instead of OwnPtr. And use the create function instead of new.
        * rendering/RenderSVGResourceFilter.h: Ditto.
        * rendering/SVGRenderTreeAsText.cpp:
        (WebCore::writeSVGResourceContainer): Ditto.

        * storage/StorageAreaImpl.cpp:
        (WebCore::StorageAreaImpl::StorageAreaImpl): Move the code that calls
        StorageAreaSync::create out of here.
        (WebCore::StorageAreaImpl::create): Move it in here. This makes it so we
        don't ref the storage area before finishing its creation and calling adoptRef.

        * svg/SVGPaint.cpp:
        (WebCore::SVGPaint::defaultFill): Use create instead of new.
        (WebCore::SVGPaint::defaultStroke): Ditto.

        * svg/graphics/filters/SVGFilterBuilder.h: Made the constructor private
        and added a create function since this is a reference counted object and
        should not be constructed directly.

2010-06-17  Lucas De Marchi  <lucas.demarchi@profusion.mobi>

        Reviewed by Gustavo Noronha.

        Update CMake build system to use new script for generating source files
        with gperf (r61091).
        This updates also the build system to cope with recent changes to
        source files list.
        https://bugs.webkit.org/show_bug.cgi?id=40628

        No new tests since it's just compilation fixes.

        * CMakeLists.txt:

2010-06-17  Darin Adler  <darin@apple.com>

        Reviewed by Sam Weinig.

        Fix boolean reflected attributes to use empty string consistently for the content attribute value
        https://bugs.webkit.org/show_bug.cgi?id=40758

        Test: fast/dom/boolean-attribute-reflection.html

        The HTML5 specification and other browsers are all consistent:
        When setting a boolean IDL attribute to true, the attribute value
        gets set to the empty string. The guidelines for authors allow either
        the empty string or the name of the attribute, but for implementers
        of the DOM, the reflected attribute gets empty string.

        * dom/Element.cpp:
        (WebCore::Element::setBooleanAttribute): Use emptyAtom to set the
        attribute to the empty string.

        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::setAutofocus): Use the empty string,
        not "autofocus".
        (WebCore::HTMLFormControlElement::setRequired): Use the empty string,
        not "required".

2010-06-17  Pavel Feldman  <pfeldman@chromium.org>

        Unreviewed: chromium tests fix. Added InspectorBackend delegates for new inspector methods.

        * inspector/front-end/InspectorBackendStub.js:
        (.WebInspector.InspectorBackendStub.prototype.clearConsoleMessages):
        (.WebInspector.InspectorBackendStub.prototype.getOuterHTML):
        (.WebInspector.InspectorBackendStub.prototype.setOuterHTML):
        (.WebInspector.InspectorBackendStub.prototype.addInspectedNode):

2010-06-17  Mark Brand  <mabrand@mabrand.nl>

        Reviewed by Simon Hausmann.

        [Qt] use "win32-g++*" scope to match all MinGW makespecs

        The scope "win32-g++" comes from the name of the makespec. However, it
        is frequently used to check for MinGW. This works fine as long as
        win32-g++ is the only makespec for MinGW. Now we need the wildcard
        to cover "win32-g++-cross" as well.

        * WebCore.pro:

2010-06-16  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Joe Pecoraro.

        Web Inspector: move get/setOuterHTML, addInspectedNode and
        clearConsole to native InspectorDOMAgent. This is done to allow
        inspected nodes array to store nodes from different domains,
        also moves outerhtml manipulation closer to the rest of the DOM
        operations. In addition to that, we are slowly getting rid of
        InjectedScriptAccess in favor of IDL-defined InspectorBackend
        interface for clearer remote debugging API.

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

        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::inspectedNode):
        * inspector/InjectedScriptHost.h:
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::changeTagName):
        (WebCore::InspectorBackend::getOuterHTML):
        (WebCore::InspectorBackend::setOuterHTML):
        (WebCore::InspectorBackend::addInspectedNode):
        (WebCore::InspectorBackend::clearConsoleMessages):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::inspectedNode):
        (WebCore::InspectorDOMAgent::changeTagName):
        (WebCore::InspectorDOMAgent::getOuterHTML):
        (WebCore::InspectorDOMAgent::setOuterHTML):
        (WebCore::InspectorDOMAgent::addInspectedNode):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::didGetOuterHTML):
        (WebCore::InspectorFrontend::didSetOuterHTML):
        * inspector/InspectorFrontend.h:
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype.requestClearMessages):
        * inspector/front-end/DOMAgent.js:
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.this.treeOutline.focusedNodeChanged):
        (WebInspector.ElementsPanel):
        * inspector/front-end/ElementsTreeOutline.js:
        (WebInspector.ElementsTreeElement.prototype._tagNameEditingCommitted.changeTagNameCallback):
        (WebInspector.ElementsTreeElement.prototype._tagNameEditingCommitted):
        ():
        * inspector/front-end/InjectedScript.js:
        (injectedScriptConstructor):
        * inspector/front-end/InjectedScriptAccess.js:

2010-06-17  John Gregg  <johnnyg@google.com>

        Reviewed by David Levin.

        Move the call to the notification presenter that a Notification is being
        destroyed from the destructor (not safe) to the ActiveDOMObject::contextDestroyed
        method.

        Also fix up an incorrect reference loss in the V8 bindings code for Notifications.
        https://bugs.webkit.org/show_bug.cgi?id=40097

        No new tests; code paths are well-covered by existing tests.

        * bindings/v8/custom/V8NotificationCenterCustom.cpp:
        (WebCore::V8NotificationCenter::createHTMLNotificationCallback):
        (WebCore::V8NotificationCenter::createNotificationCallback):
        * notifications/Notification.cpp:
        (WebCore::Notification::~Notification):
        (WebCore::Notification::contextDestroyed):
        * notifications/Notification.h:

2010-06-17  Csaba Osztrogonác  <ossy@webkit.org>

        Unreviewed rollout r61311, because it made 2 tests fail on Qt bot.

        [Qt] NPP_SetWindow seems to not be called when TestNetscapePlugin is moved
        https://bugs.webkit.org/show_bug.cgi?id=36702

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

2010-05-28  Viatcheslav Ostapenko  <ostapenko.viatcheslav@nokia.com>

        Reviewed by Simon Hausmann, Antti Koivisto

        Make repaint throttling parameters runtime configurable.
        https://bugs.webkit.org/show_bug.cgi?id=38401

        REPAINT_THROTTLING now chooses default values for throttling parameters.
        Should be removed when applications start using runtime configuration.

        * page/FrameView.cpp:
        (WebCore::FrameView::reset):
        (WebCore::FrameView::updateDeferredRepaintDelay):
        (WebCore::FrameView::setRepaintThrottlingDeferredRepaintDelay):
        (WebCore::FrameView::setRepaintThrottlingnInitialDeferredRepaintDelayDuringLoading):
        (WebCore::FrameView::setRepaintThrottlingMaxDeferredRepaintDelayDuringLoading):
        (WebCore::FrameView::setRepaintThrottlingDeferredRepaintDelayIncrementDuringLoading):
        * page/FrameView.h:

2010-06-17  Robert Hogan  <robert@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] NPP_SetWindow seems to not be called when TestNetscapePlugin is moved

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

        setNPWindowIfNeeded() is called on paint() in PluginViewQt, which doesn't
        work for DRT. So call it if we are in DRT mode and the window geometry
        has changed.

        Unskips plugins/reentrant-update-widget-positions.html

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

2010-06-17  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Kenneth Christiansen.

        [Qt] Avoid unnecessary calls to save() and restore() when drawing images

        Avoid calling the expensive save() and restore() on the GraphicsContext just
        for changing the composition mode. Instead save and restore it manually
        on QPainter.

        Change fac227f609e544f8f55aca8447b4328d6534407a in Qt makes sure that the
        call to QPainter::setCompositionMode doesn't do anything if the mode hasn't
        changed.

        * platform/graphics/GraphicsContext.h:
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::toQtCompositionMode):
        * platform/graphics/qt/ImageQt.cpp:
        (WebCore::BitmapImage::draw):

2010-06-16  Dawit Alemayehu  <adawit@kde.org>

        Reviewed by Simon Hausmann.

        [Qt] QtWebKit crashes while initializing flash plugin 10.1.53.64.
        https://bugs.webkit.org/show_bug.cgi?id=40567

        Avoid preventable crashes by ensuring gtk_init() is called in the
        flash viewer plugins before calling NP_Initialize.

        * plugins/qt/PluginPackageQt.cpp:
        (WebCore::PluginPackage::load):

2010-06-16  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by David Levin.

        Guarantee that references are held for CachedScripts in HTMLDocumentParser.
        https://bugs.webkit.org/show_bug.cgi?id=40177

        No new tests because no new functionality.

        * html/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::reset):
        (WebCore::HTMLDocumentParser::executeExternalScriptsIfReady):

2010-06-16  Qi Zhang  <qi.2.zhang@nokia.com>

        Reviewed by Laszlo Gombos.

         [Qt] Repeat pattern should start from origin
         https://bugs.webkit.org/show_bug.cgi?id=39225

         Patterns must be painted so that the top left of the first image 
         is anchored at the origin of the coordinate space.

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

2010-06-16  Jarkko Sakkinen  <jarkko.j.sakkinen@gmail.com>

        Reviewed by Simon Hausmann.

        [Qt] WebGL viewport does not show up on N900  
        https://bugs.webkit.org/show_bug.cgi?id=38528

        With OGLES2 add default precision to the shader code.
        Use GLsizeiptr and GLintptr with OGLES2.
        Call paint() in beginPaint() so that drawTexture() is used 
        whenever possible.

        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3D::beginPaint):
        (WebCore::GraphicsContext3D::paint):
        (WebCore::GraphicsContext3D::shaderSource):

2010-06-16  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Simon Fraser.

        Spatial Navigation: refactor scrollInDirection to work with scrollable content
        https://bugs.webkit.org/show_bug.cgi?id=39195

        scrollInDirection now receives as parameter the node that the Spatial Navigation
        found as the more appropriated to move focus to. If it is in a scrollable container
        (e.g. <div> with clipped overflow content), it scrolls recursively starting from
        the container, not the current focused node.

        Test: fast/events/spatial-navigation/snav-only-clipped-overflow-content.html

        * page/FocusController.cpp:
        (WebCore::FocusController::advanceFocusDirectionally):
        * page/SpatialNavigation.cpp:
        (WebCore::scrollInDirection):
        * page/SpatialNavigation.h:

2010-06-16  Brady Eidson  <beidson@apple.com>

        Reviewed by Eric Carlson

        <rdar://problem/7249553> and https://bugs.webkit.org/show_bug.cgi?id=40749
        ResourceLoader::willCacheResponse() needs to null-check Frame::Settings()

        No new tests. (Discovered via crash reports, no reproducible cases noted)

        * loader/ResourceLoader.cpp:
        (WebCore::ResourceLoader::willCacheResponse):  Null check m_frame->settings(), 
          but also add an ASSERT so debug-build developers can learn more about why
          this might be happening.

2010-06-16  Darin Adler  <darin@apple.com>

        Try to fix the MathML build.

        * mathml/MathMLMathElement.h: Added missing return type.

2010-06-16  Darin Adler  <darin@apple.com>

        Reviewed by David Levin.

        Deploy adoptRef in more places, including all HTML and MathML elements
        https://bugs.webkit.org/show_bug.cgi?id=39941

        * dom/Element.cpp:
        (WebCore::Element::dispatchAttrRemovalEvent): Use create instead of new
        in commented-out code.
        (WebCore::Element::dispatchAttrAdditionEvent): Ditto.

        * dom/Node.h: Removed now-unused CreateElementZeroRefCount and
        CreateHTMLElementZeroRefCount.

        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::insertList): Use create instead of new, fixing
        a storage leak.

        * editing/ModifySelectionListLevel.cpp:
        (WebCore::IncreaseSelectionListLevelCommand::increaseSelectionListLevel):
        Removed "WithType" from function name. Use create instead of new, fixing a
        storage leak.
        (WebCore::DecreaseSelectionListLevelCommand::decreaseSelectionListLevel): Use
        create instead of new, fixing a storage leak.

        * storage/IndexedDatabaseImpl.cpp:
        (WebCore::IndexedDatabaseImpl::create): Use adoptRef, fixing a storage leak.

        * editing/ModifySelectionListLevel.h: Added create functions.

        * html/HTMLAnchorElement.cpp:
        (WebCore::HTMLAnchorElement::HTMLAnchorElement):
        * html/HTMLFrameOwnerElement.cpp:
        (WebCore::HTMLFrameOwnerElement::HTMLFrameOwnerElement):
        * html/HTMLMeterElement.cpp:
        (WebCore::HTMLMeterElement::HTMLMeterElement):
        * html/HTMLProgressElement.cpp:
        (WebCore::HTMLProgressElement::HTMLProgressElement):
        Removed code to explicitly pass CreateHTMLElement construction type since that's
        now the type used for all HTML elements.

        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::HTMLFormControlElement):
        * html/HTMLFormControlElement.h:
        Removed construction type argument, since CreateHTMLElement is now the type used
        for all HTML elements.

        * mathml/MathMLElement.cpp:
        (WebCore::MathMLElement::MathMLElement): Removed construction type of
        CreateStyledElementZeroRefCount so we'll use the default construction
        type, CreateStyledElement.
        (WebCore::MathMLElement::create): Use adoptRef.

        * mathml/MathMLElement.h: Made isMathMLElement function private and
        removed unneeded override of createRenderer, because it did the
        same thing as the base class's createRenderer function.

        * mathml/MathMLInlineContainerElement.cpp:
        (WebCore::MathMLInlineContainerElement::create): Use adoptRef.
        (WebCore::MathMLInlineContainerElement::createRenderer):
        Removed unnecessarily initialization of local variable and removed the
        case for mathTag, since that uses a different derived class.

        * mathml/MathMLInlineContainerElement.h: Made createRenderrer override
        private.

        * mathml/MathMLMathElement.cpp:
        (WebCore::MathMLMathElement::MathMLMathElement): Marked inline since
        it is called in only one place.
        (WebCore::MathMLMathElement::create): Use adoptRef.
        (WebCore::MathMLMathElement::createRenderer): Added. Creates a
        RenderMathMLMath object.

        * mathml/MathMLMathElement.h: Made constructor private and added a
        private override of createRenderer.

        * mathml/MathMLTextElement.cpp:
        (WebCore::MathMLTextElement::MathMLTextElement): Marked inline since
        it is called in only one place.
        (WebCore::MathMLTextElement::create): Use adoptRef.
        (WebCore::MathMLTextElement::createRenderer): Changed to call through
        to the base class instead of calling RenderObject::createObject directly.

        * mathml/MathMLTextElement.h: Made the constructor and createRenderer
        function private.

        * rendering/RenderFileUploadControl.cpp:
        (WebCore::RenderFileUploadControl::RenderFileUploadControl):
        Removed an unneeded initializer.

        * rendering/RenderProgress.cpp: Tweaked includes.

        * rendering/ShadowElement.cpp: Added a "using namespace" directive.
        * rendering/ShadowElement.h: Tweaked formatting. Made more functions
        private.

        * editing/DeleteButton.cpp:
        (WebCore::DeleteButton::create):
        * html/HTMLAudioElement.cpp:
        (WebCore::HTMLAudioElement::create):
        (WebCore::HTMLAudioElement::createForJSConstructor):
        * html/HTMLBRElement.cpp:
        (WebCore::HTMLBRElement::create):
        * html/HTMLBaseElement.cpp:
        (WebCore::HTMLBaseElement::create):
        * html/HTMLBaseFontElement.cpp:
        (WebCore::HTMLBaseFontElement::create):
        * html/HTMLBlockquoteElement.cpp:
        (WebCore::HTMLBlockquoteElement::create):
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::create):
        * html/HTMLButtonElement.cpp:
        (WebCore::HTMLButtonElement::create):
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::create):
        * html/HTMLDListElement.cpp:
        (WebCore::HTMLDListElement::create):
        * html/HTMLDataGridCellElement.cpp:
        (WebCore::HTMLDataGridCellElement::create):
        * html/HTMLDataGridColElement.cpp:
        (WebCore::HTMLDataGridColElement::create):
        * html/HTMLDataGridElement.cpp:
        (WebCore::HTMLDataGridElement::create):
        * html/HTMLDataGridRowElement.cpp:
        (WebCore::HTMLDataGridRowElement::create):
        * html/HTMLDataListElement.cpp:
        (WebCore::HTMLDataListElement::create):
        * html/HTMLDivElement.cpp:
        (WebCore::HTMLDivElement::create):
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::create):
        * html/HTMLElement.h:
        (WebCore::HTMLElement::HTMLElement):
        * html/HTMLFieldSetElement.cpp:
        (WebCore::HTMLFieldSetElement::create):
        * html/HTMLFontElement.cpp:
        (WebCore::HTMLFontElement::create):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::create):
        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::create):
        * html/HTMLHRElement.cpp:
        (WebCore::HTMLHRElement::create):
        * html/HTMLHeadElement.cpp:
        (WebCore::HTMLHeadElement::create):
        * html/HTMLHeadingElement.cpp:
        (WebCore::HTMLHeadingElement::create):
        * html/HTMLHtmlElement.cpp:
        (WebCore::HTMLHtmlElement::create):
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::create):
        (WebCore::HTMLImageElement::createForJSConstructor):
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::create):
        * html/HTMLIsIndexElement.cpp:
        (WebCore::HTMLIsIndexElement::create):
        * html/HTMLKeygenElement.cpp:
        (WebCore::HTMLKeygenElement::create):
        * html/HTMLLIElement.cpp:
        (WebCore::HTMLLIElement::create):
        * html/HTMLLabelElement.cpp:
        (WebCore::HTMLLabelElement::create):
        * html/HTMLLegendElement.cpp:
        (WebCore::HTMLLegendElement::create):
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::create):
        * html/HTMLMapElement.cpp:
        (WebCore::HTMLMapElement::create):
        * html/HTMLMarqueeElement.cpp:
        (WebCore::HTMLMarqueeElement::create):
        * html/HTMLMenuElement.cpp:
        (WebCore::HTMLMenuElement::create):
        * html/HTMLMetaElement.cpp:
        (WebCore::HTMLMetaElement::create):
        * html/HTMLModElement.cpp:
        (WebCore::HTMLModElement::create):
        * html/HTMLNoScriptElement.cpp:
        (WebCore::HTMLNoScriptElement::create):
        * html/HTMLOListElement.cpp:
        (WebCore::HTMLOListElement::create):
        * html/HTMLOptGroupElement.cpp:
        (WebCore::HTMLOptGroupElement::create):
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::create):
        (WebCore::HTMLOptionElement::createForJSConstructor):
        * html/HTMLParagraphElement.cpp:
        (WebCore::HTMLParagraphElement::create):
        * html/HTMLParamElement.cpp:
        (WebCore::HTMLParamElement::create):
        * html/HTMLPreElement.cpp:
        (WebCore::HTMLPreElement::create):
        * html/HTMLQuoteElement.cpp:
        (WebCore::HTMLQuoteElement::create):
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::create):
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::create):
        * html/HTMLSourceElement.cpp:
        (WebCore::HTMLSourceElement::create):
        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::create):
        * html/HTMLTableCaptionElement.cpp:
        (WebCore::HTMLTableCaptionElement::create):
        * html/HTMLTableCellElement.cpp:
        (WebCore::HTMLTableCellElement::create):
        * html/HTMLTableColElement.cpp:
        (WebCore::HTMLTableColElement::create):
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::create):
        * html/HTMLTableRowElement.cpp:
        (WebCore::HTMLTableRowElement::create):
        * html/HTMLTableSectionElement.cpp:
        (WebCore::HTMLTableSectionElement::create):
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::create):
        * html/HTMLTitleElement.cpp:
        (WebCore::HTMLTitleElement::create):
        * html/HTMLUListElement.cpp:
        (WebCore::HTMLUListElement::create):
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::create):
        * loader/ImageDocument.cpp:
        (WebCore::ImageDocumentElement::create):
        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlShadowRootElement::create):
        (WebCore::MediaControlElement::create):
        (WebCore::MediaControlTimelineContainerElement::create):
        (WebCore::MediaControlVolumeSliderContainerElement::create):
        (WebCore::MediaControlStatusDisplayElement::create):
        (WebCore::MediaControlMuteButtonElement::create):
        (WebCore::MediaControlPlayButtonElement::create):
        (WebCore::MediaControlSeekButtonElement::create):
        (WebCore::MediaControlRewindButtonElement::create):
        (WebCore::MediaControlReturnToRealtimeButtonElement::create):
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::create):
        (WebCore::MediaControlTimelineElement::create):
        (WebCore::MediaControlVolumeSliderElement::create):
        (WebCore::MediaControlFullscreenButtonElement::create):
        (WebCore::MediaControlTimeDisplayElement::create):
        * rendering/RenderSlider.cpp:
        (WebCore::SliderThumbElement::create):
        * rendering/TextControlInnerElements.cpp:
        (WebCore::TextControlInnerElement::create):
        (WebCore::TextControlInnerTextElement::create):
        (WebCore::SearchFieldResultsButtonElement::create):
        (WebCore::SearchFieldCancelButtonElement::create):
        (WebCore::SpinButtonElement::create):
        Use adoptRef.

2010-06-16  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        HTML5 parser crash when setTimeout document.write after slow script
        https://bugs.webkit.org/show_bug.cgi?id=40726

        According to the HTML5 spec, we're supposed to open() a new document if
        we receive a document.write() after we've received EOF for the network.
        The old parser just dumped those bytes onto the end of the network
        stream.  After this patch, our behavior matches Minefield.

        Test: http/tests/misc/write-while-waiting.html

        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        (WebCore::Document::write):
        * dom/DocumentParser.h:
        * dom/XMLDocumentParser.cpp:
        (WebCore::XMLDocumentParser::finishWasCalled):
        * dom/XMLDocumentParser.h:
        * html/HTML5DocumentParser.cpp:
        (WebCore::HTML5DocumentParser::finishWasCalled):
        * html/HTML5DocumentParser.h:
        (WebCore::HTML5DocumentParser::InputStream::isClosed):
        * html/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::finishWasCalled):
        * html/HTMLDocumentParser.h:
        * loader/ImageDocument.cpp:
        (WebCore::ImageTokenizer::finishWasCalled):
        * loader/MediaDocument.cpp:
        (WebCore::MediaDocumentParser::finishWasCalled):
        * loader/PluginDocument.cpp:
        (WebCore::PluginDocumentParser::finishWasCalled):
        * loader/SinkDocument.cpp:
        (WebCore::SinkDocumentParser::finishWasCalled):
        * loader/TextDocument.cpp:
        (WebCore::TextDocumentParser::finishWasCalled):

2010-06-16  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] ClipboardGtk::setURL does not match the behavior of other platforms
        https://bugs.webkit.org/show_bug.cgi?id=40640

        Instead of writing URL labels to the text portion of the clipboard or
        drag-and-drop data, write the URL itself. Also escape the label text
        of URLs. Abstracts logic into DataObjectGtk, so ClipboardGtk and
        PasteboardGtk can share it.

        Tests for this issue will be activated when dropping support has been
        added to the GTK+ EventSender.

        * platform/gtk/ClipboardGtk.cpp:
        (WebCore::ClipboardGtk::writeURL): Use DataObjectGtk::setURL.
        * platform/gtk/DataObjectGtk.cpp:
        (WebCore::DataObjectGtk::setURL):
        Added. Write URL to the text portion and remember to escape the
        label when creating the markup portion.
        * platform/gtk/DataObjectGtk.h: Add declaration of new method.
        * platform/gtk/PasteboardGtk.cpp: 
        (WebCore::Pasteboard::writeURL): Use DataObjectGtk::setURL.

2010-06-16  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Hit assertion in WebCore::HTML5Token::appendToSystemIdentifier
        https://bugs.webkit.org/show_bug.cgi?id=40729

        This was a copy/paste error.  Yay for ASSERTs.

        * html/HTML5Lexer.cpp:
        (WebCore::HTML5Lexer::nextToken):

2010-06-16  Stuart Morgan  <stuartmorgan@chromium.org>

        Reviewed by Anders Carlsson.

        Bring npapi.h more in line with upstream npapi-headers version:
        - Remove obsolete XP_MAC sections.
        - Remove Metrowerks defines.
        - Add OS/2 defines.
        - Add Maemo defines.
        - Add new version of the custom Carbon event definitions.
        - Sync platform define style/details

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

        * bridge/npapi.h:

2010-06-16  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Sam Weinig.

        Allow transitions and animations of clip: rect
        https://bugs.webkit.org/show_bug.cgi?id=38130
        
        Make the CSS clip property animatable.

        Test: transitions/clip-transition.html

        * page/animation/AnimationBase.cpp:
        (WebCore::blendFunc): New blend function for LengthBox
        (WebCore::AnimationBase::ensurePropertyMap): Create a PropertyWrapper for LengthBoxes.

        * platform/LengthBox.h:
        (WebCore::LengthBox::LengthBox): New ctor that takes 4 length values.
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::setClip): New method that takes a LengthBox.

2010-06-16  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        Fix clipping via CSS clip: with composited descendants
        https://bugs.webkit.org/show_bug.cgi?id=40579
        
        Consult the 'clip' style, as well as overflow, when creating clipping
        compositing layers.

        Tests: compositing/geometry/clip.html
               compositing/overflow/clip-descendents.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::clipBox): Utility function that returns the union of the clip and overflow
        boxes.
        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry): Use clipBox() to
        get the correct clipping rectangle.
        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::enclosingNonStackingClippingLayer): Look for
        clip as well as overflow.
        (WebCore::RenderLayerCompositor::clipsCompositingDescendants): Ditto.

2010-06-16  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Darin Adler.

        REGRESSION: Undocked inspector toolbar is white
        https://bugs.webkit.org/show_bug.cgi?id=40644

        Make the html element 100% height so that we don't erase the background to white, after r61215.

        * inspector/front-end/inspector.css:
        (html):

2010-06-16  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Darin Adler.

        User scripts injected on start are not run on image documents.
        https://bugs.webkit.org/show_bug.cgi?id=40722
        <rdar://8087394>
        
        User scripts that are injected on start are run from FrameLoader::dispatchDocumentElementAvailable,
        but this is never called from ImageDocument, so call it when we create a document element for
        our image document.

        * loader/ImageDocument.cpp:
        (WebCore::ImageDocument::createDocumentStructure): Call FrameLoader::dispatchDocumentElementAvailable
            after creating our document element.

2010-06-16  Brady Eidson  <beidson@apple.com>

        Reviewed by NOBODY (Build fix for Mac)

        * WebCore.xcodeproj/project.pbxproj: Make paths relative to the project root.

2010-06-16  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Eric Carlson.

        https://bugs.webkit.org/show_bug.cgi?id=40643
        
        Second of three steps - rename Canvas3DLayer to WebGLLayer

        * WebCore.xcodeproj/project.pbxproj:
        * platform/graphics/mac/Canvas3DLayer.h: Removed.
        * platform/graphics/mac/Canvas3DLayer.mm: Removed.
        * platform/graphics/mac/GraphicsLayerCA.mm:
        (WebCore::GraphicsLayerCA::setContentsToGraphicsContext3D):
        * platform/graphics/mac/WebGLLayer.h: Copied from WebCore/platform/graphics/mac/Canvas3DLayer.h.
        * platform/graphics/mac/WebGLLayer.mm: Copied from WebCore/platform/graphics/mac/Canvas3DLayer.mm.

2010-06-16  Chris Marrin  <cmarrin@apple.com>

        Reviewed by Simon Fraser.

        https://bugs.webkit.org/show_bug.cgi?id=40643
        
        Rename GraphicsContext3DMac.cpp so it can interact with CALayer

        * platform/graphics/mac/GraphicsContext3DMac.cpp: Removed.
        * platform/graphics/mac/GraphicsContext3DMac.mm: Copied from WebCore/platform/graphics/mac/GraphicsContext3DMac.cpp.
        * WebCore.xcodeproj/project.pbxproj

2010-06-16  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Add new files, needed in SVG Text rewrite
        https://bugs.webkit.org/show_bug.cgi?id=40676

        Land SVGTextChunkLayoutInfo.cpp and SVGTextQuery.(cpp|h), both with an "#if 0" on top, as they will be needed
        in a later patch, completing the SVG Text rewrite, that will enable them.

        Doesn't affect any code for now, it should just reduce the review amount.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/SVGTextChunkLayoutInfo.cpp: Added.
        (WebCore::cummulatedWidthOrHeightOfTextChunk):
        (WebCore::cummulatedWidthOfTextChunk):
        (WebCore::cummulatedHeightOfTextChunk):
        (WebCore::calculateTextAnchorShiftForTextChunk):
        (WebCore::applyTextAnchorToTextChunk):
        (WebCore::calculateTextLengthCorrectionForTextChunk):
        (WebCore::applyTextLengthCorrectionToTextChunk):
        (WebCore::SVGTextChunkLayoutInfo::startTextChunk):
        (WebCore::SVGTextChunkLayoutInfo::closeTextChunk):
        (WebCore::SVGTextChunkLayoutInfo::buildTextChunks):
        (WebCore::SVGTextChunkLayoutInfo::recursiveBuildTextChunks):
        (WebCore::SVGTextChunkLayoutInfo::layoutTextChunks):
        * rendering/SVGTextChunkLayoutInfo.h: Add missing include, otherwhise compiling SVGTextChunkLayoutInfo.cpp will fail.
        * rendering/SVGTextQuery.cpp: Added.
        (WebCore::SVGTextQuery::Data::Data):
        (WebCore::flowBoxForRenderer):
        (WebCore::mapLengthThroughChunkTransformation):
        (WebCore::SVGTextQuery::SVGTextQuery):
        (WebCore::SVGTextQuery::collectTextBoxesInFlowBox):
        (WebCore::SVGTextQuery::executeQuery):
        (WebCore::SVGTextQuery::mapStartAndLengthIntoChunkPartCoordinates):
        (WebCore::SVGTextQuery::measureCharacterRange):
        (WebCore::NumberOfCharactersData::NumberOfCharactersData):
        (WebCore::SVGTextQuery::numberOfCharactersCallback):
        (WebCore::SVGTextQuery::numberOfCharacters):
        (WebCore::TextLengthData::TextLengthData):
        (WebCore::SVGTextQuery::textLengthCallback):
        (WebCore::SVGTextQuery::textLength):
        (WebCore::SubStringLengthData::SubStringLengthData):
        (WebCore::SVGTextQuery::subStringLengthCallback):
        (WebCore::SVGTextQuery::subStringLength):
        (WebCore::StartPositionOfCharacterData::StartPositionOfCharacterData):
        (WebCore::SVGTextQuery::startPositionOfCharacterCallback):
        (WebCore::SVGTextQuery::startPositionOfCharacter):
        (WebCore::EndPositionOfCharacterData::EndPositionOfCharacterData):
        (WebCore::SVGTextQuery::endPositionOfCharacterCallback):
        (WebCore::SVGTextQuery::endPositionOfCharacter):
        (WebCore::RotationOfCharacterData::RotationOfCharacterData):
        (WebCore::SVGTextQuery::rotationOfCharacterCallback):
        (WebCore::SVGTextQuery::rotationOfCharacter):
        (WebCore::ExtentOfCharacterData::ExtentOfCharacterData):
        (WebCore::SVGTextQuery::extentOfCharacterCallback):
        (WebCore::SVGTextQuery::extentOfCharacter):
        (WebCore::CharacterNumberAtPositionData::CharacterNumberAtPositionData):
        (WebCore::SVGTextQuery::characterNumberAtPositionCallback):
        (WebCore::SVGTextQuery::characterNumberAtPosition):
        * rendering/SVGTextQuery.h: Added.

2010-06-16  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Dirk Schulze.

        Provide floating-point support for text selection framework
        https://bugs.webkit.org/show_bug.cgi?id=40665

        This is the first chunk of the SVG Text rewrite patches.
        offsetForPosition() / selectionRectForText() should accept float/FloatPoint arguments instead
        of int/IntPoint. offsetForPosition() already worked with floats internally in Qt and Mac.
        selectionRectForText() was already returning a FloatRect, but the passed in origin was an integer.
        Fixing these problems in order to support sub-pixel positioning in the upcoming SVG Text rewrite patch.

        Add a glyphScale parameter to TextRun, that will be used to support text selection
        in lengthAdjust/textLength scenarios in SVG text, soon.

        Doesn't affect any testcases so far. HTML is not affected in any way,
        as it only ever passes integers to these functions.

        * platform/graphics/Font.cpp:
        (WebCore::Font::selectionRectForText):
        (WebCore::Font::offsetForPosition):
        * platform/graphics/Font.h:
        * platform/graphics/FontFastPath.cpp:
        (WebCore::Font::selectionRectForSimpleText):
        (WebCore::Font::offsetForPositionForSimpleText):
        * platform/graphics/TextRun.h:
        (WebCore::TextRun::TextRun):
        (WebCore::TextRun::glyphScale):
        (WebCore::TextRun::setGlyphScale):
        (WebCore::TextRun::applyGlyphScaling):
        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::advance):
        * platform/graphics/chromium/FontChromiumWin.cpp:
        (WebCore::Font::selectionRectForComplexText):
        (WebCore::Font::offsetForPositionForComplexText):
        * platform/graphics/chromium/FontLinux.cpp:
        (WebCore::Font::offsetForPositionForComplexText):
        (WebCore::Font::selectionRectForComplexText):
        * platform/graphics/efl/FontEfl.cpp:
        (WebCore::Font::offsetForPositionForComplexText):
        (WebCore::Font::selectionRectForComplexText):
        * platform/graphics/gtk/FontGtk.cpp:
        (WebCore::Font::offsetForPositionForComplexText):
        (WebCore::Font::selectionRectForComplexText):
        * platform/graphics/haiku/FontHaiku.cpp:
        (WebCore::Font::selectionRectForComplexText):
        (WebCore::Font::offsetForPositionForComplexText):
        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::ComplexTextController::offsetForPosition):
        * platform/graphics/mac/ComplexTextController.h:
        * platform/graphics/mac/FontComplexTextMac.cpp:
        (WebCore::Font::selectionRectForComplexText):
        (WebCore::Font::offsetForPositionForComplexText):
        * platform/graphics/qt/FontQt.cpp:
        (WebCore::Font::offsetForPositionForSimpleText):
        (WebCore::Font::offsetForPositionForComplexText):
        (WebCore::Font::selectionRectForSimpleText):
        (WebCore::Font::selectionRectForComplexText):
        * platform/graphics/win/FontWin.cpp:
        (WebCore::Font::selectionRectForComplexText):
        (WebCore::Font::offsetForPositionForComplexText):
        * platform/graphics/wince/FontWince.cpp:
        (WebCore::Font::offsetForPositionForComplexText):
        (WebCore::Font::selectionRectForComplexText):
        * platform/graphics/wx/FontWx.cpp:
        (WebCore::Font::selectionRectForComplexText):
        (WebCore::Font::offsetForPositionForComplexText):
        * svg/SVGFont.cpp:
        (WebCore::Font::selectionRectForTextUsingSVGFont):
        (WebCore::Font::offsetForPositionForTextUsingSVGFont):

2010-06-16  Anton Muhin  <antonm@chromium.org>

        Reviewed by Nate Chapin.

        [v8] Introduce single element caches for WebCore::String to v8::String conversions
        https://bugs.webkit.org/show_bug.cgi?id=40435
        Measurements show that for some web apps (GMail, Wave) and some scenarios
        (intensive reading and/or keeping a tab open for a long time),
        hit rate lies in 30--50% interval.
        Inlining fast case gives another minor performance win.

        * bindings/v8/V8Binding.cpp:
        (WebCore::getStringCache):
        (WebCore::v8ExternalStringSlow):
        * bindings/v8/V8Binding.h:
        (WebCore::v8ExternalString):

2010-06-16  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Kenneth Christiansen.

        Spatial Navigation: using offset{Left,Top} is not enough to get the proper inner frames position
        https://bugs.webkit.org/show_bug.cgi?id=39439

        As pointed out by Darin Adler in https://bugs.webkit.org/show_bug.cgi?id=18662#c20,
        "It's not correct to use the offsetLeft and offsetTop of the frame owner element's renderer because
        that's just the distance from the offsetParent, not the absolute position".

        Patch fixes that behavior by now considering the offsetTop and offsetLeft the offsetParent recursively,
        starting from the HtmlFrameOwnerElement. Previously, only calling offsetTop and offsetLeft works
        because all tests were done in htmls where the {i}frame element was a directly a child of the body,
        e.g. <html>...<body><iframe src=xxx>....<body></html>.

        Test: fast/events/spatial-navigation/snav-iframe-recursive-offset-parent.html

        * page/SpatialNavigation.cpp:
        (WebCore::renderRectRelativeToRootDocument):

2010-06-16  Dan Bernstein  <mitz@apple.com>

        Try to fix the Tiger build

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

2010-06-16  Dan Bernstein  <mitz@apple.com>

        Try to fix the Tiger build

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

2010-06-16  Dan Bernstein  <mitz@apple.com>

        Reviewed by Alexey Proskuryakov.

        <rdar://problem/8077119> REGRESSION (r60247): Google Reader contains the tops of pieces of unidentifiable text under feed headlines.
        https://bugs.webkit.org/show_bug.cgi?id=40386

        Test: platform/mac/fast/text/x-height.html

        The result of platformBoundsForGlyph() is in flipped coordinates, whereas the result of
        -[NSFont boundingRectForGlyph:] was not. r60247 failed to account for this.

        * platform/graphics/mac/SimpleFontDataMac.mm:
        (WebCore::SimpleFontData::platformInit): Measure the height of the x glyph above the baseline
        correctly.
        (WebCore::SimpleFontData::platformBoundsForGlyph): Return a rect in flipped coordinates on Tiger
        as well.

2010-06-16  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Don't crash when a document ends with an entity
        https://bugs.webkit.org/show_bug.cgi?id=40658

        When we SWITCH_TO a state, we're expecting our caller to have advanced
        the source.  Rather than have all the callers check for empty, we do
        that ourselves.

        * html/HTML5Lexer.cpp:

2010-06-15  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Enable HTML5 lexer
        https://bugs.webkit.org/show_bug.cgi?id=40650

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

2010-06-15  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by David Harrison.

        sqlite3_prepare16_v2 is not documented as always setting "tail" during error cases.
        Explicitly initialize it to null, just to be safe.

        * platform/sql/SQLiteStatement.cpp:
        (WebCore::SQLiteStatement::prepare):

2010-06-15  Mark Rowe  <mrowe@apple.com>

        Reviewed by Brady Eidson.

        <rdar://problem/8091103> URLs not added to history when initial load happens via back/forward navigation

        Back/forward navigation currently does not create or update items in the global history. This is usually
        desirable, except for in the event where the back/forward list was created programmatically and attached
        to the WebView and the initial load in that WebView is being performed as a result of a back/forward
        navigation. In that situation it is preferable to ensure that global history item is created or updated.

        No test case is added because DumpRenderTree is not able to test the scenario where the initial
        load in a WebView occurs via a back/forward navigation.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::transitionToCommitted): If we're committing the first load in this frame as a
        back/forward navigation then we should update the history as if it were a standard load, with the
        exception of updating the back/forward list.
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::updateForStandardLoad): Add a parameter to allow callers to skip updating
        the back/forward list.
        * loader/HistoryController.h:
        (WebCore::HistoryController::):

2010-06-15  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by David Levin.

        Fix compilation errors in BlobBuilder with FILE_WRITER enabled
        https://bugs.webkit.org/show_bug.cgi?id=40606

        No functionality change so no new tests.

        * html/BlobBuilder.cpp:
        * html/BlobBuilder.h:

2010-06-15  Jian Li  <jianli@chromium.org>

        Reviewed by David Levin.

        Move type attribute from File.idl to Blob.idl per latest File API spec.
        https://bugs.webkit.org/show_bug.cgi?id=40642

        * html/Blob.idl:
        * html/File.idl:

2010-06-15  Darin Adler  <darin@apple.com>

        Reviewed by Adam Barth.

        Move functions out of Frame class that were marked "move to Chrome"
        https://bugs.webkit.org/show_bug.cgi?id=39636

        Refactoring that does not require new tests.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::didOpenURL): Call setStatus and setDefaultStatus
        on DOMWindow rather than going through Frame.
        (WebCore::FrameLoader::open): Ditto.
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy): Call
        shouldClose on this object instead of going through Frame.

        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::dispatchAllPendingBeforeUnloadEvents): Call
        shouldClose on FrameLoader instead of going through Frame.
        (WebCore::DOMWindow::focus): Moved the code from Frame::focusWindow
        in here.
        (WebCore::DOMWindow::blur): Moved the code from Frame::unfocusWindow
        in here.
        (WebCore::DOMWindow::close): Moved the code from Frame::scheduleClose
        in here.
        (WebCore::DOMWindow::setStatus): Moved the code from
        Frame::setJSStatusBarText in here.
        (WebCore::DOMWindow::setDefaultStatus): Moved the code from
        Frame::setJSDefaultStatusBarText in here.

        * page/DOMWindow.h: Added m_status and m_defaultStatus members to
        store the status messages being set by the DOM.

        * page/Frame.cpp: Removed all the functions that were marked
        "to be moved into Chrome".
        * page/Frame.h: Ditto.

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

        Fix crashing tests; need to check for null documentElement().

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

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

        Reviewed by Dave Hyatt.

        Garbage shown outside HTML if HTML is absolutely positioned
        https://bugs.webkit.org/show_bug.cgi?id=36163
        
        Add a check that the root renderer (the document element's renderer) covers
        the entire viewport before deciding that we don't need the RenderView
        to paint its background. Fixes lack of painting with positioned, floated, and
        display: table html elements.

        Test: fast/repaint/positioned-document-element.html

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

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

        Reviewed by Dan Bernstein.

        Safari 5 does not clear background with transformed html element
        https://bugs.webkit.org/show_bug.cgi?id=40498
        
        When the document element is composited, ensure that the FrameView
        paints the background, because the composited layer may be transparent,
        or might get moved via animation.

        Test: compositing/repaint/composited-document-element.html

        * rendering/RenderView.cpp:
        (WebCore::isComposited):
        (WebCore::rendererObscuresBackground):

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

        Try to fix GTK+ build.

        * platform/gtk/GtkVersioning.h:

2010-06-15  Darin Fisher  <darin@chromium.org>

        Reviewed by Brady Eidson.

        Introduce HistoryItem::itemSequenceNumber and use it to identify
        HistoryItems that are clones of one another.

        Changes HistoryController::recursiveGoToItem to use itemSequenceNumber
        equality instead of isTargetItem as the pre-requisite for not calling
        FrameLoader::loadItem.

        Changes FrameLoader::loadItem to require equivalent
        documentSequenceNumber before initiating a same document navigation.
        This alone would appear to fix the bug, but it does not go far enough
        since without the itemSequenceNumber equality check, we'd re-load more
        often than we should.

        Moves documentSequenceNumber assignment into createItemTree as cleanup
        and to ensure that it gets called properly whenever we create a cloned
        HistoryItem.  (createItemTree's mission is to create clones up until
        or including the target frame depending on the value of the doClip
        parameter.)

        Removes the now unused HistoryController::urlsMatchItem.

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

        Test: fast/history/history-back-within-subframe.html
              http/tests/navigation/history-back-across-form-submission-to-fragment.html

        * history/HistoryItem.cpp:
        (WebCore::generateSequenceNumber):
        (WebCore::HistoryItem::HistoryItem):
        * history/HistoryItem.h:
        (WebCore::HistoryItem::setItemSequenceNumber):
        (WebCore::HistoryItem::itemSequenceNumber):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadItem):
        * loader/HistoryController.cpp:
        (WebCore::HistoryController::updateBackForwardListForFragmentScroll):
        (WebCore::HistoryController::createItemTree):
        (WebCore::HistoryController::recursiveGoToItem):
        (WebCore::HistoryController::pushState):
        * loader/HistoryController.h:

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

        Reviewed by Gustavo Noronha.

        [GTK] Does not compile with -DGSEAL_ENABLE
        https://bugs.webkit.org/show_bug.cgi?id=37851

        Fix compilation with GSEAL_ENABLE.

        * platform/gtk/GtkVersioning.h:
        * platform/gtk/PlatformScreenGtk.cpp:
        (WebCore::screenDepth):
        (WebCore::screenDepthPerComponent):
        * platform/gtk/PopupMenuGtk.cpp:
        (WebCore::PopupMenu::show):
        * platform/gtk/ScrollbarGtk.cpp:
        (ScrollbarGtk::detachAdjustment):
        (ScrollbarGtk::updateThumbPosition):
        (ScrollbarGtk::updateThumbProportion):
        * plugins/gtk/PluginViewGtk.cpp:
        (WebCore::PluginView::paint):
        (WebCore::PluginView::initXEvent):
        (WebCore::PluginView::platformGetValue):
        (WebCore::PluginView::platformStart):
        * plugins/gtk/gtk2xtbin.c:
        (gtk_xtbin_realize):
        (gtk_xtbin_new):
        (gtk_xtbin_set_position):
        (gtk_xtbin_unrealize):

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

        Unreviewed build fix.

        Fix the build when WebSockets are disabled.

        * bindings/js/JSWorkerContextCustom.cpp:

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

        Reviewed by Dan Bernstein.

        YouTube thumbnail borders vanish during transition
        https://bugs.webkit.org/show_bug.cgi?id=40551
        
        Turn off the direct image optimization if the image has a clip style, so that is is
        correctly rendered with the clip.

        Test: compositing/images/clip-on-directly-composited-image.html

        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::isDirectlyCompositedImage):

2010-06-15  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        [v8] Web Inspector: make ui tests pass when ScriptDebugServer is used
        https://bugs.webkit.org/show_bug.cgi?id=40623

        * bindings/v8/JavaScriptCallFrame.cpp:
        (WebCore::JavaScriptCallFrame::functionName): return empty string for anonymous functions instead of [anonymous].
        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::handleV8DebugEvent): autocontinue on syntax errors since there is no stack trace and
        not much to inspect.

2010-06-15  Adam Roben  <aroben@apple.com>

        Make WebCore's and JavaScriptCore's DerivedSources available for debugging in production builds

        Fixes <http://webkit.org/b/40626> <rdar://problem/8094205>.

        Reviewed by Sam Weinig.

        * WebCore.vcproj/WebCore.make: Copy the contents of WebCore's
        DerivedSources directory to AppleInternal/Sources/WebCore.

2010-06-15  Zhenyao Mo  <zmo@google.com>

        Reviewed by Dimitri Glazkov.

        Bring framebuffer functions to GLES2 conformance
        https://bugs.webkit.org/show_bug.cgi?id=40175

        Test: fast/canvas/webgl/framebuffer-test.html

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::checkFramebufferStatus): Check input parameters and deal with default framebuffer situation.
        (WebCore::WebGLRenderingContext::framebufferRenderbuffer): Check input parameters.
        (WebCore::WebGLRenderingContext::framebufferTexture2D): Ditto.
        (WebCore::WebGLRenderingContext::getFramebufferAttachmentParameter): Ditto.
        (WebCore::WebGLRenderingContext::validateFramebufferFuncParameters): Check input parameters.
        * html/canvas/WebGLRenderingContext.h: Add validateFramebufferFuncParameters.

2010-06-15  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by David Levin.

        Buildfix for ResourceHandleWin after r24202 and r55542.
        https://bugs.webkit.org/show_bug.cgi?id=32963

        * platform/network/win/ResourceHandleWin.cpp:
        (WebCore::ResourceHandle::onHandleCreated):
        (WebCore::ResourceHandle::onRequestComplete):
        (WebCore::transferJobStatusCallback):
        (WebCore::ResourceHandle::start):

2010-06-12  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Joe Pecoraro.

        Web Inspector: Should not expose window.console._inspectorCommandLineAPI to the web.

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

        * inspector/front-end/InjectedScript.js:
        (injectedScriptConstructor):
        (injectedScriptConstructor.):

2010-06-15  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] The qt_webkit_version.pri file gets overwritten on install
        https://bugs.webkit.org/show_bug.cgi?id=40487

        Don't install qt_webkit_version.pri when building WebKit inside of Qt.
        The import of WebKit into Qt will take care of providing the file
        in mkspecs/modules and it'll be installed through projects.pro.

        * WebCore.pro:

2010-06-15  Tony Chang  <tony@chromium.org>

        Reviewed by Ojan Vafai.

        resolve urls in text/html clipboard data
        https://bugs.webkit.org/show_bug.cgi?id=40044

        Allow text/html data copied from a page to contain full URLs when
        dragging or copy/pasting.

        Tests: editing/pasteboard/copy-resolves-urls.html
               http/tests/misc/copy-resolves-urls.html

        * WebCore.base.exp:
        * editing/markup.cpp:
        (WebCore::appendStartMarkup):
        (WebCore::getStartMarkup):
        (WebCore::MarkupAccumulator::appendMarkup):
        (WebCore::createMarkup):
        * editing/markup.h:
        (WebCore::):
        * platform/chromium/ClipboardChromium.cpp:
        (WebCore::ClipboardChromium::writeRange):
        * platform/chromium/PasteboardChromium.cpp:
        (WebCore::Pasteboard::writeSelection):
        * platform/gtk/ClipboardGtk.cpp:
        (WebCore::ClipboardGtk::writeRange):
        * platform/gtk/DataObjectGtk.cpp:
        (WebCore::DataObjectGtk::markup):
        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::writeSelection):
        * platform/haiku/PasteboardHaiku.cpp:
        (WebCore::Pasteboard::writeSelection):
        * platform/qt/ClipboardQt.cpp:
        (WebCore::ClipboardQt::writeRange):
        * platform/qt/PasteboardQt.cpp:
        (WebCore::Pasteboard::writeSelection):

2010-06-14  Chris Fleizach  <cfleizach@apple.com>

        No review. GTK build fix.

        AX: need ListItemRole and PresentationalRole
        https://bugs.webkit.org/show_bug.cgi?id=40133

        Mostly speculative fix to make GTK unit tests work.

        * accessibility/gtk/AccessibilityObjectWrapperAtk.cpp:
        (atkRole):
        (webkit_accessible_get_role):

2010-06-14  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Dan Bernstein.

        <rdar://problem/8090895> Update http streaming MIME types

        * platform/MIMETypeRegistry.cpp:
        (WebCore::TypeExtensionPair::): Add http streaming MIME synonyms.

2010-06-14  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Oliver Hunt.

        audio/x-mp3 MIME type not recognized
        <rdar://problem/7875393>
        https://bugs.webkit.org/show_bug.cgi?id=40594
        
        Allow MIMETypeRegistry to have more than one MIME type for a
        media file extension, and have the QTKit media engine register
        all MIME types it can find for each file type QTKit supports.

        Test: media/media-can-play-mp3.html

        * platform/MIMETypeRegistry.cpp:
        (WebCore::mediaMIMETypeMap): Update for new HashMap format.
        (WebCore::TypeExtensionPair::): Store String+Vector<String>
        (WebCore::MIMETypeRegistry::getMediaMIMETypeForExtension): Only consult
        mediaMIMETypeMap(), it has the canonical answer.
        (WebCore::MIMETypeRegistry::getMediaMIMETypesForExtension): New, return
        a Vector of all MIME types for an extension.
        * platform/MIMETypeRegistry.h:
        * platform/graphics/mac/MediaPlayerPrivateQTKit.mm:
        (WebCore::addFileTypesToCache): Add all MIME types returned in the 
        getMediaMIMETypesForExtension Vector.

2010-06-14  Mark Rowe  <mrowe@apple.com>

        Reviewed by Brady Eidson.

        <rdar://problem/8071866> REGRESSION: Crash on launch on Tiger and Leopard with network home folder

        * platform/sql/SQLiteStatement.cpp:
        (WebCore::SQLiteStatement::prepare): Don't assume that tail is always non-null, since that may
        not be the case with some versions of SQLite. Instead we must null-check before dereferencing.

2010-06-14  Anders Carlsson  <andersca@apple.com>

        Fix Tiger build.

        * plugins/mac/PluginDataMac.mm:

2010-06-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Use an array for extensions in MimeClassInfo
        https://bugs.webkit.org/show_bug.cgi?id=40602

        Get rid of MimeClassInfo::suffixes and replace it with an array of extensions.

        * plugins/MimeType.cpp:
        (WebCore::MimeType::suffixes):
        Create a string of joined extensions.

        * plugins/MimeType.h:
        * plugins/PluginData.h:
        (WebCore::operator==):
        * plugins/chromium/PluginDataChromium.cpp:
        (WebCore::getPluginMimeTypeFromExtension):
        * plugins/gtk/PluginDataGtk.cpp:
        (WebCore::PluginData::initPlugins):
        * plugins/mac/PluginDataMac.mm:
        (WebCore::PluginData::initPlugins):
        * plugins/qt/PluginDataQt.cpp:
        (WebCore::PluginData::initPlugins):
        * plugins/win/PluginDataWin.cpp:
        (WebCore::PluginData::initPlugins):
        * plugins/wx/PluginDataWx.cpp:
        (WebCore::PluginData::initPlugins):

2010-06-14  Adam Barth  <abarth@webkit.org>

        Unreviewed.

        Add an include to try to fix Chromium build.

        * html/HTML5DocumentParser.cpp:

2010-06-14  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Safari beach-balls loading large pages with HTML5 parser
        https://bugs.webkit.org/show_bug.cgi?id=40596

        Implement parser yielding, similar to how the old
        HTMLDocumentParser yields.

        This implementation re-uses the tokenizerTimeDelay and
        tokenizerChunkSize settings even though they don't map exactly
        to the token loop that the HTML5 parser uses.

        * dom/DocumentParser.h:
         - Add a FIXME for processingData() and clarify how the
           appendData flag is used by renaming it to isFromNetwork.
        * html/HTML5DocumentParser.cpp:
        (WebCore::parserTimeLimit):
         - Defaults accessor, probably belongs on Page.
        (WebCore::parserChunkSize):
         - Defaults accessor, probably belongs on Page.
        (WebCore::HTML5DocumentParser::HTML5DocumentParser):
        (WebCore::HTML5DocumentParser::stopParsing):
         - Stop the continue-parsing timer if active.
        (WebCore::HTML5DocumentParser::processingData):
         - Implement this poorly understood accessor to match
           the old parser's behavior.  It's unclear what this does
           and it does not affect any layout tests to my knowledge
           but likely affects the WebKit API in some way.
        (WebCore::HTML5DocumentParser::pumpLexerIfPossible):
         - Pass SynchronousMode.
         - Do not ever pump if we've yielded to the timer.
        (WebCore::HTML5DocumentParser::PumpSession::PumpSession):
         - A struct for storing the yield counters.
        (WebCore::HTML5DocumentParser::shouldContinueParsing):
         - Mostly matches HTMLDocumentParser::shouldContinueParsing.
        (WebCore::HTML5DocumentParser::pumpLexer):
         - Respect SynchronousMode.
         - ASSERT that a timer is not scheduled if we're pumping.
        (WebCore::isLayoutTimerActive):
         - This belongs on Document.
        (WebCore::HTML5DocumentParser::continueNextChunkTimerFired):
        (WebCore::HTML5DocumentParser::write):
        (WebCore::HTML5DocumentParser::end):
         - We should never end() if a timer is still outstanding.
        (WebCore::HTML5DocumentParser::attemptToEnd):
        (WebCore::HTML5DocumentParser::endIfDelayed):
        (WebCore::HTML5DocumentParser::resumeParsingAfterScriptExecution):
        * html/HTML5DocumentParser.h:
        (WebCore::HTML5DocumentParser::):
        * html/HTMLDocumentParser.cpp:
         - Clarify the old TimeDelay and ChunkSize constants.

2010-06-14  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Add a preload scanner for the HTML5 parser
        https://bugs.webkit.org/show_bug.cgi?id=40557

        This patch adds a simple preload scanner for the HTML5 parser.  This
        preload scanner is not as awesome as the old one because it doesn't
        scan CSS, but it's much simpler.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
            - Build file torture.
        * html/HTML5DocumentParser.cpp:
        (WebCore::HTML5DocumentParser::write):
            - Call into the preload scanner when waiting for a script.
        * html/HTML5DocumentParser.h:
        * html/HTML5PreloadScanner.cpp: Copied from WebCore/html/PreloadScanner.cpp.
        (WebCore::HTML5PreloadScanner::HTML5PreloadScanner):
        (WebCore::HTML5PreloadScanner::scan):
            - A simple loop to pump the preload scanner's lexer.
        (WebCore::HTML5PreloadScanner::processToken):
            - Preload interesting resources.  Stolen from the old preload
              scanner.
        (WebCore::HTML5PreloadScanner::scanningBody):
        * html/HTML5PreloadScanner.h: Copied from WebCore/html/PreloadScanner.h.

2010-06-14  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Constify some HTML5Token methods
        https://bugs.webkit.org/show_bug.cgi?id=40592

        I keep wanting these methods to be const.  Eric wanted this in a
        separate patch.

        * html/HTML5Lexer.h:
        (WebCore::HTML5Lexer::state):
        * html/HTML5Token.h:
        (WebCore::HTML5Token::attributes):
        (WebCore::HTML5Token::name):
        (WebCore::HTML5Token::characters):
        (WebCore::HTML5Token::comment):
        (WebCore::HTML5Token::publicIdentifier):
        (WebCore::HTML5Token::systemIdentifier):
        * html/HTML5TreeBuilder.cpp:
        (WebCore::convertToOldStyle):
        (WebCore::HTML5TreeBuilder::adjustedLexerState):
            - Technically, this might belong in the other patch, but I think
              it's fine here.
        (WebCore::HTML5TreeBuilder::passTokenToLegacyParser):
        * html/HTML5TreeBuilder.h:

2010-06-14  Dumitru Daniliuc  <dumi@chromium.org>

        Unreviewed, build fix.

        * WebCore.xcodeproj/project.pbxproj:

2010-06-14  Dimitri Glazkov  <dglazkov@chromium.org>

        Unreviewed, build fix.

        Remove accidental specifying of the class name twice.

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::prepareFormData): Removed my ghastly typo.

2010-06-14  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Adam Barth.

        Get DatabaseTracker ready for sync DBs.
        https://bugs.webkit.org/show_bug.cgi?id=39041

        * storage/AbstractDatabase.cpp:
        (WebCore::AbstractDatabase::~AbstractDatabase):
        * storage/AbstractDatabase.h:
        * storage/Database.cpp:
        (WebCore::Database::closeImmediately):
        * storage/Database.h:
        (WebCore::Database::scriptExecutionContext):
        * storage/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::getMaxSizeForDatabase):
        (WebCore::DatabaseTracker::databaseChanged):
        (WebCore::DatabaseTracker::addOpenDatabase):
        (WebCore::DatabaseTracker::removeOpenDatabase):
        (WebCore::DatabaseTracker::getOpenDatabases):
        (WebCore::DatabaseTracker::deleteDatabaseFile):
        * storage/DatabaseTracker.h:
        * storage/OriginQuotaManager.cpp:
        (WebCore::OriginQuotaManager::markDatabase):
        * storage/OriginQuotaManager.h:
        * storage/chromium/DatabaseObserver.h:
        * storage/chromium/DatabaseTrackerChromium.cpp:
        (WebCore::DatabaseTracker::addOpenDatabase):
        (WebCore::TrackerRemoveOpenDatabaseTask::create):
        (WebCore::TrackerRemoveOpenDatabaseTask::TrackerRemoveOpenDatabaseTask):
        (WebCore::DatabaseTracker::removeOpenDatabase):
        (WebCore::DatabaseTracker::getOpenDatabases):
        (WebCore::DatabaseTracker::getMaxSizeForDatabase):

2010-06-14  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=40529
        eventSender.keyDown("delete") incorrectly sends a backspace on some platforms

        * platform/mac/KeyEventMac.mm: (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):
        Use virtual key code to force correct character code for clarity. Also, reworded comment,
        since saying that "backspace needs to always be 8" misleadingly implied that it could
        "sometimes" be such without this code.

2010-06-14  Dimitri Glazkov  <dglazkov@chromium.org>

        Reviewed by Darin Adler.

        Refactor form submission code in HTMLFormElement to add clarity.
        https://bugs.webkit.org/show_bug.cgi?id=39430

        Covered by existing tests in fast/forms/mailto.

        * html/HTMLFormElement.cpp:
        (WebCore::appendMailtoPostFormDataToURL): Renamed from transferMailtoPostFormDataToUrl,
            removed clearing out of the FormData and moved it to a new place (next to the call site).
        (WebCore::HTMLFormElement::prepareFormData): Renamed from createFormData, moved the logic of
            prepareing FormData here, including the use of appendMailtoPostFormDataToURL.
        (WebCore::HTMLFormElement::submit): Consolidated multiple invocations of submitForm().
        * html/HTMLFormElement.h: Renamed createFormData to prepareFormData.

2010-06-14  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        AX: need ListItemRole and PresentationalRole
        https://bugs.webkit.org/show_bug.cgi?id=40133

        * accessibility/AccessibilityObject.cpp:
        (WebCore::createARIARoleMap):
        * accessibility/AccessibilityObject.h:
        (WebCore::AccessibilityObject::isListItem):
        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::accessibilityIsIgnored):
        (WebCore::AccessibilityRenderObject::determineAccessibilityRole):
        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityAttributeNames]):

2010-06-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Remove pluginIndex from MimeClassInfo
        https://bugs.webkit.org/show_bug.cgi?id=40588

        * plugins/PluginData.h:
        * plugins/gtk/PluginDataGtk.cpp:
        (WebCore::PluginData::initPlugins):
        * plugins/mac/PluginDataMac.mm:
        (WebCore::PluginData::initPlugins):
        * plugins/qt/PluginDataQt.cpp:
        (WebCore::PluginData::initPlugins):
        * plugins/win/PluginDataWin.cpp:
        (WebCore::PluginData::initPlugins):
        * plugins/wx/PluginDataWx.cpp:
        (WebCore::PluginData::initPlugins):

2010-06-14  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Jian Li.

        Implement BlobBuilder internal class for BlobBuilder support as defined in FileWriter
        https://bugs.webkit.org/show_bug.cgi?id=36903

        No new tests; they will be added when we add jsc bindings.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/BlobBuilder.cpp: Added.
        * html/BlobBuilder.h: Added.
        (WebCore::BlobBuilder::create):
        * platform/BlobItem.cpp:
        (WebCore::StringBlobItem::convertToCString): Added EndingNative support.
        * platform/BlobItem.h: Added EndingNative line-ending type.
        (WebCore::):

2010-06-14  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Stop using MimeClassInfo::pluginIndex
        https://bugs.webkit.org/show_bug.cgi?id=40582

        Add a pluginIndicies vector to PluginData and use it instead of MimeClassInfo::pluginIndex.

        * plugins/MimeType.cpp:
        (WebCore::MimeType::enabledPlugin):
        Get the plug-in index from the mimePluginIndices vector.
        
        * plugins/Plugin.cpp:
        (WebCore::Plugin::item):
        Compare the mime plugin index as well.
        
        * plugins/PluginData.cpp:
        (WebCore::PluginData::PluginData):
        Populate the m_mimePluginIndices vector.

        (WebCore::PluginData::pluginNameForMimeType):
        Get the plug-in index from the m_mimePluginIndices vector.

        * plugins/PluginData.h:
        (WebCore::operator==):
        Don't check for pluginIndex.

        (WebCore::PluginData::mimePluginIndices):
        Add getter for m_mimePluginIndices.

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

        Better build fix.

        * bindings/js/JSBindingsAllInOne.cpp:

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

        Another windows build fix.

        * bindings/js/JSBindingsAllInOne.cpp:

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

        Another build fix.

        * bindings/js/JSDOMWindowCustom.cpp:

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

        Add missing comma to fix GTK build.

        * xml/XSLTProcessor.idl:

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

        Reviewed by Alexey Proskuryakov.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=40581
        Auto-generate most of the JS constructors

        - Auto-generates all the JS constructors that don't have custom
          names (eg, Not Image(), Audio() or Option())
        - Fixes two typos.
            (new XSLTConstructor()).toString() [object XSLTProcessorConsructor] -> [object XSLTProcessorConstructor])
            (new EventSource()).toString() [object EventSourceContructor] -> [object EventSourceConstructor])

        * Android.jscbindings.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSArrayBufferConstructor.cpp: Removed.
        * bindings/js/JSArrayBufferConstructor.h: Removed.
        * bindings/js/JSArrayBufferCustom.cpp: Copied from WebCore/bindings/js/JSArrayBufferConstructor.cpp.
        (WebCore::JSArrayBufferConstructor::constructJSArrayBuffer):
        * bindings/js/JSArrayBufferViewHelper.h:
        (WebCore::constructArrayBufferView):
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSDOMWindowCustom.cpp:
        * bindings/js/JSEventSourceConstructor.cpp: Removed.
        * bindings/js/JSEventSourceConstructor.h: Removed.
        * bindings/js/JSEventSourceCustom.cpp: Copied from WebCore/bindings/js/JSEventSourceConstructor.cpp.
        (WebCore::JSEventSourceConstructor::constructJSEventSource):
        * bindings/js/JSFloat32ArrayConstructor.cpp: Removed.
        * bindings/js/JSFloat32ArrayConstructor.h: Removed.
        * bindings/js/JSFloat32ArrayCustom.cpp:
        (WebCore::JSFloat32ArrayConstructor::constructJSFloat32Array):
        * bindings/js/JSInt16ArrayConstructor.cpp: Removed.
        * bindings/js/JSInt16ArrayConstructor.h: Removed.
        * bindings/js/JSInt16ArrayCustom.cpp:
        (WebCore::JSInt16ArrayConstructor::constructJSInt16Array):
        * bindings/js/JSInt32ArrayConstructor.cpp: Removed.
        * bindings/js/JSInt32ArrayConstructor.h: Removed.
        * bindings/js/JSInt32ArrayCustom.cpp:
        (WebCore::JSInt32ArrayConstructor::constructJSInt32Array):
        * bindings/js/JSInt8ArrayConstructor.cpp: Removed.
        * bindings/js/JSInt8ArrayConstructor.h: Removed.
        * bindings/js/JSInt8ArrayCustom.cpp:
        (WebCore::JSInt8ArrayConstructor::constructJSInt8Array):
        * bindings/js/JSMessageChannelConstructor.cpp: Removed.
        * bindings/js/JSMessageChannelConstructor.h: Removed.
        * bindings/js/JSMessageChannelCustom.cpp:
        (WebCore::JSMessageChannelConstructor::constructJSMessageChannel):
        * bindings/js/JSSharedWorkerConstructor.cpp: Removed.
        * bindings/js/JSSharedWorkerConstructor.h: Removed.
        * bindings/js/JSSharedWorkerCustom.cpp:
        (WebCore::JSSharedWorkerConstructor::constructJSSharedWorker):
        * bindings/js/JSUint16ArrayConstructor.cpp: Removed.
        * bindings/js/JSUint16ArrayConstructor.h: Removed.
        * bindings/js/JSUint16ArrayCustom.cpp:
        (WebCore::JSUint16ArrayConstructor::constructJSUint16Array):
        * bindings/js/JSUint32ArrayConstructor.cpp: Removed.
        * bindings/js/JSUint32ArrayConstructor.h: Removed.
        * bindings/js/JSUint32ArrayCustom.cpp:
        (WebCore::JSUint32ArrayConstructor::constructJSUint32Array):
        * bindings/js/JSUint8ArrayConstructor.cpp: Removed.
        * bindings/js/JSUint8ArrayConstructor.h: Removed.
        * bindings/js/JSUint8ArrayCustom.cpp:
        (WebCore::JSUint8ArrayConstructor::constructJSUint8Array):
        * bindings/js/JSWebKitCSSMatrixConstructor.cpp: Removed.
        * bindings/js/JSWebKitCSSMatrixConstructor.h: Removed.
        * bindings/js/JSWebKitCSSMatrixCustom.cpp: Copied from WebCore/bindings/js/JSWebKitCSSMatrixConstructor.cpp.
        (WebCore::JSWebKitCSSMatrixConstructor::constructJSWebKitCSSMatrix):
        * bindings/js/JSWebKitPointConstructor.cpp: Removed.
        * bindings/js/JSWebKitPointConstructor.h: Removed.
        * bindings/js/JSWebKitPointCustom.cpp: Copied from WebCore/bindings/js/JSWebKitPointConstructor.cpp.
        (WebCore::JSWebKitPointConstructor::constructJSWebKitPoint):
        * bindings/js/JSWebSocketConstructor.cpp: Removed.
        * bindings/js/JSWebSocketConstructor.h: Removed.
        * bindings/js/JSWebSocketCustom.cpp:
        (WebCore::JSWebSocketConstructor::constructJSWebSocket):
        * bindings/js/JSWorkerConstructor.cpp: Removed.
        * bindings/js/JSWorkerConstructor.h: Removed.
        * bindings/js/JSWorkerContextCustom.cpp:
        * bindings/js/JSWorkerCustom.cpp:
        (WebCore::JSWorkerConstructor::constructJSWorker):
        * bindings/js/JSXSLTProcessorConstructor.cpp: Removed.
        * bindings/js/JSXSLTProcessorConstructor.h: Removed.
        * bindings/js/JSXSLTProcessorCustom.cpp:
        (WebCore::JSXSLTProcessorConstructor::constructJSXSLTProcessor):
        * bindings/scripts/CodeGeneratorJS.pm:
        * css/WebKitCSSMatrix.idl:
        * dom/MessageChannel.idl:
        * html/canvas/ArrayBuffer.idl:
        * html/canvas/Float32Array.idl:
        * html/canvas/Int16Array.idl:
        * html/canvas/Int32Array.idl:
        * html/canvas/Int8Array.idl:
        * html/canvas/Uint16Array.idl:
        * html/canvas/Uint32Array.idl:
        * html/canvas/Uint8Array.idl:
        * page/EventSource.idl:
        * page/WebKitPoint.idl:
        * websockets/WebSocket.idl:
        * workers/SharedWorker.idl:
        * workers/Worker.idl:
        * xml/XSLTProcessor.idl:

2010-05-16  Antonio Gomes  <tonikitoo@webkit.org>

        Unreviewed naming fixes of local variables used in Spatial Navigation methods.

        Summary:
            * "candidate" renamed to "node";
            * "currentFocusCandidate" renamed to "candidate"
            * "closestFocusCandidate" renamed to "closest"

        That way naming is more consistent in the various Spatial Navigation methods.

        * page/FocusController.cpp:
        (WebCore::FocusController::findFocusableNodeInDirection):
        (WebCore::FocusController::deepFindFocusableNodeInDirection):

2010-06-14  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Simon Fraser and Kenneth Christiansen.

        Spatial Navigation: make it work with focusable elements in overflow content
        https://bugs.webkit.org/show_bug.cgi?id=36463

        This patch addresses the problem with Spatial Navigation. It currently does not
        properly traverse scrollable contents, including scrollable div's. For this to work,
        a new class member called scrollableEnclosingBox was introduced to FocusCandidate class which
        keeps track of the current scrollable box Node wrapping a FocusCandidate.

        To make use of enclosingScrollableBox of FocusCandidate, the DOM traversal routine
        (FocusController::findNextFocusableInDirection) was changed as follows: when it
        encounters a scrollable Node, each focusable node which is 'inner' keeps track of
        the container reference. By the time a sibling of the scrollable Node is encountered,
        there is no need to track this reference any more and the traversal algorithm continues
        normally.

        The common case is obviously that there is no scrollable container wrapping it.

        updateFocusCandiditeIfCloser logic was also adapted to fit the need of the
        newly introduced enclosingScrollableBox class member, getting simpler and more
        easily maintainable.

        Tests: fast/events/spatial-navigation/snav-div-scrollable-but-without-focusable-content.html
               fast/events/spatial-navigation/snav-clipped-overflow-content.html

        * page/FocusController.cpp:
        (WebCore::updateFocusCandidateInSameContainer):
        (WebCore::updateFocusCandidateIfCloser):
        (WebCore::FocusController::findFocusableNodeInDirection):
        (WebCore::FocusController::deepFindFocusableNodeInDirection):
        * page/SpatialNavigation.cpp:
        (WebCore::isScrollableContainerNode):
        * page/SpatialNavigation.h:
        (WebCore::FocusCandidate::FocusCandidate):
        (WebCore::FocusCandidate::isInScrollableContainer):

2010-06-14  Jian Li  <jianli@chromium.org>

        Unreviewed. Fix build break in GTK.

        * bindings/scripts/CodeGeneratorGObject.pm:
        * bindings/scripts/test/GObject/WebKitDOMTestCallback.h:
        * bindings/scripts/test/GObject/WebKitDOMTestCallbackPrivate.h:
        * bindings/scripts/test/GObject/WebKitDOMTestInterface.h:
        * bindings/scripts/test/GObject/WebKitDOMTestInterfacePrivate.h:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:

2010-06-14  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        AX: AXUnknown objects are being returned
        https://bugs.webkit.org/show_bug.cgi?id=40574

        Test: platform/mac/accessibility/no-unknown-objects-when-title-attribute-present.html

        * accessibility/mac/AccessibilityObjectMac.mm:
        (WebCore::AccessibilityObject::accessibilityPlatformIncludesObject):

2010-06-14  Jian Li  <jianli@chromium.org>

        Reviewed by Darin Adler.

        Fix code generators to better support Conditional attribute and add test
        coverage for it.
        https://bugs.webkit.org/show_bug.cgi?id=39512

        * bindings/scripts/CodeGeneratorGObject.pm:
        * bindings/scripts/CodeGeneratorObjC.pm:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/scripts/test/GObject/WebKitDOMTestCallback.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestCallback.h:
        * bindings/scripts/test/GObject/WebKitDOMTestInterface.cpp:
        * bindings/scripts/test/GObject/WebKitDOMTestInterface.h:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        (webkit_dom_test_obj_get_conditional_attr1):
        (webkit_dom_test_obj_set_conditional_attr1):
        (webkit_dom_test_obj_get_conditional_attr2):
        (webkit_dom_test_obj_set_conditional_attr2):
        (webkit_dom_test_obj_get_conditional_attr3):
        (webkit_dom_test_obj_set_conditional_attr3):
        (webkit_dom_test_obj_set_property):
        (webkit_dom_test_obj_get_property):
        (webkit_dom_test_obj_class_init):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/JS/JSTestInterface.cpp:
        * bindings/scripts/test/JS/JSTestInterface.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::):
        (WebCore::jsTestObjConditionalAttr1):
        (WebCore::jsTestObjConditionalAttr2):
        (WebCore::jsTestObjConditionalAttr3):
        (WebCore::setJSTestObjConditionalAttr1):
        (WebCore::setJSTestObjConditionalAttr2):
        (WebCore::setJSTestObjConditionalAttr3):
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestInterface.mm:
        * bindings/scripts/test/ObjC/DOMTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.mm:
        (-[DOMTestObj conditionalAttr1]):
        (-[DOMTestObj setConditionalAttr1:]):
        (-[DOMTestObj conditionalAttr2]):
        (-[DOMTestObj setConditionalAttr2:]):
        (-[DOMTestObj conditionalAttr3]):
        (-[DOMTestObj setConditionalAttr3:]):
        * bindings/scripts/test/TestInterface.idl:
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/V8/V8TestInterface.cpp:
        * bindings/scripts/test/V8/V8TestInterface.h:
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjInternal::conditionalAttr1AttrGetter):
        (WebCore::TestObjInternal::conditionalAttr1AttrSetter):
        (WebCore::TestObjInternal::conditionalAttr2AttrGetter):
        (WebCore::TestObjInternal::conditionalAttr2AttrSetter):
        (WebCore::TestObjInternal::conditionalAttr3AttrGetter):
        (WebCore::TestObjInternal::conditionalAttr3AttrSetter):
        (WebCore::):

2010-06-14  Chang Shu  <chang.shu@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Change the type of ShadowSize from IntSize to FloatSize in GraphicsContext.
        Using IntSize loses precision and fails the test.
        Note: This code change fixes Qt port but Mac is still failing due to
        platform issue.

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

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::applyShadow):
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::setShadow):
        (WebCore::GraphicsContext::getShadow):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/GraphicsContextPrivate.h:
        * platform/graphics/cairo/FontCairo.cpp:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::calculateShadowBufferDimensions):
        (WebCore::drawPathShadow):
        (WebCore::drawBorderlessRectShadow):
        (WebCore::GraphicsContext::setPlatformShadow):
        * platform/graphics/cairo/ImageCairo.cpp:
        (WebCore::BitmapImage::draw):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::setPlatformShadow):
        * platform/graphics/chromium/FontChromiumWin.cpp:
        (WebCore::TransparencyAwareFontPainter::TransparencyAwareGlyphPainter::drawGlyphs):
        (WebCore::Font::drawComplexText):
        * platform/graphics/gtk/FontGtk.cpp:
        (WebCore::Font::drawComplexText):
        * platform/graphics/haiku/GraphicsContextHaiku.cpp:
        (WebCore::GraphicsContext::setPlatformShadow):
        * platform/graphics/mac/FontMac.mm:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/openvg/GraphicsContextOpenVG.cpp:
        (WebCore::GraphicsContext::setPlatformShadow):
        * platform/graphics/qt/FontQt.cpp:
        (WebCore::drawTextCommon):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::drawRect):
        (WebCore::GraphicsContext::drawLine):
        (WebCore::GraphicsContext::strokeArc):
        (WebCore::GraphicsContext::drawConvexPolygon):
        (WebCore::drawFilledShadowPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::drawBorderlessRectShadow):
        (WebCore::GraphicsContext::setPlatformShadow):
        * platform/graphics/qt/ImageQt.cpp:
        (WebCore::BitmapImage::draw):
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::setPlatformShadow):
        * platform/graphics/skia/SkiaFontWin.cpp:
        (WebCore::windowsCanHandleDrawTextShadow):
        * platform/graphics/win/FontCGWin.cpp:
        (WebCore::drawGDIGlyphs):
        (WebCore::Font::drawGlyphs):
        * platform/graphics/wince/GraphicsContextWince.cpp:
        (WebCore::GraphicsContext::fillRoundedRect):
        (WebCore::GraphicsContext::setPlatformShadow):
        (WebCore::GraphicsContext::drawText):
        * platform/graphics/wx/GraphicsContextWx.cpp:
        (WebCore::GraphicsContext::setPlatformShadow):

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

        Reviewed by Simon Fraser.

        <rdar://problem/7752961> Unevenly distributed space in justified text
        https://bugs.webkit.org/show_bug.cgi?id=36105

        Test: fast/text/justify-padding-distribution.html

        * platform/graphics/WidthIterator.cpp:
        (WebCore::WidthIterator::WidthIterator): Initialize m_padPerSpace to the quotient of the total
        padding and the number of spaces rather than truncating it.
        (WebCore::WidthIterator::advance): Subtract m_padPerSpace from m_padding and add the difference
        between its old and new values, when rounded, to the advance.
        * platform/graphics/mac/ComplexTextController.cpp:
        (WebCore::ComplexTextController::ComplexTextController):
        (WebCore::ComplexTextController::adjustGlyphsAndAdvances):
        * platform/graphics/win/UniscribeController.cpp:
        (WebCore::UniscribeController::UniscribeController):
        (WebCore::UniscribeController::shapeAndPlaceItem):
        * platform/graphics/win/UniscribeController.h:

2010-06-14  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Stack overflow when converting navigator object to QVariant
        https://bugs.webkit.org/show_bug.cgi?id=40572

        Protect against infinite recursion in JSValue->QVariant conversion.
        This fixes a crash when trying to convert MimeType objects (they
        recurse infinitely and on-the-fly via the enabledPlugin property.)

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

2010-06-14  Yong Li  <yoli@rim.com>

        Test cases created by: Robin Cao <robin.cao@torchmobile.com.cn>

        Reviewed by Darin Adler.

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

        Suspend Document::m_executeScriptSoonTimer objects when the page is deferred.
        There's no reason why we suspend all active DOM timers on the page but not suspend
        this one. Document::m_executeScriptSoonTimer can run JS and schedule more DOM Timers.

        It can only be tested manually.
        * manual-tests/load-deferrer-script-element.html: Added.
        * manual-tests/resources/load-deferrer-script-element.js: Added.

        * dom/Document.cpp:
        (WebCore::Document::executeScriptSoon):
        (WebCore::Document::suspendExecuteScriptSoonTimer): Added.
        (WebCore::Document::resumeExecuteScriptSoonTimer): Added.
        * dom/Document.h:
        * page/PageGroupLoadDeferrer.cpp:
        (WebCore::PageGroupLoadDeferrer::PageGroupLoadDeferrer):
        (WebCore::PageGroupLoadDeferrer::~PageGroupLoadDeferrer):

2010-06-13  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Platform plugin support for Notifications UI
        https://bugs.webkit.org/show_bug.cgi?id=40005

        To avoid race condition when GC is run during shutdown,
        disconnect the Notification from the NotificationPresenter
        when the presenter deletes itself.
        This cannot be tested by a layout test, the race condition happens only
        when GC is run during shutdown. It can be tested manually by loading
        manually any notification test and closing the browser.

        * notifications/Notification.cpp:
        (WebCore::Notification::~Notification):
        * notifications/Notification.h:
        (WebCore::Notification::detachPresenter):

2010-06-08  Marcus Bulach  <bulach@chromium.org>

        Reviewed by Jeremy Orlow.

        Adds IndexedDB's KeyRange.
        https://bugs.webkit.org/show_bug.cgi?id=40250

        Test: storage/indexeddb/idb-keyrange.html

        * Android.derived.jscbindings.mk:
        * Android.derived.v8bindings.mk:
        * Android.mk:
        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * storage/IDBKeyRange.cpp: Added.
        (WebCore::IDBKeyRange::IDBKeyRange):
        * storage/IDBKeyRange.h: Added.
        (WebCore::IDBKeyRange::):
        (WebCore::IDBKeyRange::create):
        (WebCore::IDBKeyRange::~IDBKeyRange):
        (WebCore::IDBKeyRange::left):
        (WebCore::IDBKeyRange::right):
        (WebCore::IDBKeyRange::flags):
        * storage/IDBKeyRange.idl: Added.
        * storage/IndexedDatabaseRequest.cpp:
        (WebCore::IndexedDatabaseRequest::makeSingleKeyRange):
        (WebCore::IndexedDatabaseRequest::makeLeftBoundKeyRange):
        (WebCore::IndexedDatabaseRequest::makeRightBoundKeyRange):
        (WebCore::IndexedDatabaseRequest::makeBoundKeyRange):
        * storage/IndexedDatabaseRequest.h:
        * storage/IndexedDatabaseRequest.idl:

2010-06-14  Jeremy Orlow  <jorlow@chromium.org>

        And another.

        * storage/IndexedDatabaseRequest.h:

2010-06-14  Jeremy Orlow  <jorlow@chromium.org>

        More build fixes.

        * storage/IndexedDatabaseRequest.h:

2010-06-14  Mahesh Kulkarni  <mahesh.kulkarni@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] navigator.geolocation support for Qt port
        https://bugs.webkit.org/show_bug.cgi?id=39724

        Implemetion for Qt port of navigator.gelocation. Using qtmobility location service.

        * WebCore.pri:
        * WebCore.pro:
        * platform/qt/GeolocationServiceQt.cpp: Added.
        (WebCore::GeolocationServiceQt::create):
        (WebCore::GeolocationServiceQt::GeolocationServiceQt):
        (WebCore::GeolocationServiceQt::~GeolocationServiceQt):
        (WebCore::GeolocationServiceQt::positionUpdated):
        (WebCore::GeolocationServiceQt::startUpdating):
        (WebCore::GeolocationServiceQt::stopUpdating):
        * platform/qt/GeolocationServiceQt.h: Added.
        (WebCore::GeolocationServiceQt::lastPosition):
        (WebCore::GeolocationServiceQt::lastError):

2010-06-14  Jeremy Orlow  <jorlow@chromium.org>

        2 more build fixes.

        * storage/IDBDatabaseImpl.h:
        * storage/IndexedDatabaseRequest.h:

2010-06-14  Jeremy Orlow  <jorlow@chromium.org>

        Unreviewed build fix for my last.

        * workers/WorkerScriptLoaderClient.h:

2010-06-14  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Darin Fisher.

        [V8] Clean up SerializedScriptValue
        https://bugs.webkit.org/show_bug.cgi?id=40482

        SerializedScriptValue doesn't follow WebKit's style guidelines very well
        and needlessly inlines quite a bit within the .h file. This change cleans
        things up. No funcitonal changes.

        No change in behavior.

        * bindings/v8/SerializedScriptValue.cpp:
        (WebCore::SerializedScriptValue::deserializeAndSetProperty):
        (WebCore::SerializedScriptValue::create):
        (WebCore::SerializedScriptValue::createFromWire):
        (WebCore::SerializedScriptValue::release):
        (WebCore::SerializedScriptValue::SerializedScriptValue):
        * bindings/v8/SerializedScriptValue.h:

2010-06-14  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        WebInspector: On the way to Remote Debugging we want to transfer dom/timeline/etc
        data from inspected page to WebInspector as JSON string via http. The native
        serialization to JSON string is supported by InspectorValue's classes. This patch
        has the implementation of sendMessageToFrontend function. WebKit version of it still
        uses ScriptFunctionCall and will be switched to another transport a little bit later.
        https://bugs.webkit.org/show_bug.cgi?id=40134

        * inspector/InspectorClient.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::disconnectFrontend):
        * inspector/InspectorController.h:
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::InspectorFrontend):
        * inspector/InspectorFrontend.h:
        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::frontendLoaded):
        * inspector/InspectorValues.cpp:
        (WebCore::InspectorObject::writeJSON):
        * inspector/front-end/inspector.js:
        (WebInspector.dispatchMessageToFrontend):
        * loader/EmptyClients.h:
        (WebCore::EmptyInspectorClient::sendMessageToFrontend):

2010-06-14  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Darin Adler.

        Reenable IDBDatabaseRequest's description attribute
        https://bugs.webkit.org/show_bug.cgi?id=39826

        On the 26th, Beth commented out the description attribute in
        IDBDatabaseRequest because it was causing problems with the
        objective c bindings.  Turns out that this is the same bug as
        in http://trac.webkit.org/changeset/19486.  (Thanks for the
        pointer, Mark!)
 
        The solution is to change the objective C bindings generator
        to change the name in the generated code.  id and hash both
        just appended "Name" to them in the past.  I couldn't think
        of anything else particularly better to append, so I just
        went with name as well.

        Test: building the world works on the first try.  Layout
              test verifies description works again.

        * bindings/scripts/CodeGeneratorObjC.pm:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        (webkit_dom_test_obj_get_description):
        (webkit_dom_test_obj_get_id):
        (webkit_dom_test_obj_set_id):
        (webkit_dom_test_obj_get_hash):
        (webkit_dom_test_obj_set_property):
        (webkit_dom_test_obj_get_property):
        (webkit_dom_test_obj_class_init):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::):
        (WebCore::jsTestObjDescription):
        (WebCore::jsTestObjId):
        (WebCore::jsTestObjHash):
        (WebCore::setJSTestObjId):
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.mm:
        (-[DOMTestObj descriptionName]):
        (-[DOMTestObj idName]):
        (-[DOMTestObj setIdName:]):
        (-[DOMTestObj hashName]):
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjInternal::descriptionAttrGetter):
        (WebCore::TestObjInternal::idAttrGetter):
        (WebCore::TestObjInternal::idAttrSetter):
        (WebCore::TestObjInternal::hashAttrGetter):
        (WebCore::):
        * storage/IDBDatabaseRequest.idl:

2010-06-13  Anders Bakken  <agbakken@gmail.com>

        Reviewed by Eric Seidel.

        [Qt] ScreenQt.cpp has coding-style errors
        https://bugs.webkit.org/show_bug.cgi?id=39766

        * platform/qt/ScreenQt.cpp:

2010-06-13  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Rename HTMLParser to LegacyHTMLTreeConstructor
        https://bugs.webkit.org/show_bug.cgi?id=40554

        This makes our old HTML parsing system closer match the
        HTML5 spec, and thus easier to compare to the new HTML5
        parsing system.

        This rename was entirely automatic.  Done by do-webcore-rename.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Document.cpp:
        * dom/DocumentParser.h:
        (WebCore::DocumentParser::htmlTreeConstructor):
        * html/HTML5DocumentParser.cpp:
        (WebCore::HTML5DocumentParser::htmlTreeConstructor):
        * html/HTML5DocumentParser.h:
        * html/HTML5TreeBuilder.cpp:
        (WebCore::HTML5TreeBuilder::HTML5TreeBuilder):
        * html/HTML5TreeBuilder.h:
        (WebCore::HTML5TreeBuilder::legacyTreeConstructor):
        * html/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::HTMLDocumentParser):
        * html/HTMLDocumentParser.h:
        (WebCore::HTMLDocumentParser::htmlTreeConstructor):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::removedFromTree):
        * html/HTMLInputElement.cpp:
        * html/HTMLMeterElement.cpp:
        * html/HTMLProgressElement.cpp:
        * html/LegacyHTMLTreeConstructor.cpp: Renamed from WebCore/html/HTMLParser.cpp.
        (WebCore::addTags):
        (WebCore::HTMLStackElem::HTMLStackElem):
        (WebCore::HTMLStackElem::derefNode):
        (WebCore::LegacyHTMLTreeConstructor::LegacyHTMLTreeConstructor):
        (WebCore::LegacyHTMLTreeConstructor::~LegacyHTMLTreeConstructor):
        (WebCore::LegacyHTMLTreeConstructor::reset):
        (WebCore::LegacyHTMLTreeConstructor::setCurrent):
        (WebCore::tagPriorityOfNode):
        (WebCore::LegacyHTMLTreeConstructor::limitDepth):
        (WebCore::LegacyHTMLTreeConstructor::insertNodeAfterLimitDepth):
        (WebCore::LegacyHTMLTreeConstructor::parseToken):
        (WebCore::LegacyHTMLTreeConstructor::parseDoctypeToken):
        (WebCore::isTableSection):
        (WebCore::isTablePart):
        (WebCore::isTableRelated):
        (WebCore::isScopingTag):
        (WebCore::LegacyHTMLTreeConstructor::insertNode):
        (WebCore::LegacyHTMLTreeConstructor::handleError):
        (WebCore::LegacyHTMLTreeConstructor::textCreateErrorCheck):
        (WebCore::LegacyHTMLTreeConstructor::commentCreateErrorCheck):
        (WebCore::LegacyHTMLTreeConstructor::headCreateErrorCheck):
        (WebCore::LegacyHTMLTreeConstructor::bodyCreateErrorCheck):
        (WebCore::LegacyHTMLTreeConstructor::framesetCreateErrorCheck):
        (WebCore::LegacyHTMLTreeConstructor::formCreateErrorCheck):
        (WebCore::LegacyHTMLTreeConstructor::isindexCreateErrorCheck):
        (WebCore::LegacyHTMLTreeConstructor::selectCreateErrorCheck):
        (WebCore::LegacyHTMLTreeConstructor::ddCreateErrorCheck):
        (WebCore::LegacyHTMLTreeConstructor::dtCreateErrorCheck):
        (WebCore::LegacyHTMLTreeConstructor::rpCreateErrorCheck):
        (WebCore::LegacyHTMLTreeConstructor::rtCreateErrorCheck):
        (WebCore::LegacyHTMLTreeConstructor::nestedCreateErrorCheck):
        (WebCore::LegacyHTMLTreeConstructor::nestedPCloserCreateErrorCheck):
        (WebCore::LegacyHTMLTreeConstructor::nestedStyleCreateErrorCheck):
        (WebCore::LegacyHTMLTreeConstructor::tableCellCreateErrorCheck):
        (WebCore::LegacyHTMLTreeConstructor::tableSectionCreateErrorCheck):
        (WebCore::LegacyHTMLTreeConstructor::noembedCreateErrorCheck):
        (WebCore::LegacyHTMLTreeConstructor::noframesCreateErrorCheck):
        (WebCore::LegacyHTMLTreeConstructor::noscriptCreateErrorCheck):
        (WebCore::LegacyHTMLTreeConstructor::pCloserCreateErrorCheck):
        (WebCore::LegacyHTMLTreeConstructor::pCloserStrictCreateErrorCheck):
        (WebCore::LegacyHTMLTreeConstructor::mapCreateErrorCheck):
        (WebCore::mapTagToFunc):
        (WebCore::mapTagsToFunc):
        (WebCore::LegacyHTMLTreeConstructor::getNode):
        (WebCore::LegacyHTMLTreeConstructor::allowNestedRedundantTag):
        (WebCore::LegacyHTMLTreeConstructor::processCloseTag):
        (WebCore::LegacyHTMLTreeConstructor::isHeadingTag):
        (WebCore::LegacyHTMLTreeConstructor::isInline):
        (WebCore::LegacyHTMLTreeConstructor::isResidualStyleTag):
        (WebCore::LegacyHTMLTreeConstructor::isAffectedByResidualStyle):
        (WebCore::LegacyHTMLTreeConstructor::handleResidualStyleCloseTagAcrossBlocks):
        (WebCore::LegacyHTMLTreeConstructor::reopenResidualStyleTags):
        (WebCore::LegacyHTMLTreeConstructor::pushBlock):
        (WebCore::LegacyHTMLTreeConstructor::popBlock):
        (WebCore::LegacyHTMLTreeConstructor::popOneBlockCommon):
        (WebCore::LegacyHTMLTreeConstructor::popOneBlock):
        (WebCore::LegacyHTMLTreeConstructor::moveOneBlockToStack):
        (WebCore::LegacyHTMLTreeConstructor::checkIfHasPElementInScope):
        (WebCore::LegacyHTMLTreeConstructor::popInlineBlocks):
        (WebCore::LegacyHTMLTreeConstructor::freeBlock):
        (WebCore::LegacyHTMLTreeConstructor::createHead):
        (WebCore::LegacyHTMLTreeConstructor::handleIsindex):
        (WebCore::LegacyHTMLTreeConstructor::startBody):
        (WebCore::LegacyHTMLTreeConstructor::finished):
        (WebCore::LegacyHTMLTreeConstructor::reportErrorToConsole):
        (WebCore::shouldCreateImplicitHead):
        (WebCore::serializeForNumberType):
        (WebCore::parseToDoubleForNumberType):
        * html/LegacyHTMLTreeConstructor.h: Renamed from WebCore/html/HTMLParser.h.
        (WebCore::LegacyHTMLTreeConstructor::skipMode):
        (WebCore::LegacyHTMLTreeConstructor::isHandlingResidualStyleAcrossBlocks):
        (WebCore::LegacyHTMLTreeConstructor::setSkipMode):
        (WebCore::LegacyHTMLTreeConstructor::popBlock):
        (WebCore::LegacyHTMLTreeConstructor::hasPElementInScope):
        (WebCore::LegacyHTMLTreeConstructor::reportError):
        (WebCore::LegacyHTMLTreeConstructor::):
        (WebCore::shouldCreateImplicitHead):
        * html/StepRange.cpp:
        * html/ValidityState.cpp:
        * rendering/RenderSlider.cpp:

2010-06-13  Eric Seidel  <eric@webkit.org>

        Reviewed by Darin Adler.

        Rename m_parser, htmlParser() to m_treeConstructor, htmlTreeConstructor() in preparation for renaming HTMLParser
        https://bugs.webkit.org/show_bug.cgi?id=40514

        This rename was done by hand.  I realize now I should have
        renamed HTMLParser to HTMLTreeConstructor before renaming HTMLTokenizer.

        No functional changes, thus no tests.

        * dom/DocumentParser.h:
        (WebCore::DocumentParser::htmlTreeConstructor):
        * html/HTML5DocumentParser.cpp:
        (WebCore::HTML5DocumentParser::HTML5DocumentParser):
        (WebCore::HTML5DocumentParser::pumpLexerIfPossible):
        (WebCore::HTML5DocumentParser::pumpLexer):
        (WebCore::HTML5DocumentParser::end):
        (WebCore::HTML5DocumentParser::htmlTreeConstructor):
        (WebCore::HTML5DocumentParser::isWaitingForScripts):
        (WebCore::HTML5DocumentParser::resumeParsingAfterScriptExecution):
        (WebCore::HTML5DocumentParser::notifyFinished):
        (WebCore::HTML5DocumentParser::executeScriptsWaitingForStylesheets):
        * html/HTML5DocumentParser.h:
        * html/HTML5TreeBuilder.cpp:
        (WebCore::HTML5TreeBuilder::HTML5TreeBuilder):
        (WebCore::HTML5TreeBuilder::passTokenToLegacyParser):
        (WebCore::HTML5TreeBuilder::finished):
        * html/HTML5TreeBuilder.h:
        (WebCore::HTML5TreeBuilder::legacyTreeConstructor):
        * html/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::HTMLDocumentParser):
        (WebCore::HTMLDocumentParser::scriptHandler):
        (WebCore::HTMLDocumentParser::parseTag):
        (WebCore::HTMLDocumentParser::end):
        (WebCore::HTMLDocumentParser::processToken):
        (WebCore::HTMLDocumentParser::processDoctypeToken):
        * html/HTMLDocumentParser.h:
        (WebCore::HTMLDocumentParser::htmlTreeConstructor):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::removedFromTree):

2010-06-13  Eric Seidel  <eric@webkit.org>

        Reviewed by Darin Adler.

        Rename tok, asHTMLTokenizer to parser, asHTMLDocumentParser
        https://bugs.webkit.org/show_bug.cgi?id=40513

        Last set of Tokenizer related renames, also done via do-webcore-rename:
        asHTMLTokenizer => asHTMLDocumentParser
        tok => parser

        No functional changes, thus no tests.

        * dom/Document.cpp:
        (WebCore::Document::write):
        * dom/DocumentParser.h:
        (WebCore::DocumentParser::asHTMLDocumentParser):
        * html/HTMLDocumentParser.cpp:
        (WebCore::parseHTMLDocumentFragment):
        * html/HTMLDocumentParser.h:
        (WebCore::HTMLDocumentParser::asHTMLDocumentParser):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::isLoadingInAPISense):

2010-06-13  Eric Seidel  <eric@webkit.org>

        Reviewed by Darin Adler.

        Fix the rest of the references to the old Tokenizer class (now DocumentParser)
        https://bugs.webkit.org/show_bug.cgi?id=40512

        No functional changes, thus no new tests.
        This was mostly done by do-webcore-rename:
        tokenizer => parser
        m_tokenizer => m_parser
        createTextTokenizer => createTextDocumentParser
        createTokenizer => createParser
        getTokenizer => getParser

        However had to be careful to avoid renaming things related to
        css/tokenizer.flex (which we should later rename to CSSTokenizer.flex)

        Still a couple references with "tok" and "asHTMLTokenizer" which I'll
        get in the next patch.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isLoaded):
        * bindings/v8/ScriptEventListener.cpp:
        (WebCore::createAttributeEventListener):
        * dom/Document.cpp:
        (WebCore::Document::removedLastRef):
        (WebCore::Document::~Document):
        (WebCore::Document::createParser):
        (WebCore::Document::open):
        (WebCore::Document::cancelParsing):
        (WebCore::Document::implicitOpen):
        (WebCore::Document::implicitClose):
        (WebCore::Document::write):
        (WebCore::Document::finishParsing):
        (WebCore::Document::removePendingSheet):
        * dom/Document.h:
        (WebCore::Document::parser):
        * dom/DocumentParser.h:
        * dom/ViewportArguments.cpp:
        (WebCore::reportViewportWarning):
        * dom/XMLDocumentParserLibxml2.cpp:
        (WebCore::PendingCallbacks::callAndRemoveFirstCallback):
        (WebCore::PendingCallbacks::PendingStartElementNSCallback::call):
        (WebCore::PendingCallbacks::PendingEndElementNSCallback::call):
        (WebCore::PendingCallbacks::PendingCharactersCallback::call):
        (WebCore::PendingCallbacks::PendingProcessingInstructionCallback::call):
        (WebCore::PendingCallbacks::PendingCDATABlockCallback::call):
        (WebCore::PendingCallbacks::PendingCommentCallback::call):
        (WebCore::PendingCallbacks::PendingInternalSubsetCallback::call):
        (WebCore::PendingCallbacks::):
        (WebCore::getParser):
        (WebCore::startElementNsHandler):
        (WebCore::endElementNsHandler):
        (WebCore::charactersHandler):
        (WebCore::processingInstructionHandler):
        (WebCore::cdataBlockHandler):
        (WebCore::commentHandler):
        (WebCore::warningHandler):
        (WebCore::fatalErrorHandler):
        (WebCore::normalErrorHandler):
        (WebCore::getEntityHandler):
        (WebCore::startDocumentHandler):
        (WebCore::endDocumentHandler):
        (WebCore::internalSubsetHandler):
        (WebCore::externalSubsetHandler):
        (WebCore::parseXMLDocumentFragment):
        * dom/XMLDocumentParserQt.cpp:
        (WebCore::parseXMLDocumentFragment):
        * html/HTML5EntityParser.cpp:
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::createParser):
        * html/HTMLDocument.h:
        * html/HTMLDocumentParser.cpp:
        (WebCore::HTMLDocumentParser::write):
        (WebCore::HTMLDocumentParser::stopParsing):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::removedFromTree):
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::finished):
        (WebCore::HTMLParser::reportErrorToConsole):
        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::createParser):
        (WebCore::HTMLViewSourceDocument::addLine):
        * html/HTMLViewSourceDocument.h:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::isLoadingInAPISense):
        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::begin):
        (WebCore::DocumentWriter::addData):
        * loader/FTPDirectoryDocument.cpp:
        (WebCore::FTPDirectoryDocument::createParser):
        * loader/FTPDirectoryDocument.h:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopLoading):
        (WebCore::FrameLoader::stop):
        * loader/ImageDocument.cpp:
        (WebCore::ImageDocument::createParser):
        * loader/ImageDocument.h:
        * loader/MediaDocument.cpp:
        (WebCore::MediaDocument::createParser):
        * loader/MediaDocument.h:
        * loader/PluginDocument.cpp:
        (WebCore::PluginDocument::createParser):
        * loader/PluginDocument.h:
        * loader/SinkDocument.cpp:
        (WebCore::SinkDocument::createParser):
        * loader/SinkDocument.h:
        * loader/TextDocument.cpp:
        (WebCore::TextDocument::createParser):
        (WebCore::createTextDocumentParser):
        * loader/TextDocument.h:
        * svg/SVGDocumentExtensions.cpp:
        (WebCore::SVGDocumentExtensions::reportWarning):
        (WebCore::SVGDocumentExtensions::reportError):
        * wml/WMLDocument.cpp:
        (WebCore::WMLDocument::finishedParsing):
        * wml/WMLErrorHandling.cpp:
        (WebCore::reportWMLError):
        * wml/WMLTemplateElement.cpp:
        (WebCore::WMLTemplateElement::registerTemplatesInDocument):

2010-06-13  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        AX: link won't return linked element if URL contains #
        https://bugs.webkit.org/show_bug.cgi?id=40192

        Test: platform/mac/accessibility/internal-link-when-document-has-fragment.html

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

2010-06-13  Sam Weinig  <sam@webkit.org>

        Try and fix the chrome build.

        * bindings/scripts/CodeGeneratorV8.pm:
        * xml/XMLHttpRequest.idl:

2010-06-13  Sam Weinig  <sam@webkit.org>

        Reviewed by Anders Carlsson.

        Fix for https://bugs.webkit.org/show_bug.cgi?id=40550
        XMLHttpRequest constructor object should expose the constants from the IDL.

        Test: fast/dom/XMLHttpRequest-constants.html

        * Android.jscbindings.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSDOMWindowCustom.cpp:
        * bindings/js/JSWorkerContextCustom.cpp:
        * bindings/js/JSXMLHttpRequestConstructor.cpp: Removed.
        * bindings/js/JSXMLHttpRequestConstructor.h: Removed.
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequestConstructor::constructJSXMLHttpRequest):
        * bindings/scripts/CodeGeneratorJS.pm:
        * xml/XMLHttpRequest.idl:

2010-06-13  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dan Bernstein.

        -webkit-transition font-size and font-family
        https://bugs.webkit.org/show_bug.cgi?id=33429
        
        When animating font-size, update the font with a saved
        version of the font selector to ensure that we don't clobber
        the font family.        

        Test: transitions/font-family-during-transition.html

        * rendering/style/RenderStyle.cpp:
        (WebCore::RenderStyle::setBlendedFontSize):

2010-06-13  Tony Chang  <tony@chromium.org>

        Build fix, not reviewed.

        fix chromium compile after r61094 (id attribute refactor)
        https://bugs.webkit.org/show_bug.cgi?id=40553

        * bindings/v8/custom/V8NamedNodesCollection.cpp:
        (WebCore::V8NamedNodesCollection::itemWithName):

2010-06-13  Darin Adler  <darin@apple.com>

        Reviewed by Alexey Proskuryakov.

        Partly done support for alternate ID attributes should be removed
        https://bugs.webkit.org/show_bug.cgi?id=39692

        Removed the include of "HTMLNames.h" from "Element.h". This prevents
        near-world-rebuilds every time you change HTMLTagNames.in.

        Renamed the getIDAttribute function in the Element class to
        idForStyleResolution, since it returns a value of the id attribute
        that has been lowercased as appropriate for style matching, not the
        actual value of the attribute. With the old name it was easy to
        misuse it in non-style contexts.

        Got rid of the idAttributeName function on Element, since it is
        easy to use it wrong. Replace it with isIdAttributeName, getIdAttribute,
        and setIdAttribute functions, which are a good fit for the needs of
        most call sites that were dealing with the id attribute.

        Added an idAttributeName function to Document. This is for a future
        where a document can have a custom id attribute name specified in its
        doctype. It's possible this will be insufficient because the same
        document might have XHTML or SVG elements in it, and it's possible
        that on those elements we will want the attribute named "id" with
        no namespace to still work. We can deal with that when we implement
        the actual feature, though. For now, it seems OK to fetch the name
        of the id attribute from the document.

        * dom/DynamicNodeList.cpp:
        (WebCore::DynamicNodeList::itemWithName):
        * dom/StaticNodeList.cpp:
        (WebCore::StaticNodeList::itemWithName):
        * rendering/RenderSVGResourceContainer.h:
        (WebCore::RenderSVGResourceContainer::RenderSVGResourceContainer):
        (WebCore::RenderSVGResourceContainer::idChanged):
        * svg/SVGUseElement.cpp:
        (WebCore::SVGUseElement::handleDeepUseReferencing):
        * svg/animation/SMILTimeContainer.cpp:
        (WebCore::SMILTimeContainer::updateAnimations):
        Use the new idForStyleResolution function, which is the new name of
        the getIDAttribute function. There's a good chance these call sites are
        incorrect, which is something we should investigate later, so there's
        a FIXME at each call site.

        * dom/Document.cpp:
        (WebCore::Document::Document): Initialize m_idAttributeName to the
        standard id attribute from HTML.
        (WebCore::Document::getElementById): Use Element::getIdAttribute.
        * dom/Document.h: Added Document::idAttributeName.

        * dom/Element.cpp:
        (WebCore::Element::setAttribute): Use Document::idAttributeName.
        (WebCore::Element::setAttributeMap): Use Element::isIdAttributeName.
        (WebCore::Element::insertedIntoDocument): Use Document::idAttributeName.
        (WebCore::Element::removedFromDocument): Ditto.
        (WebCore::Element::formatForDebugger): Use Element::getIdAttribute.
        * dom/Element.h: Added isIdAttributeName, getIdAttribute, setIdAttribute,
        idForStyleResolution. Removed rareIDAttributeName.

        * dom/ElementRareData.h: Removed m_idAttributeName.

        * dom/NamedNodeMap.cpp:
        (WebCore::NamedNodeMap::setAttributes): Use Document::idAttributeName.
        * dom/NamedNodeMap.h: Renamed id, setID, and m_id to idForStyleResolution,
        setIdForStyleResolution, and m_idForStyleResolution since this is not the
        value of the id attribute because it gets lowercased for compatibility-mode
        documents.

        * rendering/RenderIFrame.cpp:
        * rendering/RenderLayerCompositor.cpp:
        * rendering/RenderProgress.cpp:
        Added include of HTMLNames.h now that Element.h no longer includes it.

        * editing/SetNodeAttributeCommand.h:
        * editing/markup.cpp:
        * html/HTMLParser.cpp:
        Removed unneeded includes.

        * html/HTMLParser.h: Sorted includes.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::matchRules): Use idForStyleResolution.
        (WebCore::CSSStyleSelector::SelectorChecker::checkOneSelector): Use idForStyleResolution.
        * dom/Attr.cpp:
        (WebCore::Attr::isId): Use Document::idAttributeName.
        * dom/StyledElement.cpp:
        (WebCore::StyledElement::parseMappedAttribute): Use isIdAttributeName,
        and setIdForStyleResolution.
        * editing/DeleteButtonController.cpp:
        (WebCore::DeleteButtonController::createDeletionUI): Use setIdAttribute.
        * editing/EditorCommand.cpp:
        (WebCore::executeInsertHorizontalRule): Ditto.
        * html/HTMLAppletElement.cpp:
        (WebCore::HTMLAppletElement::parseMappedAttribute): Use isIdAttributeName.
        (WebCore::HTMLAppletElement::createRenderer): Use getIdAttribute.
        * html/HTMLCollection.cpp:
        (WebCore::HTMLCollection::checkForNameMatch): Use getIdAttribute.
        (WebCore::HTMLCollection::updateNameCache): Use getIdAttribute.
        * html/HTMLDataGridColElement.cpp:
        (WebCore::HTMLDataGridColElement::ensureColumn): Use getIdAttribute.
        (WebCore::HTMLDataGridColElement::parseMappedAttribute): Use isIdAttributeName.
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::parseMappedAttribute): Use isIdAttributeName.
        * html/HTMLFormCollection.cpp:
        (WebCore::HTMLFormCollection::nextNamedItem): Added missing braces.
        (WebCore::HTMLFormCollection::updateNameCache): Use getIdAttribute.
        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::parseMappedAttribute): Use isIdAttributeName.
        (WebCore::HTMLFrameElementBase::setName): Use getIdAttribute.
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::parseMappedAttribute): Use isIdAttributeName.
        * html/HTMLMapElement.cpp:
        (WebCore::HTMLMapElement::parseMappedAttribute): Use isIdAttributeName.
        Also restructured the function a bit to make its structure clearer and added
        a comment pointing out that it can't be quite right.
        * html/HTMLNameCollection.cpp:
        (WebCore::HTMLNameCollection::itemAfter): Use getIdAttribute.
        * html/HTMLObjectElement.cpp:
        (WebCore::HTMLObjectElement::parseMappedAttribute): Use isIdAttributeName.
        * html/HTMLParamElement.cpp:
        (WebCore::HTMLParamElement::parseMappedAttribute): Use isIdAttributeName.
        * loader/CachedFont.cpp:
        (WebCore::CachedFont::getSVGFontById): Use getIdAttribute.
        * rendering/RenderLayerBacking.cpp:
        (WebCore::RenderLayerBacking::nameForLayer): Use getIdAttribute.
        * rendering/SVGRenderTreeAsText.cpp:
        (WebCore::writeSVGPaintingResource): Use getIdAttribute.
        (WebCore::writeSVGResourceContainer): Ditto.
        * svg/SVGElement.cpp:
        (WebCore::SVGElement::insertedIntoDocument): Use getIdAttribute.
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::isKnownAttribute): Use isIdAttributeName.
        (WebCore::SVGStyledElement::svgAttributeChanged): Use isIdAttributeName.
        * wml/WMLElement.cpp:
        (WebCore::WMLElement::parseMappedAttribute): Use isIdAttributeName.

2010-06-13  Dan Bernstein  <mitz@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/8087385> REGRESSION (r60974): Continuous wheel scrolling is too fast in list boxes and in Safari Reader
        https://bugs.webkit.org/show_bug.cgi?id=40537

        * platform/mac/WheelEventMac.mm:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent): Only multiply by pixelsPerLineStep() if the
        event is not continuous, as was before r56012.

2010-06-13  Andras Becsi  <abecsi@webkit.org>

        Reviewed by Darin Adler.

        Centralize the gperf code generation commands into make-hash-tools.pl
        to avoid redundancy across multiple build systems.
        Do this in preparation of refactoring the usage of these generated
        sources to fix the debug linking error on Linux with gcc >= 4.4.0.

        webkit.org/b/29244

        No functionality change, so no new tests needed.

        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gyp/WebCore.gyp:
        * WebCore.gyp/scripts/rule_gperf.py: Removed.
        * WebCore.pri:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSParser.cpp:
        (WebCore::cssPropertyID):
        (WebCore::cssValueKeywordID):
        * css/makeprop.pl:
        * css/makevalues.pl:
        * html/DocTypeStrings.gperf:
        * html/HTML5EntityParser.cpp:
        * html/HTMLDocumentParser.cpp:
        * html/HTMLEntityNames.gperf:
        * html/PreloadScanner.cpp:
        * make-hash-tools.pl: Added.
        * platform/ColorData.gperf:
        * platform/graphics/Color.cpp:

2010-06-13  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] tests/hybridPixmap fails
        https://bugs.webkit.org/show_bug.cgi?id=37316

        The problem was that JSC::Instance::createRuntimeObject was never called.
        This is fixed by overloading newRuntimeObject and calling Instance::createRuntimeObject
        in between, instead of creating the runtime object directly inside the static function
        QtPixmapInstance::createRuntimeObject, which had to be renamed as to not overshadow the virtual function.

        This fixes an existing test, tests/hybridPixmap

        * bridge/qt/qt_pixmapruntime.cpp:
        (JSC::Bindings::QtPixmapInstance::newRuntimeObject):
        (JSC::Bindings::QtPixmapInstance::createPixmapRuntimeObject):
        * bridge/qt/qt_pixmapruntime.h:
        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::convertQVariantToValue):

2010-06-13  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Darin Adler.

        GraphicsContext3D.h in the Qt port includes too many unnecessary files
        https://bugs.webkit.org/show_bug.cgi?id=40536

        Removed unncessary includes.

        No new tests; Compilation improvement.

        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/qt/GraphicsContext3DQt.cpp:

2010-06-13  Noam Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Eric Seidel.

        [Qt] GraphicsLayer: recaching images creates an unnecessary deep copy
        https://bugs.webkit.org/show_bug.cgi?id=40535

        Made sure the painter ends its operation before copying the pixmap.

        No new tests: this is an optimization.

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::GraphicsLayerQtImpl::recache):

2010-06-13  Clemmitt Sigler  <cmsigler@gmail.com>

        Reviewed by Eric Seidel.

        Patch to fix missing references to RenderMathMLRoot,
        RenderMathMLSquareRoot when building GtkLauncher.
        https://bugs.webkit.org/show_bug.cgi?id=40326

        No change in functionality so no new tests.

        * GNUmakefile.am:

2010-06-12  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Dan Bernstein.
        
        https://bugs.webkit.org/show_bug.cgi?id=40538
        
        Some machines have started to see the return of the dreaded: WebCore.lib : fatal error LNK1106: invalid 
        file or disk full. Since we don't have the hotfix for VS2005, work around this in the meantime
        by creating an EditingAllInOne file, that includes all of the cpp files in the editing subdirectory.
        
        * WebCore.vcproj/WebCore.vcproj: Prevnt the editing cpp from building, so we only compile EditingAllInOne.
        * editing/EditingAllInOne.cpp: Added. Includes all of the editing cpp files.

2010-06-12  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r61031.
        http://trac.webkit.org/changeset/61031
        https://bugs.webkit.org/show_bug.cgi?id=40539

        Crashes Dromaeo jslib test in Release Chromium (Requested by
        dimich_ on #webkit).

        * bindings/v8/V8Binding.cpp:
        (WebCore::v8ExternalString):
        * bindings/v8/V8Binding.h:

2010-06-12  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Rename the last few *Tokenizer classes (which don't have their own files) to *DocumentParser
        https://bugs.webkit.org/show_bug.cgi?id=40508

        This was a very simple do-webcore-rename-generated patch.

        PluginTokenizer => PluginDocumentParser
        TextTokenizer => TextDocumentParser
        SinkTokenizer => SinkDocumentParser
        MediaTokenizer => MediaDocumentParser
        FTPDirectoryTokenizer => FTPDirectoryDocumentParser

        No functional changes, thus no tests.

        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::createTokenizer):
        * html/HTMLViewSourceDocument.h:
        * loader/FTPDirectoryDocument.cpp:
        (WebCore::FTPDirectoryDocumentParser::FTPDirectoryDocumentParser):
        (WebCore::FTPDirectoryDocumentParser::appendEntry):
        (WebCore::FTPDirectoryDocumentParser::createTDForFilename):
        (WebCore::FTPDirectoryDocumentParser::parseAndAppendOneLine):
        (WebCore::FTPDirectoryDocumentParser::loadDocumentTemplate):
        (WebCore::FTPDirectoryDocumentParser::createBasicDocument):
        (WebCore::FTPDirectoryDocumentParser::write):
        (WebCore::FTPDirectoryDocumentParser::finish):
        (WebCore::FTPDirectoryDocument::createTokenizer):
        * loader/MediaDocument.cpp:
        (WebCore::MediaDocumentParser::MediaDocumentParser):
        (WebCore::MediaDocumentParser::write):
        (WebCore::MediaDocumentParser::createDocumentStructure):
        (WebCore::MediaDocumentParser::writeRawData):
        (WebCore::MediaDocumentParser::finish):
        (WebCore::MediaDocumentParser::isWaitingForScripts):
        (WebCore::MediaDocument::createTokenizer):
        * loader/PluginDocument.cpp:
        (WebCore::PluginDocumentParser::PluginDocumentParser):
        (WebCore::PluginDocumentParser::pluginWidgetFromDocument):
        (WebCore::PluginDocumentParser::write):
        (WebCore::PluginDocumentParser::createDocumentStructure):
        (WebCore::PluginDocumentParser::writeRawData):
        (WebCore::PluginDocumentParser::finish):
        (WebCore::PluginDocumentParser::isWaitingForScripts):
        (WebCore::PluginDocument::createTokenizer):
        (WebCore::PluginDocument::pluginWidget):
        * loader/SinkDocument.cpp:
        (WebCore::SinkDocumentParser::SinkDocumentParser):
        (WebCore::SinkDocumentParser::finish):
        (WebCore::SinkDocument::createTokenizer):
        * loader/TextDocument.cpp:
        (WebCore::TextDocumentParser::TextDocumentParser):
        (WebCore::TextDocumentParser::~TextDocumentParser):
        (WebCore::TextDocumentParser::write):
        (WebCore::TextDocumentParser::finish):
        (WebCore::TextDocumentParser::isWaitingForScripts):
        (WebCore::TextDocument::createTokenizer):
        (WebCore::createTextTokenizer):

2010-06-12  Anders Bakken  <agbakken@gmail.com>

        Reviewed by Eric Seidel.

        [Qt] EventHandlerQt.cpp has coding-style errors
        https://bugs.webkit.org/show_bug.cgi?id=40259

        Coding style change only.

        * page/qt/EventHandlerQt.cpp:
        (WebCore::EventHandler::eventActivatedView):

2010-06-12  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Darin Adler.

        Unify fileSystemRepresentation and filenameFromString
        https://bugs.webkit.org/show_bug.cgi?id=40201

        Remove filenameFromString and use fileSystemRepresentation instead
        as they do the same job.

        * platform/FileSystem.cpp: Removed.
        * platform/FileSystem.h:
        * platform/efl/FileSystemEfl.cpp:
        (WebCore::fileSystemRepresentation):
        * platform/gtk/FileChooserGtk.cpp:
        (WebCore::FileChooser::basenameForWidth):
        * platform/gtk/FileSystemGtk.cpp:
        (WebCore::fileSystemRepresentation):
        (WebCore::filenameForDisplay):
        (WebCore::fileExists):
        (WebCore::deleteFile):
        (WebCore::deleteEmptyDirectory):
        (WebCore::getFileSize):
        (WebCore::getFileModificationTime):
        (WebCore::makeAllDirectories):
        (WebCore::pathGetFileName):
        (WebCore::directoryName):
        (WebCore::listDirectory):
        * platform/gtk/SharedBufferGtk.cpp:
        (WebCore::SharedBuffer::createWithContentsOfFile):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::startHttp):
        * platform/posix/SharedBufferPOSIX.cpp:
        (WebCore::SharedBuffer::createWithContentsOfFile):

2010-06-12  Patrick Gansterer  <paroga@paroga.com>

        Reviewed by Eric Seidel.

        [Haiku] Cleanup SharedBuffer::createWithContentsOfFile
        https://bugs.webkit.org/show_bug.cgi?id=39003

        * platform/haiku/SharedBufferHaiku.cpp:
        (WebCore::SharedBuffer::createWithContentsOfFile):

2010-06-12  Anders Bakken  <agbakken@gmail.com>

        Reviewed by Eric Seidel.

        [Qt] WheelEventQt.cpp has coding-style errors
        https://bugs.webkit.org/show_bug.cgi?id=39760

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

2010-06-12  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Kent Tamura.

        [BREWMP] Don't include POSIX headers in WebCorePrefix.h
        https://bugs.webkit.org/show_bug.cgi?id=39411

        When building for BREW MP, don't include POSIX headers:
        <fcntl.h>, <pthread.h> and <sys/types.h>.

        * WebCorePrefix.h:

2010-06-11  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Rename the rest of the *Tokenizer classes to *DocumentParser
        https://bugs.webkit.org/show_bug.cgi?id=40507

        This search/replace was done by do-webcore-rename.
        Just looking for a rubber stamp.
        
        XMLTokenizer => XMLDocumentParser
        XMLTokenizerLibxml2 => XMLDocumentParserLibxml2
        XMLTokenizerQt => XMLDocumentParserQt
        XMLTokenizerScope => XMLDocumentParserScope
        HTML5Tokenizer => HTML5DocumentParser
        HTMLTokenizer => HTMLDocumentParser

        No functional change, thus no tests.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::checkLoaded):
        * dom/Document.cpp:
        (WebCore::Document::createTokenizer):
        (WebCore::Document::write):
        * dom/Document.h:
        (WebCore::Document::setXMLEncoding):
        * dom/DocumentParser.h:
        (WebCore::DocumentParser::asHTMLTokenizer):
        * dom/Element.cpp:
        * dom/ProcessingInstruction.cpp:
        * dom/XMLDocumentParser.cpp: Added.
        (WebCore::XMLDocumentParser::isWMLDocument):
        (WebCore::XMLDocumentParser::pushCurrentNode):
        (WebCore::XMLDocumentParser::popCurrentNode):
        (WebCore::XMLDocumentParser::clearCurrentNodeStack):
        (WebCore::XMLDocumentParser::write):
        (WebCore::XMLDocumentParser::handleError):
        (WebCore::XMLDocumentParser::enterText):
        (WebCore::toString):
        (WebCore::XMLDocumentParser::exitText):
        (WebCore::XMLDocumentParser::end):
        (WebCore::XMLDocumentParser::finish):
        (WebCore::createXHTMLParserErrorHeader):
        (WebCore::XMLDocumentParser::insertErrorMessageBlock):
        (WebCore::XMLDocumentParser::notifyFinished):
        (WebCore::XMLDocumentParser::isWaitingForScripts):
        (WebCore::XMLDocumentParser::pauseParsing):
        * dom/XMLDocumentParser.h: Added.
        (WebCore::XMLParserContext::context):
        (WebCore::XMLParserContext::XMLParserContext):
        (WebCore::XMLDocumentParser::):
        (WebCore::XMLDocumentParser::setIsXHTMLDocument):
        (WebCore::XMLDocumentParser::isXHTMLDocument):
        (WebCore::XMLDocumentParser::setIsXHTMLMPDocument):
        (WebCore::XMLDocumentParser::isXHTMLMPDocument):
        (WebCore::XMLDocumentParser::wellFormed):
        (WebCore::XMLDocumentParser::context):
        * dom/XMLDocumentParserLibxml2.cpp: Added.
        (WebCore::PendingCallbacks::~PendingCallbacks):
        (WebCore::PendingCallbacks::appendStartElementNSCallback):
        (WebCore::PendingCallbacks::appendEndElementNSCallback):
        (WebCore::PendingCallbacks::appendCharactersCallback):
        (WebCore::PendingCallbacks::appendProcessingInstructionCallback):
        (WebCore::PendingCallbacks::appendCDATABlockCallback):
        (WebCore::PendingCallbacks::appendCommentCallback):
        (WebCore::PendingCallbacks::appendInternalSubsetCallback):
        (WebCore::PendingCallbacks::appendErrorCallback):
        (WebCore::PendingCallbacks::callAndRemoveFirstCallback):
        (WebCore::PendingCallbacks::isEmpty):
        (WebCore::PendingCallbacks::PendingCallback::~PendingCallback):
        (WebCore::PendingCallbacks::PendingStartElementNSCallback::~PendingStartElementNSCallback):
        (WebCore::PendingCallbacks::PendingStartElementNSCallback::call):
        (WebCore::PendingCallbacks::PendingEndElementNSCallback::call):
        (WebCore::PendingCallbacks::PendingCharactersCallback::~PendingCharactersCallback):
        (WebCore::PendingCallbacks::PendingCharactersCallback::call):
        (WebCore::PendingCallbacks::PendingProcessingInstructionCallback::~PendingProcessingInstructionCallback):
        (WebCore::PendingCallbacks::PendingProcessingInstructionCallback::call):
        (WebCore::PendingCallbacks::PendingCDATABlockCallback::~PendingCDATABlockCallback):
        (WebCore::PendingCallbacks::PendingCDATABlockCallback::call):
        (WebCore::PendingCallbacks::PendingCommentCallback::~PendingCommentCallback):
        (WebCore::PendingCallbacks::PendingCommentCallback::call):
        (WebCore::PendingCallbacks::PendingInternalSubsetCallback::~PendingInternalSubsetCallback):
        (WebCore::PendingCallbacks::PendingInternalSubsetCallback::call):
        (WebCore::PendingCallbacks::):
        (WebCore::matchFunc):
        (WebCore::OffsetBuffer::OffsetBuffer):
        (WebCore::OffsetBuffer::readOutBytes):
        (WebCore::shouldAllowExternalLoad):
        (WebCore::openFunc):
        (WebCore::readFunc):
        (WebCore::writeFunc):
        (WebCore::closeFunc):
        (WebCore::errorFunc):
        (WebCore::XMLParserContext::createStringParser):
        (WebCore::XMLParserContext::createMemoryParser):
        (WebCore::XMLDocumentParser::XMLDocumentParser):
        (WebCore::XMLParserContext::~XMLParserContext):
        (WebCore::XMLDocumentParser::~XMLDocumentParser):
        (WebCore::XMLDocumentParser::doWrite):
        (WebCore::toString):
        (WebCore::handleElementNamespaces):
        (WebCore::handleElementAttributes):
        (WebCore::XMLDocumentParser::startElementNs):
        (WebCore::XMLDocumentParser::endElementNs):
        (WebCore::XMLDocumentParser::characters):
        (WebCore::XMLDocumentParser::error):
        (WebCore::XMLDocumentParser::processingInstruction):
        (WebCore::XMLDocumentParser::cdataBlock):
        (WebCore::XMLDocumentParser::comment):
        (WebCore::XMLDocumentParser::startDocument):
        (WebCore::XMLDocumentParser::endDocument):
        (WebCore::XMLDocumentParser::internalSubset):
        (WebCore::getTokenizer):
        (WebCore::hackAroundLibXMLEntityBug):
        (WebCore::startElementNsHandler):
        (WebCore::endElementNsHandler):
        (WebCore::charactersHandler):
        (WebCore::processingInstructionHandler):
        (WebCore::cdataBlockHandler):
        (WebCore::commentHandler):
        (WebCore::warningHandler):
        (WebCore::fatalErrorHandler):
        (WebCore::normalErrorHandler):
        (WebCore::):
        (WebCore::sharedXHTMLEntity):
        (WebCore::getXHTMLEntity):
        (WebCore::getEntityHandler):
        (WebCore::startDocumentHandler):
        (WebCore::endDocumentHandler):
        (WebCore::internalSubsetHandler):
        (WebCore::externalSubsetHandler):
        (WebCore::ignorableWhitespaceHandler):
        (WebCore::XMLDocumentParser::initializeParserContext):
        (WebCore::XMLDocumentParser::doEnd):
        (WebCore::xmlDocPtrForString):
        (WebCore::XMLDocumentParser::lineNumber):
        (WebCore::XMLDocumentParser::columnNumber):
        (WebCore::XMLDocumentParser::stopParsing):
        (WebCore::XMLDocumentParser::resumeParsing):
        (WebCore::parseXMLDocumentFragment):
        (WebCore::attributesStartElementNsHandler):
        (WebCore::parseAttributes):
        * dom/XMLDocumentParserQt.cpp: Added.
        (WebCore::EntityResolver::resolveUndeclaredEntity):
        (WebCore::XMLDocumentParser::XMLDocumentParser):
        (WebCore::XMLDocumentParser::~XMLDocumentParser):
        (WebCore::XMLDocumentParser::doWrite):
        (WebCore::XMLDocumentParser::initializeParserContext):
        (WebCore::XMLDocumentParser::doEnd):
        (WebCore::XMLDocumentParser::lineNumber):
        (WebCore::XMLDocumentParser::columnNumber):
        (WebCore::XMLDocumentParser::stopParsing):
        (WebCore::XMLDocumentParser::resumeParsing):
        (WebCore::parseXMLDocumentFragment):
        (WebCore::attributesStartElementNsHandler):
        (WebCore::parseAttributes):
        (WebCore::prefixFromQName):
        (WebCore::handleElementNamespaces):
        (WebCore::handleElementAttributes):
        (WebCore::XMLDocumentParser::parse):
        (WebCore::XMLDocumentParser::startDocument):
        (WebCore::XMLDocumentParser::parseStartElement):
        (WebCore::XMLDocumentParser::parseEndElement):
        (WebCore::XMLDocumentParser::parseCharacters):
        (WebCore::XMLDocumentParser::parseProcessingInstruction):
        (WebCore::XMLDocumentParser::parseCdata):
        (WebCore::XMLDocumentParser::parseComment):
        (WebCore::XMLDocumentParser::endDocument):
        (WebCore::XMLDocumentParser::hasError):
        (WebCore::XMLDocumentParser::parseDtd):
        * dom/XMLDocumentParserScope.cpp: Added.
        (WebCore::XMLDocumentParserScope::XMLDocumentParserScope):
        (WebCore::XMLDocumentParserScope::~XMLDocumentParserScope):
        * dom/XMLDocumentParserScope.h: Added.
        * dom/XMLTokenizer.cpp: Removed.
        * dom/XMLTokenizer.h: Removed.
        * dom/XMLTokenizerLibxml2.cpp: Removed.
        * dom/XMLTokenizerQt.cpp: Removed.
        * dom/XMLTokenizerScope.cpp: Removed.
        * dom/XMLTokenizerScope.h: Removed.
        * html/HTML5DocumentParser.cpp: Added.
        (WebCore::):
        (WebCore::HTML5DocumentParser::HTML5DocumentParser):
        (WebCore::HTML5DocumentParser::~HTML5DocumentParser):
        (WebCore::HTML5DocumentParser::begin):
        (WebCore::HTML5DocumentParser::pumpLexerIfPossible):
        (WebCore::HTML5DocumentParser::pumpLexer):
        (WebCore::HTML5DocumentParser::write):
        (WebCore::HTML5DocumentParser::end):
        (WebCore::HTML5DocumentParser::attemptToEnd):
        (WebCore::HTML5DocumentParser::endIfDelayed):
        (WebCore::HTML5DocumentParser::finish):
        (WebCore::HTML5DocumentParser::executingScript):
        (WebCore::HTML5DocumentParser::lineNumber):
        (WebCore::HTML5DocumentParser::columnNumber):
        (WebCore::HTML5DocumentParser::htmlParser):
        (WebCore::HTML5DocumentParser::isWaitingForScripts):
        (WebCore::HTML5DocumentParser::resumeParsingAfterScriptExecution):
        (WebCore::HTML5DocumentParser::watchForLoad):
        (WebCore::HTML5DocumentParser::stopWatchingForLoad):
        (WebCore::HTML5DocumentParser::shouldLoadExternalScriptFromSrc):
        (WebCore::HTML5DocumentParser::executeScript):
        (WebCore::HTML5DocumentParser::notifyFinished):
        (WebCore::HTML5DocumentParser::executeScriptsWaitingForStylesheets):
        (WebCore::HTML5DocumentParser::script):
        * html/HTML5DocumentParser.h: Added.
        (WebCore::HTML5DocumentParser::InputStream::InputStream):
        (WebCore::HTML5DocumentParser::InputStream::appendToEnd):
        (WebCore::HTML5DocumentParser::InputStream::insertAtCurrentInsertionPoint):
        (WebCore::HTML5DocumentParser::InputStream::close):
        (WebCore::HTML5DocumentParser::InputStream::current):
        (WebCore::HTML5DocumentParser::InputStream::splitInto):
        (WebCore::HTML5DocumentParser::InputStream::mergeFrom):
        (WebCore::HTML5DocumentParser::InsertionPointRecord::InsertionPointRecord):
        (WebCore::HTML5DocumentParser::InsertionPointRecord::~InsertionPointRecord):
        (WebCore::HTML5DocumentParser::inWrite):
        * html/HTML5Lexer.h:
        (WebCore::HTML5Lexer::columnNumber):
        * html/HTML5Tokenizer.cpp: Removed.
        * html/HTML5Tokenizer.h: Removed.
        * html/HTML5TreeBuilder.cpp:
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::createTokenizer):
        * html/HTMLDocumentParser.cpp: Added.
        (WebCore::):
        (WebCore::fixUpChar):
        (WebCore::tagMatch):
        (WebCore::Token::addAttribute):
        (WebCore::HTMLDocumentParser::HTMLDocumentParser):
        (WebCore::HTMLDocumentParser::reset):
        (WebCore::HTMLDocumentParser::begin):
        (WebCore::HTMLDocumentParser::setForceSynchronous):
        (WebCore::HTMLDocumentParser::processListing):
        (WebCore::HTMLDocumentParser::parseNonHTMLText):
        (WebCore::HTMLDocumentParser::scriptHandler):
        (WebCore::HTMLDocumentParser::scriptExecution):
        (WebCore::HTMLDocumentParser::parseComment):
        (WebCore::HTMLDocumentParser::parseServer):
        (WebCore::HTMLDocumentParser::parseProcessingInstruction):
        (WebCore::HTMLDocumentParser::parseText):
        (WebCore::HTMLDocumentParser::parseEntity):
        (WebCore::HTMLDocumentParser::parseDoctype):
        (WebCore::HTMLDocumentParser::parseTag):
        (WebCore::HTMLDocumentParser::continueProcessing):
        (WebCore::HTMLDocumentParser::advance):
        (WebCore::HTMLDocumentParser::willWriteHTML):
        (WebCore::HTMLDocumentParser::didWriteHTML):
        (WebCore::HTMLDocumentParser::write):
        (WebCore::HTMLDocumentParser::stopParsing):
        (WebCore::HTMLDocumentParser::processingData):
        (WebCore::HTMLDocumentParser::timerFired):
        (WebCore::HTMLDocumentParser::end):
        (WebCore::HTMLDocumentParser::finish):
        (WebCore::HTMLDocumentParser::processToken):
        (WebCore::HTMLDocumentParser::processDoctypeToken):
        (WebCore::HTMLDocumentParser::~HTMLDocumentParser):
        (WebCore::HTMLDocumentParser::enlargeBuffer):
        (WebCore::HTMLDocumentParser::enlargeScriptBuffer):
        (WebCore::HTMLDocumentParser::executeScriptsWaitingForStylesheets):
        (WebCore::HTMLDocumentParser::notifyFinished):
        (WebCore::HTMLDocumentParser::executeExternalScriptsIfReady):
        (WebCore::HTMLDocumentParser::executeExternalScriptsTimerFired):
        (WebCore::HTMLDocumentParser::continueExecutingExternalScripts):
        (WebCore::HTMLDocumentParser::isWaitingForScripts):
        (WebCore::HTMLDocumentParser::setSrc):
        (WebCore::parseHTMLDocumentFragment):
        (WebCore::decodeNamedEntity):
        * html/HTMLDocumentParser.h: Added.
        (WebCore::Token::Token):
        (WebCore::Token::~Token):
        (WebCore::Token::isOpenTag):
        (WebCore::Token::isCloseTag):
        (WebCore::Token::reset):
        (WebCore::Token::addViewSourceChar):
        (WebCore::):
        (WebCore::DoctypeToken::DoctypeToken):
        (WebCore::DoctypeToken::reset):
        (WebCore::DoctypeToken::state):
        (WebCore::DoctypeToken::setState):
        (WebCore::HTMLDocumentParser::forceSynchronous):
        (WebCore::HTMLDocumentParser::executingScript):
        (WebCore::HTMLDocumentParser::lineNumber):
        (WebCore::HTMLDocumentParser::columnNumber):
        (WebCore::HTMLDocumentParser::processingContentWrittenByScript):
        (WebCore::HTMLDocumentParser::htmlParser):
        (WebCore::HTMLDocumentParser::asHTMLTokenizer):
        (WebCore::HTMLDocumentParser::checkBuffer):
        (WebCore::HTMLDocumentParser::checkScriptBuffer):
        (WebCore::HTMLDocumentParser::):
        (WebCore::HTMLDocumentParser::State::State):
        (WebCore::HTMLDocumentParser::State::tagState):
        (WebCore::HTMLDocumentParser::State::setTagState):
        (WebCore::HTMLDocumentParser::State::entityState):
        (WebCore::HTMLDocumentParser::State::setEntityState):
        (WebCore::HTMLDocumentParser::State::inScript):
        (WebCore::HTMLDocumentParser::State::setInScript):
        (WebCore::HTMLDocumentParser::State::inStyle):
        (WebCore::HTMLDocumentParser::State::setInStyle):
        (WebCore::HTMLDocumentParser::State::inXmp):
        (WebCore::HTMLDocumentParser::State::setInXmp):
        (WebCore::HTMLDocumentParser::State::inTitle):
        (WebCore::HTMLDocumentParser::State::setInTitle):
        (WebCore::HTMLDocumentParser::State::inIFrame):
        (WebCore::HTMLDocumentParser::State::setInIFrame):
        (WebCore::HTMLDocumentParser::State::inPlainText):
        (WebCore::HTMLDocumentParser::State::setInPlainText):
        (WebCore::HTMLDocumentParser::State::inProcessingInstruction):
        (WebCore::HTMLDocumentParser::State::setInProcessingInstruction):
        (WebCore::HTMLDocumentParser::State::inComment):
        (WebCore::HTMLDocumentParser::State::setInComment):
        (WebCore::HTMLDocumentParser::State::inDoctype):
        (WebCore::HTMLDocumentParser::State::setInDoctype):
        (WebCore::HTMLDocumentParser::State::inTextArea):
        (WebCore::HTMLDocumentParser::State::setInTextArea):
        (WebCore::HTMLDocumentParser::State::escaped):
        (WebCore::HTMLDocumentParser::State::setEscaped):
        (WebCore::HTMLDocumentParser::State::inServer):
        (WebCore::HTMLDocumentParser::State::setInServer):
        (WebCore::HTMLDocumentParser::State::skipLF):
        (WebCore::HTMLDocumentParser::State::setSkipLF):
        (WebCore::HTMLDocumentParser::State::startTag):
        (WebCore::HTMLDocumentParser::State::setStartTag):
        (WebCore::HTMLDocumentParser::State::discardLF):
        (WebCore::HTMLDocumentParser::State::setDiscardLF):
        (WebCore::HTMLDocumentParser::State::allowYield):
        (WebCore::HTMLDocumentParser::State::setAllowYield):
        (WebCore::HTMLDocumentParser::State::loadingExtScript):
        (WebCore::HTMLDocumentParser::State::setLoadingExtScript):
        (WebCore::HTMLDocumentParser::State::forceSynchronous):
        (WebCore::HTMLDocumentParser::State::setForceSynchronous):
        (WebCore::HTMLDocumentParser::State::inAnyNonHTMLText):
        (WebCore::HTMLDocumentParser::State::hasTagState):
        (WebCore::HTMLDocumentParser::State::hasEntityState):
        (WebCore::HTMLDocumentParser::State::needsSpecialWriteHandling):
        (WebCore::HTMLDocumentParser::State::):
        (WebCore::HTMLDocumentParser::State::setBit):
        (WebCore::HTMLDocumentParser::State::testBit):
        * html/HTMLElement.cpp:
        * html/HTMLFormControlElement.cpp:
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::reportErrorToConsole):
        * html/HTMLParser.h:
        * html/HTMLTokenizer.cpp: Removed.
        * html/HTMLTokenizer.h: Removed.
        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::createTokenizer):
        (WebCore::HTMLViewSourceDocument::addViewSourceToken):
        * html/HTMLViewSourceDocument.h:
        * loader/DocumentLoader.cpp:
        * loader/FTPDirectoryDocument.cpp:
        (WebCore::FTPDirectoryTokenizer::FTPDirectoryTokenizer):
        (WebCore::FTPDirectoryTokenizer::loadDocumentTemplate):
        (WebCore::FTPDirectoryTokenizer::finish):
        * loader/FrameLoader.cpp:
        * loader/ImageDocument.cpp:
        * loader/MediaDocument.cpp:
        * loader/PluginDocument.cpp:
        * loader/TextDocument.cpp:
        * page/XSSAuditor.h:
        * svg/SVGDocumentExtensions.cpp:
        * wml/WMLErrorHandling.cpp:
        (WebCore::reportWMLError):
        * xml/XSLStyleSheetLibxslt.cpp:
        (WebCore::XSLStyleSheet::parseString):
        * xml/XSLTProcessor.cpp:
        * xml/XSLTProcessorLibxslt.cpp:

2010-06-12  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Darin Adler.

        Window object should have CanvasGradient and CanvasPattern
        https://bugs.webkit.org/show_bug.cgi?id=40394

        This fixes the following tests:
        - canvas/philip/tests/2d.gradient.object.return.html
        - canvas/philip/tests/2d.pattern.basic.type.html

        * html/canvas/CanvasGradient.idl:
        * html/canvas/CanvasPattern.idl:
        * page/DOMWindow.idl:

2010-06-12  Dan Bernstein  <mitz@apple.com>

        Reviewed by Oliver Hunt.

        <rdar://problem/8025267> REGRESSION (Safari 4-TOT): Crash when a frame’s resize handler removes the frame
        https://bugs.webkit.org/show_bug.cgi?id=40534

        Test: fast/replaced/frame-removed-during-resize.html

        * rendering/RenderWidget.cpp:
        (WebCore::RenderWidget::updateWidgetPosition): Null-check m_widget, since resizing the widget
        may trigger an iframe’s resize handler, which may destroy the widget.

2010-06-12  Dean Jackson  <dino@apple.com>

        Reviewed by Darin Adler.

        Animation keyframe timing functions are applying incorrectly
        https://bugs.webkit.org/show_bug.cgi?id=38963
        
        When copying RenderStyles, we have to clone the AnimationList so that each keyframe
        can have its own timing function.

        Tests: animations/keyframe-timing-functions-transform.html
               animations/keyframe-timing-functions2.html

        * platform/animation/Animation.h:
        (WebCore::Animation::create):
        * platform/animation/AnimationList.cpp:
        (WebCore::AnimationList::AnimationList):
        * platform/animation/AnimationList.h:
        (WebCore::AnimationList::AnimationList):

2010-06-12  Dan Bernstein  <mitz@apple.com>

        Reviewed by Dave Hyatt.

        <rdar://problem/7882140> -webkit-column-break-* properties don’t do anything
        https://bugs.webkit.org/show_bug.cgi?id=40531

        Test: fast/multicol/break-properties.html

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintChildren): Check for -webkit-column-break-{before,after}: always
        and -webkit-column-break-inside: avoid when doing column layout.

2010-06-13  Robert Hogan  <robert@webkit.org>

        Reviewed by Alexey Proskuryakov.

        FrameLoader::clear() clears JS objects that cached pages later rely on

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

        Fix the following tests for Qt:

        fast/events/pageshow-pagehide-on-back-cached.html
        fast/events/pageshow-pagehide-on-back-cached-with-frames.html
        fast/loader/input-element-page-cache-crash.html
        fast/dom/Window/timer-resume-on-navigation-back.html
        loader/go-back-to-different-window-size.html
        fast/dom/javascript-url-crash-function.html
        fast/dom/location-new-window-no-crash.html
        http/tests/security/javascriptURL/xss-ALLOWED-from-javascript-url-window-open.html

        which currently fail because the page's Qt-bindings runtime objects are
        cleared when navigating away from the page containing them.

        Track Qt-bindings objects in a separate ScriptController::cacheableRootBindingObject().
        RuntimeObjects tracked by this root object will not get invalidated on page navigations,
        so they will still be available when the pages containing them are retrieved from the
        b/f cache.

        This means the Qt bindings objects will only get cleared on Frame::pageDestroyed().

        * bindings/js/ScriptController.cpp:
        (WebCore::ScriptController::~ScriptController):
        (WebCore::ScriptController::cacheableBindingRootObject):
        * bindings/js/ScriptController.h:

2010-06-12  Kent Tamura  <tkent@chromium.org>

        Reviewed by Darin Adler.

        REGRESSION: Can't submit a form with <input type=radio required>
        https://bugs.webkit.org/show_bug.cgi?id=40429

        Validity state was not updated correctly for radio buttons, and it
        prevents form submission even if a radio button group has a
        checked radio button.

        Test: fast/forms/interactive-validation-required-radio.html

        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::updateCheckedRadioButtons):
         Call setNeedsValidityCheck() for all of radio buttons in the same group
         to update validity state.
        (WebCore::HTMLInputElement::setChecked):
         Remove setNeedsValidityCheck() call because it is called in
         updateCheckedRadioButtons().

2010-06-12  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        Disable interactive form validation in non-strict modes
        https://bugs.webkit.org/show_bug.cgi?id=40218

        The interactive validation feature of HTML5 is not compatible with
        HTML4, and users and page authors don't expect existing sites work
        differently in WebKit. For example, maxlength and required attributes
        in existing sites unexpectedly prevented form submission.
        So, we disable the interactive validation feature in non-strict
        modes to improve compatibility.

        Test: fast/forms/interactive-validation-compat-mode.html
              fast/forms/interactive-validation-html4.html

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::validateInteractively):
         Process interactive validation only in the strict mode.

2010-06-12  Eric Seidel  <eric@webkit.org>

        Reviewed by David Levin.

        Rename Tokenizer to DocumentParser to match what it actually does
        https://bugs.webkit.org/show_bug.cgi?id=40504

        The rename was entirely done by do-webcore-rename.
        The only manual changes were removing out-dated comments
        and fixing Tokenizer_h to DocumentParser_h in the header guards.

        I'll do all the rest of the renames (like the tokenizer subclasses
        and the tokenizer() createTokenizer() methods) in separate changes.

        No functional change, thus no tests.

        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSHTMLDocumentCustom.cpp:
        * bindings/v8/ScriptEventListener.cpp:
        * dom/Document.cpp:
        (WebCore::Document::createTokenizer):
        * dom/Document.h:
        (WebCore::Document::tokenizer):
        * dom/DocumentParser.h: Added.
        (WebCore::DocumentParser::~DocumentParser):
        (WebCore::DocumentParser::stopParsing):
        (WebCore::DocumentParser::processingData):
        (WebCore::DocumentParser::executingScript):
        (WebCore::DocumentParser::wantsRawData):
        (WebCore::DocumentParser::writeRawData):
        (WebCore::DocumentParser::inViewSourceMode):
        (WebCore::DocumentParser::setInViewSourceMode):
        (WebCore::DocumentParser::wellFormed):
        (WebCore::DocumentParser::lineNumber):
        (WebCore::DocumentParser::columnNumber):
        (WebCore::DocumentParser::executeScriptsWaitingForStylesheets):
        (WebCore::DocumentParser::htmlParser):
        (WebCore::DocumentParser::asHTMLTokenizer):
        (WebCore::DocumentParser::xssAuditor):
        (WebCore::DocumentParser::setXSSAuditor):
        (WebCore::DocumentParser::DocumentParser):
        * dom/Tokenizer.h: Removed.
        * dom/ViewportArguments.cpp:
        (WebCore::reportViewportWarning):
        * dom/XMLTokenizer.h:
        * dom/XMLTokenizerLibxml2.cpp:
        (WebCore::XMLTokenizer::stopParsing):
        * dom/XMLTokenizerQt.cpp:
        (WebCore::XMLTokenizer::stopParsing):
        * html/HTML5Tokenizer.cpp:
        (WebCore::HTML5Tokenizer::HTML5Tokenizer):
        * html/HTML5Tokenizer.h:
        * html/HTMLDocument.cpp:
        (WebCore::HTMLDocument::createTokenizer):
        * html/HTMLDocument.h:
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::removedFromTree):
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::HTMLTokenizer):
        (WebCore::HTMLTokenizer::stopParsing):
        * html/HTMLTokenizer.h:
        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::createTokenizer):
        * html/HTMLViewSourceDocument.h:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::isLoadingInAPISense):
        * loader/DocumentWriter.cpp:
        (WebCore::DocumentWriter::addData):
        * loader/FTPDirectoryDocument.cpp:
        (WebCore::FTPDirectoryDocument::createTokenizer):
        * loader/FTPDirectoryDocument.h:
        * loader/ImageDocument.cpp:
        (WebCore::ImageDocument::createTokenizer):
        * loader/ImageDocument.h:
        * loader/MediaDocument.cpp:
        (WebCore::MediaDocument::createTokenizer):
        * loader/MediaDocument.h:
        * loader/PluginDocument.cpp:
        (WebCore::PluginDocument::createTokenizer):
        * loader/PluginDocument.h:
        * loader/SinkDocument.cpp:
        (WebCore::SinkDocument::createTokenizer):
        * loader/SinkDocument.h:
        * loader/TextDocument.cpp:
        (WebCore::TextTokenizer::TextTokenizer):
        (WebCore::TextDocument::createTokenizer):
        (WebCore::createTextTokenizer):
        * loader/TextDocument.h:
        * wml/WMLDocument.cpp:
        (WebCore::WMLDocument::finishedParsing):

2010-06-12  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        HTML5Tokenizer needs to tell the InspectorTimelineAgent before and after it writes
        https://bugs.webkit.org/show_bug.cgi?id=40417

        This "fixes" inspector/timeline-script-tag-1.html.  HTML5 results
        differ from the old parser for expected reasons.

        HTML5Tokenizer calls InspectorTimelineAgent::will/didWriteHTML every
        time we pump the lexer instead of every write() call.
        We end up pumping the lexer slightly more often than the old code called
        write() in order to cleanly handle unclosed-entities, unclosed tags,
        buffered characters, etc. at the end of a document.

        I discussed this extensively with James Robinson in #webkit and we decided
        that it was better for the HTML5Tokenizer to call for every pump and
        that the Inspector should later filter out empty pumps.

        We can't filter out empty pumps yet, because the number of parsed
        characters is passed in willWrite instead of didWrite and thus is
        speculative (and wrong).  This is a problem independent of this change
        as willWrite's "length" argument is wrong in different ways for the old
        parser, including always being 0 when the old parser resumes.

        Tested by inspector/timeline-script-tag-1.html

        * html/HTML5Tokenizer.cpp:
        (WebCore::HTML5Tokenizer::willPumpLexer):
         - Notify the InspectorTimelineAgent we're about to process input.
        (WebCore::HTML5Tokenizer::didPumpLexer):
         - Notify the InspectorTimelineAgent we did process tokens.
        (WebCore::HTML5Tokenizer::pumpLexer):
         - Call willPump and didPump
        * html/HTML5Tokenizer.h:
        * inspector/InspectorTimelineAgent.h:
         - Add a FIXME about passing length to didWrite instead of willWrite.

2010-06-11  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r61052.
        http://trac.webkit.org/changeset/61052
        https://bugs.webkit.org/show_bug.cgi?id=40517

        "Broke fast/forms/caret-rtl.html on Mac bots" (Requested by
        eseidel on #webkit).

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::mapToEntry):
        (WebCore::HTMLElement::parseMappedAttribute):

2010-06-11  Maciej Stachowiak  <mjs@apple.com>

        Reviewed by Ojan Vafai.

        Implement HTML5 hidden attribute
        https://bugs.webkit.org/show_bug.cgi?id=40511

        Test: fast/html/hidden-attr.html
        
        Note: I used the mapped attribute mechanism for this instead of a rule in the UA stylesheet
        to avoid a performance hit from adding a global attribute rule to the UA stylesheet.

        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::mapToEntry): Pick up hidden as a global mapped attribute.
        (WebCore::HTMLElement::parseMappedAttribute): Map hidden attribute to display: none.

2010-06-10  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Dave Hyatt.

        Do not render CSS Styles :first-letter and :first-line in a SVG text element context. 
        https://bugs.webkit.org/show_bug.cgi?id=40031

        Test: svg/text/text-style-invalid.svg

        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::firstLineBlock):
        (WebCore::RenderSVGText::updateFirstLetter):
        * rendering/RenderSVGText.h:

2010-06-11  Kenneth Russell  <kbr@google.com>

        Reviewed by Dimitri Glazkov.

        getParameter with UNPACK_FLIP_Y_WEBGL and UNPACK_PREMULTIPLY_ALPHA_WEBGL is buggy
        https://bugs.webkit.org/show_bug.cgi?id=40506

        Return the data members of WebGLRenderingContext for these
        parameter queries rather than asking OpenGL, which knows nothing
        about them.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getParameter):

2010-06-11  Simon Fraser  <simon.fraser@apple.com>

        Reviewed by Dr Dan Bernstein.

        REGRESSION: crash when unloading an iFrame with Flash from the DOM
        https://bugs.webkit.org/show_bug.cgi?id=40161
        <rdar://problem/7994710>
        
        Null-check the ownerElement of the RenderView's document when unhooking the compositing
        root of an iframe whose layers are parented via the enclosing document. Fixes a crash when
        dynamically removing such an iframe.

        Test: compositing/iframes/remove-iframe-crash.html

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::detachRootPlatformLayer):

2010-06-11  Abhishek Arya  <inferno@chromium.org>

        Reviewed by David Hyatt.

        Don't process floats if parent node is not a RenderBlock.
        https://bugs.webkit.org/show_bug.cgi?id=40033

        Test: svg/text/clear-floats-crash.svg

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

2010-06-11  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r61036.
        http://trac.webkit.org/changeset/61036
        https://bugs.webkit.org/show_bug.cgi?id=40499

        broke chromium compile (Requested by jamesr on #webkit).

        * bindings/v8/SerializedScriptValue.cpp:
        * bindings/v8/SerializedScriptValue.h:
        (WebCore::SerializedScriptValue::deserializeAndSetProperty):
        (WebCore::SerializedScriptValue::create):
        (WebCore::SerializedScriptValue::createFromWire):
        (WebCore::SerializedScriptValue::release):
        (WebCore::SerializedScriptValue::SerializedScriptValue):

2010-06-11  Kenneth Russell  <kbr@google.com>

        Reviewed by Dimitri Glazkov.

        Add texImage2D and texSubImage2D signatures with internal format, etc.
        https://bugs.webkit.org/show_bug.cgi?id=40318

        Added new texImage2D and texSubImage2D entry points following
        WebGL specification changes. Added UNPACK_FLIP_Y_WEBGL and
        UNPACK_PREMULTIPLY_ALPHA_WEBGL pixelStorei parameters, honored
        them for the new entry points taking HTML elements, and added
        support to getParameter. Added warnings to the console for calls
        to the obsolete entry points, which will be removed in a few
        weeks.  Updated all layout tests to use the new entry points and
        pixelStorei parameters, and associated expectations. No other new
        tests.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::WebGLRenderingContext):
        (WebCore::WebGLRenderingContext::getParameter):
        (WebCore::WebGLRenderingContext::pixelStorei):
        (WebCore::WebGLRenderingContext::texImage2DImpl):
        (WebCore::WebGLRenderingContext::texImage2D):
        (WebCore::WebGLRenderingContext::texSubImage2DImpl):
        (WebCore::WebGLRenderingContext::texSubImage2D):
        (WebCore::WebGLRenderingContext::printWarningToConsole):
        * html/canvas/WebGLRenderingContext.h:
        * html/canvas/WebGLRenderingContext.idl:
        * platform/graphics/GraphicsContext3D.h:
        (WebCore::GraphicsContext3D::):

2010-06-11  James Robinson  <jamesr@chromium.org>

        Reviewed by Dimitri Glazkov.

        [chromium] Skia mispaints pages with border-radius
        https://bugs.webkit.org/show_bug.cgi?id=40456

        Skia mispaints pages that have border radius set in some cases. The bug is in the anti aliased
        clip path logic used to implement anti aliased curves in Skia.  Since Skia internally only supports
        1-bit clips, anti aliased clipping is emulated by creating a new alpha layer, storing a set of
        clip paths on the side, and then 'erasing' the regions outside the clip.  See r49641.
        PlatformContextSkia maintains a stack of PlatformContextSkia::State objects that preserve information
        like fill color, drawing mode, etc that is manipulated by GraphicsContext::save() / 
        GraphicsContext::restore() calls as well some internal functions.  Whenever a new State object is pushed
        a new copy of the current State object is pushed onto the top of this stack using the copy c'tor.  The
        set of anti alias clip paths is also stored on the State object, but not copied when new entries are
        added as the paths only apply to that entry on the stack.

        The bug is that the state stack is stored in a WTF::Vector.  When this vector exceeds its capacity
        (by default at 16 elements) all of the existing State entries are copied into the new buffer using
        State's copy constructor.  This does not preserve the anti alias clip paths, so when the State entries
        are popped the anti aliasing info is lost.  This corrupts all further paint operations since it results
        in inbalanced save/restore calls to the underlying SkCanvas.

        The fix is to make the PlatformContextSkia::State copy constructor copy all fields and to add a new
        function PlatformContextSkia::State::cloneInheritedProperties to use when pushing new State entries
        that copies everything except for the anti aliased clip paths.

        Test: fast/css/nested-rounded-corners.html

        * platform/graphics/skia/PlatformContextSkia.cpp:
        (PlatformContextSkia::State::State):
        (PlatformContextSkia::State::cloneInheritedProperties):
        (PlatformContextSkia::save):

2010-06-11  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Darin Fisher.

        [V8] Clean up SerializedScriptValue
        https://bugs.webkit.org/show_bug.cgi?id=40482

        SerializedScriptValue doesn't follow WebKit's style guidelines very well
        and needlessly inlines quite a bit within the .h file. This change cleans
        things up. No funcitonal changes.

        No change in behavior.

        * bindings/v8/SerializedScriptValue.cpp:
        (WebCore::SerializedScriptValue::deserializeAndSetProperty):
        (WebCore::SerializedScriptValue::create):
        (WebCore::SerializedScriptValue::createFromWire):
        (WebCore::SerializedScriptValue::release):
        (WebCore::SerializedScriptValue::SerializedScriptValue):
        * bindings/v8/SerializedScriptValue.h:

2010-06-11  Anton Muhin  <antonm@chromium.org>

        Reviewed by Adam Barth.

        [v8] Introduce single element caches for WebCore::String to v8::String conversions
        https://bugs.webkit.org/show_bug.cgi?id=40435
        Measurements show that for some web apps (GMail, Wave) and some scenarios
        (intensive reading and/or keeping a tab open for a long time),
        hit rate lies in 30--50% interval.
        Inlining fast case gives another minor performance win.

        * bindings/v8/V8Binding.cpp:
        (WebCore::getStringCache):
        (WebCore::v8ExternalStringSlow):
        * bindings/v8/V8Binding.h:
        (WebCore::v8ExternalString):

2010-06-11  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Gustavo Noronha Silva.

        [EFL] Build fix: remove unneeded file (npapi.cpp) and add
        other files that got added to the tree.
        http://webkit.org/b/40331

        * CMakeLists.txt:
        * CMakeListsEfl.txt:

2010-06-11  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Eric Seidel.

        Fix fast/forms/preserveFormDuringResidualStyle.html for HTML5 Parser.
        https://bugs.webkit.org/show_bug.cgi?id=40454

        This required exposing the HTMLParser which we definitely don't want to
        do, but the good news is that it can go away when the HTMLParser goes
        away.

        No new tests because covered by fast/forms/preserve/FormDuringResidualStyle.html.

        * dom/Tokenizer.h:
        (WebCore::Tokenizer::htmlParser):
        * html/HTML5Tokenizer.cpp:
        (WebCore::HTML5Tokenizer::htmlParser):
        * html/HTML5Tokenizer.h:
        * html/HTML5TreeBuilder.h:
        (WebCore::HTML5TreeBuilder::htmlParser):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::removedFromTree):
        * html/HTMLTokenizer.h:
        (WebCore::HTMLTokenizer::htmlParser):

2010-06-11  Kenneth Russell  <kbr@google.com>

        Reviewed by Dimitri Glazkov.

        Delete custom JSC bindings for bufferData, texImage2D and texSubImage2D
        https://bugs.webkit.org/show_bug.cgi?id=40443

        Deleted custom JSC bindings for bufferData, texImage2D and
        texSubImage2D and fixed minor associated issues in code generator
        and IDL. Updated fast/canvas/webgl/texImageTest-expected.txt,
        which now runs as intended. Ran all layout tests, including WebGL
        tests, in Safari.

        * bindings/js/JSWebGLRenderingContextCustom.cpp:
         - Deleted custom bindings.
        * bindings/scripts/CodeGeneratorJS.pm:
         - Made overload helper functions static to fix compiler warnings.
         - Added needed isObject check for overloads between object and non-object arguments.
         - Added JSValue::encode to exception return path, needed on Leopard in particular.
        * html/HTMLCanvasElement.idl:
        * html/HTMLImageElement.idl:
        * html/HTMLVideoElement.idl:
         - Added GenerateNativeConverter extended attribute.
        * html/canvas/WebGLRenderingContext.idl:
         - Deleted #ifdefs for custom JSC bindings.

2010-06-11  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix, add KillRingNone.cpp until we can implement it.

        * wscript:

2010-06-11  Hans Wennborg  <hans@chromium.org>

        Reviewed by Jeremy Orlow.

        DOM storage should only create databases when needed
        https://bugs.webkit.org/show_bug.cgi?id=40301

        As soon as a page attempts to use localstorage, StorageAreaSync will
        create an empty database if one doesn't already exist. This can lead to
        lots of unnecessary database files. In particular, they are created
        even when the privacy settings or private browsing mode disallow
        localstorage data, which may seem odd to the user.

        Database creation should be put off in StorageAreaSync until it is time
        to actually write something to the database.

        Tests:
         manual-tests/localstorage-empty-database.html

        * manual-tests/localstorage-empty-database.html: Added.
        * storage/StorageAreaSync.cpp:
        (WebCore::StorageAreaSync::StorageAreaSync):
        (WebCore::StorageAreaSync::openDatabase):
        (WebCore::StorageAreaSync::performImport):
        (WebCore::StorageAreaSync::sync):
        * storage/StorageAreaSync.h:
        (WebCore::StorageAreaSync::):

2010-06-11  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Eric Seidel.

        Perl scripts for bindings don't use strict keyword.
        As result some problems in the script code were not detected at compile stage.
        https://bugs.webkit.org/show_bug.cgi?id=40468

        * bindings/scripts/CodeGenerator.pm:
        * bindings/scripts/IDLParser.pm:
        * bindings/scripts/IDLStructure.pm:

2010-06-11  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        HTML5Tokenizer should not delete itself while running scripts
        https://bugs.webkit.org/show_bug.cgi?id=40458

        Tested by fast/dom/document-clear.html

        * html/HTML5Tokenizer.cpp:
        (WebCore::HTML5Tokenizer::attemptToEnd):
         - Don't ever end() while running scripts.
           This matches the old HTMLTokenizer.cpp

2010-06-11  Zhenyao Mo  <zmo@google.com>

        Reviewed by Dimitri Glazkov.

        getActiveUniform must ensure names of arrays end in "[0]"
        https://bugs.webkit.org/show_bug.cgi?id=38709

        Test: fast/canvas/webgl/get-active-test.html

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getActiveAttrib): Append "[0]" to the name if needed.

2010-06-11  Zhenyao Mo  <zmo@google.com>

        Reviewed by Dimitri Glazkov.

        readPixels with negative width/height should generate INVALID_VALUE and return
        https://bugs.webkit.org/show_bug.cgi?id=39704

        * html/canvas/WebGLRenderingContext.cpp: Deal with negative width/height.
        (WebCore::WebGLRenderingContext::readPixels):
        * html/canvas/WebGLRenderingContext.h: Change width/height type from unsigned long to long.
        * html/canvas/WebGLRenderingContext.idl: Ditto.

2010-06-11  Zhenyao Mo  <zmo@google.com>

        Reviewed by Dimitri Glazkov.

        uniform* entry points must ignore the call if a null WebGLUniformLocation is passed
        https://bugs.webkit.org/show_bug.cgi?id=38707

        * html/canvas/WebGLRenderingContext.cpp: uniform* entry points ignore the call if a null WebGLUniformLocation is passed.
        (WebCore::WebGLRenderingContext::uniform1f):
        (WebCore::WebGLRenderingContext::uniform1fv):
        (WebCore::WebGLRenderingContext::uniform1i):
        (WebCore::WebGLRenderingContext::uniform1iv):
        (WebCore::WebGLRenderingContext::uniform2f):
        (WebCore::WebGLRenderingContext::uniform2fv):
        (WebCore::WebGLRenderingContext::uniform2i):
        (WebCore::WebGLRenderingContext::uniform2iv):
        (WebCore::WebGLRenderingContext::uniform3f):
        (WebCore::WebGLRenderingContext::uniform3fv):
        (WebCore::WebGLRenderingContext::uniform3i):
        (WebCore::WebGLRenderingContext::uniform3iv):
        (WebCore::WebGLRenderingContext::uniform4f):
        (WebCore::WebGLRenderingContext::uniform4fv):
        (WebCore::WebGLRenderingContext::uniform4i):
        (WebCore::WebGLRenderingContext::uniform4iv):
        (WebCore::WebGLRenderingContext::uniformMatrix2fv):
        (WebCore::WebGLRenderingContext::uniformMatrix3fv):
        (WebCore::WebGLRenderingContext::uniformMatrix4fv):

2010-06-11  Zhenyao Mo  <zmo@google.com>

        Reviewed by Dimitri Glazkov.

        drawElements/drawArrays should validate input parameters according to GLES2 spec
        https://bugs.webkit.org/show_bug.cgi?id=38700

        Tests: fast/canvas/webgl/draw-arrays-out-of-bounds.html
               fast/canvas/webgl/draw-elements-out-of-bounds.html

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::drawArrays): Validate input parameters.
        (WebCore::WebGLRenderingContext::drawElements): Ditto.
        (WebCore::WebGLRenderingContext::validateDrawMode): Validate mode for draw{Arrays/Elements}.
        * html/canvas/WebGLRenderingContext.h: Add validateDrawMode, fix incorrect parameter types.
        * html/canvas/WebGLRenderingContext.idl: Fix incorrect parameter types.

2010-06-11  Luiz Agostini  <luiz.agostini@openbossa.org>

        Reviewed by Antti Koivisto.

        CSS3 Media Queries are not serialized according to CSSOM
        https://bugs.webkit.org/show_bug.cgi?id=39220

        MediaQuery serialization according to specification
        http://dev.w3.org/csswg/cssom/#serializing-media-queries.

        MediaQuery objects now ignore duplicated expressions. MediaQueryEvaluator::eval()
        now does not proccess MediaQuery objects that are known to be invalid.

        Test: fast/media/media-query-serialization.html

        * css/MediaQuery.cpp:
        (WebCore::stringCompare):
        (WebCore::MediaQuery::serialize):
        (WebCore::MediaQuery::MediaQuery):
        (WebCore::MediaQuery::~MediaQuery):
        (WebCore::MediaQuery::operator==):
        (WebCore::MediaQuery::cssText):
        (WebCore::MediaQuery::append):
        * css/MediaQuery.h:
        (WebCore::MediaQuery::ignored):
        (WebCore::MediaQuery::begin):
        (WebCore::MediaQuery::end):
        * css/MediaQueryExp.cpp:
        (WebCore::MediaQueryExp::serialize):
        * css/MediaQueryExp.h:
        * css/MediaQueryEvaluator.cpp:
        (WebCore::MediaQueryEvaluator::eval):


2010-06-10  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Steve Block.

        Implement more of IndexedDB's Indexes and ObjectStores
        https://bugs.webkit.org/show_bug.cgi?id=40424

        Clean up both of these classes a bit and add create/open/remove
        methods as needed.

        Tests in a future patch (promise).

        * storage/IDBDatabase.h:
        * storage/IDBDatabaseImpl.cpp:
        (WebCore::IDBDatabaseImpl::objectStores):
        (WebCore::IDBDatabaseImpl::createObjectStore):
        (WebCore::IDBDatabaseImpl::objectStore):
        (WebCore::IDBDatabaseImpl::removeObjectStore):
        * storage/IDBDatabaseImpl.h:
        (WebCore::IDBDatabaseImpl::name):
        (WebCore::IDBDatabaseImpl::description):
        (WebCore::IDBDatabaseImpl::version):
        * storage/IDBDatabaseRequest.cpp:
        (WebCore::IDBDatabaseRequest::IDBDatabaseRequest):
        (WebCore::IDBDatabaseRequest::createObjectStore):
        (WebCore::IDBDatabaseRequest::objectStore):
        (WebCore::IDBDatabaseRequest::removeObjectStore):
        * storage/IDBDatabaseRequest.h:
        (WebCore::IDBDatabaseRequest::create):
        (WebCore::IDBDatabaseRequest::name):
        (WebCore::IDBDatabaseRequest::description):
        (WebCore::IDBDatabaseRequest::version):
        (WebCore::IDBDatabaseRequest::objectStores):
        * storage/IDBDatabaseRequest.idl:
        * storage/IDBObjectStore.h:
        * storage/IDBObjectStoreImpl.h:
        * storage/IDBObjectStoreRequest.cpp:
        (WebCore::IDBObjectStoreRequest::get):
        (WebCore::IDBObjectStoreRequest::add):
        (WebCore::IDBObjectStoreRequest::modify):
        (WebCore::IDBObjectStoreRequest::addOrModify):
        (WebCore::IDBObjectStoreRequest::remove):
        (WebCore::IDBObjectStoreRequest::createIndex):
        (WebCore::IDBObjectStoreRequest::index):
        (WebCore::IDBObjectStoreRequest::removeIndex):
        * storage/IDBObjectStoreRequest.h:
        * storage/IDBObjectStoreRequest.idl:

2010-06-11  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Enable serialization/deserialization of the frontend state
        https://bugs.webkit.org/show_bug.cgi?id=40228

        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::saveApplicationSettings):
        (WebCore::InspectorBackend::saveSessionSettings):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::setSessionSettings):
        (WebCore::InspectorController::populateScriptObjects):
        (WebCore::InspectorController::didCommitLoad):
        * inspector/InspectorController.h:
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::populateApplicationSettings):
        (WebCore::InspectorFrontend::populateSessionSettings):
        * inspector/InspectorFrontend.h:
        * inspector/front-end/ConsoleView.js:
        (WebInspector.ConsoleView.prototype._settingsLoaded):
        (WebInspector.ConsoleView.prototype._enterKeyPressed.printResult):
        (WebInspector.ConsoleView.prototype._enterKeyPressed):
        * inspector/front-end/EventListenersSidebarPane.js:
        (WebInspector.EventListenersSidebarPane.prototype._settingsLoaded):
        (WebInspector.EventListenersSidebarPane.prototype):
        ():
        * inspector/front-end/InspectorBackendStub.js:
        (.WebInspector.InspectorBackendStub.prototype.saveApplicationSettings):
        (.WebInspector.InspectorBackendStub.prototype.saveSessionSettings):
        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceView.prototype._selectTab):
        (WebInspector.ResourceView.prototype._selectHeadersTab):
        (WebInspector.ResourceView.prototype.selectContentTab):
        * inspector/front-end/ResourcesPanel.js:
        (WebInspector.ResourcesPanel.prototype._createStatusbarButtons):
        (WebInspector.ResourcesPanel.prototype._settingsLoaded):
        (WebInspector.ResourcesPanel.prototype._toggleLargerResources):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype._showScriptOrResource):
        (WebInspector.ScriptsPanel.prototype._addScriptToFilesMenu):
        * inspector/front-end/Settings.js:
        (WebInspector.populateApplicationSettings):
        (WebInspector.populateSessionSettings):
        (WebInspector.Settings):
        (WebInspector.Settings.prototype.reset):
        (WebInspector.Settings.prototype._load):
        (WebInspector.Settings.prototype._set):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype._settingsLoaded):
        (WebInspector.StylesSidebarPane.prototype.update):
        (WebInspector.StylesSidebarPane.prototype._changeSetting):
        (WebInspector.StylesSidebarPane.prototype._changeColorFormat):
        (WebInspector.ComputedStyleSidebarPane.settingsLoaded):
        (WebInspector.ComputedStyleSidebarPane.showInheritedToggleFunction):
        (WebInspector.ComputedStyleSidebarPane):
        * inspector/front-end/WatchExpressionsSidebarPane.js:
        (WebInspector.WatchExpressionsSidebarPane):
        (WebInspector.WatchExpressionsSidebarPane.prototype._settingsLoaded):
        (WebInspector.WatchExpressionsSection):
        (WebInspector.WatchExpressionsSection.prototype.saveExpressions):
        * inspector/front-end/inspector.js:
        (WebInspector.loaded):
        (WebInspector.reset):

2010-06-10  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Port performSearch from InjectedScript to InspectorDOMAgent.

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

        * inspector/InjectedScriptHost.cpp:
        (WebCore::InjectedScriptHost::addNodesToSearchResult):
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::performSearch):
        (WebCore::InspectorBackend::searchCanceled):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::):
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        (WebCore::InspectorDOMAgent::~InspectorDOMAgent):
        (WebCore::InspectorDOMAgent::performSearch):
        (WebCore::InspectorDOMAgent::searchCanceled):
        (WebCore::InspectorDOMAgent::onMatchJobsTimer):
        (WebCore::InspectorDOMAgent::reportNodesAsSearchResults):
        * inspector/InspectorDOMAgent.h:
        (WebCore::MatchJob::~MatchJob):
        (WebCore::MatchJob::MatchJob):
        (WebCore::MatchJob::addNodesToResults):
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::addNodesToSearchResult):
        * inspector/InspectorFrontend.h:
        * inspector/InspectorResource.cpp:
        (WebCore::InspectorResource::updateScriptObject):
        * inspector/front-end/ElementsPanel.js:
        (WebInspector.ElementsPanel.prototype.searchCanceled):
        (WebInspector.ElementsPanel.prototype.performSearch):
        (WebInspector.ElementsPanel.prototype.addNodesToSearchResult):
        * inspector/front-end/InjectedScript.js:
        (injectedScriptConstructor):
        * inspector/front-end/InjectedScriptAccess.js:

2010-06-11  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Pavel Feldman.

        [Chromium] Restore 'console.profiles' access.

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

        * bindings/v8/ScriptProfiler.cpp:
        (WebCore::ScriptProfiler::stop):
        * bindings/v8/custom/V8ConsoleCustom.cpp:
        (WebCore::V8Console::profilesAccessorGetter):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::stopUserInitiatedProfiling):

2010-06-10  Nikita Vasilyev  <me@elv1s.ru>

        Reviewed by Pavel Feldman.

        Web Inspector: Make a close brace in Styles pane selectable.
        https://bugs.webkit.org/show_bug.cgi?id=40157

        * inspector/front-end/inspector.css:
        (.styles-selector):
        (.styles-section .properties li):
        (.styles-section):

2010-06-11  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: localize missing script source message
        https://bugs.webkit.org/show_bug.cgi?id=40467

        * English.lproj/localizedStrings.js:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::didParseSource): fixed typo in comment.

2010-06-11  Zhenyao Mo  <zmo@google.com>

        Reviewed by Dimitri Glazkov.

        Vertex attributes enabled as arrays but not bound to buffers must generate INVALID_OPERATION
        https://bugs.webkit.org/show_bug.cgi?id=40315

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::validateRenderingState): Check if an enabled vertext attribs is bound to a buffer.
        (WebCore::WebGLRenderingContext::vertexAttribPointer): Set bound buffer in vertex attrib state.
        * html/canvas/WebGLRenderingContext.h: Add a member in vertex attrib state to track bound buffer.

2010-05-31  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Implement the simple text code path.
        https://bugs.webkit.org/show_bug.cgi?id=40077

        Remove the FONT_FAST_PATH macro and use the Qt's
        fast text implementation instead of the one of WebKit.

        The Qt::TextBypassShaping flag is used to tell Qt to
        only use the glyph advances.

        Qt 4.7 is needed to get this flag thus the complex path is always
        used if QtWebKit is compiled against an earlier version.

        Contrary to the WebKit's implementation, the complex code path
        is taken if the text is RightToLeft, justified or is formatted
        with non-zero letter or word spacing.

        * platform/graphics/Font.cpp:
        (WebCore::Font::drawText):
        (WebCore::Font::floatWidth):
        (WebCore::Font::selectionRectForText):
        (WebCore::Font::offsetForPosition):
        * platform/graphics/Font.h:
        (WebCore::Font::isRoundingHackCharacter):
        * platform/graphics/qt/FontQt.cpp:
        (WebCore::fromRawDataWithoutRef):
        (WebCore::needComplexCodePath):
        (WebCore::setupPlatformContext):
        (WebCore::Font::canReturnFallbackFontsForComplexText):
        (WebCore::Font::drawSimpleText):
        (WebCore::Font::drawComplexText):
        (WebCore::Font::floatWidthForSimpleText):
        (WebCore::Font::offsetForPositionForSimpleText):
        (WebCore::Font::selectionRectForSimpleText):

2010-06-03  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Simon Hausmann.

        Move the text code path detection code from FontFastPath.cpp to Font.cpp.
        https://bugs.webkit.org/show_bug.cgi?id=40077

        This is a patch preliminary to the implementation of the
        simple font code path for the Qt port.

        * platform/graphics/Font.cpp:
        (WebCore::Font::setCodePath):
        (WebCore::Font::codePath):
        * platform/graphics/Font.h:
        * platform/graphics/FontFastPath.cpp:

2010-06-11  Sterling Swigart  <sswigart@google.com>

        Reviewed by Dmitry Titov.

        Added AsyncImageResizer and ImageResizerThread classes, which after further
        patches will be capable of resizing images.
        https://bugs.webkit.org/show_bug.cgi?id=40018

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/AsyncImageResizer.cpp: Added.
        (WebCore::AsyncImageResizer::create):
        (WebCore::AsyncImageResizer::AsyncImageResizer):
        (WebCore::AsyncImageResizer::~AsyncImageResizer):
        (WebCore::AsyncImageResizer::notifyFinished):
        * html/AsyncImageResizer.h: Added.
        (WebCore::AsyncImageResizer::CallbackInfo::CallbackInfo):
        (WebCore::AsyncImageResizer::):
        (WebCore::AsyncImageResizer::resizeComplete):
        (WebCore::AsyncImageResizer::resizeError):
        * html/ImageResizerThread.cpp: Added.
        (WebCore::returnBlobOrError):
        (WebCore::ImageResizerThread::start):
        (WebCore::ImageResizerThread::ImageResizerThread):
        (WebCore::ImageResizerThread::~ImageResizerThread):
        (WebCore::ImageResizerThread::imageResizerThreadStart):
        (WebCore::ImageResizerThread::imageResizerThread):
        * html/ImageResizerThread.h: Added.

2010-06-11  Steve Block  <steveblock@google.com>

        Reviewed by Alexey Proskuryakov.

        Client-based Geolocation does not handle multiple simultaneous requests
        https://bugs.webkit.org/show_bug.cgi?id=40148

        Test: fast/dom/Geolocation/multiple-requests.html

        The Geolocation must handle multiple calls to addObserver() from the same Geolocation object.

        * page/GeolocationController.cpp:
        (WebCore::GeolocationController::addObserver):

2010-06-11  Nikita Vasilyev  <me@elv1s.ru>

        Reviewed by Pavel Feldman.

        Web Inspector: When completing using a tab key, select very first value, not a second.
        https://bugs.webkit.org/show_bug.cgi?id=40409

        * inspector/front-end/TextPrompt.js:
        (WebInspector.TextPrompt.prototype._completionsReady):

2010-06-10  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Shinichiro Hamaji.

        Implement render style selection for pages to support CSS3 Paged Media.
        https://bugs.webkit.org/show_bug.cgi?id=35961

        Test: printing/page-rule-selection.html

        * WebCore.base.exp:
        * css/CSSGrammar.y:
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::specificity):
        (WebCore::CSSSelector::specificityForPage):
        * css/CSSSelector.h:
        (WebCore::CSSSelector::CSSSelector):
        (WebCore::CSSSelector::isForPage):
        (WebCore::CSSSelector::setForPage):
        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::styleForPage):
        (WebCore::CSSStyleSelector::matchPageRules):
        (WebCore::CSSStyleSelector::matchPageRulesForList):
        (WebCore::CSSStyleSelector::isLeftPage):
        (WebCore::CSSStyleSelector::isFirstPage):
        (WebCore::CSSStyleSelector::pageName):
        * css/CSSStyleSelector.h:
        (WebCore::CSSStyleSelector::isRightPage):
        * css/html.css:
        (@page):
        * dom/Document.cpp:
        (WebCore::Document::styleForPage):
        * dom/Document.h:
        * page/PrintContext.cpp:
        (WebCore::PrintContext::pageProperty):
        * page/PrintContext.h:


2010-06-10  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Shinichiro Hamaji.

        Fix Bug 40452: REGRESSION: printing is broken if stylesheet has @page
        https://bugs.webkit.org/show_bug.cgi?id=40452

        Test: printing/page-rule-in-media-query.html

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSRuleSet::addRulesFromSheet):
        (WebCore::CSSRuleSet::addStyleRule):

2010-06-10  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r60989.
        http://trac.webkit.org/changeset/60989
        https://bugs.webkit.org/show_bug.cgi?id=40462

        It makes things crash (Requested by abarth on #webkit).

        * dom/Tokenizer.h:
        (WebCore::Tokenizer::isHTMLTokenizer):
        * html/HTML5Tokenizer.cpp:
        * html/HTML5Tokenizer.h:
        * html/HTML5TreeBuilder.h:
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::removedFromTree):
        * html/HTMLTokenizer.h:
        (WebCore::HTMLTokenizer::isHTMLTokenizer):
        (WebCore::HTMLTokenizer::htmlParser):

2010-06-10  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Eric Seidel.

        Fix fast/forms/preserveFormDuringResidualStyle.html for HTML5 Parser.
        https://bugs.webkit.org/show_bug.cgi?id=40454

        This required exposing the HTMLParser which we definitely don't want to
        do, but the good news is that it can go away when the HTMLParser goes
        away.

        No new tests because covered by fast/forms/preserve/FormDuringResidualStyle.html.

        * dom/Tokenizer.h:
        (WebCore::Tokenizer::htmlParser):
        * html/HTML5Tokenizer.cpp:
        (WebCore::HTML5Tokenizer::htmlParser):
        * html/HTML5Tokenizer.h:
        * html/HTML5TreeBuilder.h:
        (WebCore::HTML5TreeBuilder::htmlParser):
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::removedFromTree):
        * html/HTMLTokenizer.h:
        (WebCore::HTMLTokenizer::htmlParser):

2010-06-10  Tony Chang  <tony@chromium.org>

        Reviewed by Kent Tamura.

        crash when focus is changed while trying to focus next element
        https://bugs.webkit.org/show_bug.cgi?id=40407

        Test: fast/events/focus-change-crash.html

        * dom/Element.cpp:
        (WebCore::Element::focus):

2010-06-10  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r60979.
        http://trac.webkit.org/changeset/60979
        https://bugs.webkit.org/show_bug.cgi?id=40450

        Broke build on Leopard (Requested by kbr_google on #webkit).

        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::JSWebGLRenderingContext::bufferData):
        (WebCore::JSWebGLRenderingContext::bufferSubData):
        (WebCore::JSWebGLRenderingContext::texImage2D):
        (WebCore::JSWebGLRenderingContext::texSubImage2D):
        * bindings/scripts/CodeGeneratorJS.pm:
        * html/HTMLCanvasElement.idl:
        * html/HTMLImageElement.idl:
        * html/HTMLVideoElement.idl:
        * html/canvas/WebGLRenderingContext.idl:

2010-06-10  Kenneth Russell  <kbr@google.com>

        Reviewed by Dimitri Glazkov.

        Delete custom JSC bindings for bufferData, texImage2D and texSubImage2D
        https://bugs.webkit.org/show_bug.cgi?id=40443

        Deleted custom JSC bindings for bufferData, texImage2D and
        texSubImage2D and fixed minor associated issues in code generator
        and IDL. Updated fast/canvas/webgl/texImageTest-expected.txt,
        which now runs as intended. Ran all layout tests, including WebGL
        tests, in Safari.

        * bindings/js/JSWebGLRenderingContextCustom.cpp:
         - Deleted custom bindings.
        * bindings/scripts/CodeGeneratorJS.pm:
         - Made overload helper functions static to fix compiler warnings.
         - Added needed isObject check for overloads between object and non-object arguments.
        * html/HTMLCanvasElement.idl:
        * html/HTMLImageElement.idl:
        * html/HTMLVideoElement.idl:
         - Added GenerateNativeConverter extended attribute.
        * html/canvas/WebGLRenderingContext.idl:
         - Deleted #ifdefs for custom JSC bindings.

2010-06-10  David Hyatt  <hyatt@apple.com>

        Reviewed by John Sullivan.

        https://bugs.webkit.org/show_bug.cgi?id=40441, back out the original fix for 29601, since it has broken continuous
        wheel delta values.

        * platform/mac/WebCoreSystemInterface.h:
        * platform/mac/WebCoreSystemInterface.mm:
        * platform/mac/WheelEventMac.mm:
        (WebCore::PlatformWheelEvent::PlatformWheelEvent):

2010-06-10  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Dimitri Glazkov.

        Add null pointer checks for nativeImageForCurrentFrame
        function calls.
        https://bugs.webkit.org/show_bug.cgi?id=39797

        * platform/chromium/PasteboardChromium.cpp:
        (WebCore::Pasteboard::writeImage):
        * platform/graphics/qt/GraphicsContext3DQt.cpp:
        (WebCore::GraphicsContext3D::getImageData):
        * platform/qt/PasteboardQt.cpp:
        (WebCore::Pasteboard::writeImage):

2010-06-09  Kenneth Russell  <kbr@google.com>

        Reviewed by Dimitri Glazkov.

        Implement TypedArray BYTES_PER_ELEMENT
        https://bugs.webkit.org/show_bug.cgi?id=39100

        Implemented BYTES_PER_ELEMENT on all ArrayBufferView subclasses.
        Required bug fixes to JSC bindings' custom constructors. Updated
        fast/canvas/webgl/array-unit-tests.html to verify. Ran all WebGL
        layout tests in Safari and Chromium.

        * bindings/js/JSFloat32ArrayConstructor.cpp:
        (WebCore::JSFloat32ArrayConstructor::JSFloat32ArrayConstructor):
        (WebCore::JSFloat32ArrayConstructor::getOwnPropertySlot):
        (WebCore::JSFloat32ArrayConstructor::getOwnPropertyDescriptor):
        * bindings/js/JSFloat32ArrayConstructor.h:
        (WebCore::JSFloat32ArrayConstructor::createStructure):
        * bindings/js/JSInt16ArrayConstructor.cpp:
        (WebCore::JSInt16ArrayConstructor::JSInt16ArrayConstructor):
        (WebCore::JSInt16ArrayConstructor::getOwnPropertySlot):
        (WebCore::JSInt16ArrayConstructor::getOwnPropertyDescriptor):
        * bindings/js/JSInt16ArrayConstructor.h:
        (WebCore::JSInt16ArrayConstructor::createStructure):
        * bindings/js/JSInt32ArrayConstructor.cpp:
        (WebCore::JSInt32ArrayConstructor::JSInt32ArrayConstructor):
        (WebCore::JSInt32ArrayConstructor::getOwnPropertySlot):
        (WebCore::JSInt32ArrayConstructor::getOwnPropertyDescriptor):
        * bindings/js/JSInt32ArrayConstructor.h:
        (WebCore::JSInt32ArrayConstructor::createStructure):
        * bindings/js/JSInt8ArrayConstructor.cpp:
        (WebCore::JSInt8ArrayConstructor::JSInt8ArrayConstructor):
        (WebCore::JSInt8ArrayConstructor::getOwnPropertySlot):
        (WebCore::JSInt8ArrayConstructor::getOwnPropertyDescriptor):
        * bindings/js/JSInt8ArrayConstructor.h:
        (WebCore::JSInt8ArrayConstructor::createStructure):
        * bindings/js/JSUint16ArrayConstructor.cpp:
        (WebCore::JSUint16ArrayConstructor::JSUint16ArrayConstructor):
        (WebCore::JSUint16ArrayConstructor::getOwnPropertySlot):
        (WebCore::JSUint16ArrayConstructor::getOwnPropertyDescriptor):
        * bindings/js/JSUint16ArrayConstructor.h:
        (WebCore::JSUint16ArrayConstructor::createStructure):
        * bindings/js/JSUint32ArrayConstructor.cpp:
        (WebCore::JSUint32ArrayConstructor::JSUint32ArrayConstructor):
        (WebCore::JSUint32ArrayConstructor::getOwnPropertySlot):
        (WebCore::JSUint32ArrayConstructor::getOwnPropertyDescriptor):
        * bindings/js/JSUint32ArrayConstructor.h:
        (WebCore::JSUint32ArrayConstructor::createStructure):
        * bindings/js/JSUint8ArrayConstructor.cpp:
        (WebCore::JSUint8ArrayConstructor::JSUint8ArrayConstructor):
        (WebCore::JSUint8ArrayConstructor::getOwnPropertySlot):
        (WebCore::JSUint8ArrayConstructor::getOwnPropertyDescriptor):
        * bindings/js/JSUint8ArrayConstructor.h:
        (WebCore::JSUint8ArrayConstructor::createStructure):
        * html/canvas/Float32Array.idl:
        * html/canvas/Int16Array.idl:
        * html/canvas/Int32Array.idl:
        * html/canvas/Int8Array.idl:
        * html/canvas/Uint16Array.idl:
        * html/canvas/Uint32Array.idl:
        * html/canvas/Uint8Array.idl:

2010-06-10  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        HTML5 Parser should continue parsing after script execution
        https://bugs.webkit.org/show_bug.cgi?id=40416

        The previous code was just wrong.  We were always blocking
        the parser after any script execution.  Now we correctly continue
        parsing after a successful script execution and only block the
        parser when we weren't able to execute the script immediately.

        Added a new haveParsingBlockingScript() function to HTML5ScriptRunner
        to make some of the code more self-documenting.

       Test: fast/tokenizer/write-multiple-scripts.html
             fast/js/implicit-call-with-global-reentry.html

        * html/HTML5ScriptRunner.cpp:
        (WebCore::HTML5ScriptRunner::execute):
         - Remove some old (now bogus) FIXMEs and notImplemented() calls.
         - Fix the logic to match the HTML5 spec by continuing parsing
           after script execution and only blocking the parser when the
           script wasn't able to immediately run.
        (WebCore::HTML5ScriptRunner::haveParsingBlockingScript):
         - New function to make some of the code read better.
        (WebCore::HTML5ScriptRunner::executeParsingBlockingScripts):
         - Use haveParsingBlockingScript().
        (WebCore::HTML5ScriptRunner::executeScriptsWaitingForLoad):
         - Use haveParsingBlockingScript().
        (WebCore::HTML5ScriptRunner::runScript):
         - Use haveParsingBlockingScript().
        * html/HTML5ScriptRunner.h:

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

        Reviewed by Pavel Feldman.

        Web Inspector: to reduce the front end start up time don't push script
        sources to frontend if debugger is always enabled, instead request
        script content lazily at the moment it should be displyed. It is critical for
        always enabled debugger because in that case lots of script may have
        already been parsed when the front end is opening and pushing all
        of them at once may slow things down(even though the script sources will never
        be used if scripts panel isn't open).
        https://bugs.webkit.org/show_bug.cgi?id=40364

        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::getScriptSource):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::didCommitLoad):
        (WebCore::InspectorController::getScriptSource):
        (WebCore::InspectorController::didParseSource):
        * inspector/InspectorController.h:
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::didGetScriptSource):
        * inspector/InspectorFrontend.h:
        * inspector/front-end/InspectorBackendStub.js:
        (.WebInspector.InspectorBackendStub.prototype.editScriptSource):
        (.WebInspector.InspectorBackendStub.prototype.getScriptSource):
        * inspector/front-end/ScriptView.js:
        (WebInspector.ScriptView.prototype.setupSourceFrameIfNeeded):
        (WebInspector.ScriptView.prototype._didGetScriptSource):
        (WebInspector.ScriptView.prototype._sourceFrameSetupFinished):

2010-06-10  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Use allowRequestIfNoIllegalURICharacters instead of context for XSSAuditor::canLoadExternalScriptFromSrc
        https://bugs.webkit.org/show_bug.cgi?id=40404

        We originally added the context parameter to
        canLoadExternalScriptFromSrc to work around some false positives caused
        by folks checking external script URLs on the server.  Our thought was
        that we could tell these were not real XSS attacks because the
        surrounding context wouldn't match in the URL and the document.

        Implementing this feature in the HTML5 parser is hard because it
        pierces a layer of abstraction (the token abstraction of the input
        stream).  We could hack this into the new parser, but instead I think
        it's better to switch to using the allowRequestIfNoIllegalURICharacters
        heuristic.

        We designed the allowRequestIfNoIllegalURICharacters after the context
        heuristic to deal with other cases where the server was validating
        input before echoing it.  However, we never tried applying it to
        canLoadExternalScriptFromSrc.

        It's possible that this will cause false positives and will need to be
        reverted, which is why I've left in some of the infrustructure for
        computing context.  We don't have a good way to know if that will
        happen except to try.  We do know, however, that this heuristic will
        work for the original false positives we saw.

        * html/HTML5Tokenizer.cpp:
        (WebCore::HTML5Tokenizer::shouldLoadExternalScriptFromSrc):
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::parseTag):
        * page/XSSAuditor.cpp:
        (WebCore::XSSAuditor::canLoadExternalScriptFromSrc):
        * page/XSSAuditor.h:

2010-06-10  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Kent Tamura.

        Add ENABLE(DATABASE) guard for DatabaseAuthorizer.cpp
        https://bugs.webkit.org/show_bug.cgi?id=40399

        Build fix for ENABLE(DATABASE)=0.

        * storage/DatabaseAuthorizer.cpp:

2010-06-10  Shu Chang  <chang.shu@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Change the type of ShadowBlur from int to float in GraphicsContext.
        Using int for ShadowBlur loses precision and fails the test.
        Note: This code change fixes Qt port but Mac is still failing due to
        platform issue. Function CGContextSetShadowWithColor() does not take
        a blur value less than 0.5.

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

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::setShadow):
        (WebCore::GraphicsContext::getShadow):
        * platform/graphics/GraphicsContext.h:
        * platform/graphics/GraphicsContextPrivate.h:
        * platform/graphics/cairo/FontCairo.cpp:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/cairo/GraphicsContextCairo.cpp:
        (WebCore::GraphicsContext::calculateShadowBufferDimensions):
        (WebCore::drawPathShadow):
        (WebCore::drawBorderlessRectShadow):
        (WebCore::GraphicsContext::setPlatformShadow):
        * platform/graphics/cairo/ImageCairo.cpp:
        (WebCore::BitmapImage::draw):
        * platform/graphics/cg/GraphicsContextCG.cpp:
        (WebCore::GraphicsContext::setPlatformShadow):
        * platform/graphics/chromium/FontChromiumWin.cpp:
        (WebCore::TransparencyAwareFontPainter::TransparencyAwareGlyphPainter::drawGlyphs):
        (WebCore::Font::drawComplexText):
        * platform/graphics/gtk/FontGtk.cpp:
        (WebCore::Font::drawComplexText):
        * platform/graphics/haiku/GraphicsContextHaiku.cpp:
        (WebCore::GraphicsContext::setPlatformShadow):
        * platform/graphics/mac/FontMac.mm:
        (WebCore::Font::drawGlyphs):
        * platform/graphics/openvg/GraphicsContextOpenVG.cpp:
        (WebCore::GraphicsContext::setPlatformShadow):
        * platform/graphics/qt/FontQt.cpp:
        (WebCore::Font::drawComplexText):
        * platform/graphics/qt/GraphicsContextQt.cpp:
        (WebCore::GraphicsContext::drawRect):
        (WebCore::GraphicsContext::drawLine):
        (WebCore::GraphicsContext::strokeArc):
        (WebCore::GraphicsContext::drawConvexPolygon):
        (WebCore::drawFilledShadowPath):
        (WebCore::GraphicsContext::strokePath):
        (WebCore::drawBorderlessRectShadow):
        (WebCore::GraphicsContext::setPlatformShadow):
        * platform/graphics/qt/ImageQt.cpp:
        (WebCore::BitmapImage::draw):
        * platform/graphics/skia/GraphicsContextSkia.cpp:
        (WebCore::GraphicsContext::setPlatformShadow):
        * platform/graphics/skia/SkiaFontWin.cpp:
        (WebCore::windowsCanHandleDrawTextShadow):
        * platform/graphics/win/FontCGWin.cpp:
        (WebCore::drawGDIGlyphs):
        (WebCore::Font::drawGlyphs):
        * platform/graphics/wince/GraphicsContextWince.cpp:
        (WebCore::GraphicsContext::fillRoundedRect):
        (WebCore::GraphicsContext::setPlatformShadow):
        (WebCore::GraphicsContext::drawText):
        * platform/graphics/wx/GraphicsContextWx.cpp:
        (WebCore::GraphicsContext::setPlatformShadow):

2010-06-10  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Support for loading notification icons
        https://bugs.webkit.org/show_bug.cgi?id=40396

        Make notification objects download the icon needed for displaying the
        notification before calling the NotificationPresenter to display the
        notification.

        An error during the download would cause the notification to be displayed
        without an icon.

        If a notification is in the process of download, and a new notification
        is created with the same ReplaceId, the download is not cancelled
        immediately and the notification is removed only after the download is
        complete.
  
        Tests: http/tests/notifications/icon-does-not-exist.html
               http/tests/notifications/icon-exists-cancel.html
               http/tests/notifications/icon-exists-show-alert-during-load.html
               http/tests/notifications/icon-exists.html
               http/tests/notifications/icon-requires-auth.html

        * notifications/Notification.cpp:
        (WebCore::Notification::Notification):
        (WebCore::Notification::~Notification):
        (WebCore::Notification::show):
        (WebCore::Notification::cancel):
        (WebCore::Notification::startLoading):
        (WebCore::Notification::stopLoading):
        (WebCore::Notification::didReceiveResponse):
        (WebCore::Notification::didReceiveData):
        (WebCore::Notification::didFinishLoading):
        (WebCore::Notification::didFail):
        (WebCore::Notification::didFailRedirectCheck):
        (WebCore::Notification::didReceiveAuthenticationCancellation):
        (WebCore::Notification::finishLoading):
        * notifications/Notification.h:
        (WebCore::Notification::iconData):
        (WebCore::Notification::releaseIconData):
        (WebCore::Notification::):

2010-06-10  Raine Makelainen  <raine.makelainen@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Impossible to set input method hints based HTML5 input types
        https://bugs.webkit.org/show_bug.cgi?id=40107

        Helper methods for checking "tel", "number", "email",
        and "url" input element types.

        * html/HTMLInputElement.h:
        (WebCore::HTMLInputElement::isTelephoneField):
        (WebCore::HTMLInputElement::isNumberField):
        (WebCore::HTMLInputElement::isEmailField):
        (WebCore::HTMLInputElement::isUrlField):

2010-06-10  Daniel Cheng  <dcheng@chromium.org>

        Reviewed by Jian Li.

        Don't convert filenames to URLs in edit drags.
        https://bugs.webkit.org/show_bug.cgi?id=38826

        For security reasons, we don't want to expose file system paths to web
        content, so we filter them out of edit drags.

        Test: editing/pasteboard/file-drag-to-editable.html

        * page/DragController.cpp:
        (WebCore::documentFragmentFromDragData):
        * platform/DragData.h:
        (WebCore::DragData::):
        * platform/android/DragDataAndroid.cpp:
        (WebCore::DragData::containsURL):
        (WebCore::DragData::asURL):
        * platform/chromium/DragDataChromium.cpp:
        (WebCore::DragData::containsURL):
        (WebCore::DragData::asURL):
        * platform/efl/DragDataEfl.cpp:
        (WebCore::DragData::containsURL):
        (WebCore::DragData::asURL):
        * platform/gtk/DragDataGtk.cpp:
        (WebCore::DragData::containsURL):
        (WebCore::DragData::asURL):
        * platform/haiku/DragDataHaiku.cpp:
        (WebCore::DragData::containsURL):
        (WebCore::DragData::asURL):
        * platform/mac/DragDataMac.mm:
        (WebCore::DragData::containsURL):
        (WebCore::DragData::asURL):
        * platform/qt/DragDataQt.cpp:
        (WebCore::DragData::asPlainText):
        (WebCore::DragData::containsURL):
        (WebCore::DragData::asURL):
        * platform/win/ClipboardUtilitiesWin.cpp:
        (WebCore::getURL):
        (WebCore::getPlainText):
        * platform/win/ClipboardUtilitiesWin.h:
        * platform/win/ClipboardWin.cpp:
        (WebCore::ClipboardWin::getData):
        * platform/win/DragDataWin.cpp:
        (WebCore::DragData::containsURL):
        (WebCore::DragData::asURL):
        * platform/wince/DragDataWince.cpp:
        (WebCore::DragData::containsURL):
        (WebCore::DragData::asURL):
        * platform/wx/DragDataWx.cpp:
        (WebCore::DragData::containsURL):
        (WebCore::DragData::asURL):

2010-06-10  Mike Belshe  <mbelshe@chromium.org>

        Reviewed by David Levin

        Track whether a resource is loaded via a proxy.

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

        * platform/network/chromium/ResourceResponse.h:
        (WebCore::ResourceResponse::wasFetchedViaProxy):
        (WebCore::ResourceResponse::setWasFetchedViaProxy):

2010-06-10  Jungshik Shin  <jshin@chromium.org>

        Reviewed by Kent Tamura

        Bug 38224 - [chromium] Enable rendering of Ethiopic, Lao, Tibetan 
                    and a few other scripts on Win XP

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

        Make it possible to specify a list of fonts for per-script
        fallback instead of a single font per script. This is
        necessary for Malayalam (for which Windows font doesn't
        support Unicode 5.x fully on Vista or earlier), Ethiopic 
        (we want to support on XP with a 3rd party font because XP
        doesn't have any Ethiopic font out of the box) and some other
        scripts. This is a short-term 'fix' until we have per-script
        font preferences.

        No layout test is added because the test results would be
        dependent on which fonts are present. 

        * platform/graphics/chromium/FontUtilsChromiumWin.cpp:
        (WebCore::):
        (WebCore::FontMap::ScriptToFontFamilies::):

2010-06-09  Andrei Popescu  <andreip@google.com>

        Reviewed by Adam Barth.

        CodeGeneratorJS.pm incorrectly increments $paramIndex when a method is declared with [CallWith]
        https://bugs.webkit.org/show_bug.cgi?id=40372

        Use two variables to keep track of the number of arguments passed from JavaScript vs the number
        of arguments passed to the corresponding C++ method. These numbers can be different since
        the parameter declared via [CallWith] is generated in the bindings instead of being passed
        from JavaScript.

        Test: storage/indexeddb/idb-objectstore-request.html

        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/test/CPP/WebDOMTestObj.cpp:
        (WebDOMTestObj::withScriptExecutionContext):
        * bindings/scripts/test/CPP/WebDOMTestObj.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionWithDynamicFrameAndArg):
        (WebCore::jsTestObjPrototypeFunctionWithDynamicFrameAndOptionalArg):
        (WebCore::jsTestObjPrototypeFunctionWithDynamicFrameAndUserGesture):
        (WebCore::jsTestObjPrototypeFunctionWithDynamicFrameAndUserGestureASAD):

2010-06-09  MORITA Hajime  <morrita@google.com>

        Reviewed by Kent Tamura.

        Refactoring: Simple shadow elements should be factored out .
        https://bugs.webkit.org/show_bug.cgi?id=40400
        
        Pulled ShadowElement class up from SliderThumbElement,
        ProgressValueElement, ShadowInputElement. 
        And renamed ProgressValueElement to ShadowBlockElement.

        No new tests. Because there is no functional change.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * rendering/RenderFileUploadControl.cpp:
        * rendering/RenderProgress.cpp:
        (WebCore::RenderProgress::updateValuePartState):
        * rendering/RenderProgress.h:
        * rendering/RenderSlider.cpp:
        (WebCore::SliderThumbElement::SliderThumbElement):
        (WebCore::SliderThumbElement::defaultEventHandler):
        (WebCore::SliderThumbElement::detach):
        * rendering/ShadowElement.cpp: Added.
        (WebCore::ShadowBlockElement::create):
        (WebCore::ShadowBlockElement::ShadowBlockElement):
        (WebCore::ShadowInputElement::create):
        (WebCore::ShadowInputElement::ShadowInputElement):
        * rendering/ShadowElement.h: Added.
        (WebCore::ShadowElement::ShadowElement):
        (WebCore::ShadowElement::isShadowNode):
        (WebCore::ShadowElement::shadowParentNode):

2010-06-10  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Reduce FrameView.h includes to speed up build times
        https://bugs.webkit.org/show_bug.cgi?id=40408

        Another fix for Qt.

        * page/Frame.h:
         - Include CSSMutableStyleDeclaration.h since it's used by m_typingStyle = 0;

2010-06-10  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Reduce FrameView.h includes to speed up build times
        https://bugs.webkit.org/show_bug.cgi?id=40408

        More attempted build fixes for Tiger and Qt.

        * page/Frame.cpp:
        * page/Frame.h:

2010-06-10  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Reduce FrameView.h includes to speed up build times
        https://bugs.webkit.org/show_bug.cgi?id=40408

        Add a few more RenderLayer.h includes to fix non-mac builds.

        * page/FrameView.cpp:
        * rendering/RenderObject.cpp:
        * rendering/RenderTreeAsText.cpp:

2010-06-10  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Reduce FrameView.h includes to speed up build times
        https://bugs.webkit.org/show_bug.cgi?id=40408

        Cleaned up FrameView.h includes and then propagated the
        cascade of includes to the necessary .cpp files.
        This should reduce the set of files rebuilt every
        time FrameView.h changes, and should also reduce the size
        of some .o files.

        No functional changes, thus no tests.

        * accessibility/AccessibilityRenderObject.cpp:
        * dom/ContainerNode.cpp:
        * dom/Document.cpp:
        * dom/Element.cpp:
        * dom/EventTarget.h:
        * dom/Node.cpp:
        * editing/EditorCommand.cpp:
        * editing/SelectionController.cpp:
        * html/HTML5Tokenizer.cpp:
        (WebCore::HTML5Tokenizer::script):
         - No need for this to be inline.  Being inline required
           Frame.h in the header, which causes huge include cascade.
        * html/HTML5Tokenizer.h:
        * page/DragController.cpp:
        * page/EventHandler.cpp:
        * page/Frame.h:
        * page/FrameView.h:
        * page/PrintContext.cpp:
        * page/SpatialNavigation.cpp:
        * rendering/RenderBlock.cpp:
        * rendering/RenderBlockLineLayout.cpp:
        * rendering/RenderImage.cpp:
        * rendering/RenderInline.cpp:
        * rendering/RenderObject.h:
        * rendering/RenderTextControlSingleLine.cpp:
        * rendering/RenderWidget.cpp:
        * rendering/SVGRenderSupport.cpp:

2010-06-10  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Move HTML5 entity parser to its own file
        https://bugs.webkit.org/show_bug.cgi?id=40406

        Moving this algorithm to its own file better encapsulates its
        dependencies and makes it callable from other parts of WebCore.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/HTML5EntityParser.cpp: Copied from WebCore/html/HTML5Lexer.cpp.
        (WebCore::):
        (WebCore::consumeHTML5Entity):
        * html/HTML5EntityParser.h: Copied from WebCore/html/HTML5Lexer.h.
        * html/HTML5Lexer.cpp:
        (WebCore::HTML5Lexer::processEntity):
        (WebCore::HTML5Lexer::nextToken):
        * html/HTML5Lexer.h:

2010-06-09  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Adam Barth.

        HTML5 Parser: Fix fast/profiler tests that depend on event handler line numbers
        https://bugs.webkit.org/show_bug.cgi?id=40393

        This emulated the old behavior in HTMLTokenizer:processToken()

        No new tests because covered by:
         - fast/profiler/dead-time.html
         - fast/profiler/inline-event-handler.html
         - fast/profiler/stop-profiling-after-setTimeout.html
         - fast/profiler/throw-exception-from-eval.html

        * html/HTML5Tokenizer.cpp:
        (WebCore::HTML5Tokenizer::pumpLexer):

2010-06-09  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=9504
        img tag rewritten by innerHTML doesn't use image map

        Test: fast/dom/replaced-image-map.html

        * html/HTMLMapElement.cpp:
        (WebCore::HTMLMapElement::~HTMLMapElement): Destructor is not a good place to make changes
        that affect page behavior, because destructors are called by garbage collector. Don't
        undregister the image map from here.
        (WebCore::HTMLMapElement::parseMappedAttribute): Only tell document about the map if it's
        actually in document. A map in a detached subtree isn't used by Firefox at least.
        (WebCore::HTMLMapElement::insertedIntoDocument): Register the map.
        (WebCore::HTMLMapElement::removedFromDocument): Unregister the map.

        * html/HTMLMapElement.h: Added insertedIntoDocument/removedFromDocument overrides.

2010-06-09  Roland Steiner  <rolandsteiner@chromium.org>

        Reviewed by Ojan Vafai.

        Bug 35632 -  htmlediting.cpp : isEmptyTableCell() is incomplete
        https://bugs.webkit.org/show_bug.cgi?id=35632

        Correct isEmptyTableCell to check for the presence of other renderer
        children.

        Test: editing/deleting/delete-br-in-last-table-cell.html

        * editing/htmlediting.cpp:
        (WebCore::isEmptyTableCell):

2010-06-09  Qi Zhang  <qi.2.zhang@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Failed at http://philip.html5.org/tests/canvas/suite/tests/2d.path.arcTo.transformation.html
        https://bugs.webkit.org/show_bug.cgi?id=38598

        In path transform function handle path only have moveElement case.

        * platform/graphics/qt/PathQt.cpp:
        (WebCore::Path::transform):

2010-06-09  Anton Muhin  <antonm@chromium.org>

        Reviewed by Nate Chapin.

        [v8] First phase of switching to new named property query API
        https://bugs.webkit.org/show_bug.cgi?id=40303

        To allow better management of attributes of intercepted properties,
        we're starting to switch to new named property query API which
        now could return attributes instead of simple property present/absent
        flag.  The next step would remove USE_NEW_QUERY_CALLBACK, then
        v8 would have them enabled by default.

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/NPV8Object.cpp:
        * bindings/v8/ScriptArray.cpp:
        * bindings/v8/ScriptCallStack.cpp:
        * bindings/v8/SerializedScriptValue.cpp:
        * bindings/v8/V8Binding.cpp:
        * bindings/v8/V8DOMWrapper.cpp:
        * bindings/v8/V8GCController.cpp:
        * bindings/v8/V8IsolatedContext.cpp:
        * bindings/v8/V8NPObject.cpp:
        (WebCore::npObjectQueryProperty):
        * bindings/v8/V8Proxy.cpp:
        * bindings/v8/custom/V8PopStateEventCustom.cpp:
        * bindings/v8/custom/V8StorageCustom.cpp:
        (WebCore::V8Storage::namedPropertyQuery):
        * config.h:

2010-06-09  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        Need to include V8Proxy.h in V8 generated bindings for toV8Context()
        https://bugs.webkit.org/show_bug.cgi?id=40290

        No new tests, build fix only.

        * bindings/scripts/CodeGeneratorV8.pm:

2010-06-09  Jarkko Sakkinen  <jarkko.j.sakkinen@gmail.com>

        Reviewed by Kenneth Rohde Christiansen.

        WebGL rendering context does not activate unless accelerated
        compositing is enabled from settings.
        https://bugs.webkit.org/show_bug.cgi?id=37772

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext):

2010-06-09  Yong Li  <yoli@rim.com>

        Reviewed by George Staikos.

        https://bugs.webkit.org/show_bug.cgi?id=40252
        Make image down-sampling threshold runtime adjustable.

        No new test needed.

        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::setData):
        * platform/graphics/ImageSource.h:
        (WebCore::ImageSource::maxPixelsPerDecodedImage):
        (WebCore::ImageSource::setMaxPixelsPerDecodedImage):

2010-06-09  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Fix handling of bytes received from the network while in document.write
        https://bugs.webkit.org/show_bug.cgi?id=40356

        The old tokenizer has specially logic for handling the case of
        receiving bytes from the network while in a nested call to
        document.write.  This patch implements similar logic for the HTML5
        tokenizer.  Also, this patch abstracts the tricky shuffling of
        SegmentedStrings behind a simple API.

        I'm not sure how to trigger this case.  My guess is we can trigger it
        using a nested event loop, e.g., via alert(), but I'm not sure how to
        test that in a LayoutTest.  There don't appear to be any LayoutTests
        that currently test this behavior despite it being present in the old
        tokenizer.

        * html/HTML5Tokenizer.cpp:
        (WebCore::HTML5Tokenizer::pumpLexer):
        (WebCore::HTML5Tokenizer::write):
            - Added a branch for the |append| argument.
        (WebCore::HTML5Tokenizer::end):
        (WebCore::HTML5Tokenizer::finish):
        (WebCore::HTML5Tokenizer::executeScript):
            - Switch over to using a RAII pattern for recording and restoring
              insertion points.
        * html/HTML5Tokenizer.h:
        (WebCore::HTML5Tokenizer::InputStream::InputStream):
        (WebCore::HTML5Tokenizer::InputStream::appendToEnd):
        (WebCore::HTML5Tokenizer::InputStream::insertAtCurrentInsertionPoint):
        (WebCore::HTML5Tokenizer::InputStream::close):
            - Putting the close() method on InputStream makes it much easier to
              handle EOF.  We now just close the last buffer in the stream when
              the network says it's done.
        (WebCore::HTML5Tokenizer::InputStream::current):
            - This class could be moved to its own file, but it shouldn't be
              used outside of the tokenizer.
        (WebCore::HTML5Tokenizer::InsertionPointRecord::InsertionPointRecord):
        (WebCore::HTML5Tokenizer::InsertionPointRecord::~InsertionPointRecord):
            - A simple RAII class for managing saved insertion points.
        * platform/text/SegmentedString.cpp:
        (WebCore::SegmentedString::operator=):
            - Fix a related bug where m_closed was not being copied properly in
              the assignment operator.

2010-06-09  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Adam Barth.

        Fix fast/parser/hex-entities-length.html for HTML5 parser
        https://bugs.webkit.org/show_bug.cgi?id=40385

        Stripping surrogate pair values appears to be a problem with the spec
        in "Preprocessing the input stream." Minefield doesn't appear to
        implement the part in question. So this patch removes that guard and
        adds a FIXME to track the issue.

        No new tests because covered by fast/parser/hex-entities-length.html

        * html/HTML5Lexer.h:
        (WebCore::HTML5Lexer::InputStreamPreprocessor::peek):

2010-06-09  Kenneth Russell  <kbr@google.com>

        Reviewed by Dimitri Glazkov.

        Update readPixels to take ArrayBufferView rather than returning it
        https://bugs.webkit.org/show_bug.cgi?id=40322

        No new tests; covered by existing tests, which have been modified.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::readPixels):
        * html/canvas/WebGLRenderingContext.h:
        * html/canvas/WebGLRenderingContext.idl:

2010-06-09  Enrico Ros  <eros@codeaurora.org>

        Reviewed by Ariya Hidayat.

        Fix drawing zero-sized gradients on Canvas.
        https://bugs.webkit.org/show_bug.cgi?id=40340

        HTML5 draft says that nothing must be painted if the gradient start
        point equals the stop point.

        This commit fixes the following canvas test:
        http://philip.html5.org/tests/canvas/suite/tests/2d.gradient.interpolate.zerosize.html

        * html/canvas/CanvasRenderingContext2D.cpp:
        (WebCore::CanvasRenderingContext2D::fillRect): skip zero-sized linear gradients
        * platform/graphics/Gradient.h:
        (WebCore::Gradient::isRadial): made public
        (WebCore::Gradient::isZeroSize): true if start == stop

2010-06-09  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Adam Treat.

        [EFL] Allow building core libraries as shared objects to speed up
        linking time on machines with small amounts of memory.
        http://webkit.org/b/39899

        * CMakeLists.txt: If building with shared core, install the lib.
        Remove npapi.cpp (causes conflicts when linking dynamically).
        * CMakeListsEfl.txt: EFL libraries are needed to link dynamically.

2010-06-09  Mark Rowe  <mrowe@apple.com>

        Reviewed by Adele Peterson.

        <rdar://problem/8070662> REGRESSION (r51629): WebBackForwardList created via -init crashes when -addItem: is called.

        A WebBackForwardList created via -init results in a BackForwardList being created with a null m_page.
        BackForwardList needs to be careful not to dereference m_page without first ensuring it's not null.

        * history/BackForwardList.cpp:
        (WebCore::BackForwardList::addItem): Null-check m_page.
        (WebCore::BackForwardList::goBack): Ditto.
        (WebCore::BackForwardList::goForward): Ditto.
        (WebCore::BackForwardList::goToItem): Ditto.
        (WebCore::BackForwardList::setCapacity): Ditto.

2010-06-09  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Kent Tamura.

        [BREWMP] Add dummy Context Menu implementation
        https://bugs.webkit.org/show_bug.cgi?id=40223

        Brew MP does not use Context Menu. Add dummy implementation.

        * platform/brew/ContextMenuBrew.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/brew/ContextMenuItemBrew.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):

2010-06-09  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Kent Tamura.

        [BREWMP] Port Clipboard
        https://bugs.webkit.org/show_bug.cgi?id=35734

        Add dummy Clipboard.

        * platform/brew/ClipboardBrew.cpp: Added.
        (WebCore::ClipboardBrew::ClipboardBrew):
        (WebCore::ClipboardBrew::~ClipboardBrew):
        (WebCore::ClipboardBrew::clearData):
        (WebCore::ClipboardBrew::clearAllData):
        (WebCore::ClipboardBrew::getData):
        (WebCore::ClipboardBrew::setData):
        (WebCore::ClipboardBrew::types):
        (WebCore::ClipboardBrew::files):
        (WebCore::ClipboardBrew::setDragImage):
        (WebCore::ClipboardBrew::setDragImageElement):
        (WebCore::ClipboardBrew::createDragImage):
        (WebCore::ClipboardBrew::declareAndWriteDragImage):
        (WebCore::ClipboardBrew::writeURL):
        (WebCore::ClipboardBrew::writeRange):
        (WebCore::ClipboardBrew::writePlainText):
        (WebCore::ClipboardBrew::hasData):
        * platform/brew/ClipboardBrew.h: Added.

2010-06-09  Anders Bakken  <agbakken@gmail.com>

        Reviewed by David Levin.

        [Qt] ClipboardQt.cpp has coding-style errors
        https://bugs.webkit.org/show_bug.cgi?id=39781

        * platform/qt/ClipboardQt.cpp:
        (WebCore::ClipboardQt::declareAndWriteDragImage):

2010-06-09  Kenneth Russell  <kbr@google.com>

        Reviewed by Dimitri Glazkov.

        Rename FloatArray to Float32Array
        https://bugs.webkit.org/show_bug.cgi?id=40323

        Used do-webcore-rename to perform renaming. Manually undid
        incorrect changes to WebCore/bridge/jni/jsc/JNIBridgeJSC.cpp,
        WebCore/manual-tests/resources/ArrayParameterTestApplet.java and
        ArrayParameterTestApplet.class. Updated LayoutTests. Built and ran
        all layout tests on Safari; built Chromium and ran selected WebGL
        tests.

        * CMakeLists.txt:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::float32ArrayEnabled):
        * bindings/js/JSArrayBufferViewCustom.cpp:
        (WebCore::toJS):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::float32Array):
        (WebCore::JSDOMWindow::webGLFloatArray):
        * bindings/js/JSFloat32ArrayConstructor.cpp: Copied from WebCore/bindings/js/JSFloatArrayConstructor.cpp.
        (WebCore::):
        (WebCore::JSFloat32ArrayConstructor::JSFloat32ArrayConstructor):
        (WebCore::constructCanvasFloatArray):
        (WebCore::JSFloat32ArrayConstructor::getConstructData):
        * bindings/js/JSFloat32ArrayConstructor.h: Copied from WebCore/bindings/js/JSFloatArrayConstructor.h.
        * bindings/js/JSFloat32ArrayCustom.cpp: Copied from WebCore/bindings/js/JSFloatArrayCustom.cpp.
        (WebCore::JSFloat32Array::indexSetter):
        (WebCore::toJS):
        (WebCore::JSFloat32Array::set):
        * bindings/js/JSFloatArrayConstructor.cpp: Removed.
        * bindings/js/JSFloatArrayConstructor.h: Removed.
        * bindings/js/JSFloatArrayCustom.cpp: Removed.
        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::dataFunctionf):
        (WebCore::dataFunctionMatrix):
        * bindings/v8/custom/V8ArrayBufferViewCustom.cpp:
        (WebCore::toV8):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::WebGLFloatArrayAccessorGetter):
        * bindings/v8/custom/V8Float32ArrayCustom.cpp: Copied from WebCore/bindings/v8/custom/V8FloatArrayCustom.cpp.
        (WebCore::V8Float32Array::constructorCallback):
        (WebCore::V8Float32Array::setCallback):
        (WebCore::toV8):
        * bindings/v8/custom/V8FloatArrayCustom.cpp: Removed.
        * bindings/v8/custom/V8WebGLRenderingContextCustom.cpp:
        (WebCore::vertexAttribAndUniformHelperf):
        (WebCore::uniformMatrixHelper):
        * html/canvas/Float32Array.cpp: Copied from WebCore/html/canvas/FloatArray.cpp.
        (WebCore::Float32Array::create):
        (WebCore::Float32Array::Float32Array):
        (WebCore::Float32Array::slice):
        * html/canvas/Float32Array.h: Copied from WebCore/html/canvas/FloatArray.h.
        * html/canvas/Float32Array.idl: Copied from WebCore/html/canvas/FloatArray.idl.
        * html/canvas/FloatArray.cpp: Removed.
        * html/canvas/FloatArray.h: Removed.
        * html/canvas/FloatArray.idl: Removed.
        * html/canvas/WebGLGetInfo.cpp:
        (WebCore::WebGLGetInfo::WebGLGetInfo):
        (WebCore::WebGLGetInfo::getWebGLFloatArray):
        * html/canvas/WebGLGetInfo.h:
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::getUniform):
        (WebCore::WebGLRenderingContext::getVertexAttrib):
        (WebCore::WebGLRenderingContext::uniform1fv):
        (WebCore::WebGLRenderingContext::uniform2fv):
        (WebCore::WebGLRenderingContext::uniform3fv):
        (WebCore::WebGLRenderingContext::uniform4fv):
        (WebCore::WebGLRenderingContext::uniformMatrix2fv):
        (WebCore::WebGLRenderingContext::uniformMatrix3fv):
        (WebCore::WebGLRenderingContext::uniformMatrix4fv):
        (WebCore::WebGLRenderingContext::vertexAttrib1fv):
        (WebCore::WebGLRenderingContext::vertexAttrib2fv):
        (WebCore::WebGLRenderingContext::vertexAttrib3fv):
        (WebCore::WebGLRenderingContext::vertexAttrib4fv):
        (WebCore::WebGLRenderingContext::getWebGLFloatArrayParameter):
        * html/canvas/WebGLRenderingContext.h:
        * html/canvas/WebGLRenderingContext.idl:
        * page/DOMWindow.idl:
        * platform/graphics/GraphicsContext3D.h:
        * platform/graphics/mac/GraphicsContext3DMac.cpp:
        * platform/graphics/qt/GraphicsContext3DQt.cpp:

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

        Reviewed by Adam Barth.

        HTML5 Parser needs to integrate with the XSSAuditor
        https://bugs.webkit.org/show_bug.cgi?id=40287

        This fixes most of the XSSAuditor tests, except for the ones
        which rely on the srcValue "context".  The previous HTMLTokenizer
        implementation was both Lexer and ScriptRunner and thus could
        provide the XSSAuditor with the un-modified attribute source.
        This naive implementation will fail the context-sensitive tests
        but Adam Barth says he'll just have to find a new way to provide
        the required information to the XSSAuditor in a later patch.

        Covered by numerous http/tests/security/xssAuditor tests.

        * html/HTML5ScriptRunner.cpp:
        (WebCore::HTML5ScriptRunner::requestScript):
         - Ask the HTML5ScriptRunner host before running any scripts.
        * html/HTML5ScriptRunnerHost.h:
         - Add a shouldLoadExternalScriptFromSrc declaration.
        * html/HTML5Tokenizer.cpp:
        (WebCore::HTML5Tokenizer::shouldLoadExternalScriptFromSrc):
         - Ask the XSSAuditor if we're allowed to run the passed script.
        * html/HTML5Tokenizer.h:

2010-06-09  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Adam Barth.

        Fix script-after-frameset test in HTML5 parser
        https://bugs.webkit.org/show_bug.cgi?id=40274

        The old HTMLTokenizer enforced this in scriptHandler(). We don't use
        that code anymore, so it needs to be implemented. The spec does this
        as a part of "insertion mode"->"after frameset", so this adds an
        InsertionMode enum instead of a one-off boolean.

        No new tests because covered by fast/tokenizer/script-after-frameset.html

        * html/HTML5TreeBuilder.cpp:
        (WebCore::HTML5TreeBuilder::HTML5TreeBuilder):
        (WebCore::HTML5TreeBuilder::passTokenToLegacyParser):
        * html/HTML5TreeBuilder.h:
        (WebCore::HTML5TreeBuilder::):
        (WebCore::HTML5TreeBuilder::setInsertionMode):
        (WebCore::HTML5TreeBuilder::insertionMode):

2010-06-09  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Kent Tamura.

        [BREWMP] Add EventLoop
        https://bugs.webkit.org/show_bug.cgi?id=39401

        BREW MP does not have an explicit event loop. Add dummy EventLoop::cycle.

        * platform/brew/EventLoopBrew.cpp: Added.
        (WebCore::EventLoop::cycle):

2010-06-09  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r60889.
        http://trac.webkit.org/changeset/60889
        https://bugs.webkit.org/show_bug.cgi?id=40365

        gtk bot has some kind of memory corruption (Requested by
        loislo on #webkit).

        * inspector/InspectorClient.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::setFrontend):
        * inspector/InspectorController.h:
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::InspectorFrontend):
        * inspector/InspectorFrontend.h:
        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::frontendLoaded):
        * inspector/InspectorValues.cpp:
        (WebCore::InspectorObject::writeJSON):
        * inspector/front-end/inspector.js:
        * loader/EmptyClients.h:

2010-06-09  Kent Tamura  <tkent@chromium.org>

        Reviewed by Eric Carlson.

        [Windows] Build fix on Japanese Windows
        https://bugs.webkit.org/show_bug.cgi?id=40358

        cl.exe on Japanese Windows assumes files with invalid CP932
        sequences broken and doesn't build them at all.

        * platform/graphics/win/MediaPlayerPrivateFullscreenWindow.cpp: Remove non-ASCII characters
        * platform/graphics/win/MediaPlayerPrivateFullscreenWindow.h: ditto.
        * platform/graphics/win/WKCAImageQueue.cpp: ditto.
        * platform/graphics/win/WKCAImageQueue.h: ditto.

2010-06-09  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Add isDebuggerAlwaysEnabled method to ScriptDebugServer.
        This method returns true if debugger should always be enabled when
        frontend is attached.
        https://bugs.webkit.org/show_bug.cgi?id=40289

        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::isDebuggerAlwaysEnabled):
        * bindings/js/ScriptDebugServer.h:
        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::isDebuggerAlwaysEnabled):
        * bindings/v8/ScriptDebugServer.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::setFrontend):

2010-06-07  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        WebInspector: On the way to Remote Debugging we want to transfer dom/timeline/etc
        data from inspected page to WebInspector as JSON string via http. The native
        serialization to JSON string is supported by InspectorValue's classes. This patch
        has the implementation of sendMessageToFrontend function. WebKit version of it still
        uses ScriptFunctionCall and will be switched to another transport a little bit later.
        https://bugs.webkit.org/show_bug.cgi?id=40134

        * inspector/InspectorClient.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::connectFrontend):
        (WebCore::InspectorController::disconnectFrontend):
        * inspector/InspectorController.h:
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::InspectorFrontend):
        * inspector/InspectorFrontend.h:
        * inspector/InspectorFrontendClientLocal.cpp:
        (WebCore::InspectorFrontendClientLocal::frontendLoaded):
        * inspector/InspectorValues.cpp:
        (WebCore::InspectorObject::writeJSON):
        * inspector/front-end/inspector.js:
        (WebInspector.dispatchMessageToFrontend):
        * loader/EmptyClients.h:
        (WebCore::EmptyInspectorClient::sendMessageToFrontend):

2010-06-09  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Dirk Schulze.

        [Qt] Imperfect dependency for generated SVGNames.cpp
        https://bugs.webkit.org/show_bug.cgi?id=40359

        * WebCore.pri: Missing dependency added.

2010-06-08  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Implement non-scaling-stroke (from SVG Tiny 1.2, also in Opera)
        https://bugs.webkit.org/show_bug.cgi?id=31438
        
        This is the implementation of the SVG property vector-effect according
        to the specification of SVG Tiny 1.2.
        getScreenCTM() was not able to calculate the transformation matrix in
        comparison to the host coordinate system for objects, that get refereced
        by a use element. This is fixed and covered by the the new test as well.
        This patch is based upon a patch of Jeff Schiller.

        Test: svg/custom/non-scaling-stroke.svg

        * css/CSSComputedStyleDeclaration.cpp: Added CSSPropertyVectorEffect.
        (WebCore::):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator EVectorEffect):
        * css/SVGCSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getSVGPropertyCSSValue):
        * css/SVGCSSParser.cpp:
        (WebCore::CSSParser::parseSVGValue):
        * css/SVGCSSPropertyNames.in:
        * css/SVGCSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applySVGProperty):
        * css/SVGCSSValueKeywords.in: Add vector-effect value non-scaling-stroke.
        * rendering/RenderPath.cpp: Revert transformations to ctm and transform path instead.
        (WebCore::fillAndStrokePath):
        * rendering/RenderSVGResourceContainer.h:
        (WebCore::RenderSVGResourceContainer::transformOnNonScalingStroke):
        * rendering/RenderSVGResourceGradient.cpp: Transform the gradient with the screenCTM.
        (WebCore::RenderSVGResourceGradient::applyResource):
        * rendering/RenderSVGResourcePattern.cpp: Transform the pattern with the screenCTM.
        (WebCore::RenderSVGResourcePattern::applyResource):
        * rendering/style/SVGRenderStyle.h: Added vector-effect property, not interited.
        (WebCore::SVGRenderStyle::NonInheritedFlags::):
        (WebCore::SVGRenderStyle::setBitDefaults):
        * rendering/style/SVGRenderStyleDefs.h: Added enums for vector-effect.
        (WebCore::):
        * svg/SVGLocatable.cpp: Calculate screenCTM for <use> referenced objects.
        (WebCore::SVGLocatable::computeCTM):
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::cssPropertyIdForSVGAttributeName):
        * svg/svgattrs.in:

2010-06-08  Mark Rowe  <mrowe@apple.com>

        Reviewed by Adele Peterson.

        <rdar://problem/8072136> REGRESSION (r56051): Inspect Element context menu does nothing in applications linked against 10.4 SDK

        Revert the change to ContextMenu::addInspectElementItem from r56051. It was made without
        explanation and broke a reliance that WebKit has on the presence of a separator before the
        Inspect Element menu item. This also restores the context menu item to the correct location
        at the bottom of the context menu in applications built against the Mac OS X 10.4 SDK.

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

2010-06-08  Roland Steiner  <rolandsteiner@chromium.org>

        Unreviewed build fix

        Bug 38145 - Validate *tex* functions input parameters according to ES2 conformance
        https://bugs.webkit.org/show_bug.cgi?id=38145
        https://bugs.webkit.org/show_bug.cgi?id=40346

        Fix for 38145 broke the build ('log2 not found' on Windows),
        the fix from 40346 also didn't catch ('log ambiguous').

        2nd quick fix: add explicit casts to double and use double constants.

        No new tests.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::validateTexFuncParameters):

2010-05-18  Yuzo Fujishima  <yuzo@google.com>

        Reviewed by Shinichiro Hamaji.

        Fix for Bug 34529 -  [CSSOM] issues with cssText and selectorText
        Serialize selector as per http://dev.w3.org/csswg/cssom/#serializing-selectors
        Without this patch, for example, selectors containing ':' or '.' are not properly serialized.
        https://bugs.webkit.org/show_bug.cgi?id=34529

        Test: fast/css/selector-text-escape.html

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * css/CSSOMUtils.cpp: Added.
        (WebCore::appendCharacter):
        (WebCore::serializeCharacter):
        (WebCore::serializeCharacterAsCodePoint):
        (WebCore::serializeIdentifier):
        (WebCore::serializeString):
        * css/CSSOMUtils.h: Added.
        * css/CSSSelector.cpp:
        (WebCore::CSSSelector::selectorText):

2010-06-08  Ryosuke Niwa  <rniwa@webkit.org>

        Reviewed by Justin Garcia

        InsertListCommand needs cleanup
        https://bugs.webkit.org/show_bug.cgi?id=36430

        Separated code for listifying and unlistifying paragraphs.
        Also isolated the dependency on the selection in doApply.

        No test is added since this is a cleanup.

        * editing/InsertListCommand.cpp:
        (WebCore::InsertListCommand::doApply): isolated code to listify / unlistify paragraphs
        (WebCore::InsertListCommand::unlistifyParagraph): ditto
        (WebCore::InsertListCommand::listifyParagraph): ditto
        * editing/InsertListCommand.h:

2010-06-08  Kenneth Russell  <kbr@google.com>

        Unreviewed, build fix.

        Fix build breakage from 38145
        https://bugs.webkit.org/show_bug.cgi?id=40346

        The fix for bug 38145 broke the Chromium Win build because
        Microsoft's cmath doesn't define log2. Suggested fix by zmo is to
        change log2(x) to log(x) / log(2). Built and ran WebGL layout
        tests in Safari on Mac OS X. Changed download mirrors for
        python-irclib to working ones.

        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::validateTexFuncParameters):

2010-06-08  Zhenyao Mo  <zmo@google.com>

        Reviewed by Dimitri Glazkov.

        Validate *tex* functions input parameters according to ES2 conformance
        https://bugs.webkit.org/show_bug.cgi?id=38145

        Test: fast/canvas/webgl/tex-input-validation.html

        * html/canvas/WebGLFramebuffer.cpp:
        (WebCore::WebGLFramebuffer::getColorBufferFormat): Get color buffer internalformat.
        * html/canvas/WebGLFramebuffer.h: Ditto.
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::WebGLRenderingContext): Deal with max tex units and max texture size.
        (WebCore::WebGLRenderingContext::copyTexImage2D): Validate input parameters.
        (WebCore::WebGLRenderingContext::copyTexSubImage2D): Ditto.
        (WebCore::WebGLRenderingContext::texImage2DBase): Ditto.
        (WebCore::WebGLRenderingContext::texParameterf): Ditto.
        (WebCore::WebGLRenderingContext::texParameteri): Ditto.
        (WebCore::WebGLRenderingContext::texSubImage2DBase): Ditto.
        (WebCore::WebGLRenderingContext::handleNPOTTextures): Deal with max tex units.
        (WebCore::WebGLRenderingContext::isTexInternalformatColorBufferCombinationValid): Check whether the texture format and framebuffer color buffer internalformat combination is valid.
        (WebCore::WebGLRenderingContext::getTextureBinding): get the current bound texture for given target.
        (WebCore::WebGLRenderingContext::validateTexFuncFormatAndType): Validate input format/type for *tex* functions.
        (WebCore::WebGLRenderingContext::validateTexFuncParameters): Validate input parameters for *tex* functions.
        (WebCore::WebGLRenderingContext::texParameter): Base function for texParameteri and texParameterf.
        * html/canvas/WebGLRenderingContext.h: Deal with max tex units.
        * html/canvas/WebGLTexture.cpp:
        (WebCore::WebGLTexture::WebGLTexture): Cache internalformat.
        * html/canvas/WebGLTexture.h: Ditto.
        (WebCore::WebGLTexture::setInternalformat):
        (WebCore::WebGLTexture::getInternalformat):
        * platform/graphics/GraphicsContext3D.cpp: internalformat and format need to be the same.
        (WebCore::GraphicsContext3D::extractImageData):

2010-06-08  Erik Arvidsson  <arv@chromium.org>

        Reviewed by Ojan Vafai.

        REGRESSION: Weird focus behavior affects quoting on University of Washington message board system
        https://bugs.webkit.org/show_bug.cgi?id=38548

        Test: editing/selection/click-in-focusable-link-should-not-clear-selection.html

        * page/FocusController.cpp:
        (WebCore::clearSelectionIfNeeded): Make sure we do not clear selection when canStartSelection
                                           returns false.

2010-06-08  Enrico Ros  <eros@codeaurora.org>

        Reviewed by Ariya Hidayat.

        [Qt] Crashfix on Path::contains
        https://bugs.webkit.org/show_bug.cgi?id=40253

        Fix accessing the first item of an empty vector, that happens when
        CanvasRenderingContext2D::isPointInPath is invoked over a borderless
        path (e.g. a path made of just a MoveTo operation).

        * platform/graphics/qt/PathQt.cpp:
        (WebCore::isPointOnPathBorder):

2010-06-08  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r60859.
        http://trac.webkit.org/changeset/60859
        https://bugs.webkit.org/show_bug.cgi?id=40334

        Included debugging statements. Caused a test to fail.
        (Requested by ojan on #webkit).

        * page/FocusController.cpp:
        (WebCore::clearSelectionIfNeeded):

2010-06-08  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r60858.
        http://trac.webkit.org/changeset/60858
        https://bugs.webkit.org/show_bug.cgi?id=40325

        Qt needs a clean build. Rolling out the patch for now and fix
        it tomorrow (Requested by krit on #webkit).

        * css/CSSComputedStyleDeclaration.cpp:
        (WebCore::):
        * css/CSSPrimitiveValueMappings.h:
        * css/SVGCSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getSVGPropertyCSSValue):
        * css/SVGCSSParser.cpp:
        (WebCore::CSSParser::parseSVGValue):
        * css/SVGCSSPropertyNames.in:
        * css/SVGCSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applySVGProperty):
        * css/SVGCSSValueKeywords.in:
        * rendering/RenderPath.cpp:
        (WebCore::fillAndStrokePath):
        * rendering/RenderSVGResourceContainer.h:
        * rendering/RenderSVGResourceGradient.cpp:
        (WebCore::RenderSVGResourceGradient::applyResource):
        * rendering/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::applyResource):
        * rendering/style/SVGRenderStyle.h:
        (WebCore::SVGRenderStyle::NonInheritedFlags::):
        (WebCore::SVGRenderStyle::setBitDefaults):
        * rendering/style/SVGRenderStyleDefs.h:
        (WebCore::):
        * svg/SVGLocatable.cpp:
        (WebCore::SVGLocatable::computeCTM):
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::cssPropertyIdForSVGAttributeName):
        * svg/svgattrs.in:

2010-06-08  Daniel Bates  <dbates@rim.com>

        Unreviewed, fix Xcode project file after change-set 60841.

        Xcode is not happy about the entries for files EditingBehavior.h and
        EditingBehaviorTypes.h that were added in change-set 60841 (Bug # 39854).
        Lets make Xcode happy.

        Also, lets place these entries in alphabetic order.

        * WebCore.xcodeproj/project.pbxproj:

2010-06-08  Erik Arvidsson  <arv@chromium.org>

        Reviewed by Ojan Vafai.

        REGRESSION: Weird focus behavior affects quoting on University of Washington message board system
        https://bugs.webkit.org/show_bug.cgi?id=38548

        We should not clear the selection when canStartSelection returns false.

        Test: editing/selection/click-in-focusable-link-should-not-clear-selection.html

        * page/FocusController.cpp:
        (WebCore::clearSelectionIfNeeded): Make sure we do not clear selection when canStartSelection
                                           returns false.

2010-06-08  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        Implement non-scaling-stroke (from SVG Tiny 1.2, also in Opera)
        https://bugs.webkit.org/show_bug.cgi?id=31438
        
        This is the implementation of the SVG property vector-effect according
        to the specification of SVG Tiny 1.2.
        getScreenCTM() was not able to calculate the transformation matrix in
        comparison to the host coordinate system for objects, that get refereced
        by a use element. This is fixed and covered by the the new test as well.
        This patch is based upon a patch of Jeff Schiller.

        Test: svg/custom/non-scaling-stroke.svg

        * css/CSSComputedStyleDeclaration.cpp: Added CSSPropertyVectorEffect.
        (WebCore::):
        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        (WebCore::CSSPrimitiveValue::operator EVectorEffect):
        * css/SVGCSSComputedStyleDeclaration.cpp:
        (WebCore::CSSComputedStyleDeclaration::getSVGPropertyCSSValue):
        * css/SVGCSSParser.cpp:
        (WebCore::CSSParser::parseSVGValue):
        * css/SVGCSSPropertyNames.in:
        * css/SVGCSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::applySVGProperty):
        * css/SVGCSSValueKeywords.in: Add vector-effect value non-scaling-stroke.
        * rendering/RenderPath.cpp: Revert transformations to ctm and transform path instead.
        (WebCore::fillAndStrokePath):
        * rendering/RenderSVGResourceContainer.h:
        (WebCore::RenderSVGResourceContainer::transformOnNonScalingStroke):
        * rendering/RenderSVGResourceGradient.cpp: Transform the gradient with the screenCTM.
        (WebCore::RenderSVGResourceGradient::applyResource):
        * rendering/RenderSVGResourcePattern.cpp: Transform the pattern with the screenCTM.
        (WebCore::RenderSVGResourcePattern::applyResource):
        * rendering/style/SVGRenderStyle.h: Added vector-effect property, not interited.
        (WebCore::SVGRenderStyle::NonInheritedFlags::):
        (WebCore::SVGRenderStyle::setBitDefaults):
        * rendering/style/SVGRenderStyleDefs.h: Added enums for vector-effect.
        (WebCore::):
        * svg/SVGLocatable.cpp: Calculate screenCTM for <use> referenced objects.
        (WebCore::SVGLocatable::computeCTM):
        * svg/SVGStyledElement.cpp:
        (WebCore::SVGStyledElement::cssPropertyIdForSVGAttributeName):
        * svg/svgattrs.in:

2010-06-08  Alexey Proskuryakov  <ap@apple.com>

        * GNUmakefile.am: Also adding platform/Cursor.cpp to Gtk build.

2010-06-08  Csaba Osztrogonác  <ossy@webkit.org>

        [Qt] Unreviewed buildfix after r60849.

        * WebCore.pro: platform/Cursor.cpp is added to Qt build system.

2010-06-08  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Unreviewed Buildbot fix.

        Reset the Qt TextBreakIterator when reusing it.

        * platform/text/qt/TextBreakIteratorQt.cpp:
        (WebCore::setUpIterator):

2010-06-04  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by John Sullivan.

        https://bugs.webkit.org/show_bug.cgi?id=15779
        <rdar://problem/8002964> Custom CSS .cur cursor anchor point is ignored

        Test: manual-tests/cur-hotspot.html

        Currently, this patch only has effect in Safari 5 on Windows. Other platforms will need
        to implement getting hot spot information from .cur files.

        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        Added Cursor.cpp. Looks like TextWrangler fixed line endings in vcproj file.

        * css/CSSCursorImageValue.cpp:
        (WebCore::CSSCursorImageValue::CSSCursorImageValue): Renamed "hotspot" to "hotSpot" to match
        other code.
        (WebCore::CSSCursorImageValue::updateIfSVGCursorIsUsed): Ditto. Added a FIXME about possibly
        incorrect code for resolving differences with CSS specified hotspot.

        * css/CSSCursorImageValue.h:
        (WebCore::CSSCursorImageValue::create):
        (WebCore::CSSCursorImageValue::hotSpot):
        Renamed "hotspot" to "hotSpot" to match other code.

        * css/CSSParser.cpp: (WebCore::CSSParser::parseValue): Start with an invalid value for hot
        spot, so that we can differentiate between missing and (0, 0) CSS hot spots. Missing and
        invalid (-1, -1) are treated identically by Firefox, so we don't need to differentiate these.

        * css/CSSStyleSelector.cpp: (WebCore::CSSStyleSelector::applyProperty): Renamed "hotspot" to
        "hotSpot" to match other code.

        * page/EventHandler.cpp: (WebCore::EventHandler::selectCursor): Don't ignore cursors with
        invalid CSS hot spots. Firefox ignores only the hot spot, not the whole cursor in this case
        (and IE doesn't support CSS3 cursor declarations).

        * platform/Cursor.cpp: Added. (WebCore::determineHotSpot): Added a function that decides
        where hot spot is, provided an image and a possible out of band coordinate specification.

        * platform/Cursor.h: Added determineHotSpot().

        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::getHotSpot):
        * platform/graphics/BitmapImage.h:
        * platform/graphics/Image.h:
        (WebCore::Image::getHotSpot):
        * platform/graphics/ImageSource.cpp:
        (WebCore::ImageSource::getHotSpot):
        * platform/graphics/ImageSource.h:
        Added plumbing to get hot spot data from an image provider.

        * platform/graphics/cg/ImageSourceCG.cpp: (WebCore::ImageSource::getHotSpot): CG implemantation.

        * platform/mac/CursorMac.mm: (WebCore::createCustomCursor): Call determineHotSpot() to 
        determine where hot spot should be.
        (WebCore::Cursor::Cursor): Renamed "hotspot" to "hotSpot" to match other code.

        * platform/win/CursorWin.cpp: (WebCore::Cursor::Cursor): Call determineHotSpot() to determine
        where hot spot should be.

        * platform/gtk/CursorGtk.cpp: (WebCore::Cursor::Cursor): Ditto. This must be done despite
        this platform not having an implementation for ImageSource::getHotSpot(), because we no longer
        check for out of bounds hot spots in EventHandler::selectCursor().

        * platform/qt/CursorQt.cpp: (WebCore::Cursor::Cursor): Ditto.

2010-06-08  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Antti Koivisto.

        [Qt] TextBreakIterator Qt performance
        https://bugs.webkit.org/show_bug.cgi?id=39958

        Rework TextBreakIteratorQt to be more in line with the ICU version.

        We now reuse iterators where ever possible. The string data is compared
        with memcmp, which should be faster than using a hash, as you need
        to traverse the full buffer in the case the strings don't match,
        where as the compare would fail quickly.

        * platform/text/qt/TextBreakIteratorQt.cpp:
        (WebCore::TextBreakIterator::TextBreakIterator):
        (WebCore::setUpIterator):
        (WebCore::wordBreakIterator):
        (WebCore::characterBreakIterator):
        (WebCore::lineBreakIterator):
        (WebCore::sentenceBreakIterator):

2010-06-08  Andras Becsi  <abecsi@webkit.org>

        Unreviewed build fix after r60785.

        [GTK] Add missing GtkVersioning.h include to fix the build
        on older GTK+ versions.

        No new tests needed.

        * platform/gtk/WidgetGtk.cpp:

2010-06-08  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: extend ScriptDebugServer to support script source editing
        https://bugs.webkit.org/show_bug.cgi?id=40297

        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::editScriptSource):
        * bindings/js/ScriptDebugServer.h:
        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::editScriptSource):
        * bindings/v8/ScriptDebugServer.h:
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::editScriptSource):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::disableDebugger):
        (WebCore::InspectorController::editScriptSource):
        (WebCore::InspectorController::currentCallFrames):
        (WebCore::InspectorController::didPause):
        (WebCore::InspectorController::didContinue):
        * inspector/InspectorController.h:
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::didEditScriptSource):
        * inspector/InspectorFrontend.h:
        * inspector/front-end/Script.js:
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.canEditScripts):
        (WebInspector.ScriptsPanel.prototype.editScriptSource.mycallback):
        (WebInspector.ScriptsPanel.prototype.editScriptSource):
        * inspector/front-end/Settings.js:
        * inspector/front-end/SourceView.js:
        (WebInspector.SourceView.prototype._editLine):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype._handleDoubleClick):
        (WebInspector.TextViewer.prototype._commitEditingLine):
        * inspector/front-end/inspector.css:
        (#scripts-files option.extension-script):

2010-06-08  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Ojan Vafai and Darin Adler.

        Refactor platform dependent editing behavior code out of Settings
        https://bugs.webkit.org/show_bug.cgi?id=39854

        As per discussion in bug 36627, Darin Adler suggested: "before the addition of any new EditingBehavior,
        I think we to add functions to translate the overall behavior policy into specific behaviors rather than
        directly saying 'behavior == Mac' or 'behavior == Windows'. Helper functions that expression the different
        rules in plain language.". Patch addresses this request.

        No behavior change, so no new tests.

        * GNUmakefile.am:
        * WebCore.pro:
        * WebCore/WebCore.vcproj/WebCore.vcproj
        * WebCore/WebCore.xcodeproj/project.pbxproj
        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h: Moved out EditingBehavior enum to WebCore/editing/EditingBehaviorTypes.h,
        and renamed to EditingBehaviorTypes.
        (WebCore::Settings::setEditingBehaviorType): Renamed from setEditingBehavior.
        (WebCore::Settings::editingBehaviorType): Renamed from editingBehavior.
        * editing/EditingBehavior.h: Added.
        (WebCore::EditingBehavior::EditingBehavior): Class to work as a central point for
        editing behavior that might have to be handled differently in the different platforms/ports.
        Class should be not used or instantiated directly, but rather implicitly constructed
        through the Editor class.
        (WebCore::EditingBehavior::shouldMoveCaretToHorizontalBoundaryWhenPastTopOrBottom):
        (WebCore::EditingBehavior::shouldConsiderSelectionAsDirectional):
        (WebCore::EditingBehavior::shouldCenterAlignWhenSelectionIsRevealed):
        * editing/EditingBehaviorTypes.h: Added.
        (WebCore::):
        * editing/Editor.cpp:
        (WebCore::Editor::behavior): Getter for EditingBehavior class.
        * editing/Editor.h:
        * editing/EditorCommand.cpp:
        (WebCore::executeToggleStyle):
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::setSelection):
        (WebCore::SelectionController::setIsDirectional):
        (WebCore::SelectionController::positionForPlatform):
        (WebCore::SelectionController::modify):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEventSingleClick):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::positionForPointWithInlineChildren):

        - Call sites will look like:
        if (frame->editor()->behavior().shouldThisIfThat()))
           // do something

2010-06-08  Steve Block  <steveblock@google.com>

        Reviewed by Jeremy Orlow.

        Prevent Geolocation making callbacks to a ScriptExecutionContext that no longer exists
        https://bugs.webkit.org/show_bug.cgi?id=40162

        Before making callbacks, we check that the relevant ScriptExecutionContext still exists.
        To achieve this, the callbacks inherit from ActiveDOMObject.

        The ScriptExecutionContext is ref'ed from script, so may not be GC'ed for some time after
        it is disconnected from its frame. Making the callback currently involves accessing the
        Frame, so an additional check for the Frame is required.

        This change also prevents the V8 bindings from incorrectly holding a reference to the Frame.

        Test: fast/dom/Geolocation/callback-to-deleted-context.html

        * bindings/js/JSCallbackData.cpp:
        (WebCore::JSCallbackData::invokeCallback):
        * bindings/js/JSCustomPositionCallback.cpp:
        (WebCore::JSCustomPositionCallback::JSCustomPositionCallback):
        (WebCore::JSCustomPositionCallback::handleEvent):
        * bindings/js/JSCustomPositionErrorCallback.cpp:
        (WebCore::JSCustomPositionErrorCallback::JSCustomPositionErrorCallback):
        (WebCore::JSCustomPositionErrorCallback::handleEvent):
        * bindings/v8/custom/V8CustomPositionCallback.cpp:
        (WebCore::V8CustomPositionCallback::V8CustomPositionCallback):
        (WebCore::V8CustomPositionCallback::handleEvent):
        * bindings/v8/custom/V8CustomPositionCallback.h:
        (WebCore::V8CustomPositionCallback::create):
        * bindings/v8/custom/V8CustomPositionErrorCallback.cpp:
        (WebCore::V8CustomPositionErrorCallback::V8CustomPositionErrorCallback):
        (WebCore::V8CustomPositionErrorCallback::handleEvent):
        * bindings/v8/custom/V8CustomPositionErrorCallback.h:
        (WebCore::V8CustomPositionErrorCallback::create):
        * bindings/v8/custom/V8GeolocationCustom.cpp:
        (WebCore::createPositionCallback):
        (WebCore::createPositionErrorCallback):
        * page/PositionCallback.h:
        (WebCore::PositionCallback::PositionCallback):
        * page/PositionErrorCallback.h:
        (WebCore::PositionErrorCallback::PositionErrorCallback):

2010-06-08  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        [GTK] Avoid duplicated signals in DOM bindings
        https://bugs.webkit.org/show_bug.cgi?id=40170

        Do not create duplicated event signals between a class and its
        ancestor.

        * bindings/scripts/CodeGeneratorGObject.pm:

2010-06-08  MORITA Hajime  <morrita@google.com>

        Unreviewd. Touched the file to force rebuild.

        * html/HTMLMeterElement.idl:

2010-06-08  Vangelis Kokkevis  <vangelis@chromium.org>

        Reviewed by Dimitri Glazkov.

        [Chromium] Fix the math for transform matrices of composited layers. There
        were problems both with how content layers were setting their position and
        how the overal matrix stack was computed when the layer anchor isn't at the
        center of the layer.
        https://bugs.webkit.org/post_bug.cgi

        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::updateContentsRect):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::updateLayersRecursive):
        (WebCore::LayerRendererChromium::drawLayer):

2010-06-07  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        HTML5Lexer does not handle <div FOO ><img><img></div> correctly
        https://bugs.webkit.org/show_bug.cgi?id=40283

        Fix a typo in the AfterAttributeNameState.
        The compiler really should have caught this since the typo
        resulted in unreachable code.

        Tests:
         10 tables/mozilla/marvin/colgroup* tests.
         Also added a new sub-test in html5lib/resources/webkit01.dat

        * html/HTML5Lexer.cpp:
        (WebCore::HTML5Lexer::nextToken):
         - Fix typo of = instead of >

2010-06-08  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Implement HTML5's forceQuirks flag
        https://bugs.webkit.org/show_bug.cgi?id=40284

        I didn't implement this before because I didn't know how to test it,
        but now I do.
        
        Tests:
          * fast/doctypes/doctype-parsing.html.

        When we actually implement the quirks mode handling in the tree
        builder, we'll probably want to add to this test.

        * html/HTML5Lexer.cpp:
        (WebCore::HTML5Lexer::nextToken):
        * html/HTML5Token.h:
        (WebCore::HTML5Token::forceQuirks):
        (WebCore::HTML5Token::setForceQuirks):
        * html/HTML5TreeBuilder.cpp:
        (WebCore::HTML5TreeBuilder::passTokenToLegacyParser):
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::parseDoctypeToken):
        * html/HTMLTokenizer.h:
        (WebCore::DoctypeToken::reset):

2010-06-08  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Remove ASSERT in ~HTML5Tokenizer
        https://bugs.webkit.org/show_bug.cgi?id=40282

        We thought this ASSERT would be a good idea, but the problem is that
        this object is deleted without warning in some circumstances, so
        there's no way to know whether it has reached the end of its state
        machine.

        * html/HTML5Tokenizer.cpp:
        (WebCore::HTML5Tokenizer::~HTML5Tokenizer):

2010-06-07  MORITA Hajime  <morrita@google.com>

        Reviewed by Kent Tamura.

        [Mac] <meter> elements should be rendered as level indicators.        
        https://bugs.webkit.org/show_bug.cgi?id=40217

        Implemented RenderThemeMac::paintMeter() using NSLevelIndicatorCell.
        
        This change also added new -webkit-appearance values to select the
        style of level indicators:
        
        - relevancy-level-indicator,
        - continuous-capacity-level-indicator,
        - discrete-capacity-level-indicator, and 
        - rating-level-indicator.
        
        The size of elements are adjusted based on the bounds of the indicator
        to make room for painting whole indicator cells.

        Tests: fast/dom/HTMLMeterElement/meter-appearances-capacity.html
               fast/dom/HTMLMeterElement/meter-appearances-rating-relevancy.html
               fast/dom/HTMLMeterElement/meter-optimums.html

        * css/CSSPrimitiveValueMappings.h:
        (WebCore::CSSPrimitiveValue::CSSPrimitiveValue):
        * css/CSSValueKeywords.in:
        * html/HTMLMeterElement.cpp:
        (WebCore::HTMLMeterElement::gaugeRegion):
        * html/HTMLMeterElement.h:
        (WebCore::HTMLMeterElement::):
        * platform/ThemeTypes.h:
        (WebCore::):
        * rendering/RenderMeter.cpp:
        (WebCore::RenderMeter::calcWidth):
        (WebCore::RenderMeter::calcHeight):
        * rendering/RenderMeter.h:
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle):
        (WebCore::RenderTheme::paint):
        (WebCore::RenderTheme::paintBorderOnly):
        (WebCore::RenderTheme::paintDecorations):
        (WebCore::RenderTheme::meterSizeForBounds):
        * rendering/RenderTheme.h:
        * rendering/RenderThemeMac.h:
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::meterSizeForBounds):
        (WebCore::RenderThemeMac::paintMeter):
        (WebCore::RenderThemeMac::levelIndicatorStyleFor):
        (WebCore::RenderThemeMac::levelIndicatorFor):

2010-06-07  MORITA Hajime  <morrita@google.com>
        
        Reviewed by Kent Tamura.
        
        [Mac] ENABLE_METER_TAG should be enabled.
        https://bugs.webkit.org/show_bug.cgi?id=40219
        
        * Configurations/FeatureDefines.xcconfig:
        * WebCore.xcodeproj/project.pbxproj:
        
2010-06-07  Eric Seidel  <eric@webkit.org>

        Unreviewed.  Just commit an edit Xcode keeps making automatically.

        It appears someone hand-edited the file, Xcode no-like.

        * WebCore.xcodeproj/project.pbxproj:

2010-06-07  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        HTML5 Parser fails script-tests which use document.write
        https://bugs.webkit.org/show_bug.cgi?id=40276

        We were leaving the TreeBuilder paused when executing the scripts
        resulting in document.write() calls being ignored.

        I don't see a good way to ASSERT this correct behavior, since
        the HTML5ScriptRunner and the HTML5TreeBuilder do not know about
        each other.  We should never have document.write() called while
        the HTML5TreeBuilder is paused, however both document.write and
        the network call the same HTML5Tokenizer::write method.  It's OK
        to be paused when the network writes, but during document.write
        (or any other script execution).

        Tested by all of fast/url and numerous other tests.

        * html/HTML5Tokenizer.cpp:
        (WebCore::HTML5Tokenizer::notifyFinished):
         - Unpause the treebuilder before executing scripts.
        (WebCore::HTML5Tokenizer::executeScriptsWaitingForStylesheets):
         - Unpause the treebuilder before executing scripts.

2010-06-07  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        HTML5 Parser hits ASSERT in fast/events/stop-load-in-unload-handler-using-document-write.html
        https://bugs.webkit.org/show_bug.cgi?id=40268

        Teach HTML5Tokenizer about m_parserStopped.

        While tracking down how m_parserStopped was used, I found
        several useless implementations of stopParsing() which I removed.

        I also found a comment in HTMLTokenizer which still talks about the
        "part" (an old class now split into Frame, Page, FrameLoader, etc.)
        and an nearly empty FrameLoader::tokenizerProcessedData which I just
        inlined into its one caller.

        Tests:
         fast/events/stop-load-in-unload-handler-using-document-write.html
         http/tests/security/xssAuditor/full-block-base-href.html

        * html/HTML5Tokenizer.cpp:
        (WebCore::HTML5Tokenizer::pumpLexerIfPossible):
         - New method used instead of direct calls to pumpLexer for when
           callers would like to pump the lexer if possible, but don't want
           to check if the parser is stopped, etc.
        (WebCore::HTML5Tokenizer::pumpLexer):
         - Added an ASSERT that the parser is not stopped.
         - Stop pumping if the parser is stopped.
        (WebCore::HTML5Tokenizer::write):
         - Ignore the write if the parser is already stopped.
        (WebCore::HTML5Tokenizer::end):
        (WebCore::HTML5Tokenizer::attemptToEnd):
         - Move comment back to finish() which was incorrectly moved here.
        (WebCore::HTML5Tokenizer::endIfDelayed):
        (WebCore::HTML5Tokenizer::finish):
         - Move comment back here from attemptToEnd()
        (WebCore::HTML5Tokenizer::resumeParsingAfterScriptExecution):
         - Remove a bogus ASSERT.  The lexer will stop when it needs
           more data, which may not necessarily mean m_source.isEmpty().
        * html/HTML5Tokenizer.h:
         - Add pumpLexerIfPossible().
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::stopParsing):
         - Add a FIXME about if we really should call checkCompleted() here.
         - Inline FrameLoader::tokenizerProcessedData() since this was the only caller.
        * loader/FrameLoader.cpp:
         - Remove tokenizerProcessedData()
        * loader/FrameLoader.h:
         - Remove tokenizerProcessedData()
        * loader/MediaDocument.cpp:
         - Remove unneeded Tokenizer::stopParsing() override.
        * loader/PluginDocument.cpp:
         - Remove unneeded Tokenizer::stopParsing() override.
        * loader/SinkDocument.cpp:
         - Remove unneeded Tokenizer::stopParsing() override.

2010-06-07  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Fix XFrameOptions and xssAuditor crashes in HTML5 parser
        https://bugs.webkit.org/show_bug.cgi?id=40265

        We're not supposed to call end() while the tokenizer's write() method.
        This causes a bunch of LayoutTests to crash.  In particular, this patch
        fixes crashes in the following tests:

        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-deny.html
          * http/tests/security/XFrameOptions/x-frame-options-deny-meta-tag.html
          * http/tests/security/xssAuditor/full-block-base-href.html
          * http/tests/security/xssAuditor/full-block-get-from-iframe.html
          * http/tests/security/xssAuditor/full-block-iframe-javascript-url.html
          * http/tests/security/xssAuditor/full-block-link-onclick.html
          * http/tests/security/xssAuditor/full-block-post-from-iframe.html
          * http/tests/security/xssAuditor/full-block-script-tag.html
          * http/tests/security/xssAuditor/xss-protection-parsing-01.html

        * html/HTML5Tokenizer.cpp:
        (WebCore::):
        (WebCore::HTML5Tokenizer::HTML5Tokenizer):
        (WebCore::HTML5Tokenizer::write):
        (WebCore::HTML5Tokenizer::attemptToEnd):
        (WebCore::HTML5Tokenizer::endIfDelayed):
        (WebCore::HTML5Tokenizer::finish):
        (WebCore::HTML5Tokenizer::resumeParsingAfterScriptExecution):
        * html/HTML5Tokenizer.h:
        (WebCore::HTML5Tokenizer::inWrite):

2010-06-07  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        HTML5 parser hits ASSERT in http/tests/misc/window-dot-stop.html
        https://bugs.webkit.org/show_bug.cgi?id=40264

        * html/HTML5Tokenizer.cpp:
        (WebCore::HTML5Tokenizer::executeScript):

2010-06-07  Kinuko Yasuda  <kinuko@chromium.org>

        Unreviewed.

        Avoid "warning: no previous prototype for" in Snow Leopard compilation.

        * platform/BlobItem.cpp: Added static to getFileSnapshotModificationTime().

2010-06-07  Kinuko Yasuda  <kinuko@chromium.org>

        Reviewed by Jian Li.

        Refactor FormData and Blob for better support of Blobs synthesized by BlobBuilder.
        https://bugs.webkit.org/show_bug.cgi?id=39083

        - Introduces a new class BlobItem as a basic component of Blob and FormDataList.
        - File would become a special type of Blob that contains only one FileBlobItem.
        - Fix the dependency violation in FormData so that the files under platform/ do not include any html/ files.

        The patch doesn't support the latest File API changes (e.g. type,
        url and slice's type parameters) and should not change any of its
        existing behaviors.

        The existing tests should be able to be used for regression.

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * html/Blob.cpp:
        (WebCore::Blob::Blob):
        (WebCore::Blob::size):
        (WebCore::Blob::path):
        (WebCore::Blob::append):
        (WebCore::Blob::slice):
        * html/Blob.h:
        (WebCore::Blob::create):
        (WebCore::Blob::type):
        (WebCore::Blob::items):
        (WebCore::Blob::Blob):
        * html/File.cpp:
        (WebCore::File::File):
        (WebCore::File::name):
        * html/File.h:
        (WebCore::File::fileName):
        * html/FileReader.cpp:
        (WebCore::FileReader::readAsBinaryString):
        (WebCore::FileReader::readAsText):
        * html/FileStream.cpp:
        (WebCore::FileStream::openForRead):
        * html/FormDataList.cpp:
        (WebCore::FormDataList::appendString): Moved the line ending fix logic to StringBlobItem::convertToCString.
        (WebCore::FormDataList::appendBlob):
        * html/FormDataList.h:
        (WebCore::FormDataList::items):
        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::createFormData):
        * html/HTMLProgressElement.cpp:
        * platform/BlobItem.cpp: Added.
        * platform/BlobItem.h: Added.
        * platform/network/FormData.cpp:
        (WebCore::FormDataElement::FormDataElement):
        (WebCore::FormData::create):
        (WebCore::FormData::createMultiPart):
        (WebCore::FormData::deepCopy):
        (WebCore::FormData::appendData):
        (WebCore::FormData::appendString):
        (WebCore::FormData::appendFile):
        (WebCore::FormData::appendFileRange):
        (WebCore::FormData::appendItems):
        (WebCore::FormData::appendItem):
        (WebCore::FormData::appendKeyValuePairItems):
        * platform/network/FormData.h:
        (WebCore::operator!=):
        * platform/network/mac/FormDataStreamMac.mm:
        (WebCore::closeCurrentStream):
        (WebCore::advanceCurrentStream):
        (WebCore::formCreate):
        (WebCore::formRead):
        (WebCore::setHTTPBody):
        * xml/XMLHttpRequest.cpp:
        (WebCore::XMLHttpRequest::send):

2010-06-07  Vangelis Kokkevis  <vangelis@chromium.org>

        Reviewed by Dimitri Glazkov.

        [chromium] Decoupled transform matrix update of composited layers from
        drawing and interposed a sorting step so that the layers are now composited
        back to front to get transparency working correctly. Also added missing code
        for the preserves3D CSS property.

        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::updateLayerPreserves3D):
        * platform/graphics/chromium/LayerChromium.h:
        (WebCore::LayerChromium::setDrawTransform):
        (WebCore::LayerChromium::drawTransform):
        (WebCore::LayerChromium::setDrawOpacity):
        (WebCore::LayerChromium::drawOpacity):
        (WebCore::LayerChromium::preserves3D):
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::compareLayerZ):
        (WebCore::LayerRendererChromium::drawLayers):
        (WebCore::LayerRendererChromium::updateLayersRecursive):
        (WebCore::LayerRendererChromium::drawLayer):
        * platform/graphics/chromium/LayerRendererChromium.h:

2010-06-07  Anton Muhin  <antonm@chromium.org>

        Reviewed by Nate Chapin.

        [Chromium] convert a key to AtomicString in V8NodeList::namedPropertyGetter
        https://bugs.webkit.org/show_bug.cgi?id=40238

        Comparison to "length" below could be performed faster in this (major) case
        as it would only require direct pointer comparison (cf. to full text
        comparison if key is converted to WebCore::String.)

        * bindings/v8/custom/V8NodeListCustom.cpp:
        (WebCore::V8NodeList::namedPropertyGetter):

2010-06-07  Ariya Hidayat  <ariya.hidayat@codeaurora.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Fix GraphicsContext::clipOut to take the transformation matrix into account.

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

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

        Reviewed by Xan Lopez.

        [gtk] web fonts not loaded properly in scribd html5 reader
        https://bugs.webkit.org/show_bug.cgi?id=38758

        Avoid always giving a positive reply in createFontPlatformData. We
        do not want every non-existing family name to be considered a hit,
        or weird usage of local sources in @font-face rules will make
        WebKitGTK+ never consider the online fonts.

        * GNUmakefile.am:
        * platform/graphics/cairo/FontCacheCairo.cpp:
        (WebCore::isWellKnownFontName):
        (WebCore::FontCache::createFontPlatformData):
        * platform/graphics/cairo/GOwnPtrCairo.cpp: Added.
        (WTF::FcPattern):
        (WTF::FcObjectSet):
        (WTF::FcFontSet):
        * platform/graphics/cairo/GOwnPtrCairo.h: Added.

2010-06-07  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        "Fix" fast/dom/stripNullFromTextNodes.html in HTML5 parser
        https://bugs.webkit.org/show_bug.cgi?id=40200

        The proper handling of null characters is to replace them with U+FFFD.
        This patch "fixes" fast/dom/stripNullFromTextNodes.html in the sense
        that it makes it give the proper output w.r.t. HTML5.  However, that
        doesn't match the behavior of the old parser, which just stripped the
        nulls.

        * html/HTML5Lexer.h:
        (WebCore::HTML5Lexer::InputStreamPreprocessor::peek):

2010-06-07  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        HTML5 parser should normalize line endings
        https://bugs.webkit.org/show_bug.cgi?id=40199

        When reading characters from the source, we need to normalize line
        endings, which means treating \r as \n and folding \r\n sequences into
        a single \n.  Doing this requires a slightly tighter pattern for
        advancing the source (to make sure we update our state machine
        correctly).

        Fixes fast/css/first-child-pseudo-class.html and hundreds of other
        LayoutTests in the HTML5 parser.

        * html/HTML5Lexer.cpp:
        (WebCore::HTML5Lexer::nextToken):
        * html/HTML5Lexer.h:
        (WebCore::HTML5Lexer::InputStreamPreprocessor::LineEndingNormalizer):
            - Introduced InputStreamPreprocessor to keep track of our line
              endings state machine.  This class will grow to eventually do
              all the input stream preprocessing required by the HTML5 spec.
        (WebCore::HTML5Lexer::InputStreamPreprocessor::nextInputCharacter):
            - We need to be careful not to read *source more than
              once because we need to know whether we've transformed the
              character.  Keeping the next input character in this state
              machine requires some careful coding, but seems advantageous.
        (WebCore::HTML5Lexer::InputStreamPreprocessor::peek):
        (WebCore::HTML5Lexer::InputStreamPreprocessor::advance):

2010-06-07  Andrei Popescu  <andreip@google.com>

        Reviewed by Jeremy Orlow.

        run-bindings-tests results broken by Changeset 60776
        https://bugs.webkit.org/show_bug.cgi?id=40230

        The change to CodeGeneratorJS.pm in 
        http://trac.webkit.org/changeset/60776/trunk/WebCore/bindings/scripts/CodeGeneratorJS.pm
        added the possibility to use [CallWith=ScriptExecutionContext] in idl files.

        Before the above change was submitted, CodeGeneratorJS.pm was modified so that native
        functions return EncodedJSValue instead of JSValues. This was done in
        http://trac.webkit.org/changeset/60631/trunk/WebCore/bindings/scripts/CodeGeneratorJS.pm

        This CL updates the CodeGeneratorJS.pm to correctly return an EncodedJSValue in the case
        where the ScriptExecutionContext pointer is 0 at the time when the native function is invoked.

        No new tests, just fixing run-bindings-tests.

        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionWithScriptExecutionContext):
        * bindings/scripts/test/JS/JSTestObj.h:

2010-06-07  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Eric Seidel.

        [BREWMP] Add dummy SearchPopupMenu implementation
        https://bugs.webkit.org/show_bug.cgi?id=40224

        Add dummy implementation of SearchPopupMenu.

        * platform/brew/SearchPopupMenuBrew.cpp: Added.
        (WebCore::SearchPopupMenu::saveRecentSearches):
        (WebCore::SearchPopupMenu::loadRecentSearches):
        (WebCore::SearchPopupMenu::SearchPopupMenu):
        (WebCore::SearchPopupMenu::enabled):

2010-06-07  Julien Chaffraix  <jchaffraix@webkit.org>

        Unreviewed, reverting my HTML comment parsing change as it
        breaks Gtk and Qt.

        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::parseComment):
        (WebCore::HTMLTokenizer::parseTag):
        * html/HTMLTokenizer.h:

2010-06-07  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Oliver Hunt.

        [GTK] HTML5 input type=range is not drawn
        https://bugs.webkit.org/show_bug.cgi?id=39561

        Support HTML5 range widgets. They are now drawn using the standard
        GTK+ theme drawing mechanism.

        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::supportsFocus): Add focus support for parts of sliders.
        (WebCore::setMozillaState):
        Add the GtkThemeWidgetType argument and honor depressed states for slider thumbs.
        (WebCore::paintMozillaGtkWidget): Pass in the widget type to setMozillaState.
        (WebCore::RenderThemeGtk::paintSliderTrack): Added.
        (WebCore::RenderThemeGtk::adjustSliderTrackStyle): Added.
        (WebCore::RenderThemeGtk::paintSliderThumb): Added.
        (WebCore::RenderThemeGtk::adjustSliderThumbStyle): Added.
        (WebCore::RenderThemeGtk::adjustSliderThumbSize): Added support for non-media sliders.
        * platform/gtk/RenderThemeGtk.h: Added new method declarations.

2010-06-07  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] gtk_widget_get_window should replace widget->window
        https://bugs.webkit.org/show_bug.cgi?id=40180

        Replace all uses of widget->window with gtk_widget_get_window. For older
        GTK+ versions, #define gtk_widget_get_window in GtkVersioning.h.

        No tests necessary as functionality has not changed.

        * platform/gtk/GtkPluginWidget.cpp:
        (WebCore::GtkPluginWidget::invalidateRect): Replace widget->window use.
        * platform/gtk/GtkVersioning.h: Add gtk_widget_get_window for old GTK+ versions.
        * platform/gtk/PlatformScreenGtk.cpp: 
        (WebCore::getVisual): Replace widget->window use.
        (WebCore::screenRect): Ditto.
        * platform/gtk/PopupMenuGtk.cpp:
        (WebCore::PopupMenu::show): Ditto.
        * platform/gtk/WidgetGtk.cpp:
        (WebCore::gdkDrawable): Ditto.
        (WebCore::Widget::setCursor): Ditto.

2010-06-07  Nikolas Zimmermann  <nzimmermann@rim.com>

        Reviewed by Sam Weinig.

        Add CPP bindings generator
        https://bugs.webkit.org/show_bug.cgi?id=38279

        Add CPP bindings generator used in Olympia platform.
        We can succesfully generate cpp bindings for all IDLs except:
        - DOMWindow.idl / EventTarget.idl (filtered out in the IDL list in DerivedSources.make for non-jsc/v8 generators anyways, so no problem at all)
        - inspector/ (not needed for us at all)
        - svg/ (needs custom handling, related to animated attributes)

        All generated files are free of style issues: "Total errors found: 0 in 510 files"
        Not integrated in any build system so far, though I've successfully tested on Mac and inside Olympia, of course.

        * bindings/cpp: Added.
        * bindings/cpp/WebDOMCString.cpp: Added.
        (WebDOMCString::reset):
        (WebDOMCString::assign):
        (WebDOMCString::length):
        (WebDOMCString::data):
        (WebDOMCString::utf16):
        (WebDOMCString::fromUTF16):
        (WebDOMCString::WebDOMCString):
        (WebDOMCString::operator=):
        (WebDOMCString::operator WTF::CString):
        * bindings/cpp/WebDOMCString.h: Added.
        (WebDOMCString::~WebDOMCString):
        (WebDOMCString::WebDOMCString):
        (WebDOMCString::operator=):
        (WebDOMCString::isEmpty):
        (WebDOMCString::isNull):
        * bindings/cpp/WebDOMEventListenerCustom.cpp: Added.
        (WebDOMEventListener::handleEvent):
        (toWebKit):
        * bindings/cpp/WebDOMEventTarget.cpp: Added.
        (WebDOMEventTarget::WebDOMEventTargetPrivate::WebDOMEventTargetPrivate):
        (WebDOMEventTarget::WebDOMEventTarget):
        (WebDOMEventTarget::~WebDOMEventTarget):
        (WebDOMEventTarget::impl):
        (toWebCore):
        (toWebKit):
        * bindings/cpp/WebDOMEventTarget.h: Added.
        * bindings/cpp/WebDOMHTMLDocumentCustom.cpp: Added.
        (documentWrite):
        (WebDOMHTMLDocument::write):
        (WebDOMHTMLDocument::writeln):
        * bindings/cpp/WebDOMNodeCustom.cpp: Added.
        (WebDOMNode::insertBefore):
        (WebDOMNode::replaceChild):
        (WebDOMNode::removeChild):
        (WebDOMNode::appendChild):
        (WebDOMNode::addEventListener):
        (WebDOMNode::removeEventListener):
        * bindings/cpp/WebDOMObject.h: Added.
        (WebDOMObject::WebDOMObject):
        (WebDOMObject::~WebDOMObject):
        * bindings/cpp/WebDOMString.cpp: Added.
        (WebDOMString::reset):
        (WebDOMString::assign):
        (WebDOMString::length):
        (WebDOMString::data):
        (WebDOMString::utf8):
        (WebDOMString::fromUTF8):
        (WebDOMString::WebDOMString):
        (WebDOMString::operator=):
        (WebDOMString::operator WebCore::String):
        (WebDOMString::operator WebCore::AtomicString):
        (WebDOMString::equals):
        * bindings/cpp/WebDOMString.h: Added.
        (WebDOMString::~WebDOMString):
        (WebDOMString::WebDOMString):
        (WebDOMString::operator=):
        (WebDOMString::isEmpty):
        (WebDOMString::isNull):
        * bindings/cpp/WebExceptionHandler.cpp: Added.
        (globalExceptionHandler):
        (webInstallExceptionHandler):
        (webRaiseDOMException):
        * bindings/cpp/WebExceptionHandler.h: Added.
        (webDOMRaiseError):
        * bindings/cpp/WebNativeEventListener.cpp: Added.
        (WebNativeEventListener::WebNativeEventListener):
        (WebNativeEventListener::~WebNativeEventListener):
        (WebNativeEventListener::handleEvent):
        (WebNativeEventListener::reportError):
        (WebNativeEventListener::operator==):
        * bindings/cpp/WebNativeEventListener.h: Added.
        (WebNativeEventListener::create):
        (WebNativeEventListener::cast):
        * bindings/scripts/CodeGeneratorCPP.pm: Added.
        * bindings/scripts/test/CPP: Added.
        * bindings/scripts/test/CPP/WebDOMTestCallback.cpp: Added.
        (WebDOMTestCallback::WebDOMTestCallbackPrivate::WebDOMTestCallbackPrivate):
        (WebDOMTestCallback::WebDOMTestCallback):
        (WebDOMTestCallback::impl):
        (WebDOMTestCallback::~WebDOMTestCallback):
        (WebDOMTestCallback::callbackWithClass1Param):
        (WebDOMTestCallback::callbackWithClass2Param):
        (WebDOMTestCallback::callbackWithNonBoolReturnType):
        (toWebCore):
        (toWebKit):
        * bindings/scripts/test/CPP/WebDOMTestCallback.h: Added.
        * bindings/scripts/test/CPP/WebDOMTestInterface.cpp: Added.
        (WebDOMTestInterface::WebDOMTestInterfacePrivate::WebDOMTestInterfacePrivate):
        (WebDOMTestInterface::WebDOMTestInterface):
        (WebDOMTestInterface::impl):
        (WebDOMTestInterface::~WebDOMTestInterface):
        (toWebCore):
        (toWebKit):
        * bindings/scripts/test/CPP/WebDOMTestInterface.h: Added.
        * bindings/scripts/test/CPP/WebDOMTestObj.cpp: Added.
        (WebDOMTestObj::WebDOMTestObjPrivate::WebDOMTestObjPrivate):
        (WebDOMTestObj::WebDOMTestObj):
        (WebDOMTestObj::impl):
        (WebDOMTestObj::~WebDOMTestObj):
        (WebDOMTestObj::readOnlyIntAttr):
        (WebDOMTestObj::readOnlyStringAttr):
        (WebDOMTestObj::readOnlyTestObjAttr):
        (WebDOMTestObj::intAttr):
        (WebDOMTestObj::setIntAttr):
        (WebDOMTestObj::longLongAttr):
        (WebDOMTestObj::setLongLongAttr):
        (WebDOMTestObj::unsignedLongLongAttr):
        (WebDOMTestObj::setUnsignedLongLongAttr):
        (WebDOMTestObj::stringAttr):
        (WebDOMTestObj::setStringAttr):
        (WebDOMTestObj::testObjAttr):
        (WebDOMTestObj::setTestObjAttr):
        (WebDOMTestObj::attrWithException):
        (WebDOMTestObj::setAttrWithException):
        (WebDOMTestObj::attrWithSetterException):
        (WebDOMTestObj::setAttrWithSetterException):
        (WebDOMTestObj::attrWithGetterException):
        (WebDOMTestObj::setAttrWithGetterException):
        (WebDOMTestObj::scriptStringAttr):
        (WebDOMTestObj::voidMethod):
        (WebDOMTestObj::voidMethodWithArgs):
        (WebDOMTestObj::intMethod):
        (WebDOMTestObj::intMethodWithArgs):
        (WebDOMTestObj::objMethod):
        (WebDOMTestObj::objMethodWithArgs):
        (WebDOMTestObj::methodThatRequiresAllArgs):
        (WebDOMTestObj::methodThatRequiresAllArgsAndThrows):
        (WebDOMTestObj::serializedValue):
        (WebDOMTestObj::methodWithException):
        (WebDOMTestObj::addEventListener):
        (WebDOMTestObj::removeEventListener):
        (WebDOMTestObj::withDynamicFrame):
        (WebDOMTestObj::withDynamicFrameAndArg):
        (WebDOMTestObj::withDynamicFrameAndOptionalArg):
        (WebDOMTestObj::withScriptStateVoid):
        (WebDOMTestObj::withScriptStateObj):
        (WebDOMTestObj::withScriptStateVoidException):
        (WebDOMTestObj::withScriptStateObjException):
        (WebDOMTestObj::methodWithOptionalArg):
        (WebDOMTestObj::methodWithNonOptionalArgAndOptionalArg):
        (WebDOMTestObj::methodWithNonOptionalArgAndTwoOptionalArgs):
        (toWebCore):
        (toWebKit):
        * bindings/scripts/test/CPP/WebDOMTestObj.h: Added.
        * css/StyleSheet.idl: Export helper method isCSSStyleSheet() for cpp bindings only.
        * dom/CustomEvent.idl: Disabled for cpp bindings, needs arbitary input parameter handling support ('DOMObject' type).
        * dom/Document.idl: Ignore getCSSCanvasContext() for cpp bindings and export helper method isHTMLDocument() (cpp bindings only).
        * dom/Event.idl: Export isMutationEvent()/isMouseEvent()/isUIEvent() helpers for cpp bindings only.
        * dom/EventListener.h: Add CPPEventListenerType.
        * dom/Node.idl: addEventListener/removeEventListener need [Custom] flag for cpp bindings.
        * dom/PopStateEvent.idl: Disabled just like CustomEvent, for the same reason ("any" argument type handling).
        * html/HTMLCanvasElement.idl: Disable getContext() method for cpp bindings, as it's done for objc bindings.
        * html/HTMLDocument.idl: Add [NoCPPCustom] marker for open(), as we're just autogenerating it.
        * html/HTMLInputElement.idl: Disable valueAsDate() method for cpp bindings, as we're missing native 'Date' type support.
        * html/TextMetrics.h: Add missing PassRefPtr.h include.
        * html/canvas/CanvasRenderingContext2D.idl: Disable methods (setLineCap, etc..) for cpp bindings whose names clash with property setters.
        * page/AbstractView.idl: Rename 'Media' type to 'StyleMedia' - this should have been done before.
        * page/Location.idl: Disable several methods which would need a custom implementation for the cpp bindings.
        * page/WebKitPoint.h: Add missing PassRefPtr.h include.
        * storage/SQLResultSet.idl: Correct type from 'long' to 'long long', for cpp bindings only though as it wouldn't build on Chromium/V8.
        * workers/DedicatedWorkerContext.idl: Disable postMessage() for now when using cpp bindings, would need custom code for us.
        * workers/WorkerContext.idl: Hide constructors from cpp bindings.

2010-06-07  Julien Chaffraix  <jchaffraix@webkit.org>

        Reviewed by Alexey Proskuryakov.

        Space should be allowed between -- and > in comment end
        https://bugs.webkit.org/show_bug.cgi?id=21945

        Implemented the HTML comment parsing algorithm so that we match HTML5 and
        FF when parsing comments. Missing from this patch is
        the parser errors, which will be added in a follow up patch.

        Added tests cases for broken comments.

        Tests: fast/parser/broken-comment-1.html
               fast/parser/broken-comment-2.html
               fast/parser/broken-comment-3.html
               fast/parser/broken-comment-4.html
               fast/parser/broken-comment-5.html
               fast/parser/broken-comment-6.html
               fast/parser/broken-comment-in-head-1.html
               fast/parser/broken-comment-in-head-2.html
               fast/parser/broken-comment-in-head-3.html
               fast/parser/broken-comment-in-head-4.html
               fast/parser/broken-comment-in-head-5.html

        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::parseComment): Now we use a state machine
        that matches the HTML5 specification.
        (WebCore::HTMLTokenizer::emitCommentToken): This emits the comment token
        and keep some of the original behavior as parseComment is called in wrong
        context (inside a <title> for example). Added a more explicit comment about
        this.
        (WebCore::HTMLTokenizer::parseTag): Remove the handling of <!--> in quirks mode.
        HTML5 specifies that we should accept this in strict mode too.
        * html/HTMLTokenizer.h:
        (WebCore::HTMLTokenizer::): Added a new enum for the comment parsing state.

2010-06-07  Mahesh Kulakrni  <mahesh.kulkarni@nokia.com>

        Reviewed by Simon Hausmann.

        [QT] QT_BEARER flag is not enabled on S60 properly
        https://bugs.webkit.org/show_bug.cgi?id=39357

        enable QT_BEARER for all platform based on qtmobility + 
        bearer module availability or for qt 4.7+

        * WebCore.pri: 

2010-06-07  Leon Clarke  <leonclarke@google.com>

        Reviewed by Jeremy Orlow.

        Fix indexeddb idls in android makefile
        https://bugs.webkit.org/show_bug.cgi?id=40169

        No new tests. Android-specific build fix.

        * Android.derived.v8bindings.mk:

2010-06-07  Andrei Popescu  <andreip@google.com>

        Reviewed by Jeremy Orlow.

        [indexedDB] It is impossible to create object stores
        https://bugs.webkit.org/show_bug.cgi?id=40054

        No new tests. Layout tests will be added separately.

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        (webkit_dom_test_obj_with_script_execution_context):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::):
        (WebCore::jsTestObjPrototypeFunctionWithScriptExecutionContext):
        * bindings/scripts/test/JS/JSTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.h:
        * bindings/scripts/test/ObjC/DOMTestObj.mm:
        (-[DOMTestObj withScriptExecutionContext]):
        * bindings/scripts/test/TestObj.idl:
        * bindings/scripts/test/V8/V8TestObj.cpp:
        (WebCore::TestObjInternal::withScriptExecutionContextCallback):
        (WebCore::):
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::clear):
        (WebCore::DOMWindow::indexedDB):
        * storage/IDBCallbacks.h:
        * storage/IDBDatabase.h:
        * storage/IDBDatabaseImpl.cpp:
        (WebCore::IDBDatabaseImpl::createObjectStore):
        * storage/IDBDatabaseImpl.h:
        * storage/IDBDatabaseRequest.cpp:
        (WebCore::IDBDatabaseRequest::IDBDatabaseRequest):
        (WebCore::IDBDatabaseRequest::createObjectStore):
        * storage/IDBDatabaseRequest.h:
        * storage/IDBDatabaseRequest.idl:
        * storage/IDBObjectStore.cpp: Removed.
        * storage/IDBObjectStore.h:
        (WebCore::IDBObjectStore::~IDBObjectStore):
        * storage/IDBObjectStoreImpl.cpp: Added.
        (WebCore::IDBObjectStoreImpl::~IDBObjectStoreImpl):
        (WebCore::IDBObjectStoreImpl::IDBObjectStoreImpl):
        (WebCore::IDBObjectStoreImpl::indexNames):
        (WebCore::IDBObjectStoreImpl::createIndex):
        (WebCore::IDBObjectStoreImpl::index):
        (WebCore::IDBObjectStoreImpl::removeIndex):
        * storage/IDBObjectStoreImpl.h: Added.
        (WebCore::IDBObjectStoreImpl::create):
        (WebCore::IDBObjectStoreImpl::name):
        (WebCore::IDBObjectStoreImpl::keyPath):
        * storage/IDBObjectStoreRequest.cpp:
        (WebCore::IDBObjectStoreRequest::IDBObjectStoreRequest):
        * storage/IDBObjectStoreRequest.h:
        (WebCore::IDBObjectStoreRequest::create):
        * storage/IDBRequest.cpp:
        (WebCore::IDBRequest::onSuccess):
        * storage/IDBRequest.h:
        * storage/IndexedDatabaseRequest.cpp:
        (WebCore::IndexedDatabaseRequest::IndexedDatabaseRequest):
        (WebCore::IndexedDatabaseRequest::open):
        * storage/IndexedDatabaseRequest.h:
        (WebCore::IndexedDatabaseRequest::create):
        * storage/IndexedDatabaseRequest.idl:

2010-06-07  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed. Updated run-bindings-tests results.

        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterfaceConstructor::constructTestInterface):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::jsTestObjPrototypeFunctionVoidMethod):
        (WebCore::jsTestObjPrototypeFunctionVoidMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionIntMethod):
        (WebCore::jsTestObjPrototypeFunctionIntMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionObjMethod):
        (WebCore::jsTestObjPrototypeFunctionObjMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionMethodThatRequiresAllArgs):
        (WebCore::jsTestObjPrototypeFunctionMethodThatRequiresAllArgsAndThrows):
        (WebCore::jsTestObjPrototypeFunctionSerializedValue):
        (WebCore::jsTestObjPrototypeFunctionMethodWithException):
        (WebCore::jsTestObjPrototypeFunctionCustomMethod):
        (WebCore::jsTestObjPrototypeFunctionCustomMethodWithArgs):
        (WebCore::jsTestObjPrototypeFunctionCustomArgsAndException):
        (WebCore::jsTestObjPrototypeFunctionAddEventListener):
        (WebCore::jsTestObjPrototypeFunctionRemoveEventListener):
        (WebCore::jsTestObjPrototypeFunctionWithDynamicFrame):
        (WebCore::jsTestObjPrototypeFunctionWithDynamicFrameAndArg):
        (WebCore::jsTestObjPrototypeFunctionWithDynamicFrameAndOptionalArg):
        (WebCore::jsTestObjPrototypeFunctionWithDynamicFrameAndUserGesture):
        (WebCore::jsTestObjPrototypeFunctionWithDynamicFrameAndUserGestureASAD):
        (WebCore::jsTestObjPrototypeFunctionWithScriptStateVoid):
        (WebCore::jsTestObjPrototypeFunctionWithScriptStateObj):
        (WebCore::jsTestObjPrototypeFunctionWithScriptStateVoidException):
        (WebCore::jsTestObjPrototypeFunctionWithScriptStateObjException):
        (WebCore::jsTestObjPrototypeFunctionMethodWithOptionalArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndOptionalArg):
        (WebCore::jsTestObjPrototypeFunctionMethodWithNonOptionalArgAndTwoOptionalArgs):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod1):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod2):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod3):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod4):
        (WebCore::jsTestObjPrototypeFunctionOverloadedMethod):
        * bindings/scripts/test/JS/JSTestObj.h:

2010-06-07  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Implement JSON parsing for InspectorValue.
        https://bugs.webkit.org/show_bug.cgi?id=40064

        * inspector/InspectorValues.cpp:
        (WebCore::):
        (WebCore::InspectorValue::asBool):
        (WebCore::InspectorValue::asNumber):
        (WebCore::InspectorValue::asString):
        (WebCore::InspectorValue::asObject):
        (WebCore::InspectorValue::asArray):
        (WebCore::InspectorValue::readJSON):
        (WebCore::InspectorValue::writeJSON):
        (WebCore::InspectorBasicValue::asBool):
        (WebCore::InspectorBasicValue::asNumber):
        (WebCore::InspectorBasicValue::writeJSON):
        (WebCore::InspectorString::asString):
        (WebCore::InspectorObject::asObject):
        (WebCore::InspectorObject::getBool):
        (WebCore::InspectorObject::getNumber):
        (WebCore::InspectorObject::getString):
        (WebCore::InspectorObject::getObject):
        (WebCore::InspectorObject::getArray):
        (WebCore::InspectorObject::get):
        (WebCore::InspectorArray::asArray):
        * inspector/InspectorValues.h:
        (WebCore::InspectorObject::begin):
        (WebCore::InspectorObject::end):

2010-06-07  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix text selection drawing.
        https://bugs.webkit.org/show_bug.cgi?id=40221

        The regression was introduced in r60169.

        * platform/graphics/qt/FontQt.cpp:
        (WebCore::drawTextCommon):

2010-06-07  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: should be possible to distinguish extension scripts from main world scripts
        https://bugs.webkit.org/show_bug.cgi?id=40220

        * bindings/js/ScriptDebugServer.cpp: remove global listeners set which is not used anymore.
        (WebCore::ScriptDebugServer::dispatchDidParseSource): pass script wrold type to the listeners.
        (WebCore::currentWorldType):
        (WebCore::ScriptDebugServer::sourceParsed):
        * bindings/js/ScriptDebugServer.h:
        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::dispatchDidParseSource):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::didParseSource):
        * inspector/InspectorController.h:
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::parsedScriptSource):
        * inspector/InspectorFrontend.h:
        * inspector/ScriptDebugListener.h: pass type of the isolated world where the script was compiled to didParseSource.
        (WebCore::):
        * inspector/front-end/InjectedScript.js:
        (injectedScriptConstructor):
        * inspector/front-end/Script.js:
        (WebInspector.Script):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.addScript):
        (WebInspector.ScriptsPanel.prototype._addScriptToFilesMenu): use different style to highlight content scripts.
        * inspector/front-end/inspector.css:
        (#scripts-files option.extension-script):
        * inspector/front-end/inspector.js:
        (WebInspector.parsedScriptSource):

2010-06-06  MORITA Hajime  <morrita@google.com>

        Unreviewd, Chromium windows build fix.

        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore::RenderThemeChromiumWin::paintProgressBar):

2010-06-06  MORITA Hajime  <morrita@google.com>

        Reviewed by Kent Tamura.

        ASSERTION FAILED with -webkit-appearance:progress-bar for non <progress> elements
        https://bugs.webkit.org/show_bug.cgi?id=40158

        paintProgressBar() and paintMeter() assumed given RenderObject is
        RenderProgress or RenderMeter respectively, but arbitrary elements
        can have -webkit-appearance: progress-bar and such elements
        violates that assumption. So this change added type check before
        downcasting the RenderObject.

        * platform/qt/RenderThemeQt.cpp:
        (WebCore::RenderThemeQt::paintProgressBar):
        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::paintMeter):
        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::RenderThemeChromiumSkia::paintProgressBar):
        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore::RenderThemeChromiumWin::paintProgressBar):
        * rendering/RenderThemeMac.mm:
        (WebCore::RenderThemeMac::paintProgressBar):

2010-06-06  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by NOBODY (Qt build fix pt 2).

        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::findMethodIndex):
        (JSC::Bindings::QtRuntimeMetaMethod::call):
        (JSC::Bindings::QtRuntimeConnectionMethod::call):

2010-06-06  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by NOBODY (Qt build fix).

        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::findMethodIndex):
        (JSC::Bindings::QtRuntimeMetaMethod::call):
        (JSC::Bindings::QtRuntimeConnectionMethod::call):

2010-06-06  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Sam Weinig.

        Bug 40214 - Clean up error construction / throwing in JSC.
        
        The one egregious insanity here is that creating an error requires
        a VM-entry-esqe-host call (the string argument is wrapped as a JS
        object & pushed on the RegisterFile, then unwrapped back to a
        UString).  Changing this also means you only require a global
        object, not an ExecState, to create an error.

        The methods to create error objects are also parameterized
        requiring a switch on the type, which can be made cleaner and
        faster by moving to a separate method per error type.  Code to add
        divot information to error had been duplicated, and is coalesced
        back into a single function.

        Convenience methods added to create & throw type & syntax error
        with a default error message, since this is a common case.

        Also, errors are currently thrown either using
        "throwError(exec, error)" or "exec->setException(error)" - unify
        on the former, since this is more commonly used.  Add
        "throwVMError(exec, error)" equivalents, as a convenience for
        cases where the result was being wrapped in "JSValue::encode(...)".

        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSArrayBufferConstructor.h:
        (WebCore::construct):
        * bindings/js/JSArrayBufferViewHelper.h:
        (WebCore::setWebGLArrayHelper):
        * bindings/js/JSAudioConstructor.cpp:
        (WebCore::constructAudio):
        * bindings/js/JSCanvasRenderingContext2DCustom.cpp:
        (WebCore::JSCanvasRenderingContext2D::setFillColor):
        (WebCore::JSCanvasRenderingContext2D::setStrokeColor):
        (WebCore::JSCanvasRenderingContext2D::drawImage):
        (WebCore::JSCanvasRenderingContext2D::drawImageFromRect):
        (WebCore::JSCanvasRenderingContext2D::setShadow):
        (WebCore::JSCanvasRenderingContext2D::createPattern):
        (WebCore::JSCanvasRenderingContext2D::fillText):
        (WebCore::JSCanvasRenderingContext2D::strokeText):
        * bindings/js/JSClipboardCustom.cpp:
        (WebCore::JSClipboard::clearData):
        (WebCore::JSClipboard::getData):
        (WebCore::JSClipboard::setDragImage):
        * bindings/js/JSDOMBinding.cpp:
        (WebCore::setDOMException):
        (WebCore::toJSSequence):
        * bindings/js/JSDOMWrapper.cpp:
        (WebCore::DOMObject::defineOwnProperty):
        * bindings/js/JSDesktopNotificationsCustom.cpp:
        (WebCore::JSNotificationCenter::requestPermission):
        * bindings/js/JSEventSourceConstructor.cpp:
        (WebCore::constructEventSource):
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::open):
        * bindings/js/JSHTMLInputElementCustom.cpp:
        (WebCore::JSHTMLInputElement::selectionStart):
        (WebCore::JSHTMLInputElement::setSelectionStart):
        (WebCore::JSHTMLInputElement::selectionEnd):
        (WebCore::JSHTMLInputElement::setSelectionEnd):
        (WebCore::JSHTMLInputElement::setSelectionRange):
        * bindings/js/JSImageConstructor.cpp:
        (WebCore::constructImage):
        * bindings/js/JSJavaScriptCallFrameCustom.cpp:
        (WebCore::JSJavaScriptCallFrame::evaluate):
        * bindings/js/JSMessageChannelConstructor.cpp:
        (WebCore::JSMessageChannelConstructor::construct):
        * bindings/js/JSMessagePortCustom.cpp:
        (WebCore::fillMessagePortArray):
        * bindings/js/JSOptionConstructor.cpp:
        (WebCore::constructHTMLOptionElement):
        * bindings/js/JSSVGMatrixCustom.cpp:
        (WebCore::JSSVGMatrix::multiply):
        * bindings/js/JSSharedWorkerConstructor.cpp:
        (WebCore::constructSharedWorker):
        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::JSWebGLRenderingContext::bufferData):
        (WebCore::JSWebGLRenderingContext::bufferSubData):
        (WebCore::getObjectParameter):
        (WebCore::JSWebGLRenderingContext::getFramebufferAttachmentParameter):
        (WebCore::JSWebGLRenderingContext::getParameter):
        (WebCore::JSWebGLRenderingContext::getProgramParameter):
        (WebCore::JSWebGLRenderingContext::getShaderParameter):
        (WebCore::JSWebGLRenderingContext::getUniform):
        (WebCore::JSWebGLRenderingContext::texImage2D):
        (WebCore::JSWebGLRenderingContext::texSubImage2D):
        (WebCore::dataFunctionf):
        (WebCore::dataFunctioni):
        (WebCore::dataFunctionMatrix):
        * bindings/js/JSWebSocketConstructor.cpp:
        (WebCore::constructWebSocket):
        * bindings/js/JSWebSocketCustom.cpp:
        (WebCore::JSWebSocket::send):
        * bindings/js/JSWorkerConstructor.cpp:
        (WebCore::constructWorker):
        * bindings/js/JSXMLHttpRequestConstructor.cpp:
        (WebCore::constructXMLHttpRequest):
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::open):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::BaseWalker::throwStackOverflow):
        (WebCore::BaseWalker::throwInterruptedException):
        (WebCore::SerializingTreeWalker::startArray):
        (WebCore::SerializingTreeWalker::startObject):
        * bindings/js/WorkerScriptController.cpp:
        (WebCore::WorkerScriptController::setException):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/c/c_instance.cpp:
        (JSC::Bindings::CInstance::moveGlobalExceptionToExecState):
        (JSC::Bindings::CInstance::invokeMethod):
        (JSC::Bindings::CInstance::invokeDefaultMethod):
        (JSC::Bindings::CInstance::invokeConstruct):
        * bridge/jni/jsc/JNIBridgeJSC.cpp:
        (JavaField::dispatchValueFromInstance):
        (JavaField::dispatchSetValueToInstance):
        * bridge/jni/jsc/JavaInstanceJSC.cpp:
        (JavaInstance::invokeMethod):
        * bridge/objc/objc_instance.mm:
        (ObjcInstance::moveGlobalExceptionToExecState):
        (ObjcInstance::invokeMethod):
        * bridge/objc/objc_runtime.mm:
        (JSC::Bindings::ObjcField::valueFromInstance):
        (JSC::Bindings::ObjcField::setValueToInstance):
        (JSC::Bindings::ObjcArray::setValueAt):
        (JSC::Bindings::ObjcArray::valueAt):
        (JSC::Bindings::callObjCFallbackObject):
        * bridge/objc/objc_utility.h:
        * bridge/objc/objc_utility.mm:
        (JSC::Bindings::throwError):
        * bridge/runtime_array.cpp:
        (JSC::RuntimeArray::put):
        * bridge/runtime_method.cpp:
        (JSC::callRuntimeMethod):
        * bridge/runtime_object.cpp:
        (JSC::Bindings::RuntimeObject::throwInvalidAccessError):

2010-06-06  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        hit testing does not respect clip paths
        https://bugs.webkit.org/show_bug.cgi?id=15162

        Test: svg/dynamic-updates/SVGClipPath-influences-hitTesting.html
        
        Added a check, if a float point is not only in the shape/object boundaries
        but also is not in the clipped away area of a clipPath.

        * rendering/HitTestRequest.h:
        (WebCore::HitTestRequest::):
        (WebCore::HitTestRequest::svgClipContent):
        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::fillContains):
        (WebCore::RenderPath::nodeAtFloatPoint):
        * rendering/RenderPath.h:
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::nodeAtFloatPoint):
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::nodeAtFloatPoint):
        * rendering/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::hitTestClipContent):
        * rendering/RenderSVGResourceClipper.h:
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::nodeAtFloatPoint):
        * rendering/SVGRenderSupport.cpp:
        (WebCore::pointInClippingArea):
        * rendering/SVGRenderSupport.h:

2010-06-06  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        SVG Pattern/Gradient clean-up
        https://bugs.webkit.org/show_bug.cgi?id=40205

        Transformations of SVG Patterns and Gradients can be bundeled.
        This calculation also needs just to be calculated once. It's not a great speed-up for most platforms,
        but a clean-up and preparation for new features like vectorEffects and others.
        Now, that we don't recalucluate the gradient and its transformations, it was necessary to add a way
        to transform alreday existing gradients on Cairo. This is done in the same way like Skia transforms
        gradients after they were created.
        
        This patch doesn't change functionality, so no new tests added.

        * platform/graphics/Gradient.cpp:
        * platform/graphics/cairo/GradientCairo.cpp:
        (WebCore::Gradient::setPlatformGradientSpaceTransform):
        * rendering/RenderSVGResourceGradient.cpp:
        (WebCore::RenderSVGResourceGradient::applyResource):
        * rendering/RenderSVGResourceGradient.h:
        * rendering/RenderSVGResourcePattern.cpp:
        (WebCore::RenderSVGResourcePattern::applyResource):
        (WebCore::RenderSVGResourcePattern::createTileImage):
        (WebCore::RenderSVGResourcePattern::buildPattern):
        * rendering/RenderSVGResourcePattern.h:

2010-06-05  Dumitru Daniliuc  <dumi@chromium.org>

        Unreviewed, typo/build fix.

        * bindings/v8/custom/V8CustomSQLStatementErrorCallback.cpp:
        (WebCore::V8SQLStatementErrorCallback::handleEvent):

2010-05-28  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Adam Barth.

        Do not pass empty handles to v8.
        https://bugs.webkit.org/show_bug.cgi?id=39896

        Passing an empty handle to v8 results in a crash with a stack
        trace that doesn't give us much information about the cause of the
        crash. Instead, if we check the handles we pass to v8 and crash
        when they are empty, we do not make things worse, and should get a
        more informative stack trace.

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/scripts/test/V8/V8TestCallback.cpp:
        (WebCore::V8TestCallback::callbackWithClass1Param):
        (WebCore::V8TestCallback::callbackWithClass2Param):
        * bindings/v8/custom/V8CustomSQLStatementErrorCallback.cpp:
        (WebCore::V8SQLStatementErrorCallback::handleEvent):

2010-05-30  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Darin Adler.

        Add a convenient helper getter for Frame* to RenderObject
        https://bugs.webkit.org/show_bug.cgi?id=39928

        document()->frame() is being called enough from RenderObject derivated classes
        that it worth adding a helper Frame getter as a shortcut.

        No behavior change, so no new tests.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::isOffScreen):
        (WebCore::AccessibilityRenderObject::stringValue):
        (WebCore::AccessibilityRenderObject::selection):
        (WebCore::AccessibilityRenderObject::setSelectedVisiblePositionRange):
        * page/EventHandler.cpp:
        (WebCore::canAutoscroll):
        * rendering/InlineTextBox.cpp:
        (WebCore::InlineTextBox::paint):
        (WebCore::InlineTextBox::paintCustomHighlight):
        (WebCore::InlineTextBox::paintTextMatchMarker):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::paintCaret):
        * rendering/RenderBox.cpp:
        (WebCore::RenderBox::paintCustomHighlight):
        * rendering/RenderDataGrid.cpp:
        (WebCore::RenderDataGrid::isActive):
        * rendering/RenderFrameSet.cpp:
        (WebCore::RenderFrameSet::flattenFrameSet):
        * rendering/RenderImage.cpp:
        (WebCore::RenderImage::paintFocusRings):
        * rendering/RenderInline.cpp:
        (WebCore::RenderInline::addDashboardRegions):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::~RenderLayer):
        (WebCore::RenderLayer::panScrollFromPoint):
        (WebCore::RenderLayer::scrollByRecursively):
        (WebCore::RenderLayer::scrollToOffset):
        (WebCore::RenderLayer::autoscroll):
        (WebCore::RenderLayer::isActive):
        (showLayerTree):
        * rendering/RenderLayerBacking.cpp:
        (WebCore::inspectorTimelineAgent):
        * rendering/RenderListBox.cpp:
        (WebCore::RenderListBox::paintItemForeground):
        (WebCore::RenderListBox::paintItemBackground):
        (WebCore::RenderListBox::panScroll):
        (WebCore::RenderListBox::autoscroll):
        (WebCore::RenderListBox::isActive):
        * rendering/RenderObject.cpp:
        (WebCore::RenderObject::~RenderObject):
        (WebCore::RenderObject::selectionBackgroundColor):
        (WebCore::RenderObject::selectionForegroundColor):
        (WebCore::RenderObject::destroy):
        (WebCore::RenderObject::addDashboardRegions):
        (WebCore::RenderObject::animation):
        * rendering/RenderObject.h:
        (WebCore::RenderObject::document):
        (WebCore::RenderObject::frame):

2010-06-05  Jonathan Kliegman  <kliegs@chromium.org>

        Reviewed by Dirk Schulze.

        SVG doesn't support rgba colors
        https://bugs.webkit.org/show_bug.cgi?id=16183

        Enabled processing of rgba, hsl and hsla color specifications
        for SVG files.  SVG spec calls for CSS2 but common usage and
        other browsers suppor CSS3 colors being used in SVG files

        Removed unused svg paramater from CSSParser::parseColorFromValue

        Tests: svg/custom/fill-opacity-hsl.svg
               svg/custom/fill-opacity-rgba.svg

        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseColorFromValue):
        * css/CSSParser.h:
        * css/SVGCSSParser.cpp:
        (WebCore::CSSParser::parseSVGValue):
        (WebCore::CSSParser::parseSVGPaint):
        (WebCore::CSSParser::parseSVGColor):
        * svg/SVGColor.cpp:
        (WebCore::SVGColor::colorFromRGBColorString):

2010-06-05  Anders Bakken  <agbakken@gmail.com>

        Reviewed by Eric Seidel.

        [Qt] ContextMenuItemQt.cpp has coding-style errors
        https://bugs.webkit.org/show_bug.cgi?id=39780

        * platform/qt/ContextMenuItemQt.cpp:

2010-06-05  Anders Bakken  <agbakken@gmail.com>

        Reviewed by Eric Seidel.

        [Qt] ContextMenuQt.cpp has coding-style errors
        https://bugs.webkit.org/show_bug.cgi?id=39779

        * platform/qt/ContextMenuQt.cpp:

2010-06-05  Anders Bakken  <agbakken@gmail.com>

        Reviewed by Eric Seidel.

        [Qt] DragDataQt.cpp has coding-style errors
        https://bugs.webkit.org/show_bug.cgi?id=39777

        * platform/qt/DragDataQt.cpp:

2010-06-05  Anders Bakken  <agbakken@gmail.com>

        Reviewed by Eric Seidel.

        [Qt] FileChooserQt.cpp has coding-style errors
        https://bugs.webkit.org/show_bug.cgi?id=39776

        * platform/qt/FileChooserQt.cpp:

2010-06-05  Anders Bakken  <agbakken@gmail.com>

        Reviewed by Eric Seidel.

        [Qt] FileSystemQt.cpp has coding-style errors
        https://bugs.webkit.org/show_bug.cgi?id=39775

        * platform/qt/FileSystemQt.cpp:

2010-06-05  Anders Bakken  <agbakken@gmail.com>

        Reviewed by Eric Seidel.

        [Qt] KURLQt.cpp has coding-style errors
        https://bugs.webkit.org/show_bug.cgi?id=39774

        * platform/qt/KURLQt.cpp:

2010-06-05  Anders Bakken  <agbakken@gmail.com>

        Reviewed by Eric Seidel.

        [Qt] LoggingQt.cpp has coding-style errors
        https://bugs.webkit.org/show_bug.cgi?id=39772

        * platform/qt/LoggingQt.cpp:

2010-06-05  Anders Bakken  <agbakken@gmail.com>

        Reviewed by Eric Seidel.

        [Qt] PlatformKeyboardEventQt.cpp has coding-style errors
        https://bugs.webkit.org/show_bug.cgi?id=39770

        * platform/qt/PlatformKeyboardEventQt.cpp:
        (WebCore::keyIdentifierForQtKeyCode):
        (WebCore::windowsKeyCodeForKeyEvent):
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent):

2010-06-05  Anders Bakken  <agbakken@gmail.com>

        Reviewed by Eric Seidel.

        [Qt] PlatformScreenQt.cpp has coding-style errors
        https://bugs.webkit.org/show_bug.cgi?id=39768

        * platform/qt/PlatformMouseEventQt.cpp:
        (WebCore::PlatformMouseEvent::PlatformMouseEvent):

2010-06-05  Anders Bakken  <agbakken@gmail.com>

        Reviewed by Eric Seidel.

        [Qt] RenderThemeQt.cpp has coding-style errors
        https://bugs.webkit.org/show_bug.cgi?id=39767

        * platform/qt/RenderThemeQt.cpp:

2010-06-05  Anders Bakken  <agbakken@gmail.com>

        Reviewed by Eric Seidel.

        [Qt] ScrollbarQt.cpp has coding-style errors
        https://bugs.webkit.org/show_bug.cgi?id=39765

        * platform/qt/ScrollbarQt.cpp:

2010-06-04  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Make HTML5Lexer go fast
        https://bugs.webkit.org/show_bug.cgi?id=40048

        This patch changes us from using a jump table for each character to
        using absolute jumps between parser states.  This appears to be about a
        1% improvement on the parser bench mark (which is 1/10th of what we
        need to catch the old parser).

        I've kept the underlying logic as close to the old logic as possible.
        This new form will make it easier to handle the input stream part of
        the spec and to make further performance improvements.

        * html/HTML5Lexer.cpp:
        (WebCore::HTML5Lexer::reset):
        (WebCore::HTML5Lexer::nextToken):
        (WebCore::HTML5Lexer::emitCurrentToken):
        * html/HTML5Lexer.h:

2010-06-04  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        HTML5 parser should be within 1% of old parser performance
        https://bugs.webkit.org/show_bug.cgi?id=40172

        Stop using adopt().  I think this function is cause us to do extra
        mallocs that are hurting performance.  Instead of caching AtomicString
        on HTML5Token, just use the AtomicString on the old token.  Also,
        reserve inline capacity for 10 attributes.

        * html/HTML5Lexer.cpp:
        (WebCore::HTML5Lexer::isAppropriateEndTag):
        * html/HTML5Lexer.h:
        * html/HTML5Token.h:
        (WebCore::HTML5Token::beginStartTag):
        (WebCore::HTML5Token::beginEndTag):
        (WebCore::HTML5Token::beginCharacter):
        (WebCore::HTML5Token::beginComment):
        (WebCore::HTML5Token::beginDOCTYPE):
        (WebCore::HTML5Token::name):
        (WebCore::HTML5Token::characters):
        (WebCore::HTML5Token::comment):
        * html/HTML5TreeBuilder.cpp:
        (WebCore::convertToOldStyle):
        (WebCore::HTML5TreeBuilder::passTokenToLegacyParser):

2010-06-04  Anders Bakken  <agbakken@gmail.com>

        Reviewed by Eric Seidel.

        [Qt] ScrollbarThemeQt.cpp has coding-style errors
        https://bugs.webkit.org/show_bug.cgi?id=39764

        * platform/qt/ScrollbarThemeQt.cpp:
        (WebCore::scPart):
        (WebCore::scrollbarPart):
        (WebCore::styleOptionSlider):

2010-06-04  Anders Bakken  <agbakken@gmail.com>

        Reviewed by Eric Seidel.

        [Qt] SharedTimerQt.cpp has coding-style errors
        https://bugs.webkit.org/show_bug.cgi?id=39763

        * platform/qt/SharedTimerQt.cpp:

2010-06-04  Anders Bakken  <agbakken@gmail.com>

        Reviewed by Eric Seidel.

        WidgetQt.cpp has coding-style errors
        https://bugs.webkit.org/show_bug.cgi?id=39759

        * platform/qt/WidgetQt.cpp:

2010-06-04  Anders Bakken  <agbakken@gmail.com>

        Reviewed by Eric Seidel.

        TemporaryLinkStubsQt.cpp has coding-style errors
        https://bugs.webkit.org/show_bug.cgi?id=39761

        * platform/qt/TemporaryLinkStubsQt.cpp:

2010-06-04  Anders Bakken  <agbakken@gmail.com>

        Reviewed by Eric Seidel.

        [Qt] SoundQt.cpp has coding-style errors
        https://bugs.webkit.org/show_bug.cgi?id=39762

        * platform/qt/SoundQt.cpp:

2010-06-04  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Dirk Schulze.

        Canvas createPattern(img, repetition) shouldn't throw INVALID_STATE_ERR when !img.complete
        https://bugs.webkit.org/show_bug.cgi?id=40166

        Spec link:
        http://www.whatwg.org/specs/web-apps/current-work/#dom-context-2d-createpattern

        Test: http/tests/misc/canvas-pattern-from-incremental-image.html (updated)

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

2010-06-04  Anders Bakken  <agbakken@gmail.com>

        Reviewed by David Levin.

        [Qt] Localizations.cpp has coding-style errors
        https://bugs.webkit.org/show_bug.cgi?id=39773

        * platform/qt/Localizations.cpp:
        (WebCore::localizedMediaTimeDescription):

2010-06-04  Lyon Chen  <liachen@rim.com>

        Reviewed by Darin Adler.

        ApplicationCacheStorage::storeNewestCache() Crash WebKit when openDatabase(true) failed
        https://bugs.webkit.org/show_bug.cgi?id=40074

        Adding m_database.isOpen() check for every openDatabase(true) call, this is needed because
        openDatabase(true) could still fail, for example when cacheStorage is full or no longer available.

        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::store):
        (WebCore::ApplicationCacheStorage::storeNewestCache):

2010-06-04  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r60684.
        http://trac.webkit.org/changeset/60684
        https://bugs.webkit.org/show_bug.cgi?id=40196

        This patch broke chromium reliability tests (Requested by
        tonyg-cr on #webkit).

        * bindings/v8/ScriptSourceCode.h:
        (WebCore::ScriptSourceCode::ScriptSourceCode):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::compileScript):
        (WebCore::V8Proxy::evaluate):
        * bindings/v8/V8Proxy.h:

2010-06-04  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by David Kilzer.

        AX: need an aria-help
        https://bugs.webkit.org/show_bug.cgi?id=40010

        Test: accessibility/aria-help.html

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::helpText):
        * html/HTMLAttributeNames.in:

2010-06-04  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Canvas arc() with zero radius should draw a line to the start point
        https://bugs.webkit.org/show_bug.cgi?id=40164

        Spec link:
        http://www.whatwg.org/specs/web-apps/current-work/#dom-context-2d-arc

        * platform/graphics/qt/PathQt.cpp:
        (WebCore::Path::addArc):

2010-06-04  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] RenderThemeGtk leaks memory
        https://bugs.webkit.org/show_bug.cgi?id=40168

        Call gtk_widget_destroy in the RenderThemeGtk destructor. This cleans
        up all widget resources when a theme is destroyed.

        No new tests, because functionality has not changed.

        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::~RenderThemeGtk): Call gtk_widget_destroy on m_gtkWindow.

2010-06-04  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] RenderThemeGtk leaks memory
        https://bugs.webkit.org/show_bug.cgi?id=40168

        Remove the use of releaseRef to assign a value to a RefPtr. This results in
        the original pointer taking an extra reference.

        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::initMediaStyling): Remove the use of releaseRef here.

2010-06-04  Adam Barth  <abarth@webkit.org>

        Reviewed by Gavin Barraclough.

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

        Suppress the "unreachable code" warning because we want to assert that
        we don't reach certain code points.

        * html/HTML5Lexer.cpp:

2010-06-04  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Make HTML5Lexer go fast
        https://bugs.webkit.org/show_bug.cgi?id=40048

        A couple more cases like the previous patch that I missed.

        * html/HTML5Lexer.cpp:
        (WebCore::HTML5Lexer::nextToken):

2010-06-04  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Make HTML5Lexer go fast
        https://bugs.webkit.org/show_bug.cgi?id=40048

        Make all the state transitions in the machine explicit.  This allows us
        to remove all the break statements, which won't work correctly after we
        change the macro definitions.

        Also, while I was looking at every line of code, I fixed a bunch of the
        one-line-if style errors introduces in my previous patches.

        * html/HTML5Lexer.cpp:
        (WebCore::HTML5Lexer::nextToken):

2010-06-04  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Bug 40187 - Change function signature of NativeConstructor to match NativeFunction

        Mostly for consistency, but constructor & args arguments are redundant,
        and this will help if we wish to be able to JIT calls to more constructors.

        * bindings/js/JSArrayBufferConstructor.cpp:
        (WebCore::constructCanvasArrayBuffer):
        * bindings/js/JSAudioConstructor.cpp:
        (WebCore::constructAudio):
        * bindings/js/JSEventSourceConstructor.cpp:
        (WebCore::constructEventSource):
        * bindings/js/JSFloatArrayConstructor.cpp:
        (WebCore::constructCanvasFloatArray):
        * bindings/js/JSImageConstructor.cpp:
        (WebCore::constructImage):
        * bindings/js/JSInt16ArrayConstructor.cpp:
        (WebCore::constructCanvasShortArray):
        * bindings/js/JSInt32ArrayConstructor.cpp:
        (WebCore::constructCanvasIntArray):
        * bindings/js/JSInt8ArrayConstructor.cpp:
        (WebCore::constructCanvasByteArray):
        * bindings/js/JSMessageChannelConstructor.cpp:
        (WebCore::JSMessageChannelConstructor::construct):
        * bindings/js/JSMessageChannelConstructor.h:
        * bindings/js/JSOptionConstructor.cpp:
        (WebCore::constructHTMLOptionElement):
        * bindings/js/JSSharedWorkerConstructor.cpp:
        (WebCore::constructSharedWorker):
        * bindings/js/JSUint16ArrayConstructor.cpp:
        (WebCore::constructCanvasUnsignedShortArray):
        * bindings/js/JSUint32ArrayConstructor.cpp:
        (WebCore::constructCanvasUnsignedIntArray):
        * bindings/js/JSUint8ArrayConstructor.cpp:
        (WebCore::constructCanvasUnsignedByteArray):
        * bindings/js/JSWebKitCSSMatrixConstructor.cpp:
        (WebCore::constructWebKitCSSMatrix):
        * bindings/js/JSWebKitPointConstructor.cpp:
        (WebCore::constructWebKitPoint):
        * bindings/js/JSWebSocketConstructor.cpp:
        (WebCore::constructWebSocket):
        * bindings/js/JSWorkerConstructor.cpp:
        (WebCore::constructWorker):
        * bindings/js/JSXMLHttpRequestConstructor.cpp:
        (WebCore::constructXMLHttpRequest):
        * bindings/js/JSXSLTProcessorConstructor.cpp:
        (WebCore::constructXSLTProcessor):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/runtime_object.cpp:
        (JSC::Bindings::callRuntimeConstructor):

2010-06-04  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Make HTML5Lexer go fast
        https://bugs.webkit.org/show_bug.cgi?id=40048

        Change the intent of the loop to match what it's going to be once we
        remove the loop.  This is a whitespace only change that will make the
        final diff much, much smaller.  Sorry for the transient ugly style.

        * html/HTML5Lexer.cpp:
        (WebCore::HTML5Lexer::nextToken):

2010-06-04  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Make HTML5Lexer go fast
        https://bugs.webkit.org/show_bug.cgi?id=40048

        Introduce ADVANCE_TO macro.  This is the last macro we need to
        introduce.

        * html/HTML5Lexer.cpp:
        (WebCore::HTML5Lexer::nextToken):

2010-06-04  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Make HTML5Lexer go fast
        https://bugs.webkit.org/show_bug.cgi?id=40048

        Fix the rest of the RECONSUME_IN cases that were missed by our script.
        Also, reorder some assigment to prepare for the ADVANCE_TO patch.

        * html/HTML5Lexer.cpp:
        (WebCore::HTML5Lexer::nextToken):

2010-06-04  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Make HTML5Lexer go fast
        https://bugs.webkit.org/show_bug.cgi?id=40048

        This patch handles the FLUSH_AND_ADVANCE_TO case.  Again, this patch
        introduces style errors that will be fixed shortly.

        * html/HTML5Lexer.cpp:
        (WebCore::HTML5Lexer::nextToken):

2010-06-04  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Make HTML5Lexer go fast
        https://bugs.webkit.org/show_bug.cgi?id=40048

        This patch handles the FLUSH_EMIT_AND_RESUME_IN case.  This patch
        introduces some bad style w.r.t. one-line if statements, but we'll fix
        them all automatically in cleanup patch when we're done.

        * html/HTML5Lexer.cpp:
        (WebCore::HTML5Lexer::nextToken):

2010-06-04  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Make HTML5Lexer go fast
        https://bugs.webkit.org/show_bug.cgi?id=40048

        More small steps.  This patch deals with emitting tokens.

        * html/HTML5Lexer.cpp:
        (WebCore::HTML5Lexer::nextToken):

2010-06-04  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Make HTML5Lexer go fast
        https://bugs.webkit.org/show_bug.cgi?id=40048

        The next step: using macros to delimit each state.  Evetually, we're
        going to change what these macros expand to.

        * html/HTML5Lexer.cpp:
        (WebCore::HTML5Lexer::nextToken):

2010-06-04  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Make HTML5Lexer go fast
        https://bugs.webkit.org/show_bug.cgi?id=40048

        We're going to do this patch in small steps to make it easier to verify correctness.

        * html/HTML5Lexer.cpp:
        (WebCore::HTML5Lexer::nextToken):

2010-06-04  Jay Civelli  <jcivelli@chromium.org>

        Reviewed by David Levin.

        [chromium] Adding support for the left and right Windows keys to the
                   NativeWebKeyboardEvent.
        https://bugs.webkit.org/show_bug.cgi?id=39752

        * platform/chromium/KeyCodeConversionGtk.cpp:
        (WebCore::windowsKeyCodeForKeyEvent):

2010-06-04  Dirk Schulze  <krit@webkit.org>

        Reviewed by Nikolas Zimmermann.

        SVG filter on filter don't work
        https://bugs.webkit.org/show_bug.cgi?id=32708
        
        Any child of <text> was not allowed to use the same filter as the text root. 
        I couldn't found any reason in the SVG specification that legimitate this.
        Only batik also doesn't allow the same filter on the text root as on it's childs,
        while any other effect is still allowed.
        I removed this limitation so that the result looks like the result on Firefox.

        Test: svg/filters/filter-on-filter-for-text.svg

        * rendering/SVGRenderSupport.cpp:
        (WebCore::SVGRenderBase::prepareToRenderSVGContent):
        * rendering/SVGRenderSupport.h:
        * rendering/SVGRootInlineBox.cpp:
        (WebCore::SVGRootInlineBoxPaintWalker::SVGRootInlineBoxPaintWalker):
        (WebCore::SVGRootInlineBoxPaintWalker::chunkStartCallback):
        (WebCore::SVGRootInlineBox::paint):

2010-06-04  Nate Chapin  <japhet@chromium.org>

        Reviewed by Adam Barth.

        Factor PageCache functionality out of FrameLoader and into
        PageCache itself.

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

        Refactor only, so no new tests.

        * history/PageCache.cpp:
        (WebCore::pageCacheLogPrefix):
        (WebCore::pageCacheLog):
        (WebCore::logCanCacheFrameDecision):
        (WebCore::logCanCachePageDecision):
        (WebCore::PageCache::canCachePageContainingThisFrame):
        (WebCore::PageCache::canCache):
        (WebCore::PageCache::add):
        (WebCore::PageCache::get):
        * history/PageCache.h:
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::commitIfReady):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::commitProvisionalLoad):
        (WebCore::FrameLoader::prepareForCachedPageRestore):
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy):
        (WebCore::FrameLoader::loadProvisionalItemFromCachedPage):
        (WebCore::FrameLoader::navigateToDifferentDocument):
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::quickRedirectComing):
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged):

2010-06-04  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        WebInspector: Web Inspector: it would be better to push object properties to JSON string in order of insertion.
        https://bugs.webkit.org/show_bug.cgi?id=40140

        * inspector/InspectorValues.cpp:
        (WebCore::InspectorObject::writeJSON):
        * inspector/InspectorValues.h:
        (WebCore::InspectorObject::setBool):
        (WebCore::InspectorObject::setNumber):
        (WebCore::InspectorObject::setString):
        (WebCore::InspectorObject::set):

2010-06-04  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Adam Barth.

        Persist V8's ScriptData to the memory cache.
        https://bugs.webkit.org/show_bug.cgi?id=38661

        This stores V8's ScriptData in the memory cache and also causes the
        network platform layer to be notified of the available cacheable
        metadata.

        Chromium's morejs benchmark shows a 3-4% improvement on fast hardware.

        No new tests because no new functionality.

        * bindings/v8/ScriptSourceCode.h:
        (WebCore::ScriptSourceCode::ScriptSourceCode):
        (WebCore::ScriptSourceCode::cachedScript):
        * bindings/v8/V8Proxy.cpp:
        (WebCore::V8Proxy::compileScript):
        (WebCore::V8Proxy::precompileScript):
        (WebCore::V8Proxy::evaluate):
        * bindings/v8/V8Proxy.h:

2010-06-04  Tony Gentilcore  <tonyg@chromium.org>

        Reviewed by Adam Barth.

        Utilize new takeFirst() method where appropriate.
        https://bugs.webkit.org/show_bug.cgi?id=40089

        No new tests because no new functionality.

        * css/CSSStyleSheet.cpp:
        (WebCore::CSSStyleSheet::addSubresourceStyleURLs):
        * dom/XMLTokenizerLibxml2.cpp:
        (WebCore::PendingCallbacks::callAndRemoveFirstCallback):
        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::reset):
        (WebCore::HTMLTokenizer::executeExternalScriptsIfReady):
        * platform/text/SegmentedString.cpp:
        (WebCore::SegmentedString::advanceSubstring):
        * storage/Database.cpp:
        (WebCore::Database::scheduleTransaction):
        * storage/SQLTransaction.cpp:
        (WebCore::SQLTransaction::getNextStatement):
        * storage/SQLTransactionCoordinator.cpp:
        (WebCore::SQLTransactionCoordinator::processPendingTransactions):

2010-06-04  Nikita Vasilyev  <me@elv1s.ru>

        Reviewed by Pavel Feldman.

        Web Inspector: better Function.prototype.bind for the internal code.

        In the "Event Listeners" pane show handler function instead of Function.prototype.bind.

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

        * inspector/front-end/utilities.js:
        (Function.prototype.bind.bound):
        (Function.prototype.bind.bound.toString):
        (Function.prototype.bind):

2010-06-04  Alexander Pavlov  <apavlov@chromium.org>

        Unreviewed, fix Qt build.

        Add references to a new file.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/WebKit.qrc:

2010-06-04  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Eliminate direct dependency of StylesSidebarPane on InspectorBackend
        https://bugs.webkit.org/show_bug.cgi?id=40069

        No new tests are needed, as this is a refactoring.

        * inspector/front-end/CSSStyleModel.js: Added.
        (WebInspector.CSSStyleModel):
        (WebInspector.CSSStyleModel.prototype.getStylesAsync):
        (WebInspector.CSSStyleModel.prototype.getComputedStyleAsync):
        (WebInspector.CSSStyleModel.prototype.setRuleSelector):
        (WebInspector.CSSStyleModel.prototype.addRule):
        (WebInspector.CSSStyleModel.prototype.toggleStyleEnabled):
        (WebInspector.CSSStyleModel.prototype.setCSSText):
        (WebInspector.CSSStyleModel.prototype.applyStyleText):
        * inspector/front-end/StylesSidebarPane.js:
        (WebInspector.StylesSidebarPane.prototype.update.stylesCallback):
        (WebInspector.StylesSidebarPane.prototype.update.computedStyleCallback):
        (WebInspector.StylesSidebarPane.prototype.update):
        (WebInspector.StylesSidebarPane.prototype._arrayContainsInheritedProperty):
        (WebInspector.StylePropertiesSection.prototype.editingSelectorCommitted.successCallback):
        (WebInspector.StylePropertiesSection.prototype.editingSelectorCommitted):
        (WebInspector.BlankStylePropertiesSection.prototype.editingSelectorCommitted.successCallback):
        (WebInspector.BlankStylePropertiesSection.prototype.editingSelectorCommitted):
        (WebInspector.StylePropertyTreeElement.prototype.):
        (WebInspector.StylePropertyTreeElement.prototype):
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        (WebInspector.loaded):

2010-06-04  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Tor Arne Vestbø.

        [Qt] Compilation fails when compiling against Qt 4.7 and Qt Mobility is installed
        https://bugs.webkit.org/show_bug.cgi?id=40116

        CONFIG += mobility has the side-effect of pulling in mobility includes, which conflict
        with Qt 4.7's bearer managenent includes and break the build.

        * WebCore.pro:

2010-06-04  Vangelis Kokkevis  <vangelis@chromium.org>

        Reviewed by Dimitri Glazkov.

        [chromium] Fix scrolling bug with pages using accelerated compositing.
        https://bugs.webkit.org/show_bug.cgi?id=40037

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::LayerRendererChromium):
        (WebCore::LayerRendererChromium::drawLayers):

2010-06-04  Matthew Delaney  <mdelaney@apple.com>

        Reviewed by Darin Adler.

        CG implementation needed for compression quality in canvas.toDataURL
        https://bugs.webkit.org/show_bug.cgi?id=38492

        Took toDataURL.jpeg.quality.basic.html test off of Skipped list. Passes.

        Went the route of avoiding in-band signaling to flag the use of a quality 
        parameter or not. So, instead of simply passing the quality down as a
        double, instead I pass a reference to the quality parameter from where
        it comes in just after the JS bindings. Thus, no need for any global
        constants to signify when the quality is not specified. Updated the other 
        platforms to support this (qt was on the only one currently with any
        implementation). 

        * bindings/js/JSHTMLCanvasElementCustom.cpp: Moved range check logic for quality parameter down lower. Updated
        call to toDataURL to use double* instead of just passing the quality directly.
        (WebCore::JSHTMLCanvasElement::toDataURL):
        * bindings/v8/custom/V8HTMLCanvasElementCustom.cpp: Updated toDataURL call to pass double*
        (WebCore::V8HTMLCanvasElement::toDataURLCallback):
        * dom/CanvasSurface.cpp: Updated method prototype.
        (WebCore::CanvasSurface::toDataURL):
        * dom/CanvasSurface.h: Updated method prototype.
        (WebCore::CanvasSurface::toDataURL):
        * platform/graphics/ImageBuffer.h: Updated method signature to use double* for quality param.
        * platform/graphics/cairo/ImageBufferCairo.cpp: Updated prototype for consistency.
        (WebCore::ImageBuffer::toDataURL):
        * platform/graphics/cg/ImageBufferCG.cpp: Implemented support for quality parametejr when jpeg MIME type used.
        (WebCore::jpegUTI):
        (WebCore::utiFromMIMEType):
        (WebCore::ImageBuffer::toDataURL):
        * platform/graphics/haiku/ImageBufferHaiku.cpp: Updated prototype for consistency.
        (WebCore::ImageBuffer::toDataURL):
        * platform/graphics/qt/ImageBufferQt.cpp: Updated prototype for consistency.
        (WebCore::ImageBuffer::toDataURL):
        * platform/graphics/skia/ImageBufferSkia.cpp: Updated prototype for consistency.
        (WebCore::ImageBuffer::toDataURL):
        * platform/graphics/wince/ImageBufferWince.cpp: Updated prototype for consistency.
        (WebCore::ImageBuffer::toDataURL):
        * platform/graphics/wx/ImageBufferWx.cpp: Updated prototype for consistency.
        (WebCore::ImageBuffer::toDataURL):

2010-06-04  Alejandro G. Castro  <alex@igalia.com>

        Reviewed by Xan Lopez.

        Leaks in listDirectory
        https://bugs.webkit.org/show_bug.cgi?id=40008

        Fixed both leaks.

        * platform/gtk/FileSystemGtk.cpp:
        (WebCore::listDirectory):

2010-06-04  Anton Muhin  <antonm@chromium.org>

        Reviewed by Nate Chapin.

        [Chromium] get rid of named interceptor on HTMLDocument and introduce/remove accessors when named items get deleted/removed
        https://bugs.webkit.org/show_bug.cgi?id=39877

        This patch makes callbacks invoked on named items addition/removal
        install API accessors and thus there is no more need in
        named and indexed interceptors on HTMLDocument which
        speeds up invocation of methods on document.

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::namedItemAdded):
        (WebCore::ScriptController::namedItemRemoved):
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::checkDocumentWrapper):
        (WebCore::V8DOMWindowShell::updateDocumentWrapperCache):
        (WebCore::getter):
        (WebCore::V8DOMWindowShell::namedItemAdded):
        (WebCore::V8DOMWindowShell::namedItemRemoved):
        * bindings/v8/V8DOMWindowShell.h:
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::instantiateV8Object):
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        (WebCore::V8HTMLDocument::WrapInShadowObject):
        (WebCore::V8HTMLDocument::GetNamedProperty):
        (WebCore::V8HTMLDocument::allAccessorSetter):
        (WebCore::toV8):

2010-06-04  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Kent Tamura.

        Change filenameFromString to return CString
        https://bugs.webkit.org/show_bug.cgi?id=39494

        filenameFromString returns a newly allocated string and the caller must
        free the string. GTK and EFL ports use g_free while all others ports use
        fastFree. This is confusing because the same function behaves
        differently with respect to ports. Change filenameFromString to return
        CString.

        * platform/FileSystem.cpp:
        (WebCore::filenameFromString):
        * platform/FileSystem.h:
        * platform/efl/FileSystemEfl.cpp:
        (WebCore::filenameFromString):
        * platform/gtk/FileChooserGtk.cpp:
        (WebCore::FileChooser::basenameForWidth):
        * platform/gtk/FileSystemGtk.cpp:
        (WebCore::filenameFromString):
        (WebCore::filenameForDisplay):
        (WebCore::fileExists):
        (WebCore::deleteFile):
        (WebCore::deleteEmptyDirectory):
        (WebCore::getFileSize):
        (WebCore::getFileModificationTime):
        (WebCore::makeAllDirectories):
        (WebCore::pathGetFileName):
        (WebCore::directoryName):
        (WebCore::listDirectory):
        * platform/gtk/SharedBufferGtk.cpp:
        (WebCore::SharedBuffer::createWithContentsOfFile):
        * platform/network/soup/ResourceHandleSoup.cpp:
        (WebCore::startHttp):
        * platform/posix/SharedBufferPOSIX.cpp:
        (WebCore::SharedBuffer::createWithContentsOfFile):

2010-06-04  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Fix compilation with QT_NO_FEATURE
        https://bugs.webkit.org/show_bug.cgi?id=38324

        The #ifdef QT_NO_GRAPHICSEFFECT was in the wrong place, would have
        made AC not work at all.

        No new tests.

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::GraphicsLayerQtImpl::flushChanges):

2010-06-04  Qi Zhang  <qi.2.zhang@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Failed at http://philip.html5.org/tests/canvas/suite/tests/2d.path.arcTo.ensuresubpath.1.html
        https://bugs.webkit.org/show_bug.cgi?id=38645

        Path arcto function need to ensure there is subpath before it.

        * platform/graphics/qt/PathQt.cpp:
        (WebCore::Path::addArcTo):

2010-06-04  Qi Zhang  <qi.2.zhang@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] failed at http://philip.html5.org/tests/canvas/suite/tests/2d.path.arc.angle.3.html
        https://bugs.webkit.org/show_bug.cgi?id=38537

        For path.arc function handle span > 2PI

        * platform/graphics/qt/PathQt.cpp:
        (WebCore::Path::addArc):

2010-06-04  Zhenyao Mo  <zmo@google.com>

        Reviewed by Dimitri Glazkov.

        Set attributes.stencil to false by default at context creation
        https://bugs.webkit.org/show_bug.cgi?id=40090

        * platform/graphics/GraphicsContext3D.h: Set default attributes.stencil to false.
        (WebCore::GraphicsContext3D::Attributes::Attributes):

2010-06-03  Abhishek Arya  <inferno@chromium.org>

        Reviewed by Eric Carlson.

        Fix a crash when trying to use an invalid media src url by
        moving the isValid url checks to a central location in
        isSafeToLoadURL function. Also added an empty string check
        in DocumentLoader::didTellClientAboutLoad.

        Test: media/invalid-media-url-crash.html

        * html/HTMLMediaElement.cpp:
        (WebCore::HTMLMediaElement::isSafeToLoadURL):
        (WebCore::HTMLMediaElement::selectNextSourceChild):
        (WebCore::HTMLMediaElement::getPluginProxyParams):
        * loader/DocumentLoader.h:
        (WebCore::DocumentLoader::didTellClientAboutLoad):

2010-06-03  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r60642.
        http://trac.webkit.org/changeset/60642
        https://bugs.webkit.org/show_bug.cgi?id=40151

        Broke rendering of border images on rotated elements
        (Requested by jamesr on #webkit).

        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawImage):
        (WebCore::GraphicsContext::drawTiledImage):
        * platform/graphics/GraphicsContext.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintNinePieceImage):

2010-06-03  Damian Kaleta  <dkaleta@apple.com>

        Reviewed by Beth Dakin.

        Pixel cracks in border images when drawing with a scale factor > 1
        <rdar://problem/7994266>pixel cracks in border images
        https://bugs.webkit.org/show_bug.cgi?id=15720
        
        * platform/graphics/GraphicsContext.cpp:
        (WebCore::GraphicsContext::drawImage):
        (WebCore::GraphicsContext::drawTiledImage):
        * platform/graphics/GraphicsContext.h: Added two new methods to support drawing using FloatRect.
        If the boolean flag roundToPixels is true, the pixels are adjusted with the pixel boundaries.
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::paintNinePieceImage):

2010-06-03  James Robinson  <jamesr@chromium.org>

        Reviewed by Dan Bernstein.

        Take container's scroll offset and clip into account when initializing LayoutState
        https://bugs.webkit.org/show_bug.cgi?id=38506

        When doing a subtree layout, the initial LayoutState creation needs to
        take the layout root container's offset and its scroll offset into account
        to create the initial offset.  Otherwise if a subtree layout occurs
        for a layout root whose container has a non-zero scroll offset
        the LayoutState's offset and clip are wrong, resulting in a mispaint.
        See the test cases for examples.

        Tests: fast/repaint/layout-state-scrolloffset.html
               fast/repaint/layout-state-scrolloffset2.html
               fast/repaint/layout-state-scrolloffset3.html

        * rendering/LayoutState.cpp:
        (WebCore::LayoutState::LayoutState):

2010-06-03  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by NOBODY (speculative Qt build fix II).

        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::QtRuntimeMetaMethod::call):
        (JSC::Bindings::QtRuntimeConnectionMethod::call):

2010-06-03  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by NOBODY (speculative Qt build fix).

        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::QtRuntimeMetaMethod::call):
        (JSC::Bindings::QtRuntimeConnectionMethod::call):

2010-06-02  Gavin Barraclough  <barraclough@apple.com>

        Reviewed by Oliver Hunt.

        Bug 40094 - The return type of NativeFunction should be EncodedJSValue
        On Windows & Linux, using JSVALUE32_64, EncodedJSValue is returned in registers, but JSValue is not.

        * bindings/js/JSCallbackData.cpp:
        (WebCore::JSCallbackData::invokeCallback):
        * bindings/js/JSCustomXPathNSResolver.cpp:
        (WebCore::JSCustomXPathNSResolver::lookupNamespaceURI):
        * bindings/js/JSEventListener.cpp:
        (WebCore::JSEventListener::handleEvent):
        * bindings/js/JSHTMLAllCollectionCustom.cpp:
        (WebCore::callHTMLAllCollection):
        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::callHTMLCollection):
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::open):
        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::InjectedScriptHost::createInjectedScript):
        * bindings/js/JSNodeFilterCondition.cpp:
        (WebCore::JSNodeFilterCondition::acceptNode):
        * bindings/js/JSNodeListCustom.cpp:
        (WebCore::callNodeList):
        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::callPlugin):
        * bindings/js/ScheduledAction.cpp:
        (WebCore::ScheduledAction::create):
        (WebCore::ScheduledAction::executeFunctionInContext):
        * bindings/js/ScriptFunctionCall.cpp:
        (WebCore::ScriptFunctionCall::call):
        * bindings/js/SerializedScriptValue.cpp:
        (WebCore::SerializingTreeWalker::convertIfTerminal):
        * bindings/objc/WebScriptObject.mm:
        (-[WebScriptObject callWebScriptMethod:withArguments:]):
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/NP_jsobject.cpp:
        (_NPN_InvokeDefault):
        (_NPN_Invoke):
        (_NPN_Construct):
        * bridge/jni/jni_jsobject.mm:
        (JavaJSObject::call):
        * bridge/objc/objc_runtime.mm:
        (JSC::Bindings::callObjCFallbackObject):
        * bridge/runtime_method.cpp:
        (JSC::callRuntimeMethod):
        * bridge/runtime_object.cpp:
        (JSC::Bindings::callRuntimeObject):

2010-06-03  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r60614.
        http://trac.webkit.org/changeset/60614
        https://bugs.webkit.org/show_bug.cgi?id=40123

        It made fast/dom/Window/window-postmessage-clone.html fail on
        Mac bots (Requested by Ossy on #webkit).

        * Android.derived.jscbindings.mk:
        * Android.derived.v8bindings.mk:
        * Android.mk:
        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.pro:
        * bindings/generic/RuntimeEnabledFeatures.cpp:
        * bindings/generic/RuntimeEnabledFeatures.h:
        * bindings/js/JSEventCustom.cpp:
        (WebCore::toJS):
        * bindings/v8/custom/V8EventCustom.cpp:
        (WebCore::toV8):
        * dom/Document.cpp:
        (WebCore::Document::createEvent):
        (WebCore::Document::addListenerTypeIfNeeded):
        * dom/Document.h:
        (WebCore::Document::):
        * dom/Document.idl:
        * dom/Element.h:
        * dom/Element.idl:
        * dom/Event.cpp:
        (WebCore::Event::fromUserGesture):
        * dom/Event.h:
        * dom/EventNames.h:
        * dom/TransformActionEvent.cpp: Removed.
        * dom/TransformActionEvent.h: Removed.
        * dom/TransformActionEvent.idl: Removed.
        * html/HTMLAttributeNames.in:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::parseMappedAttribute):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:

2010-06-03  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        [v8] Web Inspector: show "Object" as description for values with anonymous constructor
        https://bugs.webkit.org/show_bug.cgi?id=40121

        * inspector/front-end/InjectedScript.js:
        (injectedScriptConstructor):

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

        Reviewed by Simon Hausmann.

        [Qt] Fix NPAPI support on Mac OS X/Cocoa-32

        qt_mac_window_for() returns a NSWindow on Cocoa, so we were
        passing in a NSWindow instead of a WindowRef as part of the
        NP_CGContext.

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

        * WebCore.gypi: Reflect rename
        * WebCore.pro: Reflect rename
        * plugins/mac/PluginViewMac.cpp: Renamed to PluginViewMac.mm
        and fix bug by getting the Carbon windowRef from the NSWindow.
        * wscript: Reflect rename

2010-06-03  Kim Grönholm  <kim.1.gronholm@nokia.com>

        Reviewed by Simon Hausmann.

        Add TransformActionEvent support
        https://bugs.webkit.org/show_bug.cgi?id=39757

        Added only the necessary TransformAction event interfaces and not e.g.
        any eventhandler hooks that generate and dispatch them.

        Test: fast/events/transformaction/create-transformaction-event.html
        More tests will be added with the machinery that generates and
        dispatches these events.

        * Android.derived.jscbindings.mk:
        * Android.derived.v8bindings.mk:
        * Android.mk:
        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.pro:
        * bindings/generic/RuntimeEnabledFeatures.cpp:
        * bindings/generic/RuntimeEnabledFeatures.h:
        (WebCore::RuntimeEnabledFeatures::transformactionEnabled):
        (WebCore::RuntimeEnabledFeatures::setTransformActionEnabled):
        (WebCore::RuntimeEnabledFeatures::ontransformactionstartEnabled):
        (WebCore::RuntimeEnabledFeatures::ontransformactionupdateEnabled):
        (WebCore::RuntimeEnabledFeatures::ontransformactionendEnabled):
        * bindings/js/JSEventCustom.cpp:
        (WebCore::toJS):
        * bindings/v8/custom/V8EventCustom.cpp:
        (WebCore::toV8):
        * dom/Document.cpp:
        (WebCore::Document::createEvent):
        (WebCore::Document::addListenerTypeIfNeeded):
        * dom/Document.h:
        (WebCore::Document::):
        * dom/Document.idl:
        * dom/Element.h:
        * dom/Element.idl:
        * dom/Event.cpp:
        (WebCore::Event::isTransformActionEvent):
        (WebCore::Event::fromUserGesture):
        * dom/Event.h:
        * dom/EventNames.h:
        * dom/TransformActionEvent.cpp: Added.
        (WebCore::TransformActionEvent::TransformActionEvent):
        (WebCore::TransformActionEvent::initTransformActionEvent):
        * dom/TransformActionEvent.h: Added.
        (WebCore::TransformActionEvent::create):
        (WebCore::TransformActionEvent::translateX):
        (WebCore::TransformActionEvent::translateY):
        (WebCore::TransformActionEvent::translateSpeedX):
        (WebCore::TransformActionEvent::translateSpeedY):
        (WebCore::TransformActionEvent::scale):
        (WebCore::TransformActionEvent::scaleSpeed):
        (WebCore::TransformActionEvent::rotate):
        (WebCore::TransformActionEvent::rotateSpeed):
        (WebCore::TransformActionEvent::TransformActionEvent):
        (WebCore::TransformActionEvent::isTransformActionEvent):
        * dom/TransformActionEvent.idl: Added.
        * html/HTMLAttributeNames.in:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::parseMappedAttribute):
        * page/DOMWindow.h:
        * page/DOMWindow.idl:

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

        Reviewed by Yury Semikhatsky.

        Web Inspector: a number of fixes that make InspectorController
        happy with null redirects.

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

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

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

        Not reviewed. Rolling out aggressive cache part of the r60391
        described in the bug below. It was orthogonal to the rest of
        the patch and caused regression.

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

        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::drawResampledBitmap):

2010-06-02  Darin Fisher  <darin@chromium.org>

        Reviewed by Brady Eidson.

        location.href and outgoing referrer not updated properly by
        pushState/replaceState
        https://bugs.webkit.org/show_bug.cgi?id=40027

        Tests: fast/loader/stateobjects/pushstate-updates-location.html
               fast/loader/stateobjects/replacestate-updates-location.html
               http/tests/navigation/pushstate-updates-referrer.html
               http/tests/navigation/replacestate-updates-referrer.html

        * dom/Document.cpp:
        (WebCore::Document::updateURLForPushOrReplaceState):
        Update the FrameLoader's notion of the current URL as well!

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::loadInSameDocument):
        Use the 'url' parameter instead of m_URL since m_URL might have
        changed during the handling of the PopState event.  Eventually,
        this will become irrelevant since the PopState event should be
        dispatched asynchronously, but just in case we patch HashChange
        to be asynchronous before PopState, this change would be needed.

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

        Reviewed by Adam Barth.

        REGRESSION(60409): document.write is not synchronous when using the HTML5 parser
        https://bugs.webkit.org/show_bug.cgi?id=40047

        The HTML5 spec states that we should "spin the event loop" while
        waiting for stylesheets to load.  Currently we do that by yielding
        out of the parser when stylesheets are loading.  Because it was easy
        we made inline <scripts> yield for stylesheet loads as well.  However,
        this caused document.write() to return after encountering the first
        inline <script> tag in many cases which is incorrect.  document.write
        is supposed to block until the entire document is parsed (including)
        executing inline script tags.  To match the exiting parser, we'll just
        make inline <script> tags not block on stylesheets for now.

        This is tested by WebCore/benchmarks/html-parser.html as well
        as likely several other tests in LayoutTests which we haven't
        triaged yet.

        * html/HTML5ScriptRunner.cpp:
        (WebCore::HTML5ScriptRunner::executeScript):
         - ASSERT that either stylesheets have loaded or we're executing an
           inline <script> tag.
        (WebCore::HTML5ScriptRunner::runScript):
         - Remove the code to block inline <script> tags on stylesheet loads.

2010-06-02  MORITA Hajime  <morrita@google.com>

        Unreviewd, Chromium windows build fix.

        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore::RenderThemeChromiumWin::paintProgressBar):

2010-06-02  MORITA Hajime  <morrita@google.com>

        Reviewed by Kent Tamura.
        
        [Chromium] Linux: progress bar image pieces should be painted with same resampling mode
        https://bugs.webkit.org/show_bug.cgi?id=40045

        computeResamplingMode(), used by Image::drawPattern() and
        BitmapImage::draw(), chooses an image resampling mode based on the
        size of given image and the destination rectangle. But when
        painting single component (i.e. a progress bar) from multiple
        images, it can choose different resampling modes for images of
        same component. That difference creates unexpected visual artifacts
        like seams between images of single component.
        
        This change introduced "image resampling hint" to allow callers to
        control the resampling mode. Using the hint,
        RenderThemeChromiumSkia now able to hold same resampling mode
        during draw a progress bar.
        
        No new tests. Expectations will come after ENABLE_PROGRESS_BAR get
        enabled on chromium.
        
        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::computeResamplingMode):
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (PlatformContextSkia::save):        
        (PlatformContextSkia::setImageResamplingHint): Added
        (PlatformContextSkia::clearImageResamplingHint): Added
        (PlatformContextSkia::hasImageResamplingHint): Added
        (PlatformContextSkia::imageResamplingHint): Added
        * platform/graphics/skia/PlatformContextSkia.h:
        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::RenderThemeChromiumSkia::paintProgressBar):

2010-06-03  MORITA Hajime  <morrita@google.com>

        Reviewed by Kent Tamura.

        [Chromium] Support HTML5 <progress> element on Linux.
        https://bugs.webkit.org/show_bug.cgi?id=37310
        
        Implemented RenderThemeChromiumSkia::paintProgressBar(), extracing
        determinateProgressValueRectFor() from RenderThemeChromiumWin to
        RenderThemeChromiumSkia
        
        No new tests. Expectations will come after ENABLE_PROGRESS_BAR get
        enabled on chromium.

        * rendering/RenderThemeChromiumSkia.cpp:
        (WebCore::RenderThemeChromiumSkia::determinateProgressValueRectFor):
        (WebCore::RenderThemeChromiumSkia::indeterminateProgressValueRectFor):
        (WebCore::RenderThemeChromiumSkia::animationRepeatIntervalForProgressBar):
        (WebCore::RenderThemeChromiumSkia::animationDurationForProgressBar):
        (WebCore::RenderThemeChromiumSkia::paintProgressBar):
        (WebCore::RenderThemeChromiumSkia::progressValueRectFor):
        * rendering/RenderThemeChromiumSkia.h:
        * rendering/RenderThemeChromiumWin.cpp:
        (WebCore::RenderThemeChromiumWin::paintProgressBar):

2010-06-02  Nico Weber  <thakis@chromium.org>

        Reviewed by Simon Fraser.

        Scroll events are sent twice per keypress for ports that don't have a platformWidget scrollbar
        https://bugs.webkit.org/show_bug.cgi?id=39918

        This was regressed by http://trac.webkit.org/changeset/58615 . Fix this by slightly tweaking
        that patch.

        Test: editing/input/page-up-down-scrolls.html

        * page/FrameView.cpp:
        (WebCore::FrameView::scrollPositionChanged):
        * page/FrameView.h:
        * platform/ScrollView.cpp:
        (WebCore::ScrollView::valueChanged):
        * platform/ScrollView.h:
        (WebCore::ScrollView::repaintFixedElementsAfterScrolling):

2010-06-02  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: use platform-specific key designations in shortcuts help for mac
        https://bugs.webkit.org/show_bug.cgi?id=39158

        * inspector/front-end/KeyboardShortcut.js:
        (WebInspector.KeyboardShortcut.shortcutToString):
        (WebInspector.KeyboardShortcut._keyName):
        (WebInspector.KeyboardShortcut._modifiersToString):
        * inspector/front-end/inspector.js:
        (WebInspector._registerShortcuts):

2010-06-02  Kenneth Russell  <kbr@google.com>

        Reviewed by Darin Fisher.

        Enable WebGL on more platforms even if accelerated compositing is disabled
        https://bugs.webkit.org/show_bug.cgi?id=40085

        Conditionalize the code which prevents a WebGL rendering context
        from being created if accelerated compositing is disabled.
        Currently Chromium is the only port which will create a context if
        accelerated compositing is disabled; other ports may opt in to
        this code path if desired.

        Tested with existing WebGL layout tests in Safari and Chromium on
        Mac OS X.

        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::getContext):

2010-06-02  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r60580.
        http://trac.webkit.org/changeset/60580
        https://bugs.webkit.org/show_bug.cgi?id=40087

        This broke dragging links if the selection was in a
        contentEditable element. (Requested by arv on #webkit).

        * page/FocusController.cpp:
        (WebCore::clearSelectionIfNeeded):

2010-06-02  Erik Arvidsson  <arv@chromium.org>

        Reviewed by Ojan Vafai.

        REGRESSION: Weird focus behavior affects quoting on University of Washington message board system
        https://bugs.webkit.org/show_bug.cgi?id=38548

        Test: editing/selection/click-in-focusable-link-should-not-clear-selection.html

        * page/FocusController.cpp:
        (WebCore::clearSelectionIfNeeded):

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

        Reviewed by Anders Carlsson.

        Just disable the current version of multi-column layout completely when the new
        pagination model is in effect.

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

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

        Reviewed by Anders Carlsson.

        Turn off unforced page breaking at paint time when the new page breaking model is being used.

        * rendering/RenderLineBoxList.cpp:
        (WebCore::RenderLineBoxList::paint):

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

        Reviewed by Anders Carlsson.

        Don't check page break properties at paint time if we're using the new page breaking model.

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

2010-06-02  Nate Chapin  <japhet@chromium.org>

        Reviewed by Dimitri Glazkov.

        [V8] Fix an infinite recursion crash when trying to wrap
        media elements without a media player.

        No test because there isn't a good way to ensure the media player
        is off.

        * dom/make_names.pl: Call, e.g., V8HTMLElement::wrap(HTMLElement*)
          instead of toV8(HTMLElement*).

2010-06-02  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Darin Adler.

        Notification object ref counting is not correct.
        https://bugs.webkit.org/show_bug.cgi?id=39998

        Return PassRefPtr<Notification> instead of a raw pointer from the create methods
        for Web Notifications. 

        No new tests are needed, as existing tests show the problem when sending the 
        "display" event asynchronously.

        * notifications/Notification.h:
        (WebCore::Notification::create):
        * notifications/NotificationCenter.h:
        (WebCore::NotificationCenter::createHTMLNotification):
        (WebCore::NotificationCenter::createNotification):

2010-06-02  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: add Console API for retrieving memory stats

        Add 'console.memory' property which returns an object. Currently
        it has two fields: totalJSHeapSize and usedJSHeapSize. Later, it can be
        extended for reporting total browser's memory consumption.

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

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSBindingsAllInOne.cpp:
        * bindings/js/JSConsoleCustom.cpp:
        (WebCore::JSConsole::memory):
        * bindings/v8/custom/V8ConsoleCustom.cpp:
        (WebCore::V8Console::memoryAccessorGetter):
        * page/Console.h:
        * page/Console.idl:
        * page/MemoryInfo.cpp: Added.
        (WebCore::MemoryInfo::MemoryInfo):
        * page/MemoryInfo.h: Added.
        (WebCore::MemoryInfo::create):
        (WebCore::MemoryInfo::totalJSHeapSize):
        (WebCore::MemoryInfo::usedJSHeapSize):
        * page/MemoryInfo.idl: Added.

2010-06-02  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: support "Continue to Here" in debugger
        https://bugs.webkit.org/show_bug.cgi?id=39953

        * English.lproj/localizedStrings.js:
        * inspector/front-end/BreakpointManager.js:
        (WebInspector.BreakpointManager.prototype.setOneTimeBreakpoint):
        (WebInspector.BreakpointManager.prototype.removeOneTimeBreakpoint):
        (WebInspector.BreakpointManager.prototype.addBreakpoint):
        * inspector/front-end/ScriptView.js:
        (WebInspector.ScriptView):
        (WebInspector.ScriptView.prototype._continueToLine):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel.prototype.continueToLine):
        (WebInspector.ScriptsPanel.prototype.debuggerPaused):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame):
        * inspector/front-end/SourceView.js:
        (WebInspector.SourceView):
        (WebInspector.SourceView.prototype._continueToLine):
        (WebInspector.SourceView.prototype.updateLocalContent):

2010-06-02  Mikhail Naganov  <mnaganov@chromium.org>

        Unreviewed, rolling out r60563.
        http://trac.webkit.org/changeset/60563
        https://bugs.webkit.org/show_bug.cgi?id=39646

        windows build failed

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSConsoleCustom.cpp:
        * bindings/v8/custom/V8ConsoleCustom.cpp:
        * page/Console.h:
        * page/Console.idl:
        * page/MemoryInfo.cpp: Removed.
        * page/MemoryInfo.h: Removed.
        * page/MemoryInfo.idl: Removed.

2010-06-02  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: add Console API for retrieving memory stats

        Add 'console.memory' property which returns an object. Currently
        it has two fields: totalJSHeapSize and usedJSHeapSize. Later, it can be
        extended for reporting total browser's memory consumption.

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

        * CMakeLists.txt:
        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSConsoleCustom.cpp:
        (WebCore::JSConsole::memory):
        * bindings/v8/custom/V8ConsoleCustom.cpp:
        (WebCore::V8Console::memoryAccessorGetter):
        * page/Console.h:
        * page/Console.idl:
        * page/MemoryInfo.cpp: Added.
        (WebCore::MemoryInfo::MemoryInfo):
        * page/MemoryInfo.h: Added.
        (WebCore::MemoryInfo::create):
        (WebCore::MemoryInfo::totalJSHeapSize):
        (WebCore::MemoryInfo::usedJSHeapSize):
        * page/MemoryInfo.idl: Added.

2010-06-02  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: add test for resource parameters.

        https://bugs.webkit.org/show_bug.cgi?id=40026
        
        Test: http/tests/inspector/resource-parameters.html

        * inspector/front-end/HAREntry.js:
        (WebInspector.HAREntry.prototype._buildParameters):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.prototype._parseParameters):
        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceView.prototype._refreshParms):

2010-06-02  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix make install on Symbian for headers in package builds when INSTALL_HEADERS is not defined

        First we wrote inst_headers.output with $$[QT_INSTALL_HEADERS] and then
        overwrote it with the $$INSTALL_HEADERS variant without checking if the
        variable was set.

        Fixed and cleaned up the logic of falling back to $$[QT_INSTALL_HEADERS].

        * WebCore.pro:

2010-06-02  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        [GTK] Style fixes for the generated code in DOM bindings
        https://bugs.webkit.org/show_bug.cgi?id=39949

        Get rid of extra spaces and wrong indentation in the generated
        code.

        * bindings/scripts/CodeGeneratorGObject.pm:
        * bindings/scripts/test/GObject/WebKitDOMTestCallback.cpp:
        (webkit_dom_test_callback_callback_with_class1param):
        (webkit_dom_test_callback_callback_with_class2param):
        (webkit_dom_test_callback_callback_with_non_bool_return_type):
        (webkit_dom_test_callback_set_property):
        (webkit_dom_test_callback_get_property):
        * bindings/scripts/test/GObject/WebKitDOMTestCallback.h:
        * bindings/scripts/test/GObject/WebKitDOMTestInterface.cpp:
        (webkit_dom_test_interface_set_property):
        (webkit_dom_test_interface_get_property):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        (webkit_dom_test_obj_void_method):
        (webkit_dom_test_obj_void_method_with_args):
        (webkit_dom_test_obj_int_method):
        (webkit_dom_test_obj_int_method_with_args):
        (webkit_dom_test_obj_obj_method):
        (webkit_dom_test_obj_obj_method_with_args):
        (webkit_dom_test_obj_method_that_requires_all_args):
        (webkit_dom_test_obj_method_that_requires_all_args_and_throws):
        (webkit_dom_test_obj_serialized_value):
        (webkit_dom_test_obj_method_with_exception):
        (webkit_dom_test_obj_with_dynamic_frame):
        (webkit_dom_test_obj_with_dynamic_frame_and_arg):
        (webkit_dom_test_obj_with_dynamic_frame_and_optional_arg):
        (webkit_dom_test_obj_with_dynamic_frame_and_user_gesture):
        (webkit_dom_test_obj_with_dynamic_frame_and_user_gesture_asad):
        (webkit_dom_test_obj_with_script_state_void):
        (webkit_dom_test_obj_with_script_state_obj):
        (webkit_dom_test_obj_with_script_state_void_exception):
        (webkit_dom_test_obj_with_script_state_obj_exception):
        (webkit_dom_test_obj_method_with_optional_arg):
        (webkit_dom_test_obj_method_with_non_optional_arg_and_optional_arg):
        (webkit_dom_test_obj_method_with_non_optional_arg_and_two_optional_args):
        (webkit_dom_test_obj_get_read_only_int_attr):
        (webkit_dom_test_obj_get_read_only_string_attr):
        (webkit_dom_test_obj_get_read_only_test_obj_attr):
        (webkit_dom_test_obj_get_int_attr):
        (webkit_dom_test_obj_set_int_attr):
        (webkit_dom_test_obj_get_long_long_attr):
        (webkit_dom_test_obj_set_long_long_attr):
        (webkit_dom_test_obj_get_unsigned_long_long_attr):
        (webkit_dom_test_obj_set_unsigned_long_long_attr):
        (webkit_dom_test_obj_get_string_attr):
        (webkit_dom_test_obj_set_string_attr):
        (webkit_dom_test_obj_get_test_obj_attr):
        (webkit_dom_test_obj_set_test_obj_attr):
        (webkit_dom_test_obj_get_attr_with_exception):
        (webkit_dom_test_obj_set_attr_with_exception):
        (webkit_dom_test_obj_get_attr_with_setter_exception):
        (webkit_dom_test_obj_set_attr_with_setter_exception):
        (webkit_dom_test_obj_get_attr_with_getter_exception):
        (webkit_dom_test_obj_set_attr_with_getter_exception):
        (webkit_dom_test_obj_get_script_string_attr):
        (webkit_dom_test_obj_set_property):
        (webkit_dom_test_obj_get_property):
        (webkit_dom_test_obj_class_init):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.h:

2010-06-02  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        WebInspector: Added conversion of inspector's resource representation into HAR.
        Moved common resource accessors from ResourceView to Resource.
        https://bugs.webkit.org/show_bug.cgi?id=30567

        Test: http/tests/inspector/resource-har-conversion.html

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/HAREntry.js: Added.
        (WebInspector.HAREntry):
        (WebInspector.HAREntry.prototype.build):
        (WebInspector.HAREntry.prototype._buildRequest):
        (WebInspector.HAREntry.prototype._buildResponse):
        (WebInspector.HAREntry.prototype._buildContent):
        (WebInspector.HAREntry.prototype._buildTimings):
        (WebInspector.HAREntry.prototype._buildHeaders):
        (WebInspector.HAREntry.prototype._buildPostData):
        (WebInspector.HAREntry.prototype._buildParameters):
        (WebInspector.HAREntry.prototype._buildParameter):
        (WebInspector.HAREntry.prototype._toMilliseconds):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource):
        (WebInspector.Resource.prototype.set url):
        (WebInspector.Resource.prototype.get receiveDuration):
        (WebInspector.Resource.prototype.requestHeaderValue):
        (WebInspector.Resource.prototype.get requestFormData):
        (WebInspector.Resource.prototype.set requestFormData):
        (WebInspector.Resource.prototype.responseHeaderValue):
        (WebInspector.Resource.prototype.get queryParameters):
        (WebInspector.Resource.prototype.get formParameters):
        (WebInspector.Resource.prototype._parseParameters):
        (WebInspector.Resource.prototype._headerValue):
        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceView.prototype._refreshQueryString):
        (WebInspector.ResourceView.prototype._refreshFormData):
        (WebInspector.ResourceView.prototype._refreshParms):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

2010-06-02  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r60547.
        http://trac.webkit.org/changeset/60547
        https://bugs.webkit.org/show_bug.cgi?id=40051

        It made fast/overflow/overflow-with-local-background-
        attachment.html crash (Requested by Ossy on #webkit).

        * notifications/Notification.h:
        (WebCore::Notification::create):
        * notifications/NotificationCenter.h:
        (WebCore::NotificationCenter::createHTMLNotification):
        (WebCore::NotificationCenter::createNotification):

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

        Reviewed by Adam Barth.

        HTML5 parser does not track line numbers
        https://bugs.webkit.org/show_bug.cgi?id=39984

        This adds rudimentary line-number tracking to the HTML5Lexer.
        We'll still need to handle \r\n cases eventually, but this
        fixes the vast majority of our line-number related failures.

        Fixes 268 layout tests. :)

        * html/HTML5Lexer.cpp:
        (WebCore::HTML5Lexer::reset):
         - Reset m_lineNumber to 0.
        (WebCore::HTML5Lexer::consumeEntity):
         - Pass m_lineNumber to advance().
        (WebCore::HTML5Lexer::nextToken):
         - Pass m_lineNumber to advance().
        * html/HTML5Lexer.h:
        (WebCore::HTML5Lexer::lineNumber):
         - Expose m_lineNumber for HTML5Tokenizer.
        (WebCore::HTML5Lexer::columnNumber):
         - Mirrors the implementation in the old HTMLTokenizer.
           we might some day support column number tracking in
           the Lexer.  It certainly would be possible.
        * html/HTML5ScriptRunner.cpp:
        (WebCore::HTML5ScriptRunner::HTML5ScriptRunner):
         - ASSERT we're passed a host.
        (WebCore::HTML5ScriptRunner::sourceFromPendingScript):
         - Use PendingScript.startingLineNumber when PendingScript is an inline script.
        (WebCore::HTML5ScriptRunner::execute):
         - Now expects a start line number passed from the TreeBuilder.
        (WebCore::HTML5ScriptRunner::runScript):
         - Now expects a start line number.
        * html/HTML5ScriptRunner.h:
        (WebCore::HTML5ScriptRunner::PendingScript::PendingScript):
         - Track startingLineNumber for any inline script.
        * html/HTML5Tokenizer.cpp:
        (WebCore::HTML5Tokenizer::begin):
         - Add a FIXME.  The old HTMLTokenizer resets its "lexer" state here.
        (WebCore::HTML5Tokenizer::pumpLexer):
         - Pass scriptStartLine to the HTML5ScriptRunner
        (WebCore::HTML5Tokenizer::lineNumber):
         - Implementation for Tokenizer.h
        (WebCore::HTML5Tokenizer::columnNumber):
         - Implementation for Tokenizer.h
        * html/HTML5Tokenizer.h:
        * html/HTML5TreeBuilder.cpp:
        (WebCore::HTML5TreeBuilder::HTML5TreeBuilder):
         - Initialize the new line number tracking variables.
        (WebCore::HTML5TreeBuilder::handleScriptEndTag):
         - Save off the line number from the start tag to pass to the ScriptRunner.
        (WebCore::HTML5TreeBuilder::takeScriptToProcess):
         - Return the line number from the start tag.
        (WebCore::HTML5TreeBuilder::passTokenToLegacyParser):
         - Save off the line number of ever script start tag we see.
        * html/HTML5TreeBuilder.h:
         - Keep both the line number of the last start tag, and the
           line number of the script we know we're expecting our caller to
           run before resuming parsing.  These are separate to keep the code
           clean, especially since the last script start tag line number is
           a hack specific to using the old HTMLParser.

2010-06-02  Joseph Pecoraro  <joepeck@webkit.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Timeline should nicely format the Timer timeout
        https://bugs.webkit.org/show_bug.cgi?id=40040

        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.FormattedRecord.prototype._generatePopupContent): Format the Timer's timeout time.

2010-06-02  Vangelis Kokkevis  <vangelis@chromium.org>

        Reviewed by Dimitri Glazkov.

        [Chromium] Clamp dirtyRect updates of composited layer contents to the size
        of the layer to avoid writing outside texture bounds.
        https://bugs.webkit.org/show_bug.cgi?id=40030

        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::updateTextureContents):

2010-06-02  Yael Aharon  <yael.aharon@nokia.com>

        Reviewed by Darin Adler.

        Notification object ref counting is not correct.
        https://bugs.webkit.org/show_bug.cgi?id=39998

        Return PassRefPtr<Notification> instead of a raw pointer from the create methods
        for Web Notifications. 

        No new tests are needed, as existing tests show the problem when sending the 
        "display" event asynchronously.

        * notifications/Notification.h:
        (WebCore::Notification::create):
        * notifications/NotificationCenter.h:
        (WebCore::NotificationCenter::createHTMLNotification):
        (WebCore::NotificationCenter::createNotification):

2010-06-02  Qi Zhang  <qi.2.zhang@nokia.com>

        Reviewed by Dirk Schulze.

        [Qt] Image shadow doesn't work
        https://bugs.webkit.org/show_bug.cgi?id=37804

        Implement the code for image shadow

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

2010-06-02  Vangelis Kokkevis  <vangelis@chromium.org>

        Reviewed by Darin Fisher.

        Adding the precision qualifier to fragment shaders used by the GL
        compositor in chromium to turn them into valid GLSL ES.
        https://bugs.webkit.org/show_bug.cgi?id=40022

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::initializeSharedGLObjects):

2010-06-02  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by David Levin.

        Fix type qualifier is meaningless on cast type in SVGFEColorMatrixElement::build
        https://bugs.webkit.org/show_bug.cgi?id=40015

        No new tests as there is no new functionality.

        Remove const from the cast type.

        * svg/SVGFEColorMatrixElement.cpp:
        (WebCore::SVGFEColorMatrixElement::build):

2010-06-02  Sterling Swigart  <sswigart@google.com>

        Reviewed by David Levin.

        Image Resizer Patch 0: Added compilation argument to conditionally compile pending patches.
        https://bugs.webkit.org/show_bug.cgi?id=39906

        * Configurations/FeatureDefines.xcconfig:
        * GNUmakefile.am:
        * WebCore.pri:

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

        Reviewed by Nikolas Zimmermann.

        SVG repaintRect should be empty if content got clipped away
        https://bugs.webkit.org/show_bug.cgi?id=39965
        
        The SVG repaintRect of the renderer was not empty, if the content got clipped away.
        The MaskerData/ClipperData <-> RenderObject mapping is set up during the layout phase now, to be able to
        relayout a RenderObject, if it's repaintRect is empty. This has the following reason:
        We apply the object to the resource on painting at the moment.
        With an empty repaintRect, paint() quits earlier and therefore the object doesn't get applied to the resource.
        This can cause problems, if the resource get changed by animations or scripts.
        On a change, the resource tells all it's callers to relayout.
        If the reference to the caller (our RenderObject) is missing, the object won't ever update
        and therefore won't get drawn.
        We already have LayoutTests that cover this problem. The complete repaintRect calculation
        (including the smallest clipping area and shadow size calculation) moved from the renderers to SVGRenderSupport.
        This eliminates redundant code.

        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::updateCachedBoundaries):
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::repaintRectInLocalCoordinates):
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::repaintRectInLocalCoordinates):
        * rendering/RenderSVGResource.h:
        * rendering/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::resourceBoundingBox):
        * rendering/RenderSVGResourceClipper.h:
        * rendering/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::resourceBoundingBox):
        * rendering/RenderSVGResourceFilter.h:
        * rendering/RenderSVGResourceGradient.h:
        (WebCore::RenderSVGResourceGradient::resourceBoundingBox):
        * rendering/RenderSVGResourceMarker.h:
        (WebCore::RenderSVGResourceMarker::resourceBoundingBox):
        * rendering/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::resourceBoundingBox):
        * rendering/RenderSVGResourceMasker.h:
        * rendering/RenderSVGResourcePattern.h:
        (WebCore::RenderSVGResourcePattern::resourceBoundingBox):
        * rendering/RenderSVGResourceSolidColor.h:
        (WebCore::RenderSVGResourceSolidColor::resourceBoundingBox):
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::strokeBoundingBox):
        (WebCore::RenderSVGText::repaintRectInLocalCoordinates):
        * rendering/SVGRenderSupport.cpp:
        (WebCore::SVGRenderBase::intersectRepaintRectWithResources):
        * rendering/SVGRenderSupport.h:
        * rendering/SVGRenderTreeAsText.cpp:
        (WebCore::writeResources):
        * rendering/style/SVGRenderStyle.h:
        (WebCore::SVGRenderStyle::hasClipper):
        (WebCore::SVGRenderStyle::hasMasker):
        (WebCore::SVGRenderStyle::hasFilter):

2010-06-01  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r60539.
        http://trac.webkit.org/changeset/60539
        https://bugs.webkit.org/show_bug.cgi?id=40043

        Accidentally added an unreviewed and invalid change to the
        patch. (Requested by krit on #webkit).

        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::updateCachedBoundaries):
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::repaintRectInLocalCoordinates):
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::repaintRectInLocalCoordinates):
        * rendering/RenderSVGResource.h:
        * rendering/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::resourceBoundingBox):
        * rendering/RenderSVGResourceClipper.h:
        * rendering/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::resourceBoundingBox):
        * rendering/RenderSVGResourceFilter.h:
        * rendering/RenderSVGResourceGradient.h:
        (WebCore::RenderSVGResourceGradient::resourceBoundingBox):
        * rendering/RenderSVGResourceMarker.h:
        (WebCore::RenderSVGResourceMarker::resourceBoundingBox):
        * rendering/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::resourceBoundingBox):
        * rendering/RenderSVGResourceMasker.h:
        * rendering/RenderSVGResourcePattern.h:
        (WebCore::RenderSVGResourcePattern::resourceBoundingBox):
        * rendering/RenderSVGResourceSolidColor.h:
        (WebCore::RenderSVGResourceSolidColor::resourceBoundingBox):
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::strokeBoundingBox):
        (WebCore::RenderSVGText::repaintRectInLocalCoordinates):
        * rendering/SVGRenderSupport.cpp:
        (WebCore::SVGRenderBase::filterBoundingBoxForRenderer):
        (WebCore::SVGRenderBase::clipperBoundingBoxForRenderer):
        (WebCore::SVGRenderBase::maskerBoundingBoxForRenderer):
        * rendering/SVGRenderSupport.h:
        * rendering/SVGRenderTreeAsText.cpp:
        (WebCore::writeResources):
        * rendering/style/SVGRenderStyle.h:
        * svg/SVGColor.cpp:
        (WebCore::SVGColor::colorFromRGBColorString):

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

        Reviewed by Nikolas Zimmermann.

        SVG repaintRect should be empty if content got clipped away
        https://bugs.webkit.org/show_bug.cgi?id=39965
        
        The SVG repaintRect of the renderer was not empty, if the content got clipped away.
        The MaskerData/ClipperData <-> RenderObject mapping is set up during the layout phase now, to be able to
        relayout a RenderObject, if it's repaintRect is empty. This has the following reason:
        We apply the object to the resource on painting at the moment.
        With an empty repaintRect, paint() quits earlier and therefore the object doesn't get applied to the resource.
        This can cause problems, if the resource get changed by animations or scripts.
        On a change, the resource tells all it's callers to relayout.
        If the reference to the caller (our RenderObject) is missing, the object won't ever update
        and therefore won't get drawn.
        We already have LayoutTests that cover this problem. The complete repaintRect calculation
        (including the smallest clipping area and shadow size calculation) moved from the renderers to SVGRenderSupport.
        This eliminates redundant code.

        * rendering/RenderPath.cpp:
        (WebCore::RenderPath::updateCachedBoundaries):
        * rendering/RenderSVGContainer.cpp:
        (WebCore::RenderSVGContainer::repaintRectInLocalCoordinates):
        * rendering/RenderSVGImage.cpp:
        (WebCore::RenderSVGImage::repaintRectInLocalCoordinates):
        * rendering/RenderSVGResource.h:
        * rendering/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::resourceBoundingBox):
        * rendering/RenderSVGResourceClipper.h:
        * rendering/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::resourceBoundingBox):
        * rendering/RenderSVGResourceFilter.h:
        * rendering/RenderSVGResourceGradient.h:
        (WebCore::RenderSVGResourceGradient::resourceBoundingBox):
        * rendering/RenderSVGResourceMarker.h:
        (WebCore::RenderSVGResourceMarker::resourceBoundingBox):
        * rendering/RenderSVGResourceMasker.cpp:
        (WebCore::RenderSVGResourceMasker::resourceBoundingBox):
        * rendering/RenderSVGResourceMasker.h:
        * rendering/RenderSVGResourcePattern.h:
        (WebCore::RenderSVGResourcePattern::resourceBoundingBox):
        * rendering/RenderSVGResourceSolidColor.h:
        (WebCore::RenderSVGResourceSolidColor::resourceBoundingBox):
        * rendering/RenderSVGText.cpp:
        (WebCore::RenderSVGText::strokeBoundingBox):
        (WebCore::RenderSVGText::repaintRectInLocalCoordinates):
        * rendering/SVGRenderSupport.cpp:
        (WebCore::SVGRenderBase::intersectRepaintRectWithResources):
        * rendering/SVGRenderSupport.h:
        * rendering/SVGRenderTreeAsText.cpp:
        (WebCore::writeResources):
        * rendering/style/SVGRenderStyle.h:
        (WebCore::SVGRenderStyle::hasClipper):
        (WebCore::SVGRenderStyle::hasMasker):
        (WebCore::SVGRenderStyle::hasFilter):

2010-06-01  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r60530.
        http://trac.webkit.org/changeset/60530
        https://bugs.webkit.org/show_bug.cgi?id=40041

        resource-har-conversion failed on GTK (Requested by abarth on
        #webkit).

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/HAREntry.js: Removed.
        * inspector/front-end/Resource.js:
        (WebInspector.Resource):
        (WebInspector.Resource.prototype.set url):
        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceView.prototype._refreshQueryString):
        (WebInspector.ResourceView.prototype._refreshFormData):
        (WebInspector.ResourceView.prototype._refreshParms):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

2010-06-01  No'am Rosenthal  <noam.rosenthal@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] GraphicsLayer: warnings when reloading page
        https://bugs.webkit.org/show_bug.cgi?id=39694

        Made sure recaching and masks aren't attempted on zero-size layers.

        No new tests. Old tests (e.g. LayoutTests/compositing/masks) show the problem.

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::MaskEffectQt::draw):
        (WebCore::GraphicsLayerQtImpl::recache):

2010-06-01  anton muhin  <antonm@google.com>

        Reviewed by Nate Chapin.

        [Chromium] enforce presence of named property query callback if named property enumerator is present
        https://bugs.webkit.org/show_bug.cgi?id=40006
        We need to be able to distinguish between enumerable and not enumerable properties
        in the presence of named interceptor.  V8 is migrating to use query
        callback to report enumerable properties and fallback check---
        using getter callback---would report properties as not enumerable.
        Thus if there is an enumerator callback, there should be query callback as well.
        (see V8's r4751).

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/V8NPObject.cpp:
        (WebCore::npObjectQueryProperty):
        (WebCore::createV8ObjectForNPObject):
        * bindings/v8/custom/V8StorageCustom.cpp:
        (WebCore::V8Storage::namedPropertyQuery):

2010-06-01  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Pavel Feldman.

        WebInspector: Added conversion of inspector's resource representation into HAR.
        Moved common resource accessors from ResourceView to Resource.
        https://bugs.webkit.org/show_bug.cgi?id=30567

        Test: http/tests/inspector/resource-har-conversion.html

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/HAREntry.js: Added.
        (WebInspector.HAREntry):
        (WebInspector.HAREntry.prototype.build):
        (WebInspector.HAREntry.prototype._buildRequest):
        (WebInspector.HAREntry.prototype._buildResponse):
        (WebInspector.HAREntry.prototype._buildContent):
        (WebInspector.HAREntry.prototype._buildTimings):
        (WebInspector.HAREntry.prototype._buildHeaders):
        (WebInspector.HAREntry.prototype._buildPostData):
        (WebInspector.HAREntry.prototype._buildParameters):
        (WebInspector.HAREntry.prototype._buildParameter):
        (WebInspector.HAREntry.prototype._toMilliseconds):
        * inspector/front-end/Resource.js:
        (WebInspector.Resource):
        (WebInspector.Resource.prototype.set url):
        (WebInspector.Resource.prototype.get receiveDuration):
        (WebInspector.Resource.prototype.requestHeaderValue):
        (WebInspector.Resource.prototype.get requestFormData):
        (WebInspector.Resource.prototype.set requestFormData):
        (WebInspector.Resource.prototype.responseHeaderValue):
        (WebInspector.Resource.prototype.get queryParameters):
        (WebInspector.Resource.prototype.get formParameters):
        (WebInspector.Resource.prototype._parseParameters):
        (WebInspector.Resource.prototype._headerValue):
        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceView.prototype._refreshQueryString):
        (WebInspector.ResourceView.prototype._refreshFormData):
        (WebInspector.ResourceView.prototype._refreshParms):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:

2010-06-01  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        Fix "variable may be used before being set" warning in TextResourceDecoder::checkForHeadCharset
        https://bugs.webkit.org/show_bug.cgi?id=40001

        No new tests as there is no new functionality.

        Initialize len to 0 just to eliminate the compiler warning.

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

2010-06-01  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        WebInspector: Safari specific files InspectorFrontendClientLocal were removed from chromium project.
        https://bugs.webkit.org/show_bug.cgi?id=39993

        * WebCore.gypi:

2010-06-01  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Darin Adler.

        Fix broken code generation in GenerateParametersCheckExpression.
        https://bugs.webkit.org/show_bug.cgi?id=39960

        * bindings/scripts/CodeGeneratorJS.pm:
        * bindings/scripts/test/JS/JSTestObj.cpp: Updated baseline.

2010-06-01  Mark Rowe  <mrowe@apple.com>

        Rubber-stamped by Adam Roben.

        Remove Breakpoint.js. It was emptied in r60450 but for some reason it was not
        deleted at that time. The presence of empty files within the inspector's resource
        folder causes Mac OS X production builds to fail.

        * inspector/front-end/Breakpoint.js: Removed.

2010-05-24  James Hawkins  <jhawkins@chromium.org>

        Reviewed by Darin Fisher.

        Added ability for PopupMenuClient to signal when
        * selection changed, and
        * selection cleared.

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

        No new tests because this functionality is intentionally hidden from
        everything other than renderer.

        * platform/PopupMenuClient.h:
        * platform/chromium/PopupMenuChromium.cpp:
        (WebCore::PopupListBox::selectIndex):
        (WebCore::PopupListBox::clearSelection):
        * rendering/RenderMenuList.h:
        (WebCore::RenderMenuList::RenderMenuList::selectionChanged):
        (WebCore::RenderMenuList::RenderMenuList::selectionCleared):
        * rendering/RenderTextControlSingleLine.h:
        (WebCore::RenderTextControlSingleLine::selectionChanged):
        (WebCore::RenderTextControlSingleLine::selectionCleared):

2010-06-01  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Dimitri Glazkov.

        Check if a database needs to be auto-vacuumed only after transactions that have deleted something.
        https://bugs.webkit.org/show_bug.cgi?id=39688

        * storage/Database.cpp:
        (WebCore::Database::resetDeletes):
        (WebCore::Database::hadDeletes):
        * storage/Database.h:
        * storage/DatabaseAuthorizer.cpp:
        (WebCore::DatabaseAuthorizer::resetDeletes):
        (WebCore::DatabaseAuthorizer::dropTable):
        (WebCore::DatabaseAuthorizer::dropTempTable):
        (WebCore::DatabaseAuthorizer::dropIndex):
        (WebCore::DatabaseAuthorizer::dropTempIndex):
        (WebCore::DatabaseAuthorizer::dropTrigger):
        (WebCore::DatabaseAuthorizer::dropTempTrigger):
        (WebCore::DatabaseAuthorizer::dropView):
        (WebCore::DatabaseAuthorizer::dropTempView):
        (WebCore::DatabaseAuthorizer::dropVTable):
        (WebCore::DatabaseAuthorizer::allowDelete):
        (WebCore::DatabaseAuthorizer::updateDeletesBasedOnTableName): Added.
        * storage/DatabaseAuthorizer.h:
        (WebCore::DatabaseAuthorizer::hadDeletes):
        * storage/SQLTransaction.cpp:
        (WebCore::SQLTransaction::openTransactionAndPreflight):
        (WebCore::SQLTransaction::postflightAndCommit):

2010-06-01  David Hyatt  <hyatt@apple.com>

        Reviewed by Anders Carlsson.

        Add a preference for paginating during layout (the new model for computing page breaks).

        * page/Settings.cpp:
        (WebCore::Settings::Settings):
        * page/Settings.h:
        (WebCore::Settings::setPaginateDuringLayoutEnabled):
        (WebCore::Settings::paginateDuringLayoutEnabled):

2010-06-01  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Adam Barth.

        Clean up the DB classes in preparation for a bigger refactoring.
        https://bugs.webkit.org/show_bug.cgi?id=39041

        * storage/ChangeVersionWrapper.cpp:
        * storage/ChangeVersionWrapper.h:
        * storage/Database.cpp:
        (WebCore::Database::Database):
        (WebCore::Database::lastActionChangedDatabase):
        (WebCore::Database::lastActionWasInsert):
        (WebCore::Database::inProgressTransactionCompleted):
        (WebCore::Database::securityOrigin):
        * storage/Database.h:
        (WebCore::Database::sqliteDatabase):
        (WebCore::Database::databaseDebugName):
        * storage/DatabaseTask.cpp:
        (WebCore::DatabaseTransactionTask::doPerformTask):
        * storage/DatabaseTask.h:
        * storage/SQLStatement.cpp:
        (WebCore::SQLStatement::execute):
        * storage/SQLStatement.h:
        * storage/SQLTransaction.cpp:
        (WebCore::SQLTransaction::SQLTransaction):
        (WebCore::SQLTransaction::openTransactionAndPreflight):
        (WebCore::SQLTransaction::runStatements):
        (WebCore::SQLTransaction::runCurrentStatement):
        (WebCore::SQLTransaction::postflightAndCommit):
        (WebCore::SQLTransaction::cleanupAfterSuccessCallback):
        (WebCore::SQLTransaction::cleanupAfterTransactionErrorCallback):
        * storage/SQLTransaction.h:

2010-06-01  Rob Buis  <rwlbuis@gmail.com>

        Reviewed by Nikolas Zimmermann.

        Large SVG rect with shadow fails to render
        https://bugs.webkit.org/show_bug.cgi?id=38851

        Store intermediate shadow calculation in floats to prevent integer overflow.

        Test: svg/filters/shadow-on-rect-large.svg

        * rendering/style/SVGRenderStyle.cpp:
        (WebCore::getSVGShadowExtent):
        (WebCore::SVGRenderStyle::inflateForShadow):

2010-06-01  Jer Noble  <jer.noble@apple.com>

        Reviewed by Sam Weinig.

        QuickTime 7.6.4 + Safari Nightly = Crash
        https://bugs.webkit.org/show_bug.cgi?id=40019
        rdar://problem/8035443
        
        Check the return value of QTCFPropertyListCreateXMLData before calling CFDataGetLength().

        * platform/graphics/win/QTCFDictionary.cpp:
        (QTCFDictionaryCreateCopyWithDataCallback):

2010-06-01  Rob Buis  <rwlbuis@gmail.com>

        Reviewed by Dirk Schulze.

        Manipulating SVG element attributes in Javascript does not work as expected
        https://bugs.webkit.org/show_bug.cgi?id=34328

        Reset the viewBox to be empty when removing the viewBox attribute.

        Test: svg/custom/svg-viewBox-dynamic.html

        * svg/SVGFitToViewBox.cpp:
        (WebCore::SVGFitToViewBox::parseViewBox):
        (WebCore::SVGFitToViewBox::parseMappedAttribute):
        * svg/SVGFitToViewBox.h:
        * svg/SVGViewSpec.cpp:
        (WebCore::SVGViewSpec::setViewBoxString):
        (WebCore::SVGViewSpec::parseViewSpec):

2010-06-01  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        AX: WebKit doesn't call [super -accessibilityAttributeValue:attribute forParameter:] when it encounters a parameterized attribute that it doesn't handle.
        https://bugs.webkit.org/show_bug.cgi?id=39324
 
        There are some parameters that super handles that are not explicitly returned by the list of the element's attributes.
        In those cases, super should handle.

        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):

2010-05-28  David Hyatt  <hyatt@apple.com>

        Reviewed by Beth Dakin.

        https://bugs.webkit.org/show_bug.cgi?id=15550, complete implementation of column-span.  Add support for nested column
        spans.  When a column span is nested inside multiple enclosing blocks, the blocks have to be split around the column-span.
        We do this using block element continuations, the same kind of solution we employed for blocks inside inlines.
        
        The code for block continuations is very similar to the code for inline continuations.  It may be possible to refactor the
        code into RenderBoxModelObject so that more of it can be shared, but this first pass avoids that so as not to risk
        causing any regressions in core rendering.

        Note also that - just as with inline continuations - you can't unsplit block continuations yet.  There is no technical limitation
        here... the functions just need to be written to handle it.
        
        Added new tests in fast/multicol/span.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::styleDidChange):
        (WebCore::RenderBlock::continuationBefore):
        (WebCore::RenderBlock::addChildToContinuation):
        (WebCore::RenderBlock::containingColumnsBlock):
        (WebCore::RenderBlock::clone):
        (WebCore::RenderBlock::splitBlocks):
        (WebCore::RenderBlock::splitFlow):
        (WebCore::RenderBlock::splitAnonymousBlocksAroundChild):
        (WebCore::RenderBlock::makeChildrenAnonymousColumnBlocks):
        (WebCore::RenderBlock::columnsBlockForSpanningElement):
        (WebCore::RenderBlock::addChildIgnoringAnonymousColumnBlocks):
        (WebCore::RenderBlock::addChild):
        (WebCore::RenderBlock::addChildIgnoringContinuation):
        (WebCore::RenderBlock::blockElementContinuation):
        (WebCore::RenderBlock::layoutColumns):
        * rendering/RenderBlock.h:

2010-06-01  Alexey Proskuryakov  <ap@apple.com>

        Build fix.

        Hopefully, touching WebCore.base.exp will actually rebuild the export file.

        * WebCore.Geolocation.exp:
        * WebCore.base.exp:

2010-06-01  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Adam Barth.

        Execute void callbacks in the context they were created in.
        https://bugs.webkit.org/show_bug.cgi?id=39145

        * bindings/v8/custom/V8CustomVoidCallback.cpp:
        (WebCore::V8CustomVoidCallback::V8CustomVoidCallback):
        (WebCore::V8CustomVoidCallback::handleEvent):
        * bindings/v8/custom/V8CustomVoidCallback.h:

2010-06-01  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=39434
        REGRESSION (r59811): Geolocation callbacks cannot be created

        * DerivedSources.make: Don't append both WebCore.Geolocation.exp and WebCore.ClientBasedGeolocation.exp,
        they are mutually exclusive.

        * WebCore.Geolocation.exp: Touched to force .exp file rebuild.

        * WebCore.xcodeproj/project.pbxproj: Removed GeolocationService related files.

        * bindings/js/JSGeolocationCustom.cpp:
        (WebCore::createPositionCallback): Functions defined in JavaScript code no longer inherit
        from InternalFunction, they inherit from JSFunction. This check is still imperfect, because
        it's not clear what definition of "function" should really be used, if any - other bindings
        code never checks callback type.
        (WebCore::createPositionErrorCallback): Ditto.

        * page/Geolocation.h: Don't include GeolocationService.h unless it's going to be used.

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

        Reviewed by Darin Fisher.

        IndexedDB cleanup
        https://bugs.webkit.org/show_bug.cgi?id=40007

        Remove the exception code parameter since this function can no longer
        cause an exception.

        * storage/IDBObjectStoreRequest.idl:
        * storage/IndexedDatabase.h:
        * storage/IndexedDatabaseImpl.cpp:
        (WebCore::IndexedDatabaseImpl::open):
        * storage/IndexedDatabaseImpl.h:
        * storage/IndexedDatabaseRequest.cpp:
        (WebCore::IndexedDatabaseRequest::open):
        * storage/IndexedDatabaseRequest.h:
        * storage/IndexedDatabaseRequest.idl:

2010-06-01  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Xan Lopez.

        [GTK] Double clicks cause three button press events
        https://bugs.webkit.org/show_bug.cgi?id=38853

        Add GOwnPtr wrapper for GdkEvent and expose a setter for
        PlatformMouseEvent::m_clickCount.

        * GNUmakefile.am: Add GOwnPtrGtk.{cpp,h} to the sources list.
        * platform/PlatformMouseEvent.h: 
        (WebCore::PlatformMouseEvent::setClickCount): Added.
        * platform/gtk/GOwnPtrGtk.cpp: Added.
        (WTF::GdkEvent):
        * platform/gtk/GOwnPtrGtk.h: Added.

2010-06-01  Adam Langley  <agl@chromium.org>

        Reviewed by Eric Seidel.

        [chromium] respect the user's embedded bitmap settings on Linux.

        We plumbed everything through Skia and Chrome, but forgot to connect
        the two wires inside WebCore.

        (Note: no layout test because test_shell forces this option off. Also,
         the test font which triggers this behaviour is 32MB.)

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

        * platform/graphics/chromium/FontPlatformDataLinux.cpp:
        (WebCore::FontPlatformData::setupPaint):

2010-06-01  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Fix installation of the QtWebKit module .pri file when building inside of Qt

        * WebCore.pro:

2010-06-01  Jocelyn Turcotte  <jocelyn.turcotte@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Fix a QtWebKit.pc corruption problem.
        https://bugs.webkit.org/show_bug.cgi?id=36826

        The problem occurs while installing QtWebKit from trunk
        or a source package.

        * WebCore.pro:

2010-06-01  Simon Hausmann  <simon.hausmann@nokia.com>

        Reviewed by Laszlo Gombos.

        [Qt] Fix Symbian package dependencies of apps against QtWebKit when installing into Qt

        Install the versioning qt_webkit_version.pri into $$[QMAKE_MKSPECS]/modules, which is
        where mkspecs/features/qt.prf expects it.

        * WebCore.pro:

2010-06-01  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r60470.
        http://trac.webkit.org/changeset/60470
        https://bugs.webkit.org/show_bug.cgi?id=39990

        Need to rollout until bot can be updated (Requested by jorlow
        on #webkit).

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::namedItemAdded):
        (WebCore::ScriptController::namedItemRemoved):
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::V8DOMWindowShell::updateDocumentWrapperCache):
        * bindings/v8/V8DOMWindowShell.h:
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::instantiateV8Object):
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        (WebCore::V8HTMLDocument::namedPropertyDeleter):
        (WebCore::V8HTMLDocument::namedPropertyGetter):
        (WebCore::V8HTMLDocument::indexedPropertyGetter):
        (WebCore::V8HTMLDocument::allAccessorSetter):
        (WebCore::toV8):

2010-06-01  Anton Muhin  <antonm@chromium.org>

        Reviewed by Nate Chapin.

        [Chromium] get rid of named interceptor on HTMLDocument and introduce/remove accessors when named items get deleted/removed
        https://bugs.webkit.org/show_bug.cgi?id=39877

        This patch makes callbacks invoked on named items addition/removal
        install API accessors and thus there is no more need in
        named and indexed interceptors on HTMLDocument which
        speeds up invocation of methods on document.

        * bindings/scripts/CodeGeneratorV8.pm:
        * bindings/v8/ScriptController.cpp:
        (WebCore::ScriptController::namedItemAdded):
        (WebCore::ScriptController::namedItemRemoved):
        * bindings/v8/V8DOMWindowShell.cpp:
        (WebCore::checkDocumentWrapper):
        (WebCore::V8DOMWindowShell::updateDocumentWrapperCache):
        (WebCore::getter):
        (WebCore::V8DOMWindowShell::namedItemAdded):
        (WebCore::V8DOMWindowShell::namedItemRemoved):
        * bindings/v8/V8DOMWindowShell.h:
        * bindings/v8/V8DOMWrapper.cpp:
        (WebCore::V8DOMWrapper::instantiateV8Object):
        * bindings/v8/custom/V8HTMLDocumentCustom.cpp:
        (WebCore::V8HTMLDocument::WrapInShadowObject):
        (WebCore::V8HTMLDocument::GetNamedProperty):
        (WebCore::V8HTMLDocument::allAccessorSetter):
        (WebCore::toV8):

2010-06-01  Zoltan Herczeg  <zherczeg@webkit.org>

        Reviewed by Dirk Schulze.

        Make the spot light anti-alias effect look similar to SVG expected values.
        https://bugs.webkit.org/show_bug.cgi?id=39477

        The W3 standard only mention, that the edge of the spotlight should be
        anti-aliased but it does not specify how. The provided expected values
        gives some hint about their intentions. The algorithm uses a fixed
        range, which computed as follows: let a = cos(spot light cutoff range)
        the light fades off in the [a-0.016, a] range.

        Test: svg/W3C-SVG-1.1/filters-light-04-f.svg
        Updated pixel test: svg/W3C-SVG-1.1/filters-light-01-f.svg

        * svg/graphics/filters/SVGLightSource.cpp:
        (WebCore::SpotLightSource::initPaintingData):

2010-05-31  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Fix default action for EndTagOpenState
        https://bugs.webkit.org/show_bug.cgi?id=39982

        Add a test for a bogus end tag to webkit01.dat and update expected
        results now that we pass some more tests.

        Adding this test revealed a bug in resuming the bogus comment state.
        I've left these broken expectations, but I'll fix the bug in a future
        patch. (The bug existed prior to this patch, just not the test.)

        * html5lib/resources/webkit01.dat:
        * html5lib/runner-expected-html5.txt:
        * html5lib/webkit-resumer-expected-html5.txt:

2010-05-31  Lyon Chen  <liachen@rim.com>

        Reviewed by Kent Tamura.

        Enum value FORWARD, BACKWARD, RIGHT, LEFT are causing macro conflicts.
        https://bugs.webkit.org/show_bug.cgi?id=35530

        Change enum EAlteration from { MOVE, EXTEND } to { AlterationMove, AlterationExtend } and enum EDirection { FORWARD, BACKWARD, RIGHT, LEFT} to { DirectionForward, DirectionBackward, DirectionRight, DirectionLeft } to avoid macro conflict, and also better coding style conformance.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::AccessibilityRenderObject::visiblePositionRangeForLine):
        (WebCore::AccessibilityRenderObject::doAXRangeForLine):
        * editing/Editor.cpp:
        (WebCore::Editor::deleteWithDirection):
        (WebCore::Editor::markMisspellingsAfterTypingToPosition):
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges):
        * editing/EditorCommand.cpp:
        (WebCore::executeDeleteBackward):
        (WebCore::executeDeleteBackwardByDecomposingPreviousCharacter):
        (WebCore::executeDeleteForward):
        (WebCore::executeDeleteToBeginningOfLine):
        (WebCore::executeDeleteToBeginningOfParagraph):
        (WebCore::executeDeleteToEndOfLine):
        (WebCore::executeDeleteToEndOfParagraph):
        (WebCore::executeDeleteWordBackward):
        (WebCore::executeDeleteWordForward):
        (WebCore::executeForwardDelete):
        (WebCore::executeMoveBackward):
        (WebCore::executeMoveBackwardAndModifySelection):
        (WebCore::executeMoveDown):
        (WebCore::executeMoveDownAndModifySelection):
        (WebCore::executeMoveForward):
        (WebCore::executeMoveForwardAndModifySelection):
        (WebCore::executeMoveLeft):
        (WebCore::executeMoveLeftAndModifySelection):
        (WebCore::executeMovePageDown):
        (WebCore::executeMovePageDownAndModifySelection):
        (WebCore::executeMovePageUp):
        (WebCore::executeMovePageUpAndModifySelection):
        (WebCore::executeMoveRight):
        (WebCore::executeMoveRightAndModifySelection):
        (WebCore::executeMoveToBeginningOfDocument):
        (WebCore::executeMoveToBeginningOfDocumentAndModifySelection):
        (WebCore::executeMoveToBeginningOfLine):
        (WebCore::executeMoveToBeginningOfLineAndModifySelection):
        (WebCore::executeMoveToBeginningOfParagraph):
        (WebCore::executeMoveToBeginningOfParagraphAndModifySelection):
        (WebCore::executeMoveToBeginningOfSentence):
        (WebCore::executeMoveToBeginningOfSentenceAndModifySelection):
        (WebCore::executeMoveToEndOfDocument):
        (WebCore::executeMoveToEndOfDocumentAndModifySelection):
        (WebCore::executeMoveToEndOfSentence):
        (WebCore::executeMoveToEndOfSentenceAndModifySelection):
        (WebCore::executeMoveToEndOfLine):
        (WebCore::executeMoveToEndOfLineAndModifySelection):
        (WebCore::executeMoveToEndOfParagraph):
        (WebCore::executeMoveToEndOfParagraphAndModifySelection):
        (WebCore::executeMoveParagraphBackwardAndModifySelection):
        (WebCore::executeMoveParagraphForwardAndModifySelection):
        (WebCore::executeMoveUp):
        (WebCore::executeMoveUpAndModifySelection):
        (WebCore::executeMoveWordBackward):
        (WebCore::executeMoveWordBackwardAndModifySelection):
        (WebCore::executeMoveWordForward):
        (WebCore::executeMoveWordForwardAndModifySelection):
        (WebCore::executeMoveWordLeft):
        (WebCore::executeMoveWordLeftAndModifySelection):
        (WebCore::executeMoveWordRight):
        (WebCore::executeMoveWordRightAndModifySelection):
        (WebCore::executeMoveToLeftEndOfLine):
        (WebCore::executeMoveToLeftEndOfLineAndModifySelection):
        (WebCore::executeMoveToRightEndOfLine):
        (WebCore::executeMoveToRightEndOfLineAndModifySelection):
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::willBeModified):
        (WebCore::SelectionController::modify):
        * editing/SelectionController.h:
        (WebCore::SelectionController::):
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::deleteKeyPressed):
        (WebCore::TypingCommand::forwardDeleteKeyPressed):
        * page/DOMSelection.cpp:
        (WebCore::DOMSelection::modify):
        (WebCore::DOMSelection::deleteFromDocument):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleKeyboardSelectionMovement):

2010-05-31  Eric Seidel <eric@webkit.org>

        Reviewed by Adam Barth.

        REGRESSION(60409): window.onload never fires when using HTML5 parser
        https://bugs.webkit.org/show_bug.cgi?id=39981

        * html/HTML5Tokenizer.cpp:
        (WebCore::HTML5Tokenizer::finish):
         - The logic was just wrong here.  We should only be setting
           m_wasWaitingOnScriptsDuringFinish if isWaitingForScripts()
           is true, and we should be calling end() when it is not.
        (WebCore::HTML5Tokenizer::resumeParsingAfterScriptExecution):
         - Add another ASSERT to catch cases like this.
        * html/HTML5TreeBuilder.cpp:
        (WebCore::HTML5TreeBuilder::finished):
         - Add a comment about why we don't need to call m_document->finishedParsing()

2010-05-31  Tony Chang  <tony@chromium.org>

        Reviewed by Dan Bernstein.

        REGRESSION (r58665): Infinite recursion in Position::getInlineBoxAndOffset()
        https://bugs.webkit.org/show_bug.cgi?id=39946
        
        r58665 added an infinite recursion check, but didn't take into consideration recursion between two
        Positions.  This adds a check for when
        downstreamIgnoringEditingBoundaries(p1) == p2 and upstreamIgnoringEditingBoundaries(p2) == p1

        Test: editing/selection/mixed-editability-12.html

        * dom/Position.cpp:
        (WebCore::Position::getInlineBoxAndOffset):

2010-05-31  Leo Yang  <leo.yang@torchmobile.com.cn>

        Reviewed by George Staikos.

        Fix canvas.toDataURL(type, quality, ...) to let it support quality parameter. 
        And implement it in Qt port. 
        https://bugs.webkit.org/show_bug.cgi?id=37304

        Tests: platform/qt/fast/canvas/toDataURL-jpeg-alpha.html
               platform/qt/fast/canvas/toDataURL-jpeg-primarycolors.html
               platform/qt/fast/canvas/toDataURL-jpeg-quality-basic.html
               platform/qt/fast/canvas/toDataURL-jpeg-quality-notnumber.html
               platform/qt/fast/canvas/toDataURL-jpeg-quality-outsiderange.html

        * bindings/js/JSHTMLCanvasElementCustom.cpp:
        (WebCore::JSHTMLCanvasElement::toDataURL):
        * bindings/v8/custom/V8HTMLCanvasElementCustom.cpp:
        (WebCore::V8HTMLCanvasElement::toDataURLCallback):
        * dom/CanvasSurface.cpp:
        (WebCore::CanvasSurface::toDataURL):
        * dom/CanvasSurface.h:
        (WebCore::CanvasSurface::toDataURL):
        * html/HTMLCanvasElement.idl:
        * platform/graphics/ImageBuffer.h:
        * platform/graphics/cairo/ImageBufferCairo.cpp:
        (WebCore::ImageBuffer::toDataURL):
        * platform/graphics/cg/ImageBufferCG.cpp:
        (WebCore::ImageBuffer::toDataURL):
        * platform/graphics/haiku/ImageBufferHaiku.cpp:
        (WebCore::ImageBuffer::toDataURL):
        * platform/graphics/qt/ImageBufferQt.cpp:
        (WebCore::ImageBuffer::toDataURL):
        * platform/graphics/skia/ImageBufferSkia.cpp:
        (WebCore::ImageBuffer::toDataURL):
        * platform/graphics/wince/ImageBufferWince.cpp:
        (WebCore::ImageBuffer::toDataURL):
        * platform/graphics/wx/ImageBufferWx.cpp:
        (WebCore::ImageBuffer::toDataURL):

2010-05-31  Lucas De Marchi  <lucas.demarchi@profusion.mobi>

        Reviewed by Kenneth Rohde Christiansen.

        [EFL] Add Context Menu implementation
        https://bugs.webkit.org/show_bug.cgi?id=39821

        * platform/ContextMenu.h: add port-specific attributes.
        * platform/ContextMenuItem.h: create PlatformMenuItemDescription as in
        other ports
        (WebCore::PlatformMenuItemDescription::PlatformMenuItemDescription):
        * platform/efl/ContextMenuEfl.cpp:implement needed methods for this
        port.
        (WebCore::ContextMenu::ContextMenu):
        (WebCore::ContextMenu::~ContextMenu):
        (WebCore::ContextMenu::appendItem):
        (WebCore::ContextMenu::setPlatformDescription):
        (WebCore::ContextMenu::releasePlatformDescription):
        * platform/efl/ContextMenuItemEfl.cpp:  implement needed methods for
        this port.
        (WebCore::ContextMenuItem::ContextMenuItem):
        (WebCore::ContextMenuItem::~ContextMenuItem):
        (WebCore::ContextMenuItem::releasePlatformDescription):
        (WebCore::ContextMenuItem::type):
        (WebCore::ContextMenuItem::setType):
        (WebCore::ContextMenuItem::action):
        (WebCore::ContextMenuItem::setAction):
        (WebCore::ContextMenuItem::title):
        (WebCore::ContextMenuItem::setTitle):
        (WebCore::ContextMenuItem::platformSubMenu):
        (WebCore::ContextMenuItem::setSubMenu):
        (WebCore::ContextMenuItem::checked):
        (WebCore::ContextMenuItem::setChecked):
        (WebCore::ContextMenuItem::enabled):
        (WebCore::ContextMenuItem::setEnabled):

2010-05-31  Ilya Tikhonovsky  <loislo@chromium.org>

        Reviewed by Pavel Feldman.

        WebInspector: Classes for native serialization to JSON were implemented.
        https://bugs.webkit.org/show_bug.cgi?id=34204

        * GNUmakefile.am:
        * WebCore.Inspector.exp:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * inspector/InspectorValues.cpp: Added.
        (WebCore::escapeChar):
        (WebCore::doubleQuoteString):
        (WebCore::InspectorBaseValue::toJSONString):
        (WebCore::InspectorBaseValue::writeJSON):
        (WebCore::InspectorValue::writeJSON):
        (WebCore::InspectorString::writeJSON):
        (WebCore::InspectorObject::writeJSON):
        (WebCore::InspectorArray::writeJSON):
        * inspector/InspectorValues.h: Added.
        (WebCore::InspectorBaseValue::InspectorBaseValue):
        (WebCore::InspectorBaseValue::~InspectorBaseValue):
        (WebCore::InspectorBaseValue::null):
        (WebCore::InspectorBaseValue::):
        (WebCore::InspectorBaseValue::type):
        (WebCore::InspectorValue::create):
        (WebCore::InspectorValue::InspectorValue):
        (WebCore::InspectorValue::):
        (WebCore::InspectorString::create):
        (WebCore::InspectorString::InspectorString):
        (WebCore::InspectorObject::create):
        (WebCore::InspectorObject::~InspectorObject):
        (WebCore::InspectorObject::InspectorObject):
        (WebCore::InspectorArray::create):
        (WebCore::InspectorArray::~InspectorArray):
        (WebCore::InspectorArray::length):
        (WebCore::InspectorArray::InspectorArray):
        (WebCore::InspectorObject::setBool):
        (WebCore::InspectorObject::setNumber):
        (WebCore::InspectorObject::setString):
        (WebCore::InspectorObject::set):
        (WebCore::InspectorArray::pushBool):
        (WebCore::InspectorArray::pushNumber):
        (WebCore::InspectorArray::pushString):
        (WebCore::InspectorArray::push):

2010-05-31  Olivier Goffart <olivier.goffart@nokia.com>

        Reviewed by Oliver Hunt.

        [PATCH] compilation error with clang in JSDOMBinding.h
        https://bugs.webkit.org/show_bug.cgi?id=39945

        JSNode is only forward declared at this point. And since neither
        "wrapper" nor JSValue are type-dependent. Compilers should report errors
        at the first compilation pass.

        The fix is to move the conversion the line above, as the call to the
        function getCachedDOMNodeWrapper is type-dependent, the conversion will
        happen at template-instantiation time.

        See also http://llvm.org/bugs/show_bug.cgi?id=7244

        * bindings/js/JSDOMBinding.h:
        (WebCore::getDOMNodeWrapper):

2010-05-31  Pavel Podivilov  <podivilov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Moved breakpoints add/remove logic to the BreakpointManager.

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

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/Breakpoint.js:
        * inspector/front-end/BreakpointManager.js: Added.
        (WebInspector.BreakpointManager):
        (WebInspector.BreakpointManager.prototype.addBreakpoint):
        (WebInspector.BreakpointManager.prototype.removeBreakpoint):
        (WebInspector.BreakpointManager.prototype.breakpointsForSourceID):
        (WebInspector.BreakpointManager.prototype.breakpointsForURL):
        (WebInspector.BreakpointManager.prototype.reset):
        (WebInspector.BreakpointManager.prototype._saveBreakpointOnBackend):
        (WebInspector.BreakpointManager.prototype._removeBreakpointFromBackend):
        (WebInspector.Breakpoint):
        (WebInspector.Breakpoint.prototype.get enabled):
        (WebInspector.Breakpoint.prototype.set enabled):
        (WebInspector.Breakpoint.prototype.get sourceText):
        (WebInspector.Breakpoint.prototype.set sourceText):
        (WebInspector.Breakpoint.prototype.get label):
        (WebInspector.Breakpoint.prototype.get id):
        (WebInspector.Breakpoint.prototype.get condition):
        (WebInspector.Breakpoint.prototype.set condition):
        * inspector/front-end/BreakpointsSidebarPane.js:
        (WebInspector.BreakpointsSidebarPane):
        (WebInspector.BreakpointsSidebarPane.prototype.reset):
        (WebInspector.BreakpointsSidebarPane.prototype._breakpointAdded):
        (WebInspector.BreakpointsSidebarPane.prototype._breakpointRemoved):
        (WebInspector.BreakpointsSidebarPane.prototype._breakpointEnableChanged):
        * inspector/front-end/Object.js:
        (WebInspector.Object.prototype.dispatchEventToListeners):
        * inspector/front-end/ScriptView.js:
        (WebInspector.ScriptView.prototype._addBreakpoint):
        * inspector/front-end/ScriptsPanel.js:
        (WebInspector.ScriptsPanel):
        (WebInspector.ScriptsPanel.prototype._breakpointAdded):
        (WebInspector.ScriptsPanel.prototype._breakpointRemoved):
        (WebInspector.ScriptsPanel.prototype.editScriptSource.mycallback):
        (WebInspector.ScriptsPanel.prototype.editScriptSource):
        (WebInspector.ScriptsPanel.prototype._showScriptOrResource):
        * inspector/front-end/SourceFrame.js:
        (WebInspector.SourceFrame.prototype._contextMenu):
        * inspector/front-end/SourceView.js:
        (WebInspector.SourceView.prototype._addBreakpoint):
        (WebInspector.SourceView.prototype._removeBreakpoint):
        * inspector/front-end/WebKit.qrc:
        * inspector/front-end/inspector.html:
        * inspector/front-end/inspector.js:
        (WebInspector.loaded):
        (WebInspector.restoredBreakpoint):
        (WebInspector.reset):

2010-05-31  Alexander Pavlov  <apavlov@chromium.org>

        Unreviewed, build fix.

        Add references to inspector/front-end/TabbedPane.js wherever applicable.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:
        * inspector/front-end/WebKit.qrc:

2010-05-31  Alexander Pavlov  <apavlov@chromium.org>

        Unreviewed, add a file not added in r60445.

        * inspector/front-end/TabbedPane.js: Added

2010-05-31  Martin Robinson  <mrobinson@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GTK] Text copied from a WebView cannot be pasted into gnome-terminal
        https://bugs.webkit.org/show_bug.cgi?id=39827

        Switch all methods in Pasteboard to use the PasteboardHelper + DataObjectGtk
        approach used in other parts of WebKit GTK+.

        * platform/gtk/PasteboardGtk.cpp:
        (WebCore::Pasteboard::writeSelection): Switch to using PasteboardHelper.
        (WebCore::Pasteboard::writePlainText): Ditto.
        (WebCore::Pasteboard::writeURL): Ditto.
        (WebCore::Pasteboard::writeImage): Ditto.
        (WebCore::Pasteboard::clear): Small cleanup.
        (WebCore::Pasteboard::documentFragment): Switch to using PasteboardHelper.
        (WebCore::Pasteboard::plainText): Ditto.

2010-05-31  Darin Adler  <darin@apple.com>

        Updated bindings test results for change in JavaScript host calling convention change
        from 2 days ago.

        * bindings/scripts/test/JS/JSTestObj.cpp: Regenerated and inspected to see that the new
        result is correct.
        * bindings/scripts/test/JS/JSTestObj.h: Ditto.

2010-05-31  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Implement additional tabs support in ResourceView
        https://bugs.webkit.org/show_bug.cgi?id=39822

        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceView):
        (WebInspector.ResourceView.prototype._selectHeadersTab):
        (WebInspector.ResourceView.prototype._innerSelectContentTab):
        * inspector/front-end/SourceView.js:
        (WebInspector.SourceView.prototype.show):
        (WebInspector.SourceView.prototype.hide):
        (WebInspector.SourceView.prototype.resize):
        (WebInspector.SourceView.prototype.updateLocalContent):
        (WebInspector.SourceView.prototype.selectLocalContentTab):
        * inspector/front-end/TabbedPane.js: Added.
        (WebInspector.TabbedPane):
        (WebInspector.TabbedPane.prototype.appendTab):
        (WebInspector.TabbedPane.prototype.tabObjectForId):
        (WebInspector.TabbedPane.prototype.hideTab):
        (WebInspector.TabbedPane.prototype.selectTabById):
        * inspector/front-end/TextViewer.js:
        (WebInspector.TextViewer.prototype._getSelection):
        * inspector/front-end/inspector.html:

2010-05-31  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Implement retrieval of CSS stylesheets for source editing
        https://bugs.webkit.org/show_bug.cgi?id=39833

        Test: inspector/styles-source-offsets.html

        * css/CSSParser.cpp:
        (WebCore::CSSParser::CSSParser):
        (WebCore::CSSParser::parseSheet):
        (WebCore::CSSParser::createStyleRule):
        * css/CSSParser.h:
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::getStyleSheet):
        (WebCore::InspectorBackend::getRuleRangesForStyleSheetId):
        * inspector/InspectorBackend.h:
        * inspector/InspectorBackend.idl:
        * inspector/InspectorCSSStore.cpp:
        (WebCore::InspectorCSSStore::getRuleRangesForStyleSheet):
        (WebCore::InspectorCSSStore::asCSSStyleRule):
        (WebCore::InspectorCSSStore::styleSheetForId):
        * inspector/InspectorCSSStore.h:
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::getStyleSheet):
        (WebCore::InspectorDOMAgent::getRuleRangesForStyleSheetId):
        (WebCore::InspectorDOMAgent::buildObjectForStyle):
        (WebCore::InspectorDOMAgent::populateObjectWithStyleProperties):
        (WebCore::InspectorDOMAgent::buildObjectForStyleSheet):
        (WebCore::InspectorDOMAgent::buildObjectForRule):
        (WebCore::InspectorDOMAgent::getParentStyleSheet):
        * inspector/InspectorDOMAgent.h:
        * inspector/InspectorFrontend.cpp:
        (WebCore::InspectorFrontend::didGetStyleSheet):
        * inspector/InspectorFrontend.h:
        * inspector/front-end/DOMAgent.js:
        (WebInspector.CSSStyleDeclaration):

2010-05-31  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Xan Lopez.

        [GStreamer] float variables misused
        https://bugs.webkit.org/show_bug.cgi?id=38842

        Use 0.0f for float variables instead of 0.0. Also added some
        missing casts around GST_SECOND.

        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
        (WebCore::playbackPosition):
        (WebCore::MediaPlayerPrivateGStreamer::duration):
        (WebCore::MediaPlayerPrivateGStreamer::currentTime):
        (WebCore::MediaPlayerPrivateGStreamer::seek):
        (WebCore::MediaPlayerPrivateGStreamer::naturalSize):
        (WebCore::MediaPlayerPrivateGStreamer::setRate):
        (WebCore::MediaPlayerPrivateGStreamer::maxTimeSeekable):
        (WebCore::MediaPlayerPrivateGStreamer::maxTimeLoaded):
        (WebCore::MediaPlayerPrivateGStreamer::totalBytes):

2010-05-31  Steve Block  <steveblock@google.com>

        Unreviewed, rolling out r60069.
        http://trac.webkit.org/changeset/60069
        https://bugs.webkit.org/show_bug.cgi?id=39288

        Roll out r60069 while the need for Geolocation::stop() is
        investigated.

        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::stopLoading):
        * page/Geolocation.cpp:
        (WebCore::Geolocation::disconnectFrame):
        * page/Geolocation.h:

2010-05-31  Olivier Tilloy  <olivier@tilloy.net>

        Reviewed by Gustavo Noronha Silva.

        [Gtk] Implement RenderThemeGtk::systemColor to apply the correct colors
        from the current GTK theme.
        https://bugs.webkit.org/show_bug.cgi?id=37779

        * platform/gtk/RenderThemeGtk.cpp:
        (WebCore::RenderThemeGtk::RenderThemeGtk):
        (WebCore::RenderThemeGtk::systemColor):
        (WebCore::RenderThemeGtk::gtkButton):
        * platform/gtk/RenderThemeGtk.h:

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

        Reviewed by Nikolas Zimmermann.

        SVG Filter: Crash if parent and child elements use the same filter
        https://bugs.webkit.org/show_bug.cgi?id=39536

        If a parent and a child used the same filter, the temporary saved
        context reference got overwritten by the child. The reference is
        stored in FilterData now. FilterData depends to the target object
        and avoids overwriting any reference.

        Test: svg/filters/parent-children-with-same-filter.svg

        * rendering/RenderSVGResourceFilter.cpp:
        (WebCore::RenderSVGResourceFilter::RenderSVGResourceFilter):
        (WebCore::RenderSVGResourceFilter::applyResource):
        (WebCore::RenderSVGResourceFilter::postApplyResource):
        * rendering/RenderSVGResourceFilter.h:

2010-05-31  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        Fix all compiler warnings.

        * plugins/gtk/gtk2xtbin.c:
        (xt_event_dispatch):
        (gtk_xtbin_get_type):
        (gtk_xtbin_set_position):
        (xt_add_focus_listener):
        (xt_remove_focus_listener):

2010-05-31  Oswald Buddenhagen  <oswald.buddenhagen@nokia.com>

        Reviewed by Simon Hausmann.

        [Qt] Escape backslashes in the .pro files

        qmake in Qt 4.7 warns about unescaped backspaces and deprecates them.

        * WebCore.pro:

2010-05-31  Anton Muhin  <antonm@chromium.org>

        Reviewed by Darin Adler.

        Make NodeList getters take AtomicString instead of plain String
        https://bugs.webkit.org/show_bug.cgi?id=39892

        Those methods turn String into AtomicString later.  And this conversion
        is faster if underlying string is already atomic.
        That buys small (~2-3%) speed up for Chromium on Dromaeo DOM Core.
        I don't know if Safari benefits from it.

        * dom/Node.cpp:
        (WebCore::Node::getElementsByTagName):
        (WebCore::Node::getElementsByTagNameNS):
        * dom/Node.h:

2010-05-30  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Fix LayoutTests/fast/parser/xml-declaration-missing-ending-mark.html in HTML5 parser
        https://bugs.webkit.org/show_bug.cgi?id=39939

        Turns out we need to implement the bogus comment state.  :)

        * html/HTML5Lexer.cpp:
        (WebCore::HTML5Lexer::nextToken):

2010-05-30  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        fast/tokenizer/write-partial-entity.html hits ASSERT SegmentedString in the HTML5 Parser
        https://bugs.webkit.org/show_bug.cgi?id=39935

        Test: fast/tokenizer/write-partial-entity.html

        * html/HTML5Tokenizer.cpp:
        (WebCore::HTML5Tokenizer::executeScript):
         - Use m_source.append(oldInsertionPoint) instead of
           oldInsertionPoint.prepend(m_source) because m_source may have had
           characters pushed onto it and prepend() does not handle that case.

2010-05-30  Lyon Chen  <liachen@rim.com>

        Reviewed by Kent Tamura.

        This is a coding style cleanup before fixing to bug 35530.

        Enum value FORWARD, BACKWARD, RIGHT, LEFT are causing macro conflicts.
        https://bugs.webkit.org/show_bug.cgi?id=35530

        * editing/Editor.cpp:
        (WebCore::Editor::deleteWithDirection):
        (WebCore::Editor::fontForSelection):
        (WebCore::Editor::applyStyle):
        (WebCore::Editor::applyParagraphStyle):
        (WebCore::Editor::applyStyleToSelection):
        (WebCore::Editor::applyParagraphStyleToSelection):
        (WebCore::triStateOfStyleInComputedStyle):
        (WebCore::Editor::selectionStartHasStyle):
        (WebCore::Editor::selectionHasStyle):
        (WebCore::Editor::paste):
        (WebCore::Editor::ignoreSpelling):
        (WebCore::Editor::learnSpelling):
        (WebCore::findFirstMisspellingInRange):
        (WebCore::findFirstGrammarDetailInRange):
        (WebCore::findFirstBadGrammarInRange):
        (WebCore::findFirstMisspellingOrBadGrammarInRange):
        (WebCore::Editor::advanceToNextMisspelling):
        (WebCore::Editor::isSelectionMisspelled):
        (WebCore::isRangeUngrammatical):
        (WebCore::Editor::guessesForMisspelledSelection):
        (WebCore::guessesForMisspelledOrUngrammaticalRange):
        (WebCore::Editor::markMisspellingsAfterTypingToPosition):
        (WebCore::Editor::markAllMisspellingsAndBadGrammarInRanges):
        * editing/EditorCommand.cpp:
        (WebCore::applyCommandToFrame):
        (WebCore::executeToggleStyleInList):
        (WebCore::executeApplyParagraphStyle):
        (WebCore::executeDelete):
        (WebCore::executeForwardDelete):
        (WebCore::executeInsertLineBreak):
        (WebCore::supportedCopyCut):
        (WebCore::supportedPaste):
        (WebCore::enabledDelete):
        * editing/SelectionController.cpp:
        (WebCore::SelectionController::modifyExtendingRight):
        (WebCore::SelectionController::modifyExtendingForward):
        (WebCore::SelectionController::modifyMovingRight):
        (WebCore::SelectionController::modifyMovingForward):
        (WebCore::SelectionController::modifyExtendingLeft):
        (WebCore::SelectionController::modifyExtendingBackward):
        (WebCore::SelectionController::modifyMovingLeft):
        (WebCore::SelectionController::modifyMovingBackward):
        (WebCore::SelectionController::modify):
        (WebCore::SelectionController::xPosForVerticalArrowNavigation):
        (WebCore::SelectionController::debugRenderer):
        * editing/TypingCommand.cpp:
        (WebCore::TypingCommand::deleteKeyPressed):
        (WebCore::TypingCommand::forwardDeleteKeyPressed):
        (WebCore::TypingCommand::insertLineBreak):
        (WebCore::TypingCommand::insertParagraphSeparatorInQuotedContent):
        (WebCore::TypingCommand::insertParagraphSeparator):
        (WebCore::TypingCommand::doApply):
        (WebCore::TypingCommand::insertText):
        (WebCore::TypingCommand::updatePreservesTypingStyle):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleMousePressEvent):
        (WebCore::EventHandler::handleMouseReleaseEvent):
        (WebCore::EventHandler::selectCursor):
        (WebCore::EventHandler::canHandleDragAndDropForTarget):
        (WebCore::EventHandler::dispatchMouseEvent):
        (WebCore::EventHandler::sendContextMenuEvent):
        (WebCore::EventHandler::handleKeyboardSelectionMovement):
        (WebCore::EventHandler::handleDrag):

2010-05-30  Daniel Bates  <dbates@rim.com>

        Unreviewed, attempt to fix the build after http://trac.webkit.org/changeset/60418.

        * html/HTMLFormControlElement.h:
        (WebCore::HTMLFormControlElement::isEnabledFormControl):
        (WebCore::HTMLFormControlElement::isReadOnlyFormControl):
        (WebCore::HTMLFormControlElement::isFormControlElement):
        * html/HTMLInputElement.h:
        (WebCore::HTMLInputElement::isPasswordField):

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

        Reviewed by Sam Weinig.

        Make more HTML DOM members private, especially constructors, third and final batch
        https://bugs.webkit.org/show_bug.cgi?id=39916

        * dom/Document.cpp:
        (WebCore::Document::implicitClose):
        * editing/DeleteButtonController.cpp:
        (WebCore::DeleteButtonController::createDeletionUI):
        * editing/EditorCommand.cpp:
        (WebCore::executeInsertHorizontalRule):
        (WebCore::executeInsertImage):
        * editing/htmlediting.cpp:
        (WebCore::createDefaultParagraphElement):
        (WebCore::createListItemElement):
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::handleError):
        (WebCore::HTMLParser::headCreateErrorCheck):
        (WebCore::HTMLParser::formCreateErrorCheck):
        (WebCore::HTMLParser::createHead):
        (WebCore::HTMLParser::handleIsindex):
        (WebCore::HTMLParser::finished):
        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::createContainingTable):
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::createSubtreeIfNeeded):
        * rendering/RenderTextControlSingleLine.cpp:
        (WebCore::RenderTextControlSingleLine::createSubtreeIfNeeded):
        Use create instead of new to create HTML elements.

        * html/HTMLFormCollection.cpp:
        (WebCore::HTMLFormCollection::formCollectionInfo):
        (WebCore::HTMLFormCollection::item):
        (WebCore::HTMLFormCollection::getNamedFormItem):
        (WebCore::HTMLFormCollection::updateNameCache):
        * html/HTMLFormControlElement.h:
        Updated for name and privacy changes in HTMLFormElement.

        * html/HTMLFormElement.cpp:
        (WebCore::HTMLFormElement::HTMLFormElement):
        (WebCore::HTMLFormElement::create):
        (WebCore::HTMLFormElement::~HTMLFormElement):
        (WebCore::HTMLFormElement::length):
        (WebCore::HTMLFormElement::submitImplicitly):
        (WebCore::HTMLFormElement::createFormData):
        (WebCore::HTMLFormElement::submit):
        (WebCore::HTMLFormElement::reset):
        (WebCore::HTMLFormElement::formElementIndex):
        (WebCore::HTMLFormElement::registerFormElement):
        (WebCore::HTMLFormElement::removeFormElement):
        (WebCore::HTMLFormElement::registerImgElement):
        (WebCore::HTMLFormElement::removeImgElement):
        (WebCore::HTMLFormElement::defaultButton):
        (WebCore::HTMLFormElement::collectUnhandledInvalidControls):
        (WebCore::HTMLFormElement::addElementAlias):
        (WebCore::HTMLFormElement::documentDidBecomeActive):
        * html/HTMLFormElement.h:
        Added create functions. Made constructors and other members private.
        Used an OwnPtr for m_elementAliases. Renamed collectionInfo to
        m_collectionCache and used an OwnPtr for it. Renamed formElements to
        m_associatedElements (since its contents are what HTML5 calls
        "form-associated element", not form elements). Renamed imgElements to
        m_imageElements.

        * html/HTMLFrameSetElement.cpp:
        (WebCore::HTMLFrameSetElement::HTMLFrameSetElement):
        (WebCore::HTMLFrameSetElement::create):
        (WebCore::HTMLFrameSetElement::parseMappedAttribute):
        * html/HTMLFrameSetElement.h:
        Added create functions. Made constructors and other members private.
        Renamed m_rows and m_cols to m_rowLengths and m_colLengths and used
        OwnArrayPtr for both.

        * html/HTMLLabelElement.cpp:
        (WebCore::nodeAsLabelableFormControl): Made this cast to Element instead
        of HTMLElement, since isFormControlElement is available on Element.
        (WebCore::HTMLLabelElement::HTMLLabelElement):
        (WebCore::HTMLLabelElement::create):
        * html/HTMLLabelElement.h:
        Added create functions. Made constructors and other members private.

        * html/HTMLLegendElement.cpp:
        (WebCore::HTMLLegendElement::HTMLLegendElement):
        (WebCore::HTMLLegendElement::create):
        (WebCore::HTMLLegendElement::associatedControl):
        (WebCore::HTMLLegendElement::focus):
        (WebCore::HTMLLegendElement::accessKeyAction):
        * html/HTMLLegendElement.h:
        Added create functions. Made constructors and other members private.
        Renamed formElement to associatedControl since hte control associated
        with this legend is not a "form element".

        * editing/DeleteButton.cpp:
        (WebCore::DeleteButton::DeleteButton):
        (WebCore::DeleteButton::create):
        * editing/DeleteButton.h:
        * html/HTMLDivElement.cpp:
        (WebCore::HTMLDivElement::HTMLDivElement):
        (WebCore::HTMLDivElement::create):
        * html/HTMLDivElement.h:
        * html/HTMLFontElement.cpp:
        (WebCore::HTMLFontElement::create):
        * html/HTMLFontElement.h:
        * html/HTMLHRElement.cpp:
        (WebCore::HTMLHRElement::HTMLHRElement):
        (WebCore::HTMLHRElement::create):
        * html/HTMLHRElement.h:
        * html/HTMLHeadElement.cpp:
        (WebCore::HTMLHeadElement::HTMLHeadElement):
        (WebCore::HTMLHeadElement::create):
        * html/HTMLHeadElement.h:
        * html/HTMLHeadingElement.cpp:
        (WebCore::HTMLHeadingElement::HTMLHeadingElement):
        (WebCore::HTMLHeadingElement::create):
        * html/HTMLHeadingElement.h:
        * html/HTMLHtmlElement.cpp:
        (WebCore::HTMLHtmlElement::HTMLHtmlElement):
        (WebCore::HTMLHtmlElement::create):
        * html/HTMLHtmlElement.h:
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::HTMLImageElement):
        (WebCore::HTMLImageElement::create):
        * html/HTMLImageElement.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::HTMLInputElement):
        (WebCore::HTMLInputElement::create):
        (WebCore::HTMLInputElement::createTemporaryFormForIsIndex):
        * html/HTMLInputElement.h:
        * html/HTMLIsIndexElement.cpp:
        (WebCore::HTMLIsIndexElement::HTMLIsIndexElement):
        (WebCore::HTMLIsIndexElement::create):
        * html/HTMLIsIndexElement.h:
        * html/HTMLLIElement.cpp:
        (WebCore::HTMLLIElement::HTMLLIElement):
        (WebCore::HTMLLIElement::create):
        * html/HTMLLIElement.h:
        * html/HTMLLinkElement.cpp:
        (WebCore::HTMLLinkElement::HTMLLinkElement):
        (WebCore::HTMLLinkElement::create):
        * html/HTMLLinkElement.h:
        Added create functions. Made constructors and other members private.

        * html/HTMLTagNames.in: Removed the createWithNew flag from all the
        tags that were still using it: div, font, form, frameset, h1, h2, h3,
        h4, h5, h6, head, hr, html, image, img, input, ins, isindex, label,
        legend, li, and link.

        * html/HTMLTextAreaElement.h: Removed unneeded definition of the readOnly
        function, since the one in HTMLFormElement does the same thing.

        * loader/ImageDocument.cpp:
        (WebCore::ImageDocumentElement::ImageDocumentElement):
        (WebCore::ImageDocumentElement::create):
        (WebCore::ImageDocument::createDocumentStructure):
        Added create functions. Made constructors and other members private.

        * page/DragController.cpp:
        (WebCore::DragController::concludeEditDrag): Use the non-virtual disabled
        function instead of the virtual isEnabledFormControl function, which just
        turns around and calls the disabled function.

        * rendering/MediaControlElements.cpp:
        (WebCore::MediaControlShadowRootElement::MediaControlShadowRootElement):
        (WebCore::MediaControlShadowRootElement::create):
        (WebCore::MediaControlElement::MediaControlElement):
        (WebCore::MediaControlElement::create):
        (WebCore::MediaControlTimelineContainerElement::MediaControlTimelineContainerElement):
        (WebCore::MediaControlTimelineContainerElement::create):
        (WebCore::MediaControlTimelineContainerElement::rendererIsNeeded):
        (WebCore::MediaControlVolumeSliderContainerElement::MediaControlVolumeSliderContainerElement):
        (WebCore::MediaControlVolumeSliderContainerElement::create):
        (WebCore::MediaControlStatusDisplayElement::MediaControlStatusDisplayElement):
        (WebCore::MediaControlStatusDisplayElement::create):
        (WebCore::MediaControlStatusDisplayElement::update):
        (WebCore::MediaControlStatusDisplayElement::rendererIsNeeded):
        (WebCore::MediaControlInputElement::MediaControlInputElement):
        (WebCore::MediaControlInputElement::styleForElement):
        (WebCore::MediaControlInputElement::rendererIsNeeded):
        (WebCore::MediaControlInputElement::attach):
        (WebCore::MediaControlInputElement::updateStyle):
        (WebCore::MediaControlMuteButtonElement::MediaControlMuteButtonElement):
        (WebCore::MediaControlMuteButtonElement::create):
        (WebCore::MediaControlMuteButtonElement::defaultEventHandler):
        (WebCore::MediaControlMuteButtonElement::updateDisplayType):
        (WebCore::MediaControlPlayButtonElement::MediaControlPlayButtonElement):
        (WebCore::MediaControlPlayButtonElement::create):
        (WebCore::MediaControlPlayButtonElement::defaultEventHandler):
        (WebCore::MediaControlPlayButtonElement::updateDisplayType):
        (WebCore::MediaControlSeekButtonElement::MediaControlSeekButtonElement):
        (WebCore::MediaControlSeekButtonElement::create):
        (WebCore::MediaControlSeekButtonElement::isForwardButton):
        (WebCore::MediaControlSeekButtonElement::defaultEventHandler):
        (WebCore::MediaControlSeekButtonElement::seekTimerFired):
        (WebCore::MediaControlRewindButtonElement::MediaControlRewindButtonElement):
        (WebCore::MediaControlRewindButtonElement::create):
        (WebCore::MediaControlRewindButtonElement::defaultEventHandler):
        (WebCore::MediaControlReturnToRealtimeButtonElement::MediaControlReturnToRealtimeButtonElement):
        (WebCore::MediaControlReturnToRealtimeButtonElement::create):
        (WebCore::MediaControlReturnToRealtimeButtonElement::defaultEventHandler):
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::MediaControlToggleClosedCaptionsButtonElement):
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::create):
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::defaultEventHandler):
        (WebCore::MediaControlToggleClosedCaptionsButtonElement::updateDisplayType):
        (WebCore::MediaControlTimelineElement::MediaControlTimelineElement):
        (WebCore::MediaControlTimelineElement::create):
        (WebCore::MediaControlTimelineElement::defaultEventHandler):
        (WebCore::MediaControlTimelineElement::update):
        (WebCore::MediaControlVolumeSliderElement::MediaControlVolumeSliderElement):
        (WebCore::MediaControlVolumeSliderElement::create):
        (WebCore::MediaControlVolumeSliderElement::defaultEventHandler):
        (WebCore::MediaControlVolumeSliderElement::update):
        (WebCore::MediaControlFullscreenButtonElement::MediaControlFullscreenButtonElement):
        (WebCore::MediaControlFullscreenButtonElement::create):
        (WebCore::MediaControlFullscreenButtonElement::defaultEventHandler):
        (WebCore::MediaControlTimeDisplayElement::MediaControlTimeDisplayElement):
        (WebCore::MediaControlTimeDisplayElement::create):
        * rendering/MediaControlElements.h:
        Added create functions. Made constructors and other members private.

        * rendering/RenderFileUploadControl.cpp:
        (WebCore::ShadowInputElement::ShadowInputElement):
        (WebCore::ShadowInputElement::create):
        (WebCore::RenderFileUploadControl::updateFromElement):
        Added create functions. Made constructors and other members private.

        * rendering/RenderMedia.cpp:
        (WebCore::RenderMedia::createControlsShadowRoot):
        (WebCore::RenderMedia::createPanel):
        (WebCore::RenderMedia::createMuteButton):
        (WebCore::RenderMedia::createPlayButton):
        (WebCore::RenderMedia::createSeekBackButton):
        (WebCore::RenderMedia::createSeekForwardButton):
        (WebCore::RenderMedia::createRewindButton):
        (WebCore::RenderMedia::createReturnToRealtimeButton):
        (WebCore::RenderMedia::createToggleClosedCaptionsButton):
        (WebCore::RenderMedia::createStatusDisplay):
        (WebCore::RenderMedia::createTimelineContainer):
        (WebCore::RenderMedia::createTimeline):
        (WebCore::RenderMedia::createVolumeSliderContainer):
        (WebCore::RenderMedia::createVolumeSlider):
        (WebCore::RenderMedia::createCurrentTimeDisplay):
        (WebCore::RenderMedia::createTimeRemainingDisplay):
        (WebCore::RenderMedia::createFullscreenButton):
        Use create instead of new.

        * rendering/RenderProgress.cpp:
        (WebCore::ProgressValueElement::ProgressValueElement):
        (WebCore::ProgressValueElement::create):
        (WebCore::RenderProgress::updateValuePartState):
        * rendering/RenderSlider.cpp:
        (WebCore::SliderThumbElement::SliderThumbElement):
        (WebCore::SliderThumbElement::create):
        (WebCore::RenderSlider::updateFromElement):
        Added create functions. Made constructors and other members private.

        * rendering/TextControlInnerElements.cpp:
        (WebCore::TextControlInnerElement::TextControlInnerElement):
        (WebCore::TextControlInnerElement::create):
        (WebCore::TextControlInnerTextElement::TextControlInnerTextElement):
        (WebCore::TextControlInnerTextElement::create):
        (WebCore::TextControlInnerTextElement::defaultEventHandler):
        (WebCore::SearchFieldResultsButtonElement::SearchFieldResultsButtonElement):
        (WebCore::SearchFieldResultsButtonElement::create):
        (WebCore::SearchFieldResultsButtonElement::defaultEventHandler):
        (WebCore::SearchFieldCancelButtonElement::SearchFieldCancelButtonElement):
        (WebCore::SearchFieldCancelButtonElement::create):
        (WebCore::SearchFieldCancelButtonElement::defaultEventHandler):
        (WebCore::SpinButtonElement::SpinButtonElement):
        (WebCore::SpinButtonElement::create):
        (WebCore::SpinButtonElement::defaultEventHandler):
        * rendering/TextControlInnerElements.h:
        Added create functions. Made constructors and other members private.

2010-05-30  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Darin Adler.

        Incorrect build dependencies for GObject DOM Bindings
        https://bugs.webkit.org/show_bug.cgi?id=39932

        -include does not execute the implicit % expansion, we have to do
        it manually.

        * GNUmakefile.am:

2010-05-30  Robert Hogan  <robert@webkit.org>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Enhance Qt DRT implementation to support platform scroll wheel events.

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

        Fix the bug in webkit.org/b/29601 for Qt.  A delta not divisible by 120
        indicates a device that is sending fine-resolution scroll events, so
        use the delta as the number of pixels to scroll.

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

2010-05-30  Jessie Berlin  <jberlin@webkit.org>

        Reviewed by Pavel Feldman.

        https://bugs.webkit.org/show_bug.cgi?id=39224
        Bug 39224 - Web Inspector: There should be a way to clean up profiles

        Adds a button to clear the profiles from the profiles panel like that
        used for the console, the audits panel, and the timeline panel.
        Consolidates the css rules, since they all use the same image.
        Also allows for individual profiles to be deleted via the keyboard
        (U+0008 or U+007F) and uses this new schema for the Elements Tree.

        * English.lproj/localizedStrings.js:
        Add tooltip text for the button to clear the profiles pane.

        * inspector/InspectorBackend.idl:
        Add ability to remove the profiles from the backend when they are
        deleted or cleared in the frontend.
        * inspector/InspectorBackend.cpp:
        (WebCore::InspectorBackend::removeProfile):
        (WebCore::InspectorBackend::clearProfiles):
        * inspector/InspectorBackend.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::removeProfile):
        (WebCore::InspectorController::clearProfiles):
        * inspector/InspectorController.h:

        * inspector/front-end/AuditsPanel.js:
        (WebInspector.AuditsPanel):
        Use the 'clear-status-bar-item' class.
        * inspector/front-end/ChangesView.js:
        (WebInspector.ChangesView):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.prototype._createStatusbarButtons):
        * inspector/front-end/audits.css:
        * inspector/front-end/inspector.css:
        (.clear-status-bar-item .glyph):
        * inspector/front-end/inspector.html:

        * inspector/front-end/ElementsTreeOutline.js:
        Replace the keyDown handler on the Outline with specific methods to
        handle delete and enter on the TreeElements.
        (WebInspector.ElementsTreeOutline):
        (WebInspector.ElementsTreeOutline.prototype.get editing):
        Return whether or not an element in the tree is currently being edited.
        (WebInspector.ElementsTreeElement.prototype.ondelete):
        (WebInspector.ElementsTreeElement.prototype.onenter):

        * inspector/front-end/Panel.js:
        (WebInspector.Panel.prototype.createSidebar):
        Make the TreeOutline for a Panel's sidebar aware of its enclosing Panel.

        * inspector/front-end/ProfilesPanel.js:
        (WebInspector.ProfilesPanel):
        Add the clear button.
        (WebInspector.ProfilesPanel.prototype.get statusBarItems):
        (WebInspector.ProfilesPanel.prototype._clearProfiles):
        Remove the profiles from the backend, the reset the frontend interface.
        (WebInspector.ProfilesPanel.prototype.removeProfileHeader):
        Remove the profile from both the frontend and the backend, and clear the
        view when the last profile is removed.
        (WebInspector.ProfilesPanel.prototype._updateInterface):
        Hide the clear button when profiling is disabled.
        (WebInspector.ProfileSidebarTreeElement.prototype.onselect):
        Replace access to global variable with reference to the Panel held by the
        TreeOutline.
        (WebInspector.ProfileSidebarTreeElement.prototype.ondelete):
        Remove the profile corresponding the tree element when the user deletes
        that tree element.

        * inspector/front-end/treeoutline.js:
        (TreeOutline.prototype._treeKeyDown):
        Allow the selected tree element to handle the user pressing a delete
        key or enter key.

2010-05-29  Lucas De Marchi  <lucas.demarchi@profusion.mobi>

        Reviewed by Darin Adler.

        Check if a CC environment variable is defined before hard-coding gcc's
        path. Simply hard-coding it breaks cross-compilation and Linux
        distributions with more than one gcc installed (or not in the default
        path).
        https://bugs.webkit.org/show_bug.cgi?id=35551

        No new functionality, so no new tests.

        * bindings/scripts/CodeGeneratorObjC.pm:
        * bindings/scripts/IDLParser.pm:
        * dom/make_names.pl:

2010-05-29  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: [REGRESSION] caller locations are not shown on Timeline Panel.

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

        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel.FormattedRecord):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._generatePopupContent):
        (WebInspector.TimelinePanel.FormattedRecord.prototype._getRecordDetails):

2010-05-29  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        HTML5 parser should block script execution until stylesheets load
        https://bugs.webkit.org/show_bug.cgi?id=39903

        All <script> tag execution now blocks on stylesheet load, including
        inline <script> content which the old parser doesn't support blocking.

        Hyatt says we could now get rid of updateLayoutIgnorePendingStylesheets
        once our primary parser knows how to wait for stylesheets
        before executing inline <script> content.

        All of http/tests/local passes in --html5-parser mode now.
        Also fixed fast/parser/tokenizer-close-during-document-write.html.

        * html/HTML5ScriptRunner.cpp:
        (WebCore::HTML5ScriptRunner::HTML5ScriptRunner):
         - Added a m_hasScriptsWaitingForStylesheets bool so that we can
           detect when we're actually waiting on stylesheets or not.
           If we're not waiting on stylesheets then we're still parsing and
           executing scripts would cause parser/script reentrancy and bad news bears.
        (WebCore::HTML5ScriptRunner::isPendingScriptReady):
         - Re-enable the check that the stylesheets have loaded.
        (WebCore::HTML5ScriptRunner::executePendingScript):
         - ASSERT that stylesheets have loaded.
        (WebCore::HTML5ScriptRunner::executeScriptsWaitingForLoad):
         - ASSERT that this is never called reentrantly.
        (WebCore::HTML5ScriptRunner::executeScriptsWaitingForStylesheets):
         - Execute any scripts which were blocked on stylesheet loads.
         - ASSERT (in two ways) that this is never called reentrantly.
        * html/HTML5ScriptRunner.h:
        (WebCore::HTML5ScriptRunner::hasScriptsWaitingForStylesheets):
         - Callers need to check this before calling executeScriptsWaitingForLoad.
        (WebCore::HTML5ScriptRunner::inScriptExecution):
         - Used by callers to ASSERT that we're not called re-entrantly.
        * html/HTML5Tokenizer.cpp:
        (WebCore::HTML5Tokenizer::HTML5Tokenizer):
         - Add m_hasScriptsWaitingForStylesheets for tracking if we've paused
           due to stylesheets or not.  Callers need to know this to know if they
           should ignore executeScriptsWaitingForStylesheets calls from
           Document (which may be generated when parsing </script> tags).
           We only care about executeScriptsWaitingForStylesheets calls when
           we've actually blocked the parser due to waiting on a stylesheet load.
        (WebCore::HTML5Tokenizer::end):
         - Move m_source.close() back to this method now that I understand more
           about when finish() is called.  This should fix several layout test ASSERTS.
        (WebCore::HTML5Tokenizer::finish):
         - This should not close m_source since scripts may still write to
           the document.  Set m_wasWaitingOnScriptsDuringFinish to indicate
           that we were not able to end parsing during finish.
        (WebCore::HTML5Tokenizer::resumeParsingAfterScriptExecution):
         - ASSERT that this is never caller re-entrantly.
        (WebCore::HTML5Tokenizer::executeScript):
         - ASSERT that the ScriptRunner always thinks we're running scripts when this is called.
        (WebCore::HTML5Tokenizer::executingScript):
         - Added implementation to fix fast/parser/tokenizer-close-during-document-write.html
        (WebCore::HTML5Tokenizer::notifyFinished):
         - ASSERT that this is never called re-entrantly.
        (WebCore::HTML5Tokenizer::executeScriptsWaitingForStylesheets):
         - Call the ScriptRunner to tell it that stylesheets have loaded if
           it is blocked on stylesheet loads.
         - ASSERT(m_hasScriptsWaitingForStylesheets).  We can't just assert
           isPaused() since we may be paused for script loads.
        * html/HTML5Tokenizer.h:

2010-05-29  Laszlo Gombos  <laszlo.1.gombos@nokia.com>

        Reviewed by Darin Adler.

        Remove set but never used variables
        https://bugs.webkit.org/show_bug.cgi?id=35252

        No new tests as there is no new functionality.

        * accessibility/AccessibilityRenderObject.cpp:
        (WebCore::lastChildConsideringContinuation):
        * css/CSSFontSelector.cpp:
        (WebCore::CSSFontSelector::addFontFaceRule):
        * css/CSSParser.cpp:
        (WebCore::CSSParser::parseFontFaceUnicodeRange):
        * editing/InsertParagraphSeparatorCommand.cpp:
        (WebCore::InsertParagraphSeparatorCommand::doApply):
        * loader/appcache/ApplicationCacheStorage.cpp:
        (WebCore::ApplicationCacheStorage::loadManifestHostHashes):
        * page/EventHandler.cpp:
        (WebCore::EventHandler::handleWheelEvent):
        * page/animation/AnimationBase.cpp:
        (WebCore::AnimationBase::getTimeToNextEvent):
        * rendering/AutoTableLayout.cpp:
        (WebCore::AutoTableLayout::recalcColumn):
        (WebCore::AutoTableLayout::layout):
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::calcInlinePrefWidths):
        * rendering/RenderSVGResourceClipper.cpp:
        (WebCore::RenderSVGResourceClipper::createClipData):
        * storage/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::canEstablishDatabase):

2010-05-29  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r60405.
        http://trac.webkit.org/changeset/60405
        https://bugs.webkit.org/show_bug.cgi?id=39921

        It broke GTK build. (Requested by Ossy on #webkit).

        * dom/Node.cpp:
        (WebCore::Node::getElementsByTagName):
        (WebCore::Node::getElementsByTagNameNS):
        * dom/Node.h:

2010-05-29  Anton Muhin  <antonm@chromium.org>

        Reviewed by Darin Adler.

        Make NodeList getters take AtomicString instead of plain String
        https://bugs.webkit.org/show_bug.cgi?id=39892

        Those methods turn String into AtomicString later.  And this conversion
        is faster if underlying string is already atomic.
        That buys small (~2-3%) speed up for Chromium on Dromaeo DOM Core.
        I don't know if Safari benefits from it.

        * dom/Node.cpp:
        (WebCore::Node::getElementsByTagName):
        (WebCore::Node::getElementsByTagNameNS):
        * dom/Node.h:

2010-05-29  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Adam Barth.

        Allow descendant frame navigation for file URLs when allowFileAccessFromFileURLs is false
        https://bugs.webkit.org/show_bug.cgi?id=39750

        Fix for local HTML package breakage when each file is its own origin. 
        In this case we should allow descendant file: frames to navigate each 
        other when they share the same top frame.

        Test: fast/frames/location-change-no-file-access.html

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

2010-05-29  Geoffrey Garen  <ggaren@apple.com>

        Qt build fix: Updated for ArgList changes.

        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::QtRuntimeConnectionMethod::call):

2010-05-29  Geoffrey Garen  <ggaren@apple.com>

        Qt build fix: Updated for ArgList changes.

        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::QtRuntimeMetaMethod::call):
        (JSC::Bindings::QtRuntimeConnectionMethod::call):

2010-05-29  Geoffrey Garen  <ggaren@apple.com>

        Qt build fix: Updated for ArgList changes.

        * bridge/qt/qt_pixmapruntime.cpp:
        (JSC::Bindings::QtPixmapInstance::invokeMethod):
        * bridge/qt/qt_runtime.cpp:
        (JSC::Bindings::findMethodIndex):
        (JSC::Bindings::QtRuntimeMetaMethod::call):
        (JSC::Bindings::QtRuntimeConnectionMethod::call):
        * bridge/qt/qt_runtime.h:

2010-05-29  Geoffrey Garen  <ggaren@apple.com>

        Qt build fix: Updated for ArgList changes.

        * bridge/qt/qt_pixmapruntime.cpp:
        (JSC::Bindings::QtPixmapAssignToElementMethod::invoke):
        (JSC::Bindings::QtPixmapToDataUrlMethod::invoke):
        (JSC::Bindings::QtPixmapToStringMethod::invoke):
        (JSC::Bindings::QtPixmapInstance::invokeMethod):
        * bridge/qt/qt_pixmapruntime.h:

2010-05-29  Geoffrey Garen  <ggaren@apple.com>

        Qt build fix: Keep this borken class limping along.

        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtInstance::invokeMethod):
        * bridge/qt/qt_instance.h:

2010-05-28  Geoffrey Garen  <ggaren@apple.com>

        Reviewed by Sam Weinig, Gavin Barraclough, Oliver Hunt.

        Simplified the host calling convention.

        PART ONE: Functional code changes.
        
        [ None in WebCore ]
        
        PART TWO: Global search and replace.
        
        In the areas below, I used global search-and-replace to change
            (ExecState*, JSObject*, JSValue, const ArgList&) => (ExecState*)
            args.size() => exec->argumentCount()
            args.at(i) => exec->argument(i)

        * bindings/js/JSArrayBufferViewCustom.cpp:
        (WebCore::JSArrayBufferView::slice):
        * bindings/js/JSArrayBufferViewHelper.h:
        (WebCore::setWebGLArrayHelper):
        * 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::createImageData):
        (WebCore::JSCanvasRenderingContext2D::putImageData):
        (WebCore::JSCanvasRenderingContext2D::fillText):
        (WebCore::JSCanvasRenderingContext2D::strokeText):
        * bindings/js/JSClipboardCustom.cpp:
        (WebCore::JSClipboard::clearData):
        (WebCore::JSClipboard::getData):
        (WebCore::JSClipboard::setDragImage):
        * bindings/js/JSDOMApplicationCacheCustom.cpp:
        (WebCore::JSDOMApplicationCache::hasItem):
        (WebCore::JSDOMApplicationCache::add):
        (WebCore::JSDOMApplicationCache::remove):
        * bindings/js/JSDOMFormDataCustom.cpp:
        (WebCore::JSDOMFormData::append):
        * bindings/js/JSDOMWindowCustom.cpp:
        (WebCore::JSDOMWindow::open):
        (WebCore::JSDOMWindow::showModalDialog):
        (WebCore::JSDOMWindow::postMessage):
        (WebCore::JSDOMWindow::setTimeout):
        (WebCore::JSDOMWindow::setInterval):
        (WebCore::JSDOMWindow::addEventListener):
        (WebCore::JSDOMWindow::removeEventListener):
        (WebCore::JSDOMWindow::openDatabase):
        * bindings/js/JSDatabaseCustom.cpp:
        (WebCore::JSDatabase::changeVersion):
        (WebCore::createTransaction):
        (WebCore::JSDatabase::transaction):
        (WebCore::JSDatabase::readTransaction):
        * bindings/js/JSDatabaseSyncCustom.cpp:
        (WebCore::JSDatabaseSync::changeVersion):
        (WebCore::createTransaction):
        (WebCore::JSDatabaseSync::transaction):
        (WebCore::JSDatabaseSync::readTransaction):
        * bindings/js/JSDedicatedWorkerContextCustom.cpp:
        (WebCore::JSDedicatedWorkerContext::postMessage):
        * bindings/js/JSDesktopNotificationsCustom.cpp:
        (WebCore::JSNotificationCenter::requestPermission):
        * bindings/js/JSFloatArrayCustom.cpp:
        (WebCore::JSFloatArray::set):
        * bindings/js/JSGeolocationCustom.cpp:
        (WebCore::JSGeolocation::getCurrentPosition):
        (WebCore::JSGeolocation::watchPosition):
        * bindings/js/JSHTMLAllCollectionCustom.cpp:
        (WebCore::callHTMLAllCollection):
        (WebCore::JSHTMLAllCollection::item):
        (WebCore::JSHTMLAllCollection::namedItem):
        * bindings/js/JSHTMLCanvasElementCustom.cpp:
        (WebCore::JSHTMLCanvasElement::getContext):
        * bindings/js/JSHTMLCollectionCustom.cpp:
        (WebCore::callHTMLCollection):
        (WebCore::JSHTMLCollection::item):
        (WebCore::JSHTMLCollection::namedItem):
        * bindings/js/JSHTMLDocumentCustom.cpp:
        (WebCore::JSHTMLDocument::open):
        (WebCore::documentWrite):
        (WebCore::JSHTMLDocument::write):
        (WebCore::JSHTMLDocument::writeln):
        * bindings/js/JSHTMLInputElementCustom.cpp:
        (WebCore::JSHTMLInputElement::setSelectionRange):
        * bindings/js/JSHTMLOptionsCollectionCustom.cpp:
        (WebCore::JSHTMLOptionsCollection::add):
        (WebCore::JSHTMLOptionsCollection::remove):
        * bindings/js/JSHTMLSelectElementCustom.cpp:
        (WebCore::JSHTMLSelectElement::remove):
        * bindings/js/JSHistoryCustom.cpp:
        (WebCore::JSHistory::pushState):
        (WebCore::JSHistory::replaceState):
        * bindings/js/JSInjectedScriptHostCustom.cpp:
        (WebCore::JSInjectedScriptHost::databaseForId):
        (WebCore::JSInjectedScriptHost::currentCallFrame):
        (WebCore::JSInjectedScriptHost::nodeForId):
        (WebCore::JSInjectedScriptHost::pushNodePathToFrontend):
        (WebCore::JSInjectedScriptHost::selectDatabase):
        (WebCore::JSInjectedScriptHost::selectDOMStorage):
        (WebCore::JSInjectedScriptHost::reportDidDispatchOnInjectedScript):
        * bindings/js/JSInspectorFrontendHostCustom.cpp:
        (WebCore::JSInspectorFrontendHost::platform):
        (WebCore::JSInspectorFrontendHost::port):
        (WebCore::JSInspectorFrontendHost::showContextMenu):
        * bindings/js/JSInt16ArrayCustom.cpp:
        (WebCore::JSInt16Array::set):
        * bindings/js/JSInt32ArrayCustom.cpp:
        (WebCore::JSInt32Array::set):
        * bindings/js/JSInt8ArrayCustom.cpp:
        (WebCore::JSInt8Array::set):
        * bindings/js/JSJavaScriptCallFrameCustom.cpp:
        (WebCore::JSJavaScriptCallFrame::evaluate):
        (WebCore::JSJavaScriptCallFrame::scopeType):
        * bindings/js/JSLocationCustom.cpp:
        (WebCore::JSLocation::replace):
        (WebCore::JSLocation::reload):
        (WebCore::JSLocation::assign):
        (WebCore::JSLocation::toString):
        * bindings/js/JSMessageEventCustom.cpp:
        (WebCore::JSMessageEvent::initMessageEvent):
        * bindings/js/JSMessagePortCustom.cpp:
        (WebCore::JSMessagePort::postMessage):
        * bindings/js/JSMessagePortCustom.h:
        (WebCore::handlePostMessage):
        * bindings/js/JSNodeCustom.cpp:
        (WebCore::JSNode::insertBefore):
        (WebCore::JSNode::replaceChild):
        (WebCore::JSNode::removeChild):
        (WebCore::JSNode::appendChild):
        * bindings/js/JSNodeListCustom.cpp:
        (WebCore::callNodeList):
        * bindings/js/JSPluginElementFunctions.cpp:
        (WebCore::callPlugin):
        * bindings/js/JSSQLResultSetRowListCustom.cpp:
        (WebCore::JSSQLResultSetRowList::item):
        * bindings/js/JSSQLTransactionCustom.cpp:
        (WebCore::JSSQLTransaction::executeSql):
        * bindings/js/JSSQLTransactionSyncCustom.cpp:
        (WebCore::JSSQLTransactionSync::executeSql):
        * bindings/js/JSSVGLengthCustom.cpp:
        (WebCore::JSSVGLength::convertToSpecifiedUnits):
        * bindings/js/JSSVGMatrixCustom.cpp:
        (WebCore::JSSVGMatrix::multiply):
        (WebCore::JSSVGMatrix::inverse):
        (WebCore::JSSVGMatrix::rotateFromVector):
        * bindings/js/JSSVGPODListCustom.h:
        (WebCore::JSSVGPODListCustom::clear):
        (WebCore::JSSVGPODListCustom::initialize):
        (WebCore::JSSVGPODListCustom::getItem):
        (WebCore::JSSVGPODListCustom::insertItemBefore):
        (WebCore::JSSVGPODListCustom::replaceItem):
        (WebCore::JSSVGPODListCustom::removeItem):
        (WebCore::JSSVGPODListCustom::appendItem):
        * 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/JSUint16ArrayCustom.cpp:
        (WebCore::JSUint16Array::set):
        * bindings/js/JSUint32ArrayCustom.cpp:
        (WebCore::JSUint32Array::set):
        * bindings/js/JSUint8ArrayCustom.cpp:
        (WebCore::JSUint8Array::set):
        * bindings/js/JSWebGLRenderingContextCustom.cpp:
        (WebCore::JSWebGLRenderingContext::bufferData):
        (WebCore::JSWebGLRenderingContext::bufferSubData):
        (WebCore::getObjectParameter):
        (WebCore::JSWebGLRenderingContext::getBufferParameter):
        (WebCore::JSWebGLRenderingContext::getFramebufferAttachmentParameter):
        (WebCore::JSWebGLRenderingContext::getParameter):
        (WebCore::JSWebGLRenderingContext::getProgramParameter):
        (WebCore::JSWebGLRenderingContext::getRenderbufferParameter):
        (WebCore::JSWebGLRenderingContext::getShaderParameter):
        (WebCore::JSWebGLRenderingContext::getTexParameter):
        (WebCore::JSWebGLRenderingContext::getUniform):
        (WebCore::JSWebGLRenderingContext::getVertexAttrib):
        (WebCore::JSWebGLRenderingContext::texImage2D):
        (WebCore::JSWebGLRenderingContext::texSubImage2D):
        (WebCore::dataFunctionf):
        (WebCore::dataFunctioni):
        (WebCore::dataFunctionMatrix):
        (WebCore::JSWebGLRenderingContext::uniform1fv):
        (WebCore::JSWebGLRenderingContext::uniform1iv):
        (WebCore::JSWebGLRenderingContext::uniform2fv):
        (WebCore::JSWebGLRenderingContext::uniform2iv):
        (WebCore::JSWebGLRenderingContext::uniform3fv):
        (WebCore::JSWebGLRenderingContext::uniform3iv):
        (WebCore::JSWebGLRenderingContext::uniform4fv):
        (WebCore::JSWebGLRenderingContext::uniform4iv):
        (WebCore::JSWebGLRenderingContext::uniformMatrix2fv):
        (WebCore::JSWebGLRenderingContext::uniformMatrix3fv):
        (WebCore::JSWebGLRenderingContext::uniformMatrix4fv):
        (WebCore::JSWebGLRenderingContext::vertexAttrib1fv):
        (WebCore::JSWebGLRenderingContext::vertexAttrib2fv):
        (WebCore::JSWebGLRenderingContext::vertexAttrib3fv):
        (WebCore::JSWebGLRenderingContext::vertexAttrib4fv):
        * bindings/js/JSWebSocketCustom.cpp:
        (WebCore::JSWebSocket::send):
        * bindings/js/JSWorkerContextCustom.cpp:
        (WebCore::JSWorkerContext::importScripts):
        (WebCore::JSWorkerContext::setTimeout):
        (WebCore::JSWorkerContext::setInterval):
        (WebCore::JSWorkerContext::openDatabase):
        (WebCore::JSWorkerContext::openDatabaseSync):
        * bindings/js/JSWorkerCustom.cpp:
        (WebCore::JSWorker::postMessage):
        * bindings/js/JSXMLHttpRequestCustom.cpp:
        (WebCore::JSXMLHttpRequest::open):
        (WebCore::JSXMLHttpRequest::send):
        * 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):
        * bindings/js/ScriptCallStack.h:
        * bindings/scripts/CodeGeneratorJS.pm:
        * bridge/c/c_instance.cpp:
        (JSC::Bindings::CInstance::invokeMethod):
        (JSC::Bindings::CInstance::invokeDefaultMethod):
        * bridge/c/c_instance.h:
        * bridge/jni/jsc/JavaInstanceJSC.cpp:
        (JavaInstance::invokeMethod):
        * bridge/jni/jsc/JavaInstanceJSC.h:
        * bridge/jsc/BridgeJSC.h:
        (JSC::Bindings::Instance::invokeDefaultMethod):
        * bridge/objc/objc_instance.h:
        * bridge/objc/objc_instance.mm:
        (ObjcInstance::invokeMethod):
        (ObjcInstance::invokeObjcMethod):
        (ObjcInstance::invokeDefaultMethod):
        * bridge/objc/objc_runtime.mm:
        (JSC::Bindings::callObjCFallbackObject):
        * bridge/runtime_method.cpp:
        (JSC::callRuntimeMethod):
        * bridge/runtime_object.cpp:
        (JSC::Bindings::callRuntimeObject):

2010-05-28  Stephen White  <senorblanco@chromium.org>

        Reviewed by Darin Fisher.

        Implement GraphicsContext::setImageInterpolation() for the Chromium
        port.  This is preparatory work for bug 38233.  A number of
        background-resize tests will need a rebaseline, since the images are
        taken during the initial "low quality" phase (<800ms).

        [CHROMIUM] Chromium port should support image interpolation quality
        https://bugs.webkit.org/show_bug.cgi?id=38686

        Covered by fast/backgrounds/size/backgroundSize15.html, and others.

        * platform/graphics/skia/GraphicsContextSkia.cpp:
        Implement WebCore::GraphicsContext::setImageInterpolationQuality.
        * platform/graphics/skia/ImageSkia.cpp:
        (WebCore::computeResamplingMode):  Only enable high quality
        interpolation if it has been requested in the GraphicsContext.
        (WebCore::drawResampledBitmap):  Enable cacheing of resampled images
        even if the size is not full (fix from Brett Wilson).
        (WebCore::paintSkBitmap):  Pass in the PlatformContextSkia to
        computeResamplingMode, so it can query it for interpolation quality.
        (WebCore::Image::drawPattern):  Ibid.
        * platform/graphics/skia/PlatformContextSkia.cpp:
        (PlatformContextSkia::State::State):
        (PlatformContextSkia::interpolationQuality):
        (PlatformContextSkia::setInterpolationQuality):
        * platform/graphics/skia/PlatformContextSkia.h:
        Add a member fn and accessors to retain the image interpolation quality
        in the platform context, and to save/restore it with the state.

2010-05-28  Lucas De Marchi  <lucas.demarchi@profusion.mobi>

        Reviewed by Kenneth Rohde Christiansen.

        [EFL] Remove compiler warnings about uninitialized variable.
        https://bugs.webkit.org/show_bug.cgi?id=39871

        No new tests, just cosmetic changes.

        * platform/efl/WidgetEfl.cpp:
        (WebCore::Widget::applyCursor):

2010-05-28  Vangelis Kokkevis  <vangelis@chromium.org>

        Reviewed by Dimitri Glazkov.

        Prevent chromium composited layers from rendering on top of the scrollbars.
        https://bugs.webkit.org/show_bug.cgi?id=39851

        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::drawLayers):

2010-05-28  Aaron Boodman  <aa@chromium.org>

        Reviewed by Darin Fisher.

        Added isXHTMLDocument() to WebCore::Document.

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

        * dom/Document.h: Add isXHTMLDocument().
        (WebCore::Document::isXHTMLDocument): Ditto.

2010-05-28  Peter Kasting  <pkasting@google.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=39857
        Make GIFs loop the correct number of times.  Previously, everyone looped
        one time too few for non-infinitely-looping GIFs.

        Modified a Qt manual test to be correct and moved it to the general
        manual test directory.

        * manual-tests/animated-gif-looping.html: Copied from WebCore/manual-tests/qt/qt-gif-test.html.
        * manual-tests/qt/qt-10loop-anim.gif: Removed.
        * manual-tests/qt/qt-anim.gif: Removed.
        * manual-tests/qt/qt-gif-test.html: Removed.
        * manual-tests/qt/qt-noanim.gif: Removed.
        * manual-tests/resources/animated-10x.gif: Copied from WebCore/manual-tests/qt/qt-10loop-anim.gif and modified.
        * manual-tests/resources/animated-infinite.gif: Copied from WebCore/manual-tests/qt/qt-anim.gif.
        * manual-tests/resources/non-animated.gif: Copied from WebCore/manual-tests/qt/qt-noanim.gif.
        * platform/graphics/BitmapImage.cpp:
        (WebCore::BitmapImage::internalAdvanceAnimation): For a loop count of n, show a total of n + 1 animation cycles.
        * platform/graphics/ImageSource.h:
        * platform/graphics/cg/ImageSourceCG.cpp:
        (WebCore::ImageSource::repetitionCount):
        * platform/graphics/qt/ImageDecoderQt.cpp:
        (WebCore::ImageDecoderQt::repetitionCount): Remove translation code now that WebCore matches Qt's internal handling of the loop count.  Qt itself may still have a bug here.
        * platform/image-decoders/gif/GIFImageDecoder.cpp:
        (WebCore::GIFImageDecoder::repetitionCount):
        * platform/image-decoders/gif/GIFImageReader.cpp:
        (GIFImageReader::read): Translate loop count 0 to "loop infinitely" (by restoring one piece of the Mozilla code we'd removed).

2010-05-28  Ben Murdoch  <benm@google.com>

        Reviewed by Darin Adler.

        openFile(...) in FIleSystemPOSIX does not call fileSystemRepresentation
        https://bugs.webkit.org/show_bug.cgi?id=39882

        No new tests. Existing tests in fast/files should suffice.

        * platform/posix/FileSystemPOSIX.cpp:
        (WebCore::openFile): pass the path parameter through fileSystemRepresentation before using it.

2010-05-28  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Named entities in attributes aren't parsed correctly by HTML5 parser
        https://bugs.webkit.org/show_bug.cgi?id=39873

        I misplaced this if statement when writing this code originally.  Now
        that we have test coverage for this paragraph in the spec, we can see
        and fix the bug.

        * html/HTML5Lexer.cpp:
        (WebCore::HTML5Lexer::consumeEntity):

2010-05-28  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Handle edge cases in HTML5 entity parsing
        https://bugs.webkit.org/show_bug.cgi?id=39823

        The HTML5 specification tells us to handle HTML entities in a somewhat
        complicated way.  This patch attempts to correctly handle numeric
        entities.  Some of this code is duplicated from HTMLTokenizer.

        * html/HTML5Lexer.cpp:
        (WebCore::HTMLNames::):
        (WebCore::HTMLNames::adjustEntity):
        (WebCore::HTMLNames::legalEntityFor):
        (WebCore::HTML5Lexer::consumeEntity):
        (WebCore::HTML5Lexer::processEntity):
        (WebCore::HTML5Lexer::nextToken):
        (WebCore::HTML5Lexer::emitCodePoint):
        * html/HTML5Lexer.h:

2010-05-28  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Beth Dakin.

        AX: stop prepping value conversion in accessibilityAttributeValueForParameter
        https://bugs.webkit.org/show_bug.cgi?id=39880

        Cleaning up a FIXME so that all values are not converted before they're needed in accessibilityAttributeValue:forParameter:

        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (visiblePositionForTextMarker):
        (-[AccessibilityObjectWrapper visiblePositionRangeForTextMarkerRange:]):
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):

2010-05-28  Adam Treat  <atreat@rim.com>

        Reviewed by Daniel Bates.

        RIM Bug #293 and https://bugs.webkit.org/show_bug.cgi?id=39859

        Layout is not dependent upon ScrollView::frameRect when useFixedLayout
        is true.  No reason to set the needs layout flag in this case.

        * platform/ScrollView.cpp:
        (WebCore::ScrollView::setFrameRect):

2010-05-28  Mikhail Naganov  <mnaganov@chromium.org>

        Unreviewed. Revert 60353 -- immature.

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

        * bindings/js/JSConsoleCustom.cpp:
        * bindings/v8/custom/V8ConsoleCustom.cpp:
        * page/Console.cpp:
        * page/Console.h:
        * page/Console.idl:

2010-05-27  Darin Adler  <darin@apple.com>

        Reviewed by David Levin.

        Make more HTML DOM members private, especially constructors, batch 2
        https://bugs.webkit.org/show_bug.cgi?id=39706

        Refactoring so no new tests.

        Worked my way up from the bottom of HTMLTagNames.in.

        * html/HTMLTagNames.in: Removed createWithNew from keygen, listing,
        map, marquee, menu, meta, ol, optgroup, option, p, param, pre,
        script, select, source, style, table, tbody, td, textarea, tfoot,
        th, thead, title, tr, ul, video, xmp, and noscript.

        * editing/htmlediting.cpp:
        (WebCore::createOrderedListElement): Use create function instead of new.
        (WebCore::createUnorderedListElement): Ditto.
        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::handleError): Ditto.
        (WebCore::HTMLParser::mapCreateErrorCheck): Ditto.
        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::createContainingTable): Ditto.
        (WebCore::HTMLViewSourceDocument::addLine): Ditto.

        * html/HTMLKeygenElement.cpp:
        (WebCore::HTMLKeygenElement::HTMLKeygenElement): Use create function
        instead of new.
        (WebCore::HTMLKeygenElement::create): Added.
        * html/HTMLKeygenElement.h: Made constructor and virtual function
        overrides private, added create function.

        * html/HTMLMapElement.cpp:
        (WebCore::HTMLMapElement::HTMLMapElement):
        (WebCore::HTMLMapElement::create):
        * html/HTMLMapElement.h:
        * html/HTMLMarqueeElement.cpp:
        (WebCore::HTMLMarqueeElement::HTMLMarqueeElement):
        (WebCore::HTMLMarqueeElement::create):
        * html/HTMLMarqueeElement.h:
        * html/HTMLMenuElement.cpp:
        (WebCore::HTMLMenuElement::HTMLMenuElement):
        (WebCore::HTMLMenuElement::create):
        * html/HTMLMenuElement.h:
        * html/HTMLMetaElement.cpp:
        (WebCore::HTMLMetaElement::HTMLMetaElement):
        (WebCore::HTMLMetaElement::create):
        * html/HTMLMetaElement.h:
        * html/HTMLNoScriptElement.cpp:
        (WebCore::HTMLNoScriptElement::HTMLNoScriptElement):
        (WebCore::HTMLNoScriptElement::create):
        (WebCore::HTMLNoScriptElement::childShouldCreateRenderer):
        * html/HTMLNoScriptElement.h:
        * html/HTMLOListElement.cpp:
        (WebCore::HTMLOListElement::HTMLOListElement):
        (WebCore::HTMLOListElement::create):
        * html/HTMLOListElement.h:
        * html/HTMLOptGroupElement.cpp:
        (WebCore::HTMLOptGroupElement::HTMLOptGroupElement):
        (WebCore::HTMLOptGroupElement::create):
        * html/HTMLOptGroupElement.h:
        * html/HTMLOptionElement.cpp:
        (WebCore::HTMLOptionElement::HTMLOptionElement):
        (WebCore::HTMLOptionElement::create):
        * html/HTMLOptionElement.h:
        * html/HTMLParagraphElement.cpp:
        (WebCore::HTMLParagraphElement::HTMLParagraphElement):
        (WebCore::HTMLParagraphElement::create):
        * html/HTMLParagraphElement.h:
        * html/HTMLParamElement.cpp:
        (WebCore::HTMLParamElement::HTMLParamElement):
        (WebCore::HTMLParamElement::create):
        * html/HTMLParamElement.h:
        * html/HTMLPreElement.cpp:
        (WebCore::HTMLPreElement::HTMLPreElement):
        (WebCore::HTMLPreElement::create):
        * html/HTMLPreElement.h:
        * html/HTMLQuoteElement.cpp:
        (WebCore::HTMLQuoteElement::HTMLQuoteElement):
        (WebCore::HTMLQuoteElement::create):
        * html/HTMLQuoteElement.h:
        * html/HTMLScriptElement.cpp:
        (WebCore::HTMLScriptElement::HTMLScriptElement):
        (WebCore::HTMLScriptElement::create):
        * html/HTMLScriptElement.h:
        * html/HTMLSelectElement.cpp:
        (WebCore::HTMLSelectElement::create):
        * html/HTMLSelectElement.h:
        * html/HTMLSourceElement.cpp:
        (WebCore::HTMLSourceElement::HTMLSourceElement):
        (WebCore::HTMLSourceElement::create):
        * html/HTMLSourceElement.h:
        * html/HTMLStyleElement.cpp:
        (WebCore::HTMLStyleElement::HTMLStyleElement):
        (WebCore::HTMLStyleElement::create):
        * html/HTMLStyleElement.h:
        * html/HTMLTableRowElement.cpp:
        (WebCore::HTMLTableRowElement::HTMLTableRowElement):
        (WebCore::HTMLTableRowElement::create):
        (WebCore::HTMLTableRowElement::insertCell):
        * html/HTMLTableRowElement.h:
        * html/HTMLTableSectionElement.cpp:
        (WebCore::HTMLTableSectionElement::HTMLTableSectionElement):
        (WebCore::HTMLTableSectionElement::create):
        (WebCore::HTMLTableSectionElement::insertRow):
        * html/HTMLTableSectionElement.h:
        * html/HTMLTextAreaElement.cpp:
        (WebCore::HTMLTextAreaElement::create):
        * html/HTMLTextAreaElement.h:
        * html/HTMLTitleElement.cpp:
        (WebCore::HTMLTitleElement::HTMLTitleElement):
        (WebCore::HTMLTitleElement::create):
        * html/HTMLTitleElement.h:
        * html/HTMLUListElement.cpp:
        (WebCore::HTMLUListElement::HTMLUListElement):
        (WebCore::HTMLUListElement::create):
        * html/HTMLUListElement.h:
        * html/HTMLVideoElement.cpp:
        (WebCore::HTMLVideoElement::HTMLVideoElement):
        (WebCore::HTMLVideoElement::create):
        * html/HTMLVideoElement.h:
        Made constructors and virtual function overrides private, added
        create function.

        * html/HTMLTableCellElement.cpp:
        (WebCore::HTMLTableCellElement::HTMLTableCellElement): Updated
        names of data members. Renamed _row to m_row, _col to m_col,
        rSpan to m_rowSpan, cSpan to m_colSpan, and removed unused
        rowHeight and m_solid.
        (WebCore::HTMLTableCellElement::create): Added.
        (WebCore::HTMLTableCellElement::parseMappedAttribute): Updated names.
        * html/HTMLTableCellElement.h: Ditto.

        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::create): Added.
        (WebCore::HTMLTableElement::createTHead): Used create instead of new.
        (WebCore::HTMLTableElement::createTFoot): Ditto.
        (WebCore::HTMLTableElement::insertRow): Ditto.
        * html/HTMLTableElement.h:

        * html/HTMLTablePartElement.h: Made members protected instead of
        public.

2010-05-28  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] REGRESSION(r59837): Incorrect clipping of TransparencyLayers
        https://bugs.webkit.org/show_bug.cgi?id=39784

        Move coordinate transformation from TransparencyLayer to clipToImageBuffer()

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

2010-05-28  Lucas De Marchi  <lucas.demarchi@profusion.mobi>

        Reviewed by Kenneth Rohde Christiansen.

        [EF] Implement methods for supporting PopupMenu
        https://bugs.webkit.org/show_bug.cgi?id=39629

        * platform/PopupMenu.h: add needed attribute
        * platform/efl/PopupMenuEfl.cpp: implement methods to show/hide popup
        menu
        (WebCore::PopupMenu::PopupMenu): initialize new attribute
        (WebCore::PopupMenu::show): ditto.
        (WebCore::PopupMenu::hide): ditto.

2010-05-28  Lucas De Marchi  <lucas.demarchi@profusion.mobi>

        Reviewed by Kenneth Rohde Christiansen.

        Reorder class initializers to remove compiler warnings.
        https://bugs.webkit.org/show_bug.cgi?id=39596

        * platform/efl/PlatformKeyboardEventEfl.cpp: ditto.
        (WebCore::PlatformKeyboardEvent::PlatformKeyboardEvent): ditto.
        * platform/efl/PlatformMouseEventEfl.cpp: ditto.
        (WebCore::PlatformMouseEvent::PlatformMouseEvent): ditto.
        * platform/efl/PlatformWheelEventEfl.cpp: ditto
        (WebCore::PlatformWheelEvent::PlatformWheelEvent): ditto.

2010-05-27  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Steve Block.

        Add IndexedDB's IDBIndex
        https://bugs.webkit.org/show_bug.cgi?id=39850

        Flesh out IDBIndex as much as possible until Andrei finishes
        his patch to get around passing Frame*'s all around.  I also
        cleaned up a bunch of existing files as I noticed style
        violations (while basing my new files off of the old).

        Not hooked up enough to test.  Will add tests soon.

        * Android.derived.jscbindings.mk
        * Android.derived.v8bindings.mk
        * Android.mk
        * CMakeLists.txt
        * DerivedSources.cpp
        * DerivedSources.make
        * GNUmakefile.am
        * WebCore.pri
        * WebCore.pro
        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj
        * WebCore.xcodeproj/project.pbxproj
        * bindings/js/JSIDBAnyCustom.cpp:
        (WebCore::toJS):
        * bindings/v8/custom/V8IDBAnyCustom.cpp:
        (WebCore::toV8):
        * storage/IDBAny.cpp:
        (WebCore::IDBAny::idbIndexRequest):
        (WebCore::IDBAny::set):
        * storage/IDBAny.h:
        (WebCore::IDBAny::):
        * storage/IDBCallbacks.h:
        * storage/IDBDatabase.h:
        * storage/IDBDatabaseError.h:
        (WebCore::IDBDatabaseError::):
        * storage/IDBDatabaseError.idl:
        * storage/IDBDatabaseException.h:
        * storage/IDBDatabaseException.idl:
        * storage/IDBDatabaseImpl.cpp:
        * storage/IDBDatabaseImpl.h:
        * storage/IDBDatabaseRequest.cpp:
        * storage/IDBDatabaseRequest.h:
        * storage/IDBDatabaseRequest.idl:
        * storage/IDBIndex.h: Added.
        (WebCore::IDBIndex::~IDBIndex):
        * storage/IDBIndexImpl.cpp: Added.
        (WebCore::IDBIndexImpl::IDBIndexImpl):
        (WebCore::IDBIndexImpl::~IDBIndexImpl):
        * storage/IDBIndexImpl.h: Added.
        (WebCore::IDBIndexImpl::create):
        (WebCore::IDBIndexImpl::name):
        (WebCore::IDBIndexImpl::keyPath):
        (WebCore::IDBIndexImpl::unique):
        * storage/IDBIndexRequest.cpp: Added.
        (WebCore::IDBIndexRequest::IDBIndexRequest):
        (WebCore::IDBIndexRequest::~IDBIndexRequest):
        * storage/IDBIndexRequest.h: Added.
        (WebCore::IDBIndexRequest::create):
        (WebCore::IDBIndexRequest::name):
        (WebCore::IDBIndexRequest::keyPath):
        (WebCore::IDBIndexRequest::unique):
        * storage/IDBIndexRequest.idl: Added.
        * storage/IDBObjectStore.cpp:
        (WebCore::IDBObjectStore::IDBObjectStore):
        (WebCore::IDBObjectStore::~IDBObjectStore):
        (WebCore::IDBObjectStore::indexNames):
        (WebCore::IDBObjectStore::createIndex):
        (WebCore::IDBObjectStore::index):
        (WebCore::IDBObjectStore::removeIndex):
        * storage/IDBObjectStore.h:
        * storage/IDBObjectStoreRequest.cpp:
        (WebCore::IDBObjectStoreRequest::IDBObjectStoreRequest):
        (WebCore::IDBObjectStoreRequest::name):
        (WebCore::IDBObjectStoreRequest::keyPath):
        (WebCore::IDBObjectStoreRequest::indexNames):
        (WebCore::IDBObjectStoreRequest::createIndex):
        (WebCore::IDBObjectStoreRequest::index):
        (WebCore::IDBObjectStoreRequest::removeIndex):
        * storage/IDBObjectStoreRequest.h:
        * storage/IDBObjectStoreRequest.idl:
        * storage/IDBRequest.cpp:
        (WebCore::IDBRequest::onSuccess):
        * storage/IDBRequest.h:
        * storage/IndexedDatabaseRequest.idl:

2010-05-28  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: hide node highlight when inspected page closes.
        https://bugs.webkit.org/show_bug.cgi?id=39872

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::~InspectorController):
        (WebCore::InspectorController::inspectedPageDestroyed):

2010-05-28  Mikhail Naganov  <mnaganov@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: add Console API for retrieving memory stats

        Add 'console.memory' property which returns an object. Currently
        it has two fields: totalHeapSize and usedHeapSize. Later, it can be
        extended for reporting total browser's memory consumption.

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

        * bindings/js/JSConsoleCustom.cpp:
        (WebCore::JSConsole::memory):
        * bindings/v8/custom/V8ConsoleCustom.cpp:
        (WebCore::V8Console::memoryAccessorGetter):
        * page/Console.cpp:
        (WebCore::Console::memory):
        * page/Console.h:
        * page/Console.idl:

2010-05-28  Xan Lopez  <xlopez@igalia.com>

        Add new file to the build system.

        * GNUmakefile.am:

2010-05-28  Antti Koivisto  <koivisto@iki.fi>

        Reviewed by Kenneth Rohde Christiansen.

        https://bugs.webkit.org/show_bug.cgi?id=39874
        [Qt] Make tiled backing store more configurable
    
        Make tile size, tile creation delay and tiling area dynamically configurable.

        * platform/graphics/TiledBackingStore.cpp:
        (WebCore::TiledBackingStore::TiledBackingStore):
        (WebCore::TiledBackingStore::setTileSize):
        (WebCore::TiledBackingStore::setTileCreationDelay):
        (WebCore::TiledBackingStore::setKeepAndCoverAreaMultipliers):
        (WebCore::TiledBackingStore::createTiles):
        * platform/graphics/TiledBackingStore.h:
        (WebCore::TiledBackingStore::tileSize):
        (WebCore::TiledBackingStore::tileCreationDelay):
        (WebCore::TiledBackingStore::getKeepAndCoverAreaMultipliers):

2010-05-28  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        document.write does not work correctly in the HTML5 parser
        https://bugs.webkit.org/show_bug.cgi?id=39828

        Added a new HTML5ScriptRunnerHost interface which
        HTML5Tokenizer implements.  This allows HTML5ScriptController
        to delegate the actual ScriptController::executeScript back to
        HTML5Tokenizer.  HTML5Tokenizer saves off the current m_source
        before calling ScriptController::executeScript to allow safe
        reentrancy through document.write().

        * WebCore.xcodeproj/project.pbxproj:
         - Added HTML5ScriptRunnerHost.h
        * html/HTML5ScriptRunner.cpp:
        (WebCore::HTML5ScriptRunner::HTML5ScriptRunner):
        (WebCore::HTML5ScriptRunner::~HTML5ScriptRunner):
         - Unregister m_parsingBlockingScript if stopped before
           load completion.  This was probably causing some of the
           crashes on page navigation we saw during LayoutTest runs.
        (WebCore::documentURLForScriptExecution):
         - Unify our documentURL handling so all callsites get it right.
        (WebCore::HTML5ScriptRunner::sourceFromPendingScript):
         - Use documentURLForScriptExecution
        (WebCore::HTML5ScriptRunner::executePendingScript):
         - Call stopWatchingForLoad instead of removeClient()
         - Call executeScript instead of ScriptController directly.
        (WebCore::HTML5ScriptRunner::executeScript):
         - Wraps calls to HTML5ScriptRunnerHost::executeScript
        (WebCore::HTML5ScriptRunner::watchForLoad):
         - Wraps calls to HTML5ScriptRunnerHost::watchForLoad
        (WebCore::HTML5ScriptRunner::stopWatchingForLoad):
         - Wraps calls to HTML5ScriptRunnerHost::stopWatchingForLoad
        (WebCore::HTML5ScriptRunner::requestScript):
         - Only watch for load if the CachedScript isn't already loaded.
           This gets rid of rentrancy due to addClient calls, and as a result
           also stops us from hitting ASSERT(m_scriptNestingLevel)
           in executePendingScript.
        (WebCore::HTML5ScriptRunner::runScript):
         - Use the new fancy documentURLForScriptExecution and executeScript.
        * html/HTML5ScriptRunner.h:
        (WebCore::HTML5ScriptRunner::PendingScript::PendingScript):
         - Add a watchingForLoad bool so we know if we ever called watchForLoad
           with this CachedScript*.
        * html/HTML5ScriptRunnerHost.h: Added.
        (WebCore::HTML5ScriptRunnerHost::~HTML5ScriptRunnerHost):
        * html/HTML5Tokenizer.cpp:
        (WebCore::HTML5Tokenizer::HTML5Tokenizer):
         - Store an m_document pointer since we need to access
           m_document->frame()->script() for script execution.
        (WebCore::HTML5Tokenizer::pumpLexer):
         - Always pause or unpause the TreeBuilder after script execution.
           Previously nested script execution would leave the TreeBuilder
           paused even though the top-level loop wanted to resume parsing.
           Now whenever m_scriptRunner->execute returns "continue parsing"
           parsing will actually continue.  This fixed cases where we would
           ignore the rest of the document after document.write() of a script tag.
        (WebCore::HTML5Tokenizer::write):
         - Explain how document.write() reentrancy is safe in the new world.
        (WebCore::HTML5Tokenizer::watchForLoad):
         - HTML5ScriptRunnerHost implementation.  We assert that this call will
           never cause script execution since that's our current design.
        (WebCore::HTML5Tokenizer::stopWatchingForLoad):
         - HTML5ScriptRunnerHost implementation.
        (WebCore::HTML5Tokenizer::executeScript):
         - HTML5ScriptRunnerHost implementation. Save off the current source
           before executing scripts in case document.write is called during
           script execution.
        * html/HTML5Tokenizer.h:
         - Implement HTML5ScriptRunnerHost.

2010-05-28  Nathan Lawrence  <nlawrence@apple.com>

        Reviewed by Geoffrey Garen.

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

        Because not just <img> and <image> elements can preload images, we
        dont want to restrict the element associated with the loader.

        No new tests. Should share the same tests as the last patch.

        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::notifyFinished):

2010-05-27  MORITA Hajime  <morrita@google.com>

        Reviewed by Ojan Vafai.

        Cursor movement and text selection does not work well if a block is followed by an inline.
        https://bugs.webkit.org/show_bug.cgi?id=32123

        RenderInline::setSelectionState() missed selection state
        propagation for ancestors.  This fix pulled
        RenderBlock::setSelectionState() up to RenderBoxModelObject, to
        share it with RenderInline.

        Test: editing/selection/range-between-block-and-inline.html: Added.
        
        * rendering/RenderBlock.cpp:
        * rendering/RenderBlock.h:
        * rendering/RenderBoxModelObject.cpp:
        (WebCore::RenderBoxModelObject::setSelectionState):
        * rendering/RenderBoxModelObject.h:
        Moved setSelectionState() from RenderBlock to RenderBoxModelObject.
        
2010-05-27  MORITA Hajime  <morrita@google.com>

        Not reviewed. Fixed typo

        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::adjustStyle):

2010-05-27  Darin Adler  <darin@apple.com>

        Reviewed by David Levin.

        Make more HTML DOM members private, especially constructors
        https://bugs.webkit.org/show_bug.cgi?id=39697

        Refactoring, so no new tests needed.

        Working my way through HTMLTagNames.in from top to bottom, skipping any
        that are non-trivial for some reason.

        * html/HTMLTagNames.in: Removed createWithNew from audio, base, basefont,
        blockquote, body, br, button, canvas, caption, col, colgroup, datagrid,
        datalist, dcell, dcol, drow, del, dir, dl, and fieldset.

        * mathml/mathtags.in: Removed createWithNew from msub, and msup.

        * dom/Document.cpp:
        (WebCore::Document::implicitClose): Use create function instead of new.
        (WebCore::Document::getCSSCanvasElement): Ditto.
        * editing/IndentOutdentCommand.cpp:
        (WebCore::createIndentBlockquoteElement): Ditto.
        * editing/htmlediting.cpp:
        (WebCore::createBreakElement): Ditto.
        * html/HTMLTableElement.cpp:
        (WebCore::HTMLTableElement::createCaption): Ditto.
        * html/HTMLViewSourceDocument.cpp:
        (WebCore::HTMLViewSourceDocument::createContainingTable): Ditto.
        * rendering/RenderTextControl.cpp:
        (WebCore::RenderTextControl::setInnerTextValue): Ditto.

        * html/HTMLParser.cpp:
        (WebCore::HTMLParser::handleError): Use create function instead of new.
        Required reordering the code slightly, but the new order works fine.

        * html/HTMLAudioElement.cpp:
        (WebCore::HTMLAudioElement::create):
        * html/HTMLAudioElement.h:
        * html/HTMLBRElement.cpp:
        (WebCore::HTMLBRElement::create):
        * html/HTMLBRElement.h:
        * html/HTMLBaseElement.cpp:
        (WebCore::HTMLBaseElement::create):
        * html/HTMLBaseElement.h:
        * html/HTMLBaseFontElement.cpp:
        (WebCore::HTMLBaseFontElement::create):
        * html/HTMLBaseFontElement.h:
        * html/HTMLBlockquoteElement.cpp:
        (WebCore::HTMLBlockquoteElement::create):
        * html/HTMLBlockquoteElement.h:
        * html/HTMLBodyElement.cpp:
        (WebCore::HTMLBodyElement::create):
        * html/HTMLBodyElement.h:
        * html/HTMLButtonElement.cpp:
        (WebCore::HTMLButtonElement::create):
        * html/HTMLButtonElement.h:
        * html/HTMLCanvasElement.cpp:
        (WebCore::HTMLCanvasElement::create):
        * html/HTMLCanvasElement.h:
        * html/HTMLDListElement.cpp:
        (WebCore::HTMLDListElement::create):
        * html/HTMLDListElement.h:
        * html/HTMLDataGridCellElement.cpp:
        (WebCore::HTMLDataGridCellElement::create):
        * html/HTMLDataGridCellElement.h:
        * html/HTMLDataGridColElement.cpp:
        (WebCore::HTMLDataGridColElement::create):
        * html/HTMLDataGridColElement.h:
        * html/HTMLDataGridElement.cpp:
        (WebCore::HTMLDataGridElement::create):
        * html/HTMLDataGridElement.h:
        * html/HTMLDataGridRowElement.cpp:
        (WebCore::HTMLDataGridRowElement::create):
        * html/HTMLDataGridRowElement.h:
        * html/HTMLDataListElement.cpp:
        (WebCore::HTMLDataListElement::create):
        * html/HTMLDataListElement.h:
        * html/HTMLElement.cpp:
        (WebCore::HTMLElement::setInnerText):
        * html/HTMLFieldSetElement.cpp:
        (WebCore::HTMLFieldSetElement::create):
        * html/HTMLFieldSetElement.h:
        * html/HTMLModElement.cpp:
        (WebCore::HTMLModElement::HTMLModElement):
        (WebCore::HTMLModElement::create):
        * html/HTMLModElement.h:
        * html/HTMLTableCaptionElement.cpp:
        (WebCore::HTMLTableCaptionElement::create):
        * html/HTMLTableCaptionElement.h:
        Made constructors and virtual function overrides private, added create functions.
        Made constructors inline in cases where they were called in only one place.

        * html/HTMLTableColElement.cpp:
        (WebCore::HTMLTableColElement::HTMLTableColElement): Changed data member name
        from _span to m_span.
        (WebCore::HTMLTableColElement::create): Added.
        (WebCore::HTMLTableColElement::parseMappedAttribute): Updated to use m_span.
        * html/HTMLTableColElement.h:
        Made constructor and virtual function overrides private, added create function.
        Renamed _span to m_span.

2010-05-27  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Darin Adler.

        wx port: build fix for Linux
        https://bugs.webkit.org/show_bug.cgi?id=39860

        Use uint16_t instead of uint16.

        * plugins/PluginPackageNone.cpp:
        (WebCore::PluginPackage::NPVersion):

2010-05-27  Nathan Lawrence  <nlawrence@apple.com>

        Reviewed by Geoffrey Garen.

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

        Fixes the issue where images prefetched by JavaScript do not report
        their memory usage to the GC.

        There is a new test manual-tests/image-prefetch-stress.html that loads
        a new 4MB image every half a second.

        * html/HTMLImageLoader.cpp:
        (WebCore::HTMLImageLoader::notifyFinished):
        * manual-tests/image-prefetch-stress.html: Added.

2010-05-27  Eric Uhrhane  <ericu@chromium.org>

        Reviewed by Adam Barth.

        Add v8 bindings for async DB API in workers
        https://bugs.webkit.org/show_bug.cgi?id=39145

        No new tests.  This should share layout tests with JSC.

        Tweak the callback generation to switch lots of Frame* to ScriptExecutionContext*, and use the context passed in to handleEvent where possible.
        * bindings/scripts/CodeGeneratorV8.pm:

        As with CodeGeneratorV8; these are pretty much all tiny tweaks.
        We do have to use a slightly different patch for callback invocation in invokeCallback, as V8Proxy::retrieve() doesn't work in the worker context.
        * bindings/v8/custom/V8CustomPositionCallback.cpp:
        (WebCore::V8CustomPositionCallback::handleEvent):
        * bindings/v8/custom/V8CustomPositionErrorCallback.cpp:
        (WebCore::V8CustomPositionErrorCallback::handleEvent):
        * bindings/v8/custom/V8CustomSQLStatementErrorCallback.cpp:
        (WebCore::V8SQLStatementErrorCallback::handleEvent):
        * bindings/v8/custom/V8CustomVoidCallback.cpp:
        (WebCore::V8CustomVoidCallback::V8CustomVoidCallback):
        (WebCore::V8CustomVoidCallback::handleEvent):
        (WebCore::invokeCallback):
        * bindings/v8/custom/V8CustomVoidCallback.h:
        (WebCore::V8CustomVoidCallback::create):
        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::openDatabaseCallback):
        * bindings/v8/custom/V8DatabaseCustom.cpp:
        (WebCore::V8Database::changeVersionCallback):
        (WebCore::createTransaction):
        * bindings/v8/custom/V8DatabaseSyncCustom.cpp:
        (WebCore::V8DatabaseSync::changeVersionCallback):
        (WebCore::createTransaction):
        * bindings/v8/custom/V8NotificationCenterCustom.cpp:
        (WebCore::V8NotificationCenter::requestPermissionCallback):
        * bindings/v8/custom/V8SQLTransactionCustom.cpp:
        (WebCore::V8SQLTransaction::executeSqlCallback):

        Add openDatabaseCallback.
        * bindings/v8/custom/V8WorkerContextCustom.cpp:
        (WebCore::V8WorkerContext::openDatabaseCallback):
        Remove an obsolete parameter.
        (WebCore::V8WorkerContext::openDatabaseSyncCallback):

2010-05-27  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: [REGRESSION] Query parameters are not displayed in the resources headers section.

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

        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceView):
        (WebInspector.ResourceView.prototype._refreshRequestPayload):

2010-05-27  Nico Weber  <thakis@chromium.org>

        Reviewed by Eric Seidel

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

        Add Yank support to chromium mac. Do this by moving WebKit Mac's
        implementation of Editor::yankFromKillRing() into its own class and
        then using that.

        * editing/Editor.cpp:
          Use new KillRing class.
        * editing/Editor.h:
        (WebCore::Editor::killRing):
          Use new KillRing class.
        * editing/EditorCommand.cpp:
        (WebCore::executeYankAndSelect):
          Use new KillRing class.
        * platform/KillRing.h:
          Add new KillRing class, which acts as null object.
        (WebCore::KillRing::~KillRing):
        * platform/mac/KillRingMac.h:
          Add new KillRingMac class, which writes to the mac's kill ring.
        * platform/mac/KillRingMac.mm:
          Add new KillRingMac class, which writes to the mac's kill ring.

2010-05-27  Ben Murdoch  <benm@google.com>

        Reviewed by Jian Li.

        Build break in FileStream.cpp
        https://bugs.webkit.org/show_bug.cgi?id=39841

        When ENABLE_BLOB_SLICE is not defined, an undefined variable is used
        in FileStream.cpp:114. Fix by using the correct variable.

        Build fix so no new tests.

        * html/FileStream.cpp:
        (WebCore::FileStream::openForRead): Replace undefined variable with a defined one.

2010-05-27  Hans Wennborg  <hans@chromium.org>

        Reviewed by Jeremy Orlow.

        [Chromium] Default popup window size should not depend on zoom level
        https://bugs.webkit.org/show_bug.cgi?id=39835

        V8DOMWindow::openCallback should not set width and height of new
        window unless specified in the function's arguments.

        There is already code to reset the new window's origin coordinates,
        but the same thing should be done to its dimensions as well. Otherwise,
        a new popup with unspecified size will have its size depending on the
        parent's zoom level, which is not desirable.

        This is the same as what is done in
        bindings/js/JSDOMWindowCustom.cpp:826.

        * bindings/v8/custom/V8DOMWindowCustom.cpp:
        (WebCore::V8DOMWindow::openCallback):

2010-05-27  Anders Bakken  <agbakken@gmail.com>

        Reviewed by David Levin.

        qt_instance.cpp has coding-style errors
        https://bugs.webkit.org/show_bug.cgi?id=39744

        Fix webkit coding style issues in qt_instance.cpp

        * bridge/qt/qt_instance.cpp:
        (JSC::Bindings::QtInstance::getQtInstance):
        (JSC::Bindings::QtInstance::removeCachedMethod):
        (JSC::Bindings::QtInstance::markAggregate):
        (JSC::Bindings::QtInstance::getPropertyNames):
        (JSC::Bindings::QtInstance::stringValue):
        (JSC::Bindings::QtField::name):
        (JSC::Bindings::QtField::valueFromInstance):

2010-05-27  Anders Bakken  <agbakken@gmail.com>

        Reviewed by David Levin.

        qt_instance.h has coding-style errors
        https://bugs.webkit.org/show_bug.cgi?id=39743

        Fix webkit coding style issues in qt_instance.h

        * bridge/qt/qt_instance.h:

2010-05-27  Anders Bakken  <agbakken@gmail.com>

        Reviewed by David Levin.

        qt_class.h has coding-style errors
        https://bugs.webkit.org/show_bug.cgi?id=39742

        Fix webkit coding style issues in qt_class.h

        * bridge/qt/qt_class.h:

2010-05-27  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Darin Adler.

        <rdar://problem/8016158> Crash in CVPixelBufferCreateResolvedAttributesDictionary with RLE
        compressed movie.

        Configure the visual context to generate Direct3D compatible pixel buffers when we are able to
        use a CAImageQueue so there will be less conversion required before display. This change also  
        works around the issue that causes the RLE compressed movie to crash.

        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::load): Pass enum to QTMovieVisualContext
        constructor instead of CFDictionary.
        * platform/graphics/win/QTMovieVisualContext.cpp:
        (SetNumberValue):
        (getPixelBufferCreationOptions): New, create options dictionary appropriate for the visual 
        context type.
        (pixelBufferCreationOptions): New, return options dictionary appropriate for the visual 
        context type.
        (QTMovieVisualContextPriv::QTMovieVisualContextPriv): Get the options dictionary from
        getPixelBufferCreationOptions insteaad of taking it as a parameter.
        (QTMovieVisualContext::QTMovieVisualContext): Take enum instead of CFDictionary for 
        visual context configuration type.
        * platform/graphics/win/QTMovieVisualContext.h:

2010-05-27  Anders Carlsson  <andersca@apple.com>

        Reviewed by Adam Roben.

        [Qt] REGRESSION(r60258): It broke 10 tests.
        https://bugs.webkit.org/show_bug.cgi?id=39819

        * plugins/qt/PluginDataQt.cpp:
        (WebCore::PluginData::initPlugins):
        Append the MimeClassInfo object after it's been initialized.

2010-05-27  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fixes for Windows after recent changes.

        * platform/graphics/wx/FontWx.cpp:
        * wscript:

2010-05-27  Chris Fleizach  <cfleizach@apple.com>

        No review, build fixage.

        Bug 39324 - AX: WebKit doesn't call [super -accessibilityAttributeValue:attribute forParameter:] when it encounters a parameterized attribute that it doesn't handle.
        https://bugs.webkit.org/show_bug.cgi?id=39324

        Rolling out change from r60307 until a better fix is ready.

        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):

2010-05-27  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        [v8] Web Inspector: check that ScriptDebugListener was not removed
        while messages were dispatched in the nested loop.
        https://bugs.webkit.org/show_bug.cgi?id=39838

        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::handleV8DebugEvent):

2010-05-27  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        [v8] Web Inspector: undefined script URL value should be converted to an emtpy
        WebCore::String instead of "undefined" string. Otherwise it's shown
        in the Scripts panel with "undefined:<line no>" URL.
        https://bugs.webkit.org/show_bug.cgi?id=39845

        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::dispatchDidParseSource):

2010-05-27  Chris Fleizach  <cfleizach@apple.com>

        Reviewed by Darin Adler.

        AX: WebKit doesn't call [super -accessibilityAttributeValue:attribute forParameter:] when it encounters a parameterized attribute that it doesn't handle.
        https://bugs.webkit.org/show_bug.cgi?id=39324

        Make sure that accessibilityAttributeValue:forParameter: will default to its super's implementation. This is how AppKit expects objects to behave.

        * accessibility/mac/AccessibilityObjectWrapper.mm:
        (-[AccessibilityObjectWrapper accessibilityAttributeValue:forParameter:]):

2010-05-27  Xan Lopez  <xlopez@igalia.com>

        More GTK+ distcheck fixes.

        * GNUmakefile.am:

2010-05-27  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        [v8] Web Inspector: notify ScriptDebugListener when execution is resumed
        https://bugs.webkit.org/show_bug.cgi?id=39838

        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::handleV8DebugEvent):

2010-05-27  Anders Bakken  <agbakken@gmail.com>

        Reviewed by David Levin.

        qt_pixmapruntime.cpp has coding-style errors
        https://bugs.webkit.org/show_bug.cgi?id=39745

        Fix webkit coding style issues in qt_pixmapruntime.cpp

        * bridge/qt/qt_pixmapruntime.cpp:

2010-05-26  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Steve Block.

        Clean up IndexedDB layout tests
        https://bugs.webkit.org/show_bug.cgi?id=39748

        Remove an assert that always fires.

        Tests: storage/indexeddb/idb-database-request.html
               storage/indexeddb/indexed-database-request.html

        * storage/IDBDatabaseImpl.cpp:
        (WebCore::IDBDatabaseImpl::objectStores):

2010-05-27  Pavel Feldman  <pfeldman@chromium.org>

        Reviewed by Yury Semikhatsky.

        Web Inspector: Get CSS rule offsets lazily.

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

        * inspector/InspectorCSSStore.cpp:
        (WebCore::InspectorCSSStore::getStartEndOffsets):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::buildObjectForRule):

2010-05-27  Anders Bakken  <agbakken@gmail.com>

        Reviewed by David Levin.

        qt_class.cpp has coding-style errors
        https://bugs.webkit.org/show_bug.cgi?id=39741

        Fix webkit coding style issues in qt_class.cpp

        * bridge/qt/qt_class.cpp:
        (JSC::Bindings::QtClass::fieldNamed):

2010-05-27  Eric Seidel  <eric@webkit.org>

        Reviewed by Darin Adler.

        Remove bit-rotten INSTRUMENT_LAYOUT_SCHEDULING code from HTMLTokenizer
        https://bugs.webkit.org/show_bug.cgi?id=39714

        This came from a discussion on #webkit with Hyatt about this code
        being old and no longer used to either of our knowledge.

        No functional changes, thus no tests.

        I also removed a bogus FIXME I had added in an earlier patch
        before I understood what the HTMLTokenizer was trying to do.

        * html/HTMLTokenizer.cpp:
        (WebCore::HTMLTokenizer::scriptHandler):
        (WebCore::HTMLTokenizer::scriptExecution):
        (WebCore::HTMLTokenizer::continueProcessing):
        (WebCore::HTMLTokenizer::willWriteHTML):
        (WebCore::HTMLTokenizer::didWriteHTML):
        (WebCore::HTMLTokenizer::timerFired):
        (WebCore::HTMLTokenizer::executeExternalScriptsIfReady):

2010-05-27  Anton Muhin  <antonm@chromium.org>

        Reviewed by Adam Barth.

        Add callbacks to ScriptController to allow notifications on named items additions and removals
        https://bugs.webkit.org/show_bug.cgi?id=39679

        * bindings/js/ScriptController.h: Callbacks with empty implementation added.
        (WebCore::ScriptController::namedItemAdded):
        (WebCore::ScriptController::namedItemRemoved):
        * bindings/v8/ScriptController.cpp: Empty implementation of callbacks.
        (WebCore::ScriptController::namedItemAdded):
        (WebCore::ScriptController::namedItemRemoved):
        * bindings/v8/ScriptController.h: Callbacks added.
        * html/HTMLDocument.cpp: Hooking in callbacks.
        (WebCore::HTMLDocument::addItemToMap):
        (WebCore::HTMLDocument::removeItemFromMap):
        * html/HTMLDocument.h:

2010-05-27  Zhenyao Mo  <zmo@google.com>

        Reviewed by Dimitri Glazkov.

        Implement lazy clearing of renderbuffers
        https://bugs.webkit.org/show_bug.cgi?id=36248

        Test: fast/canvas/webgl/renderbuffer-initialization.html

        * html/canvas/WebGLFramebuffer.cpp:
        (WebCore::WebGLFramebuffer::WebGLFramebuffer): Init added members.
        (WebCore::WebGLFramebuffer::setAttachment): Set attachment object.
        (WebCore::WebGLFramebuffer::onBind): Perform buffer clearing if needed.
        (WebCore::WebGLFramebuffer::onAttachedObjectChange): Ditto.
        (WebCore::WebGLFramebuffer::isUninitialized): Check whether an attached object is uninitialized renderbuffer.
        (WebCore::WebGLFramebuffer::setInitialized): After initialize a renderbuffer, set the flag.
        (WebCore::WebGLFramebuffer::initializeRenderbuffers): Clear un-initialized renderbuffers if framebuffer is complete.
        * html/canvas/WebGLFramebuffer.h:
        (WebCore::WebGLFramebuffer::isDepthAttached): Changed to check object.
        (WebCore::WebGLFramebuffer::isStencilAttached): Ditto.
        (WebCore::WebGLFramebuffer::isDepthStencilAttached): Ditto.
        * html/canvas/WebGLRenderbuffer.cpp:
        (WebCore::WebGLRenderbuffer::WebGLRenderbuffer): Init added members.
        * html/canvas/WebGLRenderbuffer.h:
        (WebCore::WebGLRenderbuffer::isInitialized): As the function name.
        (WebCore::WebGLRenderbuffer::setInitialized): Ditto.
        * html/canvas/WebGLRenderingContext.cpp:
        (WebCore::WebGLRenderingContext::bindFramebuffer): Call onBind().
        (WebCore::WebGLRenderingContext::copyTexImage2D): Call onAttachedObjectChange().
        (WebCore::WebGLRenderingContext::deleteRenderbuffer): Ditto.
        (WebCore::WebGLRenderingContext::deleteTexture): Ditto.
        (WebCore::WebGLRenderingContext::framebufferRenderbuffer): Call setAttachment.
        (WebCore::WebGLRenderingContext::framebufferTexture2D): Call onAttachedObjectChange().
        (WebCore::WebGLRenderingContext::renderbufferStorage): Ditto.
        (WebCore::WebGLRenderingContext::texImage2DBase): Ditto.
        * platform/graphics/mac/GraphicsContext3DMac.cpp:
        (WebCore::GraphicsContext3D::reshape): Initialize internal buffers.

2010-05-27  Kristian Monsen  <kristianm@google.com>

        Reviewed by Darin Adler.

        Compile fix for Android, added include for Refcounted.h, this did not get
        included through Threading.h in Android.
        https://bugs.webkit.org/show_bug.cgi?id=39678

        Build fix only, no new tests.

        * storage/SQLTransactionSyncCallback.h:

2010-05-27  Joone Hur  <joone@kldp.org>

        Reviewed by Xan Lopez.

        Add GtkVersioning.h in ScrollbackGtk.cpp for maintaining compatibility with the previous GTK+

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

        * platform/gtk/ScrollbarGtk.cpp:

2010-05-27  Hans Wennborg  <hans@chromium.org>

        Reviewed by Alexey Proskuryakov.

        Increase limit on number of (i)frames from 200 to 1000.
        https://bugs.webkit.org/show_bug.cgi?id=39427

        The limit on number of iframes was introduced in r3707 back in 2003.
        An example of a page that is broken because of this is:
        http://vimcolorschemetest.googlecode.com/svn/html/index-c.html
        Neither Firefox nor IE has such a limit.

        It seems that WebKit can handle a significantly higher number of frames, and
        the original reasons for imposing the limit are believed to be gone.

        Tests: compositing/iframes/lots-of-iframes.html
               compositing/iframes/lots-of-objects.html

        * html/HTMLFrameElementBase.cpp:
        (WebCore::HTMLFrameElementBase::isURLAllowed):
        * page/FrameTree.cpp:
        (WebCore::FrameTree::uniqueChildName):
        * page/Page.h:
        * rendering/RenderEmbeddedObject.cpp:
        (WebCore::isURLAllowed):

2010-05-27  Kwang Yul Seo  <skyul@company100.net>

        Reviewed by Xan Lopez.

        [GTK] writeToFile fails when length is large
        https://bugs.webkit.org/show_bug.cgi?id=39666

        writeToFile forgot to increment data pointer.

        * platform/gtk/FileSystemGtk.cpp:
        (WebCore::writeToFile):

2010-05-26  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=39783, clean up the moveChild functions on RenderBlock.
        
        Eliminate the need to pass the toChildrenList to the moveChild functions by tightening up the type of the
        |to| argument to be a RenderBlock.
        
        Add a moveChildrenTo function that can move a range of children, and patch places that were doing this
        by hand.

        Make the append forms of the functions just use the insert forms with a beforeChild of 0.
        
        Patch insertChildNode in RenderObjectChildList so that it passes the fullInsert parameter through in the
        case where it does an append.
        
        Add an assert to RenderLayer that catches bad structure built when the fullInsert/Remove parameters are
        messed up when using append/insertChildNode.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::splitAnonymousBlocksAroundChild):
        (WebCore::RenderBlock::makeChildrenAnonymousColumnBlocks):
        (WebCore::RenderBlock::createAndAppendRootInlineBox):
        (WebCore::RenderBlock::moveChildTo):
        (WebCore::RenderBlock::moveChildrenTo):
        (WebCore::RenderBlock::makeChildrenNonInline):
        (WebCore::RenderBlock::removeChild):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::moveChildTo):
        (WebCore::RenderBlock::moveAllChildrenTo):
        (WebCore::RenderBlock::moveChildrenTo):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::addChild):
        * rendering/RenderObjectChildList.cpp:
        (WebCore::RenderObjectChildList::insertChildNode):
        * rendering/RenderRubyBase.cpp:
        (WebCore::RenderRubyBase::moveInlineChildren):

2010-05-27  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Add <pre>/<listing> hack to HTML5Lexer to fix the last remaining HTML5 test suite regressions
        https://bugs.webkit.org/show_bug.cgi?id=39818

        HTML parsers are supposed to ignore the first \n after a <pre> or <listing> tag
        for authoring convenience.  Our new HTML5Lexer didn't have this hack yet
        so there were 4 HTML5 tests failing.  Fixing this fixed the last of the HTML5
        test suite regressions using the HTML5Lexer vs the old lexer.

        * html/HTML5Lexer.cpp:
        (WebCore::HTML5Lexer::reset):
        (WebCore::HTML5Lexer::nextToken):
        * html/HTML5Lexer.h:
        (WebCore::HTML5Lexer::skipLeadingNewLineForListing):
        * html/HTML5TreeBuilder.cpp:
        (WebCore::HTML5TreeBuilder::passTokenToLegacyParser):

2010-05-26  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Teach the HTML5 parser how to handle external scripts
        https://bugs.webkit.org/show_bug.cgi?id=39716

        Make it possible for the HTML5Tokenizer to run external scripts.
        I created a new class HTML5ScriptRunner to hold all of the
        script-logic which is scattered throughout the old HTMLTokenizer.

        The design is for the HTML5Tokenizer (the "controller") to hold
        the Lexer, TreeBuilder and ScriptRunner.  The Lexer returns back
        to the controller, which passes tokens to the TreeBuilder.  When the
        treebuilder encounters a </script> tag it pauses itself and returns
        back to the controller which calls the ScriptRunner.  The TreeBuilder
        is un-paused when the HTML5Tokenizer calls takeScriptToProcess().

        The ScriptRunner attempts to process the passed script, and additionally
        any blocked scripts it can.  It returns to the controller indicating if
        parsing should continue.  If not, callbacks when external scripts load
        or when stylesheets are finished parsing will cause the controller to
        kick off script execution and parsing again at a later point.

        * WebCore.xcodeproj/project.pbxproj:
         - Add HTML5ScriptRunner.*
        * bindings/js/CachedScriptSourceProvider.h:
         - Add missing include discovered while building.
        * dom/ScriptElement.cpp:
        (WebCore::ScriptElement::finishParsingChildren):
         - Remove previous hack for inline <script> execution.
        * dom/ScriptElement.h:
         - Explain the HTML5 spec names for m_evaluated and m_createdByParser.
        * html/HTML5ScriptRunner.cpp: Added.
        (WebCore::HTML5ScriptRunner::HTML5ScriptRunner):
         - The HTML5Tokenizer is passed to the HTML5ScriptRunner as a
           CachedResourceClient.  The HTML5ScriptRunner will register the
           HTML5Tokenizer for notifyFinished callbacks when the scripts load.
           The HTML5Tokenizer is expected to call the HTML5ScriptRunner to
           execute any loaded scripts at that point.
        (WebCore::HTML5ScriptRunner::~HTML5ScriptRunner):
        (WebCore::HTML5ScriptRunner::frame): Helper method.
        (WebCore::createScriptLoadEvent): Helper method.
        (WebCore::createScriptErrorEvent): Helper method.
        (WebCore::HTML5ScriptRunner::sourceFromPendingScript):
         - Helper method for dealing with both inline and external script types.
        (WebCore::HTML5ScriptRunner::isPendingScriptReady):
         - Helper for dealing with both inline and external scripts.
        (WebCore::HTML5ScriptRunner::executePendingScript):
         - Execute one script.  Both external and inline scripts
           can become m_parsingBlockingScript if they can't be executed
           immediately after parsing.
        (WebCore::HTML5ScriptRunner::execute):
         - Takes a script element from the tree builder and tries
           to process it.
        (WebCore::HTML5ScriptRunner::executeParsingBlockingScripts):
         - Runs the current parsing blocking script if ready.
         - Running a script could add another parsing blocking script
           so we loop until there is no ready-to-run parsing blocking script.
        (WebCore::HTML5ScriptRunner::executeScriptsWaitingForLoad):
         - Called by HTML5Tokenizer when a script loads.
        (WebCore::HTML5ScriptRunner::executeScriptsWaitingForStylesheets):
         - Called by HTML5Tokenizer when stylesheets complete.
        (WebCore::HTML5ScriptRunner::requestScript):
         - Transcription of the HTML5 spec.
        (WebCore::HTML5ScriptRunner::runScript):
         - Transcription of the HTML5 spec.
        * html/HTML5ScriptRunner.h: Added.
         - New class to handle script loading and execution for the HTML5 parser.
        * html/HTML5Tokenizer.cpp:
        (WebCore::HTML5Tokenizer::HTML5Tokenizer):
         - Create a HTML5ScriptRunner and pass it "this" as the CachedResourceClient.
        (WebCore::HTML5Tokenizer::pumpLexer):
         - When the parser is paused, try to run scripts.
        (WebCore::HTML5Tokenizer::write):
         - Only pump the lexer when the parser is not paused.
        (WebCore::HTML5Tokenizer::end):
         - finish() tells us that we've reached EOF, not end()
         - Only pump the lexer when the parser is not paused.
        (WebCore::HTML5Tokenizer::finish):
         - Mark EOF, and end() if we're not waiting on scripts.
        (WebCore::HTML5Tokenizer::isWaitingForScripts):
         - isPaused() seems to mean isPausedForExternalScripts().
        (WebCore::HTML5Tokenizer::resumeParsingAfterScriptExecution):
        (WebCore::HTML5Tokenizer::notifyFinished):
        (WebCore::HTML5Tokenizer::executeScriptsWaitingForStylesheets):
        * html/HTML5Tokenizer.h:
        * html/HTML5TreeBuilder.cpp:
        (WebCore::HTML5TreeBuilder::HTML5TreeBuilder):
         - Add an m_isPaused flag.
        (WebCore::HTML5TreeBuilder::handleScriptStartTag):
        (WebCore::HTML5TreeBuilder::handleScriptEndTag):
        (WebCore::HTML5TreeBuilder::takeScriptToProcess):
         - Acknowledge that the caller has received the script element.
           It is the caller's responsibility to execute the script if necessary
           and re-pause the tree builder if necessary.
        (WebCore::HTML5TreeBuilder::passTokenToLegacyParser):
         - Save off the current script tag so that it can be passed to
           the HTML5ScriptRunner when we're paused.
        * html/HTML5TreeBuilder.h:
        (WebCore::HTML5TreeBuilder::setPaused):
        (WebCore::HTML5TreeBuilder::isPaused):

2010-05-26  Adam Barth  <abarth@webkit.org>

        Reviewed by Darin Adler.

        Implement SegmentedString::lookAheadSlowCase
        https://bugs.webkit.org/show_bug.cgi?id=39802

        The slow case is need by the resumer test suite.  Sadly, the resumer
        test suite is really slow and produces infinite errors (many of which
        are false positives).  I'll land more of the resumer test suite in a
        future patch.

        * platform/text/SegmentedString.cpp:
        (WebCore::SegmentedString::advance):
        * platform/text/SegmentedString.h:
        (WebCore::SegmentedString::lookAhead):
        (WebCore::SegmentedString::lookAheadIgnoringCase):
        (WebCore::SegmentedString::equalsLiterally):
        (WebCore::SegmentedString::equalsIgnoringCase):
        (WebCore::SegmentedString::lookAheadInline):
        (WebCore::SegmentedString::lookAheadSlowCase):

2010-05-26  Jer Noble  <jer.noble@apple.com>

        Patch edited by Adele Peterson and Mark Rowe.
        Reviewed by Eric Carlson

        Video elements show no video on Windows machines that do not support accelerated compositing
        https://bugs.webkit.org/show_bug.cgi?id=39446
        rdar://problem/7999794
        
        Create the visual context in setUpVideoRendering (as opposed to in load), and destroy it in
        tearDownVideoRendering (as opposed to in the destructor.)

        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::~MediaPlayerPrivateQuickTimeVisualContext):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::load): Moved creation of the visual context to setUpVideoRendering.
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::paint): Return early if the visual context isn't set up.
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::currentRenderingMode): If the visual context isn't set up,
        return MediaRenderingNone.
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::setUpVideoRendering): Create the visual context.
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::tearDownVideoRendering): Destroy the visual context.
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::hasSetUpVideoRendering): For software rendering mode, 
        make sure the visual context has been set up when saying the setup has been done.
        * platform/graphics/win/QTMovieVisualContext.cpp:
        (QTMovieVisualContextPriv::~QTMovieVisualContextPriv): Destruction moved to tearDownVideoRendering.
        Also, make sure to cancel the visual context's newImageAvailable callback in the visual context's destructor.
        (QTMovieVisualContext::create): Added.
        * platform/graphics/win/QTMovieVisualContext.h:

2010-05-26  Gustavo Noronha Silva  <gns@gnome.org>

        Build fixes for make distcheck.

        * GNUmakefile.am:

2010-05-26  Zelidrag Hornung  <zelidrag@chromium.org>

        Reviewed by Ojan Vafai.

        Fixed frame page up/down scrolling calculation. Made sure that the
        cursor moves with page up/down event. Please note that now for mac
        editing behavior we will scroll the content to center the cursor on
        page up/down while other platforms will align the cursor with the top of
        displayed frame.
        https://bugs.webkit.org/show_bug.cgi?id=38213

        Tests: editing/input/option-page-up-down.html (fixed)
               editing/input/scroll-viewport-page-up-down.html

        * WebCore.base.exp:
        * editing/EditorCommand.cpp:
        (WebCore::verticalScrollDistance): Fixed page scroll calculation. Now scroll height is calculated only from the visible portion not the entire frame height.
        (WebCore::executeMovePageDown): Now it can tell SelectionController to move the cursor with the page scroll up/down events.
        (WebCore::executeMovePageDownAndModifySelection): Ditto.
        (WebCore::executeMovePageUp): Ditto.
        (WebCore::executeMovePageUpAndModifySelection): Ditto.
        * editing/SelectionController.cpp:
        * editing/SelectionController.cpp: Exposed an enum param that lets EditorCommand.cpp control how cursor position will be aligned when page moves.
        (WebCore::SelectionController::setSelection): Ditto.
        (WebCore::SelectionController::modify): Ditto.
        * editing/SelectionController.h: Ditto.
        (WebCore::SelectionController::): Ditto.
        (WebCore::SelectionController::setSelection): Ditto.

2010-05-26  Jaime Yap  <jaimeyap@google.com>

        Reviewed by Pavel Feldman.

        ScriptCallStack::callLocation() sometimes passed an empty handle to
        toWebCoreString() causing a null pointer deref.
        https://bugs.webkit.org/show_bug.cgi?id=39681

        * bindings/v8/ScriptCallStack.cpp:
        (WebCore::ScriptCallStack::callLocation):

2010-05-26  Brian Weinstein  <bweinstein@apple.com>

        Reviewed by Mark Rowe.

        Web Inspector: Tooltip on Pause on Exceptions doesn't show up until it is clicked.
        https://bugs.webkit.org/show_bug.cgi?id=39804
        
        Initialize the title attribute of the Pause on Exceptions button when we initialize other information
        about it. 

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

2010-05-26  Adam Barth  <abarth@webkit.org>

        Unreviewed, rolling out r60262.
        http://trac.webkit.org/changeset/60262
        https://bugs.webkit.org/show_bug.cgi?id=39783

        Broke every build and is blocking me from working.  :(

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::splitAnonymousBlocksAroundChild):
        (WebCore::RenderBlock::makeChildrenAnonymousColumnBlocks):
        (WebCore::RenderBlock::moveChildTo):
        (WebCore::RenderBlock::moveAllChildrenTo):
        (WebCore::RenderBlock::makeChildrenNonInline):
        (WebCore::RenderBlock::removeChild):
        * rendering/RenderBlock.h:
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::addChild):
        * rendering/RenderObjectChildList.cpp:
        (WebCore::RenderObjectChildList::insertChildNode):
        * rendering/RenderRubyBase.cpp:
        (WebCore::RenderRubyBase::moveInlineChildren):
        (WebCore::RenderRubyBase::moveBlockChildren):
        (WebCore::RenderRubyBase::mergeBlockChildren):

2010-05-26  Anders Carlsson  <andersca@apple.com>

        Unreviewed, rolling out r60256.
        http://trac.webkit.org/changeset/60256
        https://bugs.webkit.org/show_bug.cgi?id=39382

        Causes fast/dom/prototype-inheritance-2.html to start
        crashing.

        * history/PageCache.cpp:
        (WebCore::PageCache::PageCache):
        (WebCore::PageCache::add):
        * history/PageCache.h:
        (WebCore::PageCache::get):
        * loader/DocumentLoader.cpp:
        (WebCore::DocumentLoader::commitIfReady):
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::canCachePageContainingThisFrame):
        (WebCore::FrameLoader::canCachePage):
        (WebCore::pageCacheLogPrefix):
        (WebCore::pageCacheLog):
        (WebCore::FrameLoader::logCanCachePageDecision):
        (WebCore::FrameLoader::logCanCacheFrameDecision):
        (WebCore::FrameLoader::commitProvisionalLoad):
        (WebCore::FrameLoader::open):
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy):
        (WebCore::FrameLoader::loadProvisionalItemFromCachedPage):
        (WebCore::FrameLoader::cachePageForHistoryItem):
        (WebCore::FrameLoader::navigateToDifferentDocument):
        * loader/FrameLoader.h:
        * svg/graphics/SVGImage.cpp:
        (WebCore::SVGImage::dataChanged):

2010-05-26  David Hyatt  <hyatt@apple.com>

        Reviewed by Sam Weinig.

        https://bugs.webkit.org/show_bug.cgi?id=39783, clean up the moveChild functions on RenderBlock.
        
        Eliminate the need to pass the toChildrenList to the moveChild functions by tightening up the type of the
        |to| argument to be a RenderBlock.
        
        Add a moveChildrenTo function that can move a range of children, and patch places that were doing this
        by hand.

        Make the append forms of the functions just use the insert forms with a beforeChild of 0.
        
        Patch insertChildNode in RenderObjectChildList so that it passes the fullInsert parameter through in the
        case where it does an append.
        
        Add an assert to RenderLayer that catches bad structure built when the fullInsert/Remove parameters are
        messed up when using append/insertChildNode.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::splitAnonymousBlocksAroundChild):
        (WebCore::RenderBlock::makeChildrenAnonymousColumnBlocks):
        (WebCore::RenderBlock::createAndAppendRootInlineBox):
        (WebCore::RenderBlock::moveChildTo):
        (WebCore::RenderBlock::moveChildrenTo):
        (WebCore::RenderBlock::makeChildrenNonInline):
        (WebCore::RenderBlock::removeChild):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::moveChildTo):
        (WebCore::RenderBlock::moveAllChildrenTo):
        (WebCore::RenderBlock::moveChildrenTo):
        * rendering/RenderLayer.cpp:
        (WebCore::RenderLayer::addChild):
        * rendering/RenderObjectChildList.cpp:
        (WebCore::RenderObjectChildList::insertChildNode):
        * rendering/RenderRubyBase.cpp:
        (WebCore::RenderRubyBase::moveInlineChildren):

2010-05-26  Anders Carlsson  <andersca@apple.com>

        Fix GTK+ test failures.

        * plugins/gtk/PluginDataGtk.cpp:
        (WebCore::PluginData::initPlugins):
        * plugins/win/PluginDataWin.cpp:
        (WebCore::PluginData::initPlugins):

2010-05-25  Anders Carlsson  <andersca@apple.com>

        Reviewed by Darin Adler.

        Clean up MimeClassInfo and PluginInfo
        https://bugs.webkit.org/show_bug.cgi?id=39700

        This gets rid of all the heap allocation from MimeClassInfo and PluginInfo. 
        
        It also changes the m_plugins and m_mimes vectors in PluginData to not hold heap allocated MimeClassInfo
        and PluginClassInfo objects.

        * page/Page.cpp:
        (WebCore::Page::refreshPlugins):
        * plugins/MimeType.cpp:
        (WebCore::MimeType::type):
        (WebCore::MimeType::suffixes):
        (WebCore::MimeType::description):
        (WebCore::MimeType::enabledPlugin):
        * plugins/MimeType.h:
        (WebCore::MimeType::mimeClassInfo):
        * plugins/MimeTypeArray.cpp:
        (WebCore::MimeTypeArray::item):
        (WebCore::MimeTypeArray::canGetItemsForName):
        (WebCore::MimeTypeArray::namedItem):
        * plugins/Plugin.cpp:
        (WebCore::Plugin::name):
        (WebCore::Plugin::filename):
        (WebCore::Plugin::description):
        (WebCore::Plugin::length):
        (WebCore::Plugin::item):
        (WebCore::Plugin::canGetItemsForName):
        (WebCore::Plugin::namedItem):
        * plugins/Plugin.h:
        (WebCore::Plugin::pluginInfo):
        * plugins/PluginArray.cpp:
        (WebCore::PluginArray::length):
        (WebCore::PluginArray::item):
        (WebCore::PluginArray::canGetItemsForName):
        (WebCore::PluginArray::namedItem):
        (WebCore::PluginArray::pluginData):
        * plugins/PluginArray.h:
        * plugins/PluginData.cpp:
        (WebCore::PluginData::PluginData):
        (WebCore::PluginData::~PluginData):
        (WebCore::PluginData::supportsMimeType):
        (WebCore::PluginData::pluginNameForMimeType):
        * plugins/PluginData.h:
        (WebCore::operator==):
        (WebCore::PluginData::create):
        (WebCore::PluginData::disconnectPage):
        (WebCore::PluginData::page):
        (WebCore::PluginData::plugins):
        (WebCore::PluginData::mimes):
        * plugins/chromium/PluginDataChromium.cpp:
        (WebCore::PluginCache::reset):
        (WebCore::PluginCache::plugins):
        (WebCore::PluginData::initPlugins):
        (WebCore::getPluginMimeTypeFromExtension):
        * plugins/gtk/PluginDataGtk.cpp:
        (WebCore::PluginData::initPlugins):
        * plugins/mac/PluginDataMac.mm:
        (WebCore::PluginData::initPlugins):
        * plugins/qt/PluginDataQt.cpp:
        (WebCore::PluginData::initPlugins):
        * plugins/win/PluginDataWin.cpp:
        (WebCore::PluginData::initPlugins):
        * plugins/wx/PluginDataWx.cpp:
        (WebCore::PluginData::initPlugins):

2010-05-26  Nate Chapin  <japhet@chromium.org>

        Reviewed by Adam Barth.

        Factor PageCache functionality out of FrameLoader and into
        PageCache.

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

        Refactor only, so no new tests.

        * history/PageCache.cpp:
        (WebCore::pageCacheLogPrefix):
        (WebCore::pageCacheLog):
        (WebCore::logCanCacheFrameDecision):
        (WebCore::logCanCachePageDecision):
        (WebCore::PageCache::canCachePageContainingThisFrame):
        (WebCore::PageCache::canCache):
        (WebCore::PageCache::add):
        (WebCore::PageCache::get):
        * history/PageCache.h:
        * loader/DocumentLoader.cpp:
        * loader/FrameLoader.cpp:
        (WebCore::FrameLoader::commitProvisionalLoad):
        (WebCore::FrameLoader::prepareForCachedPageRestore):
        (WebCore::FrameLoader::continueLoadAfterNavigationPolicy):
        (WebCore::FrameLoader::loadProvisionalItemFromCachedPage):
        (WebCore::FrameLoader::navigateToDifferentDocument):
        * loader/FrameLoader.h:
        (WebCore::FrameLoader::quickRedirectComing):
        * svg/graphics/SVGImage.cpp:

2010-05-26  Peter Kasting  <pkasting@google.com>

        Reviewed by Adam Barth.

        https://bugs.webkit.org/show_bug.cgi?id=39786
        Properly reset |bytes_to_consume| when reaching the "gif_done" state in
        the open-source GIF decoder.
        
        No tests, since there's no test harness support for checking the
        internal ImageDecoder state values.

        * platform/image-decoders/gif/GIFImageReader.cpp:
        (GIFImageReader::read): Use a macro to perform the state change, like we do everywhere else in the file.  Also correctly return "failure" for certain corrupt GIFs, since that doesn't prevent their display (due to WebKit's different use of this code compared to Mozilla).

2010-05-26  Sheriff Bot  <webkit.review.bot@gmail.com>

        Unreviewed, rolling out r60251.
        http://trac.webkit.org/changeset/60251
        https://bugs.webkit.org/show_bug.cgi?id=39788

        broke tests (Requested by dhyatt on #webkit).

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::moveChildTo):
        (WebCore::RenderBlock::moveAllChildrenTo):
        (WebCore::RenderBlock::makeChildrenNonInline):
        (WebCore::RenderBlock::removeChild):
        * rendering/RenderBlock.h:
        * rendering/RenderRubyBase.cpp:
        (WebCore::RenderRubyBase::moveInlineChildren):
        (WebCore::RenderRubyBase::moveBlockChildren):
        (WebCore::RenderRubyBase::mergeBlockChildren):
        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::removeChild):

2010-05-26  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Fix webkit01.dat resumer tests in HTML5 parser
        https://bugs.webkit.org/show_bug.cgi?id=39796

        To match the old tokenizer, we should only flush character tokens when
        we reach EOF.  Added a notion of a "closed" segmented string that
        cannot be appended to, which models EOF.

        * html/HTML5Lexer.cpp:
        (WebCore::HTML5Lexer::nextToken):
        (WebCore::HTML5Lexer::shouldEmitBufferedCharacterToken):
        * html/HTML5Lexer.h:
        * html/HTML5Tokenizer.cpp:
        (WebCore::HTML5Tokenizer::pumpLexer):
        (WebCore::HTML5Tokenizer::write):
        (WebCore::HTML5Tokenizer::end):
        * html/HTML5Tokenizer.h:
        * platform/text/SegmentedString.cpp:
        (WebCore::SegmentedString::SegmentedString):
        (WebCore::SegmentedString::clear):
        (WebCore::SegmentedString::append):
        * platform/text/SegmentedString.h:
        (WebCore::SegmentedString::SegmentedString):
        (WebCore::SegmentedString::close):
        (WebCore::SegmentedString::isClosed):

2010-05-26  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Make HTML5 lexer not ASSERT when resuming partial parses
        https://bugs.webkit.org/show_bug.cgi?id=39755

        I'm working through a variation of the webkit-runner.html test suite
        that stops the parser at every character to make sure we can resume
        parsing correctly.  This patch fixes some errors caught by ASSERTs,
        which prevent the basic tests from running to completion.  There's a
        bunch more work to do, however.

        Test: html5lib/webkit-resumer.html

        * html/HTML5Lexer.cpp:
        (WebCore::HTMLNames::isEndTagBufferingState):
        (WebCore::HTML5Lexer::nextToken):
        (WebCore::HTML5Lexer::addToPossibleEndTag):
        * html/HTML5Lexer.h:
        * html/HTML5Tokenizer.cpp:
        (WebCore::HTML5Tokenizer::write):
        * html/HTML5Tokenizer.h:

2010-05-26  Alexey Proskuryakov  <ap@apple.com>

        Mac 32 bit build fix.

        * platform/graphics/mac/SimpleFontDataMac.mm: (WebCore::SimpleFontData::platformInit):
        Use static_cast instead of narrowPrecisionToFloat - the latter can't convert from float to float.

2010-05-26  David Hyatt  <hyatt@apple.com>

        Reviewed by Ojan.

        https://bugs.webkit.org/show_bug.cgi?id=39783, clean up moveChild functions in RenderBlock.

        Cut out the need to pass the to block's child list by tightening up the type of the to object
        from RenderObject to RenderBlock.

        Implement the "append" versions of the move functions using their "insert" counterparts, since
        insertChildNode just calls appendChildNode when beforeChild is 0 anyway.

        Add comments explaining why the default for fullRemoveInsert is false, and make sure all forms
        of the move functions have the optional parameter for consistency.

        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::createAndAppendRootInlineBox):
        (WebCore::RenderBlock::moveChildTo):
        (WebCore::RenderBlock::moveAllChildrenTo):
        (WebCore::RenderBlock::makeChildrenNonInline):
        (WebCore::RenderBlock::removeChild):
        * rendering/RenderBlock.h:
        (WebCore::RenderBlock::moveChildTo):
        (WebCore::RenderBlock::moveAllChildrenTo):
        * rendering/RenderRubyBase.cpp:
        (WebCore::RenderRubyBase::moveInlineChildren):
        (WebCore::RenderRubyBase::moveBlockChildren):
        (WebCore::RenderRubyBase::mergeBlockChildren):
        * rendering/RenderRubyRun.cpp:
        (WebCore::RenderRubyRun::removeChild):

2010-05-26  Dan Bernstein  <mitz@apple.com>

        Typed and reviewed by Alexey Proskuryakov.

        https://bugs.webkit.org/show_bug.cgi?id=39682
        <rdar://problem/8026774> REGRESSION: WebKit nightly adding insane height to div at random

        Test: fast/css/custom-font-xheight.html

        * platform/graphics/mac/SimpleFontDataMac.mm: (WebCore::SimpleFontData::platformInit):
        Calling an Objective C method that returns a structure with a null object can leave garbage in
        returned value. Custom fonts don't have an NSFont, they only have a CGFont. Call
        platformBoundsForGlyph() function instead, which works with CGFont.
        (WebCore::SimpleFontData::platformBoundsForGlyph): Fixed to work on Tiger (for fonts that
        have an NSFont), since this is now used in more cases.

2010-05-26  Beth Dakin  <bdakin@apple.com>

        Build fix for Mac clean builds.

        * storage/IDBDatabaseRequest.idl:

2010-05-26  Eric Carlson  <eric.carlson@apple.com>

        Reviewed by Dan Bernstein.

        Must not cast between CFNumberRef and CFBooleanRef.
        <rdar://problem/8030739> 
        https://bugs.webkit.org/show_bug.cgi?id=39756

        * platform/graphics/win/QTMovieVisualContext.cpp:
        (QTMovieVisualContext::getCGImageOptions): QuickTime assumes the value associated 
        with kCVPixelBufferCGImageCompatibilityKey is a CFBoolean, so add one.

2010-05-26  Xan Lopez  <xlopez@igalia.com>

        GTK+ build fix, strike two.

        * bindings/gobject/WebKitDOMEventTarget.cpp:
        (webkit_dom_event_target_get_type):
        (webkit_dom_event_target_default_init):

2010-05-26  Jeremy Orlow  <jorlow@chromium.org>

        Unreviewed build fix for Windows + clean up the Visual Studio project.

        * WebCore.gypi:
        * WebCore.vcproj/WebCore.vcproj:

2010-05-26  Andrei Popescu  <andreip@google.com>

        Reviewed by Jeremy Orlow.

        Indexed Database component is missing IDBObjectStoreRequest interface
        https://bugs.webkit.org/show_bug.cgi?id=39490

        Adding IDL and stub implementation for IDBObjectStoreRequest.

        No new tests, indexed database isn't yet testable.

        * DerivedSources.cpp:
        * DerivedSources.make:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pri:
        * WebCore.pro:
        * WebCore.xcodeproj/project.pbxproj:
        * bindings/js/JSIDBObjectStoreRequestCustom.cpp: Added.
        (WebCore::JSIDBObjectStoreRequest::remove):
        (WebCore::JSIDBObjectStoreRequest::addOrModify):
        (WebCore::JSIDBObjectStoreRequest::modify):
        (WebCore::JSIDBObjectStoreRequest::add):
        (WebCore::JSIDBObjectStoreRequest::get):
        * bindings/v8/custom/V8IDBObjectStoreRequestCustom.cpp: Added.
        (WebCore::V8IDBObjectStoreRequest::removeCallback):
        (WebCore::V8IDBObjectStoreRequest::addOrModifyCallback):
        (WebCore::V8IDBObjectStoreRequest::modifyCallback):
        (WebCore::V8IDBObjectStoreRequest::addCallback):
        (WebCore::V8IDBObjectStoreRequest::getCallback):
        * storage/IDBObjectStore.cpp: Added.
        * storage/IDBObjectStore.h: Added.
        (WebCore::IDBObjectStore::~IDBObjectStore):
        * storage/IDBObjectStoreRequest.cpp: Added.
        (WebCore::IDBObjectStoreRequest::name):
        (WebCore::IDBObjectStoreRequest::keyPath):
        (WebCore::IDBObjectStoreRequest::IDBObjectStoreRequest):
        * storage/IDBObjectStoreRequest.h: Added.
        (WebCore::IDBObjectStoreRequest::create):
        (WebCore::IDBObjectStoreRequest::~IDBObjectStoreRequest):
        * storage/IDBObjectStoreRequest.idl: Added.

2010-05-26  Xan Lopez  <xlopez@igalia.com>

        Unreviewed GTK+ build fix.

        Use G_DEFINE_INTERFACE only if it's available.

        * bindings/gobject/WebKitDOMEventTarget.cpp:
        (webkit_dom_event_target_get_type):
        (webkit_dom_event_target_default_init):

2010-05-26  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Darin Fisher.

        Implement WebDOMStorageList and make WebIDBDatabase use it
        https://bugs.webkit.org/show_bug.cgi?id=39731

        Remove unused function.

        * dom/DOMStringList.h:

2010-05-26  Jessie Berlin  <jberlin@webkit.org>

        Reviewed by Pavel Feldman

        Bug 31296 - Web Inspector: Should support console.groupCollapsed
        https://bugs.webkit.org/show_bug.cgi?id=31296

        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::startGroup):
        Set the message type based on whether or not it should be initially collapsed.
        * inspector/InspectorController.h:

        * inspector/front-end/ConsoleView.js:
        Treat a StartGroupCollapsed message the same way as a StartGroup message, but display the tree for the group as collapsed.
        (WebInspector.ConsoleView.prototype.addMessage):
        (WebInspector.ConsoleMessage.prototype.toMessageElement):
        (WebInspector.ConsoleMessage.prototype.toString):
        (WebInspector.ConsoleGroup.prototype.addMessage):

        * page/Console.cpp:
        (WebCore::Console::groupCollapsed):
        Create a group and indicate that it should be collapsed.
        * page/Console.h:
        Add the StartGroupCollapsed message type.

        (WebCore::):
        * page/Console.idl:
        Create the JS bindings for groupCollapsed.

2010-05-26  yael aharon  <yael.aharon@nokia.com>

        Reviewed by Kent Tamura.

        Support the labels attribute in labelable form controls
        https://bugs.webkit.org/show_bug.cgi?id=38713

        Added a new cache type in NodeRareData to store the new cache type.
        This cache is created on demand.

        Added the "labels" attribute to all form controls that support this attribute.

        Tests: fast/forms/labels-add-htmlFor-label.html
               fast/forms/labels-add-parent-label.html
               fast/forms/labels-change-htmlFor-attribute.html
               fast/forms/labels-item-index.html
               fast/forms/labels-remove-htmlFor-attribute.html
               fast/forms/labels-remove-htmlFor-label.html
               fast/forms/labels-remove-parent-label.html
               fast/forms/labels-set-htmlFor-attribute.html

        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * dom/Node.cpp:
        (WebCore::Node::notifyLocalNodeListsLabelChanged):
        (WebCore::Node::removeCachedLabelsNodeList):
        (WebCore::NodeListsNodeData::invalidateCaches):
        (WebCore::NodeListsNodeData::invalidateCachesThatDependOnAttributes):
        (WebCore::NodeListsNodeData::isEmpty):
        * dom/Node.h:
        * dom/NodeRareData.h:
        (WebCore::NodeListsNodeData::NodeListsNodeData):
        * html/HTMLButtonElement.idl:
        * html/HTMLFormControlElement.cpp:
        (WebCore::HTMLFormControlElement::isLabelable):
        (WebCore::HTMLFormControlElement::labels):
        * html/HTMLFormControlElement.h:
        * html/HTMLInputElement.idl:
        * html/HTMLLabelElement.cpp:
        (WebCore::HTMLLabelElement::parseMappedAttribute):
        * html/HTMLLabelElement.h:
        * html/HTMLMeterElement.idl:
        * html/HTMLProgressElement.idl:
        * html/HTMLSelectElement.idl:
        * html/HTMLTextAreaElement.idl:
        * html/LabelsNodeList.cpp: Added.
        (WebCore::LabelsNodeList::LabelsNodeList):
        (WebCore::LabelsNodeList::~LabelsNodeList):
        (WebCore::LabelsNodeList::nodeMatches):
        * html/LabelsNodeList.h: Added.
        (WebCore::LabelsNodeList::create):

2010-05-26  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Jeremy Orlow.

        Style fix in JSEventCustom.cpp
        https://bugs.webkit.org/show_bug.cgi?id=39727

        Conditional includes should be all together after the
        unconditional includes.

        * bindings/js/JSEventCustom.cpp:

2010-05-24  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Steve Block.

        Add IDBDatabase's attributes
        https://bugs.webkit.org/show_bug.cgi?id=39602

        Add the attributes (like name, description, etc) for
        IDBDatabaseRequest.  Plumb that back to the IDBDatabase
        object which stores the data.

        CMake and Android build changes in another CL (that
        fixes other stuff too).

        Updated the layout test, but there's some further testing
        that needs to be added once the Chromium side of this lands.

        * GNUmakefile.am
        * WebCore.gypi:
        * WebCore.pro
        * WebCore.vcproj/WebCore.vcproj
        * WebCore.xcodeproj/project.pbxproj
        * dom/DOMStringList.h:
        (WebCore::DOMStringList::strings):
        * storage/IDBDatabase.cpp: Removed.
        * storage/IDBDatabase.h:
        * storage/IDBDatabaseImpl.cpp: Added.
        (WebCore::IDBDatabaseImpl::IDBDatabaseImpl):
        (WebCore::IDBDatabaseImpl::~IDBDatabaseImpl):
        (WebCore::IDBDatabaseImpl::objectStores):
        * storage/IDBDatabaseImpl.h: Added.
        (WebCore::IDBDatabaseImpl::create):
        (WebCore::IDBDatabaseImpl::name):
        (WebCore::IDBDatabaseImpl::description):
        (WebCore::IDBDatabaseImpl::version):
        * storage/IDBDatabaseRequest.h:
        (WebCore::IDBDatabaseRequest::name):
        (WebCore::IDBDatabaseRequest::description):
        (WebCore::IDBDatabaseRequest::version):
        (WebCore::IDBDatabaseRequest::objectStores):
        * storage/IDBDatabaseRequest.idl:
        * storage/IDBSuccessEvent.cpp:
        (WebCore::IDBSuccessEvent::IDBSuccessEvent):
        * storage/IndexedDatabaseImpl.cpp:
        (WebCore::IndexedDatabaseImpl::open):
        * storage/IndexedDatabaseImpl.h:

2010-05-26  Xan Lopez  <xlopez@igalia.com>

        Reviewed by NOBODY Gustavo Noronha.

        [GTK] Add support for DOM events in the GObject DOM bindings
        https://bugs.webkit.org/show_bug.cgi?id=38844

        Add actual GObject event objects to the DOM event signals.

        * GNUmakefile.am:
        * bindings/gobject/GObjectEventListener.cpp:
        (WebCore::GObjectEventListener::handleEvent):
        * bindings/gobject/WebKitDOMBinding.cpp:
        (WebKit::wrapEventTarget):
        (WebKit::kit):
        * bindings/gobject/WebKitDOMBinding.h:
        * bindings/gobject/WebKitDOMEventTarget.cpp: Added.
        (webkit_dom_event_target_default_init):
        (webkit_dom_event_target_dispatch_event):
        * bindings/gobject/WebKitDOMEventTarget.h: Added.
        * bindings/scripts/CodeGeneratorGObject.pm:

2010-05-24  Jeremy Orlow  <jorlow@chromium.org>

        Reviewed by Steve Block.

        [Android] Add IndexedDB to the build
        https://bugs.webkit.org/show_bug.cgi?id=39593

        Add the current list of build files to Android's make files.  From now on,
        I'll try to be sure to update these along with the rest.
        Also, fix a nit in the gypi file.

        No tests..just changing build files.

        * Android.derived.jscbindings.mk:
        * Android.derived.v8bindings.mk:
        * Android.mk:
        * WebCore.gypi:

2010-05-26  Alexander Pavlov  <apavlov@chromium.org>

        Reviewed by Pavel Feldman.

        Expose CSS rule body start/end offsets in the parent stylesheet
        https://bugs.webkit.org/show_bug.cgi?id=38906

        CSSParser::parseSheet() accepts an optional external Vector where the start/end offsets
        of the CSSStyleRule bodies, relative to the beginning of the stylesheet, will be stored.
        This Vector is only used when the Web Inspector needs the body ranges, thus there is no
        memory overhead until the user starts editing styles via the Web Inspector.
        Additionally, fixed an issue with a single inspectorStyleSheet for all frames in the page.

        Test: inspector/styles-source-offsets.html

        * css/CSSGrammar.y:
        * css/CSSParser.cpp:
        (WebCore::CSSParser::CSSParser):
        (WebCore::CSSParser::setupParser):
        (WebCore::CSSParser::parseSheet):
        (WebCore::CSSParser::createStyleRule):
        (WebCore::CSSParser::updateLastSelectorLineAndPosition):
        (WebCore::CSSParser::markRuleBodyStart):
        (WebCore::CSSParser::markRuleBodyEnd):
        * css/CSSParser.h:
        (WebCore::CSSParser::resetRuleBodyMarks):
        * inspector/InspectorCSSStore.cpp:
        (WebCore::InspectorCSSStore::InspectorCSSStore):
        (WebCore::InspectorCSSStore::reset):
        (WebCore::InspectorCSSStore::removeDocument):
        (WebCore::InspectorCSSStore::inspectorStyleSheet):
        (WebCore::InspectorCSSStore::getStartEndOffsets):
        (WebCore::InspectorCSSStore::getIndexInStyleRules):
        (WebCore::InspectorCSSStore::disabledStyleForId):
        (WebCore::InspectorCSSStore::styleForId):
        (WebCore::InspectorCSSStore::ruleForId):
        (WebCore::InspectorCSSStore::bindStyle):
        (WebCore::InspectorCSSStore::bindStyleSheet):
        (WebCore::InspectorCSSStore::bindRule):
        * inspector/InspectorCSSStore.h:
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::InspectorController):
        (WebCore::InspectorController::resourceForURL):
        * inspector/InspectorController.h:
        (WebCore::InspectorController::inspectorFrontend):
        * inspector/InspectorDOMAgent.cpp:
        (WebCore::InspectorDOMAgent::InspectorDOMAgent):
        (WebCore::InspectorDOMAgent::unbind):
        (WebCore::InspectorDOMAgent::getStyles):
        (WebCore::InspectorDOMAgent::getAllStyles):
        (WebCore::InspectorDOMAgent::buildArrayForCSSRules):
        (WebCore::InspectorDOMAgent::buildArrayForPseudoElements):
        (WebCore::InspectorDOMAgent::applyStyleText):
        (WebCore::InspectorDOMAgent::setStyleText):
        (WebCore::InspectorDOMAgent::setStyleProperty):
        (WebCore::InspectorDOMAgent::toggleStyleEnabled):
        (WebCore::InspectorDOMAgent::setRuleSelector):
        (WebCore::InspectorDOMAgent::addRule):
        (WebCore::InspectorDOMAgent::buildObjectForStyle):
        (WebCore::InspectorDOMAgent::buildArrayForDisabledStyleProperties):
        (WebCore::InspectorDOMAgent::buildObjectForStyleSheet):
        (WebCore::InspectorDOMAgent::buildObjectForRule):
        * inspector/InspectorDOMAgent.h:
        * inspector/front-end/DOMAgent.js:
        (WebInspector.CSSStyleDeclaration):

2010-05-26  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        [GTK] Add support for DOM events in the GObject DOM bindings
        https://bugs.webkit.org/show_bug.cgi?id=38844

        Use GObject-like names for the DOM event signals. Basically go
        from 'mousewheel' to 'mouse-wheel-event'.

        * bindings/scripts/CodeGeneratorGObject.pm:

2010-05-26  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed. Sort Xcode project file.

        * WebCore.xcodeproj/project.pbxproj:

2010-05-26  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        [GTK] Add support for DOM events in the GObject DOM bindings
        https://bugs.webkit.org/show_bug.cgi?id=38844

        First step towards DOM events support. We create one signal per
        event supported in the DOM classes, and create a custom
        GObjectEventListener that will emit a GObject signal when an event
        is dispatched to the object. There is no event object at the
        moment (we just pass NULL), and no support for hooking into the
        capture phase.

        * GNUmakefile.am:
        * bindings/gobject/GObjectEventListener.cpp: Added.
        (WebCore::GObjectEventListener::handleEvent):
        (WebCore::GObjectEventListener::operator==):
        * bindings/gobject/GObjectEventListener.h: Added.
        (WebCore::GObjectEventListener::create):
        (WebCore::GObjectEventListener::cast):
        (WebCore::GObjectEventListener::GObjectEventListener):
        * bindings/scripts/CodeGeneratorGObject.pm:
        * bindings/scripts/test/GObject/WebKitDOMTestCallback.cpp:
        (WebKit::core):
        (webkit_dom_test_callback_finalize):
        (webkit_dom_test_callback_class_init):
        (WebKit::wrapTestCallback):
        * bindings/scripts/test/GObject/WebKitDOMTestInterface.cpp:
        (WebKit::core):
        (webkit_dom_test_interface_finalize):
        (webkit_dom_test_interface_class_init):
        (WebKit::wrapTestInterface):
        * bindings/scripts/test/GObject/WebKitDOMTestObj.cpp:
        (WebKit::core):
        (webkit_dom_test_obj_finalize):
        (webkit_dom_test_obj_class_init):
        (WebKit::wrapTestObj):
        * dom/EventListener.h:
        (WebCore::EventListener::):

2010-05-26  Xan Lopez  <xlopez@igalia.com>

        Reviewed by Gustavo Noronha.

        [GTK] GObject DOM bindings
        https://bugs.webkit.org/show_bug.cgi?id=33590

        We need to protect the body of some methods with #ifdefs, since
        the availability of the code they call into is decided at compile
        time.

        * bindings/scripts/CodeGeneratorGObject.pm:

2010-05-26  Kent Tamura  <tkent@chromium.org>

        Reviewed by Shinichiro Hamaji.

        Move date/time limit values to DateComponents.h from HTMLInputElement.cpp
        https://bugs.webkit.org/show_bug.cgi?id=39423

        The minimum and maximum values for date, datetime, datetime-local,
        month, time, and week types depend on the implementation of
        DateComponents.  So move them to DateComponents.

        * html/DateComponents.h:
        * html/HTMLInputElement.cpp:
        (WebCore::HTMLInputElement::minimum):
        (WebCore::HTMLInputElement::maximum):

2010-05-26  Csaba Osztrogonác  <ossy@webkit.org>

        Reviewed by Simon Hausmann.

        Buildfix for build without ENABLE(RUBY) after r60201.

        * rendering/RenderBlock.cpp:
        (WebCore::canMergeContiguousAnonymousBlocks): Missing #if ENABLE(RUBY) guard added.

2010-05-26  Nikolas Zimmermann  <nzimmermann@rim.com>

        Not reviewed. Update test expectations for JS generator, when using run-webkit-tests. This has been forgotten.

        * bindings/scripts/test/JS/JSTestInterface.cpp:
        (WebCore::JSTestInterfaceConstructor::JSTestInterfaceConstructor):
        (WebCore::JSTestInterface::createPrototype):
        * bindings/scripts/test/JS/JSTestInterface.h:
        (WebCore::JSTestInterfacePrototype::JSTestInterfacePrototype):
        * bindings/scripts/test/JS/JSTestObj.cpp:
        (WebCore::JSTestObjConstructor::JSTestObjConstructor):
        (WebCore::JSTestObj::createPrototype):
        * bindings/scripts/test/JS/JSTestObj.h:
        (WebCore::JSTestObjPrototype::JSTestObjPrototype):

2010-05-25  Philippe Normand  <pnormand@igalia.com>

        Reviewed by Gustavo Noronha Silva.

        [GStreamer] Apple trailers not playing
        https://bugs.webkit.org/show_bug.cgi?id=37390

        Set the AppleTrailer User-Agent workaround after
        FrameLoader::addExtraFieldsToSubresourceRequest has been called
        because that method sets the global User-Agent.

        * platform/graphics/gstreamer/WebKitWebSourceGStreamer.cpp:
        (webKitWebSrcStart):

2010-05-25  Dumitru Daniliuc  <dumi@chromium.org>

        Unreviewed, changing "fts2" to "fts3" in one location I missed in r60188.

        * storage/DatabaseAuthorizer.cpp:
        (WebCore::DatabaseAuthorizer::dropVTable):

2010-05-25  Mark Rowe  <mrowe@apple.com>

        Build fix.

        * platform/graphics/win/MediaPlayerPrivateFullscreenWindow.cpp:

2010-05-25  Yuta Kitamura  <yutak@chromium.org>

        Reviewed by Pavel Feldman.

        Web Inspector: Show HTTP status message sent from server in Resources tab.

        This patch obtains an HTTP status message of each resource and pass it to
        the front end of Web Inspector. The status message is shown in "Headers" tab in
        the detail view of that resource, along with the HTTP status code.

        Web Inspector does not respect HTTP status message
        https://bugs.webkit.org/show_bug.cgi?id=39595

        * inspector/InspectorResource.cpp:
        (WebCore::InspectorResource::updateResponse):
        (WebCore::InspectorResource::updateScriptObject):
        * inspector/InspectorResource.h:
        * inspector/front-end/Resource.js:
        (WebInspector.Resource.CompareByTransferSize):
        * inspector/front-end/ResourceView.js:
        (WebInspector.ResourceView.prototype._refreshHTTPInformation):
        * inspector/front-end/inspector.js:
        (WebInspector.updateResource):
        * inspector/front-end/utilities.js:
        (String.prototype.escapeHTML): Escape '"' so that we can escape messages
        that may occur inside HTML attributes.

2010-05-24  David Hyatt  <hyatt@apple.com>

        Reviewed by Dan Bernstein.

        https://bugs.webkit.org/show_bug.cgi?id=39615, implement basic support for -webkit-column-span.

        This patch adds support for -webkit-column-span elements that can span across all of the columns
        in a multi-column block.  In this first stage, column span support is limited to only immediate
        children of the multi-column block, so no elements actually have to split across a span yet.

        Two new kinds of anonymous blocks have been added: anonymous columns blocks and anonymous column
        span blocks.  When a span gets inserted into a multicol block, the block is split, with the
        column portions of the multicol getting wrapped in anonymous columns blocks and the spans getting
        wrapped in anonymous column span blocks.  The multicol block then stops being multicol and lets
        the anonymous multicol blocks take over column layout.
        
        Many new tests added in fast/multicol/span.

        * dom/Node.cpp:
        (WebCore::Node::diff):
        Changes to column span result in a detach/attach, since spanning elements don't typically have
        much content.
    
        * rendering/RenderBlock.cpp:
        (WebCore::RenderBlock::styleDidChange):
        Make sure to inherit the appropriate new styles into the anonymous column and column span blocks.

        (WebCore::RenderBlock::addChildToAnonymousColumnBlocks):
        This method handles the insertion of new children into the block after it has had to wrap its
        children in anonymous column/column-span blocks.
        
        (WebCore::RenderBlock::splitAnonymousBlocksAroundChild):
        A helper method for splitting all anonymous blocks between beforeChild and this block so that
        a new element with an incompatible type can be inserted between them.
        
        (WebCore::RenderBlock::makeChildrenAnonymousColumnBlocks):
        This method does the initial split of a block into anonymous components.  This happens the first
        time a column-span element gets inserted into the block.

        (WebCore::columnsBlockForSpanningElement):
        This function checks whether or not the column-span element is actually being inserted into a viable
        columns block.

        (WebCore::RenderBlock::addChildIgnoringAnonymousColumnBlocks):
        This is the original RenderBlock::addChild.  It handles everything else just like it used to.
        
        (WebCore::RenderBlock::addChild):
        Patched to now call addChildToAnonymousColumnBlocks if the block has wrapped its current children
        in anonymous column/column-span blocks already.

        (WebCore::RenderBlock::moveAllChildrenTo):
        moveAllChildrenTo has been enhanced to support doing a full remove/append in the case where elements
        are shifting across layers.  (This should arguably be the default behavior, but that can happen in
        a future patch.)

        (WebCore::RenderBlock::removeLeftoverAnonymousBlock):
        Patched to fix a bug when the leftover block is empty and to prevent anonymous column/column-span
        block from being coalesced with a parent if they are non-empty.

        (WebCore::canMergeContiguousAnonymousBlocks):
        Whether or not two contiguous anonymous blocks can merge after the removal of a child.

        (WebCore::RenderBlock::removeChild):
        removeChild has been patched to handle more cases of merging/deletion than it did before.  It
        can now destroy empty anonymous block chains and can now merge two contiguous anonymous blocks
        that don't share the same childrenInline() setting (by putting one inside the other).  It also
        makes sure to do full appends/moves/inserts in the cases where the affected blocks have layers.
        
        (WebCore::RenderBlock::fillSelectionGaps):
        Don't let the selection extend outside of a column-span.
        
        (WebCore::RenderBlock::setDesiredColumnCountAndWidth):
        Turn off multi-column layout on the outermost block if it has wrapped its children in anonymous
        column/column-span blocks.

        (WebCore::RenderBlock::createAnonymousBlockWithSameTypeAs):
        (WebCore::RenderBlock::createAnonymousColumnsBlock):
        (WebCore::RenderBlock::createAnonymousColumnSpanBlock):
        New helper functions for anonymous block creation.
        
        (WebCore::RenderBlock::renderName):
        Patched to dump anonymous column and column-span blocks so that they can be distinguished from
        regular anonymous blocks.
        * rendering/RenderBlock.h:
        * rendering/RenderObject.h:
        (WebCore::RenderObject::isAnonymousColumnsBlock):
        (WebCore::RenderObject::isAnonymousColumnSpanBlock):
        New helper functions for asking the type of an anonymous block.
        
        * rendering/style/RenderStyle.h:
        (WebCore::InheritedFlags::inheritColumnPropertiesFrom):
        A helper function to allow anonymous column blocks to easily inherit all column properties for
        rendering.

2010-05-25  Dirk Pranke  <dpranke@chromium.org>

        Reviewed by Dimitri Glazkov.

        Re-commit r58765 - it had been rolled out to see if it was causing
        a perf regression (in r59787), but that does not seem to have been
        the case.

        Tests: fast/notifications/notifications-replace.html
               fast/notifications/notifications-rtl.html

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

        * notifications/Notification.h:
        (WebCore::Notification::dir):
        (WebCore::Notification::setDir):
        (WebCore::Notification::replaceId):
        (WebCore::Notification::setReplaceId):
        * notifications/Notification.idl:

2010-05-22  Jer Noble  <jer.noble@apple.com>

        Reviewed by Adam Roben.

        Full screen doesn't work for video elements
        https://bugs.webkit.org/show_bug.cgi?id=39557
        rdar://problem/8011813
        
        Add fullscreen support for MediaPlayerPrivateVisualContext.  A new class, MediaPlayerPrivateFullscreenWindow,
        provides the fullscreen hwnd and layer renderer.  Any WKCACFLayer can be provided to MediaPlayerPrivateFullscreenWindow
        so future additional MediaPlayerPrivate implementations can use the fullscreen window.
        
        Minor additions have been made to the FloatSize and IntSize classes.

        MediaPlayerPrivateQuickTimeVisualContext now calls retrieveCurrentImage after creating a new 
        videoLayer; this is an existing bug that was never really exposed before now.

        * WebCore.vcproj/WebCore.vcproj:
        * platform/graphics/FloatSize.h: Added aspectRatio() and scale(float).
        (WebCore::FloatSize::aspectRatio):
        (WebCore::FloatSize::scale):
        * platform/graphics/IntSize.h: Added aspectRatio().
        (WebCore::IntSize::aspectRatio):
        * platform/graphics/win/MediaPlayerPrivateFullscreenWindow.cpp: Added.
        * platform/graphics/win/MediaPlayerPrivateFullscreenWindow.h: Added.
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp: Call retrieveCurrentImage() after creating the videoLayer.
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::supportsFullscreen):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::retrieveCurrentImage):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::createLayerForMovie):
        * platform/graphics/win/WKCACFLayer.cpp: 
        (WebCore::WKCACFLayer::WKCACFLayer):
        (WebCore::WKCACFLayer::removeFromSuperlayer):
        (WebCore::WKCACFLayer::setFrame):
        (WebCore::WKCACFLayer::internalSetNeedsDisplay):
        (WebCore::WKCACFLayer::setLayoutClient):
        (WebCore::WKCACFLayer::layoutSublayersProc):
        (WebCore::WKCACFLayer::layoutClient):
        (WebCore::WKCACFLayer::setNeedsLayout):
        * platform/graphics/win/WKCACFLayer.h: Add layout client class.
        (WebCore::WKCACFLayerLayoutClient::~WKCACFLayerLayoutClient):
        (WebCore::WKCACFLayer::frame): Added back frame()/setFrame().
        * platform/graphics/win/WebTiledLayer.cpp:
        (WebCore::WebTiledLayer::setFrame): Implamented setFrame() in subclass of WKCACFLayer
        * platform/graphics/win/WebTiledLayer.h:
        * platform/graphics/win/WebTiledLayer.cpp: Added setFrame() overriding WKCACFLayer's implementation
        (WebCore::WebTiledLayer::setFrame):
        * platform/graphics/win/WebTiledLayer.h:


2010-05-25  Dumitru Daniliuc  <dumi@chromium.org>

        Reviewed by Brady Eidson.

        Allow FTS3 functions.
        https://bugs.webkit.org/show_bug.cgi?id=38003

        * storage/DatabaseAuthorizer.cpp:
        (WebCore::DatabaseAuthorizer::addWhitelistedFunctions):
        (WebCore::DatabaseAuthorizer::createVTable):

2010-05-25  Anders Carlsson  <andersca@apple.com>

        Reviewed by Sam Weinig.

        Get rid of PluginDatabaseClient
        https://bugs.webkit.org/show_bug.cgi?id=39685

        PluginDatabaseClient isn't used anywhere so just remove it.

        * GNUmakefile.am:
        * plugins/PluginDatabase.cpp:
        (WebCore::PluginDatabase::PluginDatabase):
        (WebCore::PluginDatabase::refresh):
        * plugins/PluginDatabase.h:
        * plugins/PluginDatabaseClient.h: Removed.

2010-05-25  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=18595
        REGRESSION (r20766): Setting display:none on an iframe causes the ownerDocument to freeze

        Test: fast/events/frame-detached-in-mousedown.html

        * page/EventHandler.h: Added a boolean tracking whether EventHandler needs to reset capturing
        node on mouse up. It's only done for nodes that hold subframes - elements that capture events
        are responsible for resetting the state.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::EventHandler): Don't initialize m_capturingMouseEventsNode, it's a
        RefPtr and is initialized automatically.
        (WebCore::EventHandler::handleMousePressEvent): Remember that EventHandler should reset
        capturing node on its own.
        (WebCore::EventHandler::handleMouseDoubleClickEvent): The code here looked like it was copied
        from the below in r21156. Copied correct code instead.
        (WebCore::EventHandler::handleMouseReleaseEvent): We only clear the capturing node when it
        holds a subframe, but the frame may be already detached by the time mouse up is handled, so the
        check was wrong - and return code of passMouseReleaseEventToSubframe() is obviously irrelevant.
        (WebCore::EventHandler::setCapturingMouseEventsNode): Remember that EventHandler should not
        reset capturing node on its own.

2010-05-25  Kevin Ollivier  <kevino@theolliviers.com>

        [wx] Build fix for missing symbol.

        * wscript:

2010-05-25  Darin Adler  <darin@apple.com>

        * dom/Element.cpp:
        (WebCore::Element::getIDAttribute): Added comments about problems with this function.

2010-05-25  Leandro Pereira  <leandro@profusion.mobi>

        Reviewed by Gustavo Noronha Silva.

        [EFL] Build fix.
        http://webkit.org/b/39598

        * CMakeLists.txt:

2010-05-25  Enrica Casucci  <enrica@apple.com>

        Reviewed by Darin Adler.

        REGRESSION(51522): typing at the end of a line in designMode documents is *very* slow.
        https://bugs.webkit.org/show_bug.cgi?id=36037
        <rdar://problem/8022887>

        The performance regression was traced to r51522 but this is not entirely true. That revision introduced, among other things,
        additional checks in the method isCandidate of both Position and PositionIterator classes to support scenarios of mixed editability
        that were not allowed before. This change uncovered an underlying issue with the decrement method of PositionIterator, that in some
        cases would iterate through every position as offset in a block before moving to the last child in the block.
        This was exactly the case of the attached test case, where, trying to check if the caret was placed at the end of a block, we were examining
        every position in the block before considering the last true position in the block.
        The performance was linear with the number of child nodes in the block, instead of constant.
        
        * dom/PositionIterator.cpp:
        (WebCore::PositionIterator::decrement):

2010-05-25  Alexey Proskuryakov  <ap@apple.com>

        Reviewed by Darin Adler.

        https://bugs.webkit.org/show_bug.cgi?id=39621
        <rdar://problem/8009738> Extreme memory growth on DOM Hanoi test

        The largest cause of memory growth on this test were autoreleased DOMNode objects created
        to make webView:formStateDidChangeForNode: delegate calls.

        * html/HTMLTextAreaElement.cpp: (WebCore::HTMLTextAreaElement::HTMLTextAreaElement):
        Don't call notifyFormStateChanged() - since the element starts with refcount 0, it's not
        safe to call functions that are likely to create temporary wrappers (wrapper destructor
        would bring refcount back to 0, and destroy HTMLTextAreaElement from within its constructor).

2010-05-25  Kent Tamura  <tkent@chromium.org>

        Reviewed by Dimitri Glazkov.

        [DRT/Chromium] Enable 3D_CANVAS, FILTERS, METER_TAG and PROGRESS_TAG
        https://bugs.webkit.org/show_bug.cgi?id=39652

        * rendering/RenderTheme.cpp:
        (WebCore::RenderTheme::paintMeter): Fix narrowPrecisionToFloat() usage.

2010-05-25  Darin Adler  <darin@apple.com>

        Sort ".exp" files with the sort tool.
        This makes later merging easier.

        These Mac-specific files should probably move into a subdirectory
        at some point.

        * WebCore.Inspector.exp: Sorted.
        * WebCore.PluginHostProcess.exp: Removed blank line.
        * WebCore.VideoProxy.exp: Sorted.
        * WebCore.base.exp: Ditto.

2010-05-25  Vangelis Kokkevis  <vangelis@chromium.org>

        Reviewed by Darin Fisher.

        Removing the persistent GraphicsContext from LayerChromium to save on
        memory and simplify code. Layers now create a temporary context, draw into
        it, update the GL texture and discard the context.
        https://bugs.webkit.org/show_bug.cgi?id=39640

        * platform/graphics/chromium/GraphicsLayerChromium.cpp:
        (WebCore::GraphicsLayerChromium::updateLayerDrawsContent):
        * platform/graphics/chromium/LayerChromium.cpp:
        (WebCore::LayerChromium::LayerChromium):
        (WebCore::LayerChromium::~LayerChromium):
        (WebCore::LayerChromium::setLayerRenderer):
        (WebCore::LayerChromium::updateTextureContents):
        (WebCore::LayerChromium::setContents):
        (WebCore::LayerChromium::setBounds):
        (WebCore::LayerChromium::setNeedsDisplay):
        * platform/graphics/chromium/LayerChromium.h:
        * platform/graphics/chromium/LayerRendererChromium.cpp:
        (WebCore::LayerRendererChromium::~LayerRendererChromium):
        (WebCore::LayerRendererChromium::setRootLayerCanvasSize):
        (WebCore::LayerRendererChromium::drawLayers):
        (WebCore::LayerRendererChromium::assignTextureForLayer):
        (WebCore::LayerRendererChromium::compositeLayersRecursive):
        * platform/graphics/chromium/LayerRendererChromium.h:
        (WebCore::LayerRendererChromium::rootLayerGraphicsContext):

2010-05-24  Kenneth Rohde Christiansen  <kenneth@webkit.org>

        Reviewed by Simon Hausmann.

        [Qt] Make text filling work together with text stroke.

        When the text has stroke a new QPen was set, overriding the pen
        set for text filling. This patch fixes that by storing the two
        pens and using where appropriate.

        * platform/graphics/qt/FontQt.cpp:
        (WebCore::Font::drawComplexText):

2010-05-17  Antonio Gomes  <tonikitoo@webkit.org>

        Reviewed by Darin Adler.

        Add an optional "starting node' parameter to scrollRecursively and scrollOverflow of EventHandler
        https://bugs.webkit.org/show_bug.cgi?id=39217

        It would be usefull if scrollOverflow and scrollRecursively methods of EventHandler
        could receive a parameter to specify where to start scrolling from. Currently they
        start scrolling from either the current focused node or the node where mouse last
        pressed on. Patch proposes an aditional starting point as an optional parameter.
        Since it is optional, all call sites can remain as are, and if a Null node is passed
        in, both methods work as previously.

        * page/EventHandler.cpp:
        (WebCore::EventHandler::scrollOverflow):
        (WebCore::EventHandler::scrollRecursively):
        * page/EventHandler.h:

2010-05-25  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Timothy Hatcher.

        Web Inspector: localize heap graph strings.

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

        * English.lproj/localizedStrings.js:

2010-05-25  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Switch HTML parsing benchmark to use document.write instead of innerHTML
        https://bugs.webkit.org/show_bug.cgi?id=39661

        We'd like to exercise the main parsing pipeline instead of the fragment
        parsing pipeline.

        * benchmarks/parser/html-parser.html:

2010-05-25  Kenneth Rohde Christiansen  <kenneth.christiansen@openbossa.org>

        Reviewed by Laszlo Gombos.

        [Qt] Running with accelerated compositing enabled sometimes result in a crash
        https://bugs.webkit.org/show_bug.cgi?id=39609

        Check if we have a scene before applying the workaround for
        the QGraphicsScene bug where opacity change doesn't always have
        immediate effect.

        * platform/graphics/qt/GraphicsLayerQt.cpp:
        (WebCore::OpacityAnimationQt::applyFrame):

2010-05-25  Yury Semikhatsky  <yurys@chromium.org>

        Unreviewed. Fix Chromium Mac Release build.

        * bindings/v8/ScriptDebugServer.cpp:

2010-05-24  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        ScriptDebugServer is now implemented as DebugEventListener which means it doesn't
        depend on v8 debugging protocol, instead it uses ExecState to collect debugging
        info and pass it to the listeners.

        New implementation of ScriptDebugServer uses methods provided by client to dispatch
        its messages while JS is paused(previously the messages was dispatched in a callback
        passed to v8 along with DebugEventHandler).

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

        * bindings/js/ScriptDebugServer.cpp:
        (WebCore::ScriptDebugServer::dispatchDidPause):
        (WebCore::ScriptDebugServer::dispatchDidContinue):
        (WebCore::ScriptDebugServer::dispatchFunctionToListeners): Changed method signature to allow
        invocation of ScriptDebugListener methods that have non-empty argument list.
        (WebCore::ScriptDebugServer::pauseIfNeeded):
        * bindings/js/ScriptDebugServer.h:
        * bindings/v8/ScriptDebugServer.cpp:
        (WebCore::retrieveFrame):
        (WebCore::ScriptDebugServer::ScriptDebugServer):
        (WebCore::ScriptDebugServer::addListener):
        (WebCore::ScriptDebugServer::removeListener): Execution is resumed(nested message loop is terminated) when
        corresponding debugger window closes.
        (WebCore::ScriptDebugServer::clearBreakpoints):
        (WebCore::ScriptDebugServer::pauseOnExceptionsState):
        (WebCore::ScriptDebugServer::setPauseOnExceptionsState):
        (WebCore::ScriptDebugServer::continueProgram):
        (WebCore::ScriptDebugServer::stepIntoStatement):
        (WebCore::ScriptDebugServer::stepOverStatement):
        (WebCore::ScriptDebugServer::stepOutOfFunction):
        (WebCore::ScriptDebugServer::v8DebugEventCallback):
        (WebCore::ScriptDebugServer::handleV8DebugEvent):
        (WebCore::ScriptDebugServer::didResume):
        * bindings/v8/ScriptDebugServer.h:
        (WebCore::ScriptDebugServer::ClientMessageLoop::~ClientMessageLoop):
        (WebCore::ScriptDebugServer::setClientMessageLoop):
        * inspector/InspectorController.cpp:
        (WebCore::InspectorController::didPause):
        * inspector/InspectorController.h:
        * inspector/ScriptDebugListener.h: Changed didPause signature to explicitly pass ScriptState
        where execution is paused.

2010-05-25  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Clear attributes for each tag in the HTML5 parser
        https://bugs.webkit.org/show_bug.cgi?id=39660

        Yes, I did screw this up.

        * html/HTML5Token.h:
        (WebCore::HTML5Token::beginStartTag):
        (WebCore::HTML5Token::beginEndTag):

2010-05-25  Anders Bakken  <agbakken@gmail.com>

        Reviewed by Darin Adler.

        Remove warning for GCC 4.4.3

        GCC suggest parentheses around && within ||

        * dom/Element.cpp:
        (WebCore::Element::recalcStyle):

2010-05-25  Xan Lopez  <xlopez@igalia.com>

        Fix the GTK+ build, PluginInfoStore was removed.

        * GNUmakefile.am:

2010-05-25  Ada Chan  <adachan@apple.com>

        Reviewed by Steve Falkenburg.

        Add a base class for DOMTimer called SuspendableTimer which captures just the
        basic functionality of TimerBase and ActiveDOMObject combined.  It does not
        contain functionality specific to scripting timers.
        
        SuspendableTimer is used in fixing https://bugs.webkit.org/show_bug.cgi?id=39651

        * Android.mk:
        * CMakeLists.txt:
        * GNUmakefile.am:
        * WebCore.gypi:
        * WebCore.pro:
        * WebCore.vcproj/WebCore.vcproj:
        * WebCore.xcodeproj/project.pbxproj:
        * page/DOMTimer.cpp:
        (WebCore::DOMTimer::DOMTimer):
        (WebCore::DOMTimer::contextDestroyed):
        (WebCore::DOMTimer::stop):
        * page/DOMTimer.h:
        * page/SuspendableTimer.cpp: Added.
        (WebCore::SuspendableTimer::SuspendableTimer):
        (WebCore::SuspendableTimer::~SuspendableTimer):
        (WebCore::SuspendableTimer::hasPendingActivity):
        (WebCore::SuspendableTimer::stop):
        (WebCore::SuspendableTimer::suspend):
        (WebCore::SuspendableTimer::resume):
        (WebCore::SuspendableTimer::canSuspend):
        * page/SuspendableTimer.h: Added.

2010-05-25  Justin Schuh  <jschuh@chromium.org>

        Reviewed by Nate Chapin.

        Remove custom bindings for Element.SetAttribute*
        https://bugs.webkit.org/show_bug.cgi?id=39604

        Custom bindings are no longer needed because origin checks were moved
        out of the bindings by: http://trac.webkit.org/changeset/59866

        Behavior isn't changed and is covered by existing tests.

        * bindings/js/JSElementCustom.cpp:
        * bindings/v8/custom/V8ElementCustom.cpp:
        * dom/Element.idl:

2010-05-25  Yury Semikhatsky  <yurys@chromium.org>

        Reviewed by Pavel Feldman.

        Add memory graph to Timeline overview pane.

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

        * inspector/front-end/Drawer.js:
        (WebInspector.Drawer):
        (WebInspector.Drawer.prototype.show.animationFinished):
        (WebInspector.Drawer.prototype.show):
        (WebInspector.Drawer.prototype.hide):
        (WebInspector.Drawer.prototype.set currentPanelCounters):
        * inspector/front-end/Panel.js:
        * inspector/front-end/TimelineOverviewPane.js:
        (WebInspector.TimelineOverviewPane):
        (WebInspector.TimelineOverviewPane.prototype.showTimelines):
        (WebInspector.TimelineOverviewPane.prototype.showMemoryGraph):
        (WebInspector.TimelineOverviewPane.prototype._forAllRecords):
        (WebInspector.TimelineOverviewPane.prototype.update):
        (WebInspector.TimelineOverviewPane.prototype.updateMainViewWidth):
        (WebInspector.TimelineOverviewPane.prototype._endWindowDragging):
        (WebInspector.TimelineOverviewPane.prototype._createTimelineCategoryStatusBarCheckbox):
        (WebInspector.HeapGraph):
        (WebInspector.HeapGraph.prototype.get element):
        (WebInspector.HeapGraph.prototype.get visible):
        (WebInspector.HeapGraph.prototype.show):
        (WebInspector.HeapGraph.prototype.hide):
        (WebInspector.HeapGraph.prototype.setSize):
        (WebInspector.HeapGraph.prototype.update):
        (WebInspector.HeapGraph.prototype._clear):
        (WebInspector.HeapGraph.prototype._drawScale):
        * inspector/front-end/TimelinePanel.js:
        (WebInspector.TimelinePanel):
        (WebInspector.TimelinePanel.prototype.toolbarItemClass._createTopPane):
        (WebInspector.TimelinePanel.prototype.get statusBarItems):
        (WebInspector.TimelinePanel.prototype._timelinesOverviewItemSelected):
        (WebInspector.TimelinePanel.prototype._memoryOverviewItemSelected):
        (WebInspector.TimelinePanel.prototype.setSidebarWidth):
        (WebInspector.TimelinePanel.prototype.show):
        (WebInspector.TimelinePanel.prototype.hide):
        * inspector/front-end/inspector.css:
        (#counters):
        (#timeline-overview-sidebar):
        (.timeline-category-statusbar-item):
        (.timeline-category-statusbar-item .timeline-category-checkbox):
        (.timeline-category-statusbar-item .timeline-category-checkbox:checked):
        (.timeline-category-statusbar-item.timeline-category-loading .timeline-category-checkbox):
        (.timeline-category-statusbar-item.timeline-category-scripting .timeline-category-checkbox):
        (.timeline-category-statusbar-item.timeline-category-rendering .timeline-category-checkbox):
        (#timeline-overview-memory):
        (.timeline-records-counter):
        (#main-status-bar > .timeline-records-counter):
        (#counters > .timeline-records-counter):
        * inspector/front-end/inspector.html:
        * inspector/front-end/utilities.js:
        ():

2010-05-25  Adam Barth  <abarth@webkit.org>

        Unreviewed.  Fix typo pointed out by Maciej.

        * html/HTML5Lexer.cpp:
        (WebCore::HTMLNames::unconsumeCharacters):
        (WebCore::HTML5Lexer::consumeEntity):

2010-05-25  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Fix <noembed> and <plaintext> content models
        https://bugs.webkit.org/show_bug.cgi?id=39653

        PLAINTEXTState is my favorite lexer state.  :)

        * html/HTML5TreeBuilder.cpp:
        (WebCore::HTML5TreeBuilder::passTokenToLegacyParser):

2010-05-24  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        First cut at HTML5 entities
        https://bugs.webkit.org/show_bug.cgi?id=39649

        There's still a bunch more work to do to get our entity parsing fully
        up to spec.  This patch contains the bulk of the implementation
        however.
        
        The basics are covered by the existing html5lib tests.  I'll add more
        detailed tests in a followup patch.

        * html/HTML5Lexer.cpp:
        (WebCore::HTMLNames::legalEntityFor):
        (WebCore::HTMLNames::isHexDigit):
        (WebCore::HTMLNames::isAlphaNumeric):
        (WebCore::HTMLNames::uncomsumeCharacters):
        (WebCore::HTML5Lexer::consumeEntity):
        (WebCore::HTML5Lexer::nextToken):
        (WebCore::HTML5Lexer::haveBufferedCharacterToken):
        * html/HTML5Lexer.h:
        (WebCore::HTML5Lexer::):
        * html/HTML5Tokenizer.cpp:
        (WebCore::HTML5Tokenizer::write):

2010-05-24  Tasuku Suzuki  <tasuku.suzuki@nokia.com>

        Reviewed by Kenneth Rohde Christiansen.

        [Qt] Fix compilation with QT_NO_TEMPORARYFILE
        https://bugs.webkit.org/show_bug.cgi?id=38324

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

2010-05-24  Andrey Kosyakov  <caseq@chromium.org>

        Reviewed by Yury Semikhatsky.

        Fixed handling of bare '/' and '?' at console prompt.
        https://bugs.webkit.org/show_bug.cgi?id=39585

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

2010-05-24  Andreas Kling  <andreas.kling@nokia.com>

        Reviewed by Sam Weinig.

        The 'prototype' property on generated Web IDL interfaces should be { DontDelete | ReadOnly }.

        Spec link:
        http://www.w3.org/TR/WebIDL/#interface-object

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

        Test: fast/dom/prototype-property.html

        * bindings/scripts/CodeGeneratorJS.pm:

2010-05-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Add RCDATA and RAWTEXT suport to the HTML5 parser
        https://bugs.webkit.org/show_bug.cgi?id=39642

        Adam Barth wrote half of this patch.

        * html/HTML5TreeBuilder.cpp:
        (WebCore::HTML5TreeBuilder::passTokenToLegacyParser):

2010-05-24  Tony Chang  <tony@chromium.org>

        Not reviewed, build fix.

        Fix the chromium compile due to pageZoomFactor refactoring.

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

2010-05-24  Jer Noble  <jer.noble@apple.com>

        Reviewed by Eric Carlson.

        HTML5 <video> tag performance worse than Flash
        https://bugs.webkit.org/show_bug.cgi?id=39577
        rdar://problem/7982458
        
        Added attachments() back to QTPixelBuffer, as they are necessary for CAImageQueue.
        
        WKCACFLayer contents()/setContents() now return/take a CFTypeRef instead of a CGImageRef, which allows
        a CAImageQueueRef to be set as a layer's contents.
        
        WKCAImageQueue is a simple C++ wrapper around the WebKitSystemInterface CAImageQueue functions.
        
        MediaPlayerPrivateQuickTimeVisualContext will now use a CAImageQueue to display movie frames if 
        certain prerequisites are met (QuartzCore.dll and CoreVideo.dll version numbers must meet a certain
        threshold defined in MediaPlayerPrivateQuickTimeVisualContext.cpp).
        
        * WebCore.vcproj/WebCore.vcproj:
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.h:
        * platform/graphics/win/QTPixelBuffer.cpp:
        * platform/graphics/win/QTPixelBuffer.h:
        * platform/graphics/win/WKCACFLayer.cpp:
        * platform/graphics/win/WKCACFLayer.h:
        * platform/graphics/win/WKCAImageQueue.cpp: Added.
        * platform/graphics/win/WKCAImageQueue.h: Added.

2010-05-24  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Teach the HTML5 parser how to lex escaped script data
        https://bugs.webkit.org/show_bug.cgi?id=39630

        * html/HTML5Lexer.cpp:
        (WebCore::HTMLNames::vectorEqualsString):
        (WebCore::HTML5Lexer::nextToken):
        (WebCore::HTML5Lexer::temporaryBufferIs):
        (WebCore::HTML5Lexer::isAppropriateEndTag):
        (WebCore::HTML5Lexer::maybeFlushBufferedEndTag):
        (WebCore::HTML5Lexer::flushBufferedEndTag):
        * html/HTML5Lexer.h:

2010-05-24  Eric Seidel  <eric@webkit.org>

        Unreviewed.  Trick MSVC into ignoring our unused code for the moment.

        Prepare HTML5TreeBuilder for addition of new HTML5 parser code
        https://bugs.webkit.org/show_bug.cgi?id=39623

        * html/HTML5TreeBuilder.cpp:
        (WebCore::HTML5TreeBuilder::constructTreeFromToken):

2010-05-24  Darin Adler  <darin@apple.com>

        Fix build on platforms with touch code enabled.

        * page/EventHandler.cpp:
        (WebCore::pageZoomFactor): Added.
        (WebCore::EventHandler::handleTouchEvent): Use pageZoomFactor.

2010-05-24  Darin Adler  <darin@apple.com>

        Reviewed by Eric Seidel.

        Move view-related functions from Frame to FrameView
        https://bugs.webkit.org/show_bug.cgi?id=39366

        Refactoring only so adds no new tests.

        * WebCore.base.exp: Updated.

        * css/CSSStyleSelector.cpp:
        (WebCore::CSSStyleSelector::styleForDocument): Call zoom factor function
        on FrameView.
        (WebCore::CSSStyleSelector::applyProperty): Ditto.
        (WebCore::CSSStyleSelector::getComputedSizeFromSpecifiedSize): Ditto.
        * dom/Document.cpp:
        (WebCore::Document::elementFromPoint): Ditto.
        (WebCore::Document::caretRangeFromPoint): Ditto.
        * dom/MouseRelatedEvent.cpp:
        (WebCore::contentsX): Ditto.
        (WebCore::contentsY): Ditto.
        (WebCore::pageZoomFactor): Added helper function.
        (WebCore::MouseRelatedEvent::computePageLocation): Use helper.
        (WebCore::MouseRelatedEvent::receivedTarget): Ditto.
        * dom/Node.cpp:
        (WebCore::Node::dispatchMouseEvent): Call zoom factor function on FrameView.
        (WebCore::Node::dispatchWheelEvent): Ditto.
        * dom/Touch.cpp:
        (WebCore::contentsX): Call zoom factor function on FrameView.
        (WebCore::contentsY): Ditto.
        * html/HTMLBodyElement.cpp:
        (WebCore::adjustForZoom): Ditto.
        (WebCore::HTMLBodyElement::setScrollLeft): Ditto.
        (WebCore::HTMLBodyElement::setScrollTop): Ditto.
        * html/HTMLImageElement.cpp:
        (WebCore::HTMLImageElement::width): Ditto.
        (WebCore::HTMLImageElement::height): Ditto.
        * loader/ImageDocument.cpp:
        (WebCore::pageZoomFactor): Added helper function.
        (WebCore::ImageTokenizer::finish): Use helper function
        (WebCore::ImageDocument::scale): Ditto.
        (WebCore::ImageDocument::resizeImageToFit): Ditto.
        (WebCore::ImageDocument::imageChanged): Ditto.
        (WebCore::ImageDocument::restoreImageSize): Ditto.
        (WebCore::ImageDocument::imageFitsInWindow): Ditto.
        * page/DOMWindow.cpp:
        (WebCore::DOMWindow::innerHeight): Ditto.
        (WebCore::DOMWindow::innerWidth): Ditto.
        (WebCore::DOMWindow::scrollX): Ditto.
        (WebCore::DOMWindow::scrollY): Ditto.
        (WebCore::DOMWindow::scrollTo): Ditto.
        * page/DragController.cpp:
        (WebCore::elementUnderMouse): Ditto.

        * page/Frame.cpp:
        (WebCore::Frame::Frame): Removed code to initialize m_zoomFactor.
        * page/Frame.h: Moved functions to FrameView. Moved all #if to the left
        margin to make the style consistent. Removed empty function
        removeEditingStyleFromBodyElement.

        * page/FrameView.cpp:
        (WebCore::parentZoomFactor): Added helper function for constructor.
        (WebCore::FrameView::FrameView): Added initialization of m_zoomFactor.
        (WebCore::FrameView::shouldApplyTextZoom): Moved this here from Frame.
        (WebCore::FrameView::shouldApplyPageZoom): Ditto.
        (WebCore::FrameView::setZoomFactor): Ditto.

        * page/FrameView.h: Added members moved here from Frame.

        * rendering/RenderView.cpp:
        (WebCore::RenderView::zoomFactor): Call FrameView instead of Frame.
        * svg/SVGSVGElement.cpp:
        (WebCore::SVGSVGElement::currentScale): Ditto.
        (WebCore::SVGSVGElement::setCurrentScale): Ditto.

2010-05-24  Jer Noble  <jer.noble@apple.com>

        No review; build fix only.

        Roll-out changes r60094, 60096-60097.
        
        * WebCore.vcproj/WebCore.vcproj:
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::load):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::retrieveCurrentImage):
        (WebCore::MediaPlayerPrivateQuickTimeVisualContext::destroyLayerForMovie):
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.h:
        * platform/graphics/win/QTPixelBuffer.cpp:
        * platform/graphics/win/QTPixelBuffer.h:
        * platform/graphics/win/WKCACFLayer.cpp:
        (WebCore::WKCACFLayer::printLayer):
        * platform/graphics/win/WKCACFLayer.h:
        (WebCore::WKCACFLayer::setContents):
        (WebCore::WKCACFLayer::contents):
        (WebCore::WKCACFLayer::speed):
        (WebCore::WKCACFLayer::timeOffset):
        * platform/graphics/win/WKCAImageQueue.cpp: Removed.
        * platform/graphics/win/WKCAImageQueue.h: Removed.

2010-05-24  Eric Seidel  <eric@webkit.org>

        Unreviewed.  Add wtf/UnusedParam.h include to make Chromium happy.

        Chromium does not use a prefix header in order to support
        distcc3.  Other ports all do.  The real fix is to remove
        wtf/UnusedParam.h from the prefix header.

        * html/HTML5TreeBuilder.cpp:

2010-05-24  Jer Noble  <jer.noble@apple.com>

        No review; build fix only.

        Second half of previous build fix, in which I add the include in the correct place.

        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:

2010-05-24  Jer Noble  <jer.noble@apple.com>

        No review; build fix only.

        Include WKCAImageQueue.h outside the ACCELERATED_COMPOSITING check.

        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:

2010-05-24  Eric Seidel  <eric@webkit.org>

        Reviewed by Adam Barth.

        Prepare HTML5TreeBuilder for addition of new HTML5 parser code
        https://bugs.webkit.org/show_bug.cgi?id=39623

        Before we start transcribing the parser, we need a place to put it.

        This also cleans up HTML5 token to not convert comment and character
        data into AtomicStrings (which makes no sense).

        No functionality change, so no new tests.

        * html/HTML5Token.h:
        (WebCore::HTML5Token::beginStartTag):
        (WebCore::HTML5Token::beginEndTag):
        (WebCore::HTML5Token::beginCharacter):
        (WebCore::HTML5Token::beginComment):
        (WebCore::HTML5Token::name):
        (WebCore::HTML5Token::adoptDataAsStringImpl):
        (WebCore::HTML5Token::characters):
        (WebCore::HTML5Token::commentData):
        (WebCore::HTML5Token::clearData):
        * html/HTML5TreeBuilder.cpp:
        (WebCore::convertToOldStyle):
        (WebCore::HTML5TreeBuilder::constructTreeFromToken):
        (WebCore::HTML5TreeBuilder::processToken):
        * html/HTML5TreeBuilder.h:

2010-05-23  Jer Noble  <jer.noble@apple.com>

        Reviewed by Eric Carlson.

        HTML5 <video> tag performance worse than Flash
        https://bugs.webkit.org/show_bug.cgi?id=39577
        rdar://problem/7982458
        
        Added attachments() back to QTPixelBuffer, as they are necessary for CAImageQueue.
        
        WKCACFLayer contents()/setContents() now return/take a CFTypeRef instead of a CGImageRef, which allows
        a CAImageQueueRef to be set as a layer's contents.
        
        WKCAImageQueue is a simple C++ wrapper around the WebKitSystemInterface CAImageQueue functions.
        
        MediaPlayerPrivateQuickTimeVisualContext will now use a CAImageQueue to display movie frames if 
        certain prerequisites are met (QuartzCore.dll and CoreVideo.dll version numbers must meet a certain
        threshold defined in MediaPlayerPrivateQuickTimeVisualContext.cpp).
        
        * WebCore.vcproj/WebCore.vcproj:
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.cpp:
        * platform/graphics/win/MediaPlayerPrivateQuickTimeVisualContext.h:
        * platform/graphics/win/QTPixelBuffer.cpp:
        * platform/graphics/win/QTPixelBuffer.h:
        * platform/graphics/win/WKCACFLayer.cpp:
        * platform/graphics/win/WKCACFLayer.h:
        * platform/graphics/win/WKCAImageQueue.cpp: Added.
        * platform/graphics/win/WKCAImageQueue.h: Added.

2010-05-24  Brady Eidson  <beidson@apple.com>

        Reviewed by Darin Adler.

        Database origins aren't populated at launch (missing db in prefs sheet, possible other symptoms)
        <rdar://problem/8013233> and https://bugs.webkit.org/show_bug.cgi?id=39486

        Currently, a Tracker needs to know it's path before origins are populated. Testing databases and 
        related features is made very difficult with this regression, so instead of changing things in a
        complicated way to make this not the case, I've added an "initialize Tracker with this path" function
        that calls the DatabaseTracker constructor with the initial path.

        I checked the other platforms besides Mac and Win, and none of them seem to perform the 
        "initialize databases if necessary" step in their init routines, so this change shouldn't effect them.

        No new tests. (API specific layout test in DRT is forthcoming)

        * WebCore.base.exp:

        * storage/DatabaseTracker.cpp:
        (WebCore::DatabaseTracker::initializeTracker): Added to create the tracker with its initial path.
        (WebCore::DatabaseTracker::tracker): Move the static tracker out so tracker() and initializeTracker()
          can share it. Add a fallback to not change behavior of platforms that don't call the new 
          "initializeTracker()" method.
        (WebCore::DatabaseTracker::DatabaseTracker): Changed to take the initial path as an argument.
        * storage/DatabaseTracker.h:

        * storage/chromium/DatabaseTrackerChromium.cpp:
        (WebCore::DatabaseTracker::tracker): Adapt to new c'tor.
        (WebCore::DatabaseTracker::DatabaseTracker): Ditto.

2010-05-24  Adam Barth  <abarth@webkit.org>

        Reviewed by Eric Seidel.

        Teach the HTML5 parser to lex DOCTYPEs
        https://bugs.webkit.org/show_bug.cgi?id=39571

        * html/HTML5Lexer.cpp:
        (WebCore::HTML5Lexer::nextToken):
        * html/HTML5Lexer.h:
        * html/HTML5Token.h:
        (WebCore::HTML5Token::beginDOCTYPE):
        (WebCore::HTML5Token::publicIdentifier):
        (WebCore::HTML5Token::systemIdentifier):
        (WebCore::HTML5Token::setPublicIdentifierToEmptyString):
        (WebCore::HTML5Token::setSystemIdentifierToEmptyString):
        (WebCore::HTML5Token::appendToPublicIdentifier):
        (WebCore::HTML5Token::appendToSystemIdentifier):
        (WebCore::HTML5Token::DoctypeData::DoctypeData):
        * html/HTML5TreeBuilder.cpp:
        (WebCore::convertToOldStyle):
        (WebCore::HTML5TreeBuilder::passTokenToLegacyParser):
        * platform/text/SegmentedString.h:
        (WebCore::SegmentedString::lookAheadIgnoringCase):
        (WebCore::SegmentedString::advanceAndASSERTIgnoringCase):

== Rolled over to ChangeLog-2010-05-24 ==
