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 convering \'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 ==
