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: Added property svn:eol-style.
        (WebCore::bitmapInfoForSize):
        (WebCore::BitmapInfo::create):
        (WebCore::BitmapInfo::createBottomUp):
        * platform/win/BitmapInfo.h: Added property svn:eol-style.
        (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 now 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 ==
